Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
437 changes: 151 additions & 286 deletions .devcontainer/requirements.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion config/qubex-config
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,9 @@ api = [
"pyyaml==6.0.1",
"python-multipart==0.0.20",
"numpy>=1.26.0,<1.27.0",
"scipy",
"matplotlib>=3.8.0",
"networkx>=3.4.2",
"scipy>=1.15.3",
"httpx>=0.27.0", # For deployment service communication
"ruff==0.5.5", # For auto-formatting saved flows
"gitpython>=3.1.44", # For Git operations in file router
Expand Down Expand Up @@ -215,4 +215,4 @@ dev = [
"setuptools>=80.9.0",
]
[tool.uv.sources]
qubex = { git = "https://github.com/amachino/qubex.git", branch = "develop" }
qubex = { git = "https://github.com/amachino/qubex.git", tag = "v1.5.0b4" }
15 changes: 7 additions & 8 deletions src/qdash/api/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# This file was autogenerated by uv via the following command:
# uv export --group api --no-hashes --no-dev --no-emit-project --no-editable --format requirements-txt
annotated-doc==0.0.4
# via typer
annotated-types==0.7.0
# via pydantic
anyio==4.8.0
Expand All @@ -18,7 +20,7 @@ certifi==2025.1.31
# httpx
charset-normalizer==3.4.1
# via reportlab
click==8.1.8
click==8.3.1
# via
# bunnet
# rich-toolkit
Expand Down Expand Up @@ -105,8 +107,7 @@ packaging==24.2
# gunicorn
# matplotlib
# plotly
pandas==2.3.3 ; python_full_version < '3.11'
pandas==3.0.1 ; python_full_version >= '3.11'
pandas==2.2.3
passlib==1.7.4
pendulum==3.1.0
# via qdash
Expand Down Expand Up @@ -167,8 +168,7 @@ rich-toolkit==0.13.2
rsa==4.9
# via python-jose
ruff==0.5.5
scipy==1.15.3 ; python_full_version < '3.11'
scipy==1.16.1 ; python_full_version >= '3.11'
scipy==1.13.1
shellingham==1.5.4
# via typer
six==1.17.0
Expand All @@ -190,9 +190,9 @@ toml==0.10.2
# via bunnet
tqdm==4.66.5
# via openai
typer==0.14.0
typer==0.24.1
# via fastapi-cli
typing-extensions==4.12.2
typing-extensions==4.15.0
# via
# anyio
# bunnet
Expand All @@ -202,7 +202,6 @@ typing-extensions==4.12.2
# pydantic-core
# rich
# rich-toolkit
# typer
# uvicorn
tzdata==2025.2
# via
Expand Down
2 changes: 1 addition & 1 deletion src/qdash/workflow/calibtasks/fake/fake_rabi.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
)
from qdash.workflow.calibtasks.fake.base import FakeTask
from qdash.workflow.engine.backend.fake import FakeBackend
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_SHOTS
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_SHOTS
from qubex.simulator import Control, QuantumSimulator, QuantumSystem, SimulationResult, Transmon


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION


class RandomizedBenchmarking(QubexTask):
Expand Down Expand Up @@ -83,8 +83,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
targets=label,
n_trials=self.run_parameters["n_trials"].get_value(),
save_image=False,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
r2 = result[label]["r2"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL


class X180InterleavedRandomizedBenchmarking(QubexTask):
Expand Down Expand Up @@ -72,8 +72,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
interleaved_clifford="X180",
n_trials=self.run_parameters["n_trials"].get_value(),
save_image=False,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
r2 = result[label]["rb_fit_result"]["r2"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION


class X90InterleavedRandomizedBenchmarking(QubexTask):
Expand Down Expand Up @@ -86,8 +86,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
interleaved_clifford="X90",
n_trials=self.run_parameters["n_trials"].get_value(),
save_image=False,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
r2 = result[label]["rb_fit_result"]["r2"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL


class ZX90InterleavedRandomizedBenchmarking(QubexTask):
Expand Down Expand Up @@ -137,8 +137,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
interleaved_clifford="ZX90",
n_trials=self.run_parameters["n_trials"].get_value(),
save_image=False,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
r2 = result[label]["rb_fit_result"]["r2"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def batch_run(self, backend: QubexBackend, qids: list[str]) -> RunResult:
labels = [self.get_qubit_label(backend, qid) for qid in qids]
read_box = exp.experiment_system.get_readout_box_for_qubit(labels[0])
import numpy as np
from qubex.backend import BoxType
from qubex.system import BoxType

if read_box.type == BoxType.QUEL1SE_R8:
frequency_range = np.arange(5.75, 6.75, 0.002)
Expand All @@ -76,7 +76,7 @@ def batch_run(self, backend: QubexBackend, qids: list[str]) -> RunResult:
result = exp.scan_resonator_frequencies(
labels[0],
frequency_range=frequency_range,
shots=1024,
n_shots=1024,
filter="savgol",
)
self.save_calibration(backend)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
label = self.get_qubit_label(backend, qid)
read_box = exp.experiment_system.get_readout_box_for_qubit(label)
import numpy as np
from qubex.backend import BoxType
from qubex.system import BoxType

if read_box.type == BoxType.QUEL1SE_R8:
frequency_range = np.arange(5.75, 6.75, 0.002)
Expand All @@ -180,7 +180,7 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
target=label,
frequency_range=frequency_range,
power_range=self.run_parameters["power_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Expand All @@ -191,7 +191,7 @@ def batch_run(self, backend: QubexBackend, qids: list[str]) -> RunResult:
labels = [self.get_qubit_label(backend, qid) for qid in qids]
read_box = exp.experiment_system.get_readout_box_for_qubit(labels[0])
import numpy as np
from qubex.backend import BoxType
from qubex.system import BoxType

if read_box.type == BoxType.QUEL1SE_R8:
frequency_range = np.arange(5.75, 6.75, 0.002)
Expand All @@ -201,7 +201,7 @@ def batch_run(self, backend: QubexBackend, qids: list[str]) -> RunResult:
labels[0],
frequency_range=frequency_range,
power_range=self.run_parameters["power_range"].get_value(),
shots=1024,
n_shots=1024,
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION


class ReadoutClassification(QubexTask):
Expand Down Expand Up @@ -147,8 +147,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
result = exp.build_classifier(
targets=label,
save_dir=exp.classifier_dir,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL


class CheckDispersiveShift(QubexTask):
Expand Down Expand Up @@ -61,8 +61,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
electrical_delay = exp.measure_electrical_delay(target=label)
result = exp.measure_dispersive_shift(
electrical_delay=electrical_delay,
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
target=label,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
)
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION


class CheckHPIPulse(QubexTask):
Expand Down Expand Up @@ -62,7 +62,7 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
result = exp.repeat_sequence(
sequence=hpi_pulse,
repetitions=self.run_parameters["repetitions"].get_value(),
interval=self.run_parameters["interval"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL


class CheckOptimalReadoutAmplitude(QubexTask):
Expand Down Expand Up @@ -61,8 +61,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
result = exp.find_optimal_readout_amplitude(
target=label,
amplitude_range=self.run_parameters["amplitude_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)

self.save_calibration(backend)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
)
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION


class CheckPIPulse(QubexTask):
Expand Down Expand Up @@ -62,7 +62,7 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
result = exp.repeat_sequence(
sequence=pi_pulse,
repetitions=self.run_parameters["repetitions"].get_value(),
interval=self.run_parameters["interval"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
)
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_SHOTS
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_SHOTS


class CheckQubit(QubexTask):
Expand Down Expand Up @@ -72,8 +72,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
label = self.get_qubit_label(backend, qid)
result = exp.check_rabi(
time_range=self.run_parameters["time_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
targets=[label],
)
self.save_calibration(backend)
Expand All @@ -86,8 +86,8 @@ def batch_run(self, backend: QubexBackend, qids: list[str]) -> RunResult:
labels = [self.get_qubit_label(backend, qid) for qid in qids]
results = exp.check_rabi(
time_range=self.run_parameters["time_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
targets=labels,
)
return RunResult(raw_result=results)
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
)
from qdash.workflow.calibtasks.qubex.base import QubexTask
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_SHOTS
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_SHOTS


class CheckQubitFrequency(QubexTask):
Expand Down Expand Up @@ -66,8 +66,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
labels,
detuning_range=self.run_parameters["detuning_range"].get_value(),
time_range=self.run_parameters["time_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
)
self.save_calibration(backend)
return RunResult(raw_result=result)
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from qdash.workflow.engine.backend.qubex import QubexBackend
from qubex.analysis import IQPlotter
from qubex.experiment.experiment_constants import CALIBRATION_SHOTS
from qubex.measurement.measurement import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION
from qubex.measurement.measurement_defaults import DEFAULT_INTERVAL, DEFAULT_READOUT_DURATION

DEFAULT_READOUT_AMPLITUDE = 0.2
DEFAULT_CONTROL_AMPLITUDE = 0.0125
Expand Down Expand Up @@ -170,8 +170,8 @@ def run(self, backend: QubexBackend, qid: str) -> RunResult:
amplitudes={label: control_amplitude_param.value},
frequencies={label: qubit_frequency_param.value},
time_range=self.run_parameters["time_range"].get_value(),
shots=self.run_parameters["shots"].get_value(),
interval=self.run_parameters["interval"].get_value(),
n_shots=self.run_parameters["shots"].get_value(),
shot_interval=self.run_parameters["interval"].get_value(),
targets=label,
)

Expand Down
Loading
Loading