Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| projects:quantum:distributed [2024/12/05 14:39] – [Code Examples] kymki | projects:quantum:distributed [2024/12/06 16:05] (current) – kymki | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | < | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | < | ||
| + | < | ||
| + | /* Container for the entire Ramble Meter */ | ||
| + | .ramble-meter-container { | ||
| + | display: flex; | ||
| + | align-items: | ||
| + | justify-content: | ||
| + | margin: 20px 0; | ||
| + | } | ||
| + | |||
| + | /* Ramble Meter */ | ||
| + | .ramble-meter { | ||
| + | position: relative; | ||
| + | width: 200px; /* Scaled down */ | ||
| + | height: 40px; /* Scaled down */ | ||
| + | background: linear-gradient(to right, green, yellow, orange, red); | ||
| + | border-radius: | ||
| + | overflow: hidden; | ||
| + | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); | ||
| + | } | ||
| + | |||
| + | /* Needle */ | ||
| + | .needle { | ||
| + | position: absolute; | ||
| + | top: 5px; /* Adjust for centering */ | ||
| + | left: 50%; /* Default position */ | ||
| + | width: 4px; /* Visible width */ | ||
| + | height: 30px; | ||
| + | background: black; | ||
| + | border-radius: | ||
| + | z-index: 2; | ||
| + | box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); /* Glow effect */ | ||
| + | } | ||
| + | |||
| + | /* Label in the middle of the meter */ | ||
| + | .meter-label { | ||
| + | position: absolute; | ||
| + | top: 50%; | ||
| + | left: 50%; | ||
| + | transform: translate(-50%, | ||
| + | font-family: | ||
| + | font-size: 12px; /* Adjusted for smaller size */ | ||
| + | font-weight: | ||
| + | color: #fff; | ||
| + | text-shadow: | ||
| + | z-index: 3; | ||
| + | } | ||
| + | |||
| + | /* Tooltip styling */ | ||
| + | .tooltip { | ||
| + | visibility: hidden; | ||
| + | width: 250px; | ||
| + | background-color: | ||
| + | color: #fff; | ||
| + | text-align: center; | ||
| + | padding: 10px; | ||
| + | border-radius: | ||
| + | position: absolute; | ||
| + | top: 50%; /* Vertically aligned */ | ||
| + | left: 110%; /* Position to the right of the meter */ | ||
| + | transform: translateY(-50%); | ||
| + | font-size: 12px; | ||
| + | z-index: 10; | ||
| + | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3); | ||
| + | } | ||
| + | |||
| + | /* Show tooltip on hover */ | ||
| + | .ramble-meter: | ||
| + | visibility: visible; | ||
| + | } | ||
| + | |||
| + | /* Wrapper for positioning the tooltip and meter */ | ||
| + | .ramble-wrapper { | ||
| + | position: relative; | ||
| + | display: flex; | ||
| + | align-items: | ||
| + | } | ||
| + | </ | ||
| + | < | ||
| + | document.addEventListener(" | ||
| + | const needle = document.querySelector(" | ||
| + | const rambleMeter = document.querySelector(" | ||
| + | const level = rambleMeter.getAttribute(" | ||
| + | needle.style.left = `${Math.min(Math.max(level, | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | <!-- Ramble Meter --> | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | <div class=" | ||
| + | </ | ||
| + | <div class=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| {{ : | {{ : | ||
| Line 47: | Line 152: | ||
| Create and append noise_spec (function: apply_noise_model, | Create and append noise_spec (function: apply_noise_model, | ||
| - | Workflow | + | Which yields a workflow |
| " | " | ||
| Line 246: | Line 352: | ||
| As mentioned earlier, we use ColonyOS features to create and schedule workflows of processes. This can be done in one go through using the Python interface ** pycolonies **: | As mentioned earlier, we use ColonyOS features to create and schedule workflows of processes. This can be done in one go through using the Python interface ** pycolonies **: | ||
| - | <code python> | + | < |
| + | < | ||
| + | <link href=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | <pre>< | ||
| def build_workflow(): | def build_workflow(): | ||
| step_name = " | step_name = " | ||
| Line 341: | Line 453: | ||
| workflow_graph = colonies.submit_workflow(workflow, | workflow_graph = colonies.submit_workflow(workflow, | ||
| print(f" | print(f" | ||
| - | </ | + | |
| + | </ | ||
| + | </ | ||
| + | </ | ||
| This workflow generates a graph much like the one described earlier. Each function spec takes a node identified and generates data for instantiating a FuncSpec object, like for instance the one electron integral: | This workflow generates a graph much like the one described earlier. Each function spec takes a node identified and generates data for instantiating a FuncSpec object, like for instance the one electron integral: | ||
| - | <code python> | + | < |
| + | < | ||
| + | <link href=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | <pre>< | ||
| def generate_one_electron_integrals_spec(nodename): | def generate_one_electron_integrals_spec(nodename): | ||
| one_electron_uuid = str(uuid.uuid4()) | one_electron_uuid = str(uuid.uuid4()) | ||
| Line 357: | Line 480: | ||
| ) | ) | ||
| ) | ) | ||
| - | </ | + | </ |
| + | |||
| + | </ | ||
| + | </html> | ||
| The executor used in this example, in turn, imports the required functions and calls them with appropriate arguments: | The executor used in this example, in turn, imports the required functions and calls them with appropriate arguments: | ||
| - | <code python> | + | < |
| + | < | ||
| + | <link href=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | <pre>< | ||
| from quantum_workflow.hamiltonian import ( | from quantum_workflow.hamiltonian import ( | ||
| calculate_one_electron_integrals, | calculate_one_electron_integrals, | ||
| Line 449: | Line 582: | ||
| | | ||
| etc.. | etc.. | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | </ | ||
| calculate_one_electron_integrals and other functions under the executor is what contains the actual qiskit implementation: | calculate_one_electron_integrals and other functions under the executor is what contains the actual qiskit implementation: | ||
| - | <code python> | + | < |
| + | < | ||
| + | <link href=" | ||
| + | <script src=" | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | <pre>< | ||
| from pyscf import gto, scf, ao2mo | from pyscf import gto, scf, ao2mo | ||
| Line 499: | Line 641: | ||
| raise e | raise e | ||
| return uuid | return uuid | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| - | </ | ||
| Clearly, for simplicity here I'm using PySCF to do my integral calculations, | Clearly, for simplicity here I'm using PySCF to do my integral calculations, | ||