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, |