See also
This notebook can be downloaded here
Serialization#
Quantify allows for serialization of :class:~quantify_scheduler.QuantumDevice
, :class:~quantify_scheduler.DeviceElement
(e.g. :class:~quantify_scheduler.BasicTransmonElement
) and :class:~quantify_scheduler.Schedule
objects to json strings and json files. Each class has the following methods:
to_json
: Converts the object into a json string.from_json
: Converts a json string back into the object.to_json_file
: Stores the json string to a file.from_json_file
: Reads the json string from a file and converts it back into the object.
Examples#
(De)Serializing a QuantumDevice
object to json string#
from quantify_scheduler import BasicTransmonElement, QuantumDevice
import json
QuantumDevice.close_all()
device = QuantumDevice("single_qubit_device")
q0 = BasicTransmonElement("q0")
device.cfg_sched_repetitions(512)
device.add_element(q0)
...
device_json = device.to_json()
print(json.dumps(json.loads(device_json), indent=4))
{
"deserialization_type": "quantify_scheduler.device_under_test.quantum_device.QuantumDevice",
"data": {
"name": "single_qubit_device",
"elements": {
"q0": {
"deserialization_type": "quantify_scheduler.device_under_test.transmon_element.BasicTransmonElement",
"mode": "__init__",
"data": {
"name": "q0",
"reset": {
"duration": 0.0002
},
"rxy": {
"amp180": NaN,
"motzoi": 0,
"duration": 2e-08
},
"measure": {
"pulse_type": "SquarePulse",
"pulse_amp": 0.25,
"pulse_duration": 3e-07,
"acq_channel": 0,
"acq_delay": 0,
"integration_time": 1e-06,
"reset_clock_phase": true,
"acq_weights_a": {
"deserialization_type": "ndarray",
"mode": "__init__",
"data": []
},
"acq_weights_b": {
"deserialization_type": "ndarray",
"mode": "__init__",
"data": []
},
"acq_weights_sampling_rate": 1000000000.0,
"acq_weight_type": "SSB",
"acq_rotation": 0,
"acq_threshold": 0,
"num_points": 1
},
"pulse_compensation": {
"max_compensation_amp": NaN,
"time_grid": NaN,
"sampling_rate": NaN
},
"ports": {
"microwave": "q0:mw",
"flux": "q0:fl",
"readout": "q0:res"
},
"clock_freqs": {
"f01": NaN,
"f12": NaN,
"readout": NaN
}
}
}
},
"edges": {},
"cfg_sched_repetitions": 512
}
}
Loading the object from the json string is done using the from_json
method:
deserialized_device = QuantumDevice.from_json(device_json)
(De)Serializing a QuantumDevice
object to json file#
You can optionally specify the path as an argument to the to_json_file
method.
device.to_json_file("/tmp")
'/tmp/single_qubit_device_2025-06-01_02-11-39_UTC.json'
or save it automatically to the current data directory using the objects name:
from quantify_core.data.handling import set_datadir
set_datadir("/tmp")
device.to_json_file() # Saves to "/tmp/single_qubit_device_2024-11-14_13-36-59_UTC.json"
'/tmp/single_qubit_device_2025-06-01_02-11-39_UTC.json'
and the timestamp can be omitted by setting add_timestamp=False
:
device.to_json_file(add_timestamp=False) # Saves to "/tmp/single_qubit_device.json"
'/tmp/single_qubit_device.json'
loading the object from the json file is done using the from_json_file
method:
deserialized_device = QuantumDevice.from_json_file("/tmp/single_qubit_device.json")