json_utils#

Module containing quantify JSON utilities.

Module Contents#

Classes#

JSONSchemaValMixin

A mixin that adds validation utilities to classes that have

SchedulerJSONDecoder

The Quantify Scheduler JSONDecoder.

SchedulerJSONEncoder

Custom JSONEncoder which encodes a Quantify Scheduler object into a JSON file format

JSONSerializableMixin

Mixin to allow de/serialization of arbitrary objects using SchedulerJSONEncoder

Functions#

validate_json(→ object)

Validate schema using jsonschema-rs.

load_json_schema(→ str)

Load a JSON schema from file. Expects a 'schemas' directory in the same directory

load_json_validator(→ Callable)

Load a JSON validator from file. Expects a 'schemas' directory in the same directory

_get_type_from_string_deprecated(→ type)

Attributes#

current_python_version[source]#
lru_cache[source]#
DEFAULT_TYPES[source]#
validate_json(data: dict, schema: str) object[source]#

Validate schema using jsonschema-rs.

load_json_schema(relative_to: str | pathlib.Path, filename: str) str[source]#

Load a JSON schema from file. Expects a ‘schemas’ directory in the same directory as relative_to.

Tip

Typical usage of the form schema = load_json_schema(__file__, 'definition.json')

Parameters:
  • relative_to – the file to begin searching from

  • filename – the JSON file to load

Returns:

the schema

Return type:

dict

load_json_validator(relative_to: str | pathlib.Path, filename: str) Callable[source]#

Load a JSON validator from file. Expects a ‘schemas’ directory in the same directory as relative_to.

Parameters:
  • relative_to – the file to begin searching from

  • filename – the JSON file to load

Returns:

The validator

Return type:

Callable

exception UnknownDeserializationTypeError[source]#

Bases: Exception

Raised when an unknown deserialization type is encountered.

class JSONSchemaValMixin[source]#

A mixin that adds validation utilities to classes that have a data attribute like a UserDict based on JSONSchema.

This requires the class to have a class variable “schema_filename”

schema_filename: str[source]#
classmethod is_valid(object_to_be_validated: quantify_scheduler.operations.Operation) bool[source]#

Checks if the object is valid according to its schema.

Raises:

fastjsonschema.JsonSchemaException – if the data is invalid

class SchedulerJSONDecoder(*args, **kwargs)[source]#

Bases: json.JSONDecoder

The Quantify Scheduler JSONDecoder.

The SchedulerJSONDecoder is used to convert a string with JSON content into instances of classes in quantify-scheduler.

For a few types, DEFAULT_TYPES contains the mapping from type name to the python object. This dictionary can be expanded with classes from modules specified in the keyword argument modules.

Classes not contained in DEFAULT_TYPES by default must implement __getstate__, such that it returns a dictionary containing at least the keys "deserialization_type" and "data", and __setstate__, which should be able to parse the data from __getstate__.

The value of "deserialization_type" must be either the name of the class specified in DEFAULT_TYPES or the fully qualified name of the class, which can be obtained from export_python_object_to_path_string().

Keyword Arguments:

modules (list[ModuleType], optional) – A list of custom modules containing serializable classes, by default []

_classes: dict[str, type[Any]][source]#
decode_dict(obj: dict[str, Any]) dict[str, Any] | numpy.ndarray | object | qcodes.instrument.Instrument[source]#

Returns the deserialized JSON dictionary.

Parameters:

obj – The dictionary to deserialize.

Returns:

The deserialized result.

custom_object_hook(obj: object) object[source]#

The object_hook hook will be called with the result of every JSON object decoded and its return value will be used in place of the given dict.

Parameters:

obj – A pair of JSON objects.

Returns:

The deserialized result.

_get_type_from_string(deserialization_type: str) type[source]#

Get the python type based on the description string.

The following methods are tried, in order:

  1. Try to find the string in DEFAULT_TYPES or the extended modules

    passed to this class’ initializer.

  2. Try to import the type. This works only if deserialization_type is

    formatted as a dot-separated path to the type. E.g. quantify_scheduler.json_utils.SchedulerJSONDecoder.

  3. (deprecated) Try to find the class by its __name__ in a predefined

    selection of types present in quantify_scheduler.

Parameters:

deserialization_type – Description of a type.

Raises:

UnknownDeserializationTypeError – If the type cannot be found by any of the methods described.

Returns:

The Type found.

Return type:

Type

_get_type_from_string_deprecated(deserialization_type: str) type[source]#
class SchedulerJSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]#

Bases: json.JSONEncoder

Custom JSONEncoder which encodes a Quantify Scheduler object into a JSON file format string.

default(o: object) object[source]#

Overloads the json.JSONEncoder default method that returns a serializable object. It will try 3 different serialization methods which are, in order, check if the object is to be serialized to a string using repr. If not, try to use __getstate__. Finally, try to serialize the __dict__ property.

class JSONSerializableMixin[source]#

Mixin to allow de/serialization of arbitrary objects using SchedulerJSONEncoder and SchedulerJSONDecoder.

to_json() str[source]#

Convert the object’s data structure to a JSON string.

Returns:

The json string containing the serialized object.

to_json_file(path: str | None = None, add_timestamp: bool = True) str[source]#

Convert the object’s data structure to a JSON string and store it in a file.

Examples

Saving a QuantumDevice will use its name and current timestamp

from quantify_scheduler import QuantumDevice

single_qubit_device = QuantumDevice("single_qubit_device")
...
single_qubit_device.to_json_file()
single_qubit_device.close()

single_qubit_device = QuantumDevice.from_json_file("/tmp/single_qubit_device_2024-11-14_13-36-59_UTC.json")
Parameters:
  • path – The path to the directory where the file is created. Default is None, in which case the file will be saved in the directory determined by get_datadir().

  • add_timestamp – Specify whether to append timestamp to the filename. Default is True.

Returns:

The name of the file containing the serialized object.

classmethod from_json(data: str) typing_extensions.Self[source]#

Convert the JSON data to an instance of the attached class.

Parameters:

data – The JSON data in str format.

Returns:

The deserialized object.

classmethod from_json_file(filename: str) typing_extensions.Self[source]#

Read JSON data from a file and convert it to an instance of the attached class.

Examples

from quantify_scheduler import QuantumDevice

single_qubit_device = QuantumDevice.from_json_file("/tmp/single_qubit_device_2024-11-14_13-36-59_UTC.json")
Parameters:

filename – The name of the file containing the serialized object.

Returns:

The deserialized object.