Пример #1
0
class JobResponseSchema(BaseSchema):
    """Schema for IBMQJob.

    Schema for an `IBMQJob`. The following conventions are in use in order to
    provide enough flexibility in regards to attributes:

    * the "Required properties" reflect attributes that will always be present
      in the model.
    * the "Optional properties with a default value" reflect attributes that
      are always present in the model, but might contain uninitialized values
      depending on the state of the job.
    * some properties are prepended by underscore due to name clashes and extra
      constraints in the IBMQJob class (for example, existing IBMQJob methods
      that have the same name as a response field).

    The schema is used for GET Jobs, GET Jobs/{id}, and POST Jobs responses.
    """
    # pylint: disable=invalid-name

    # Required properties.
    _creation_date = DateTime(required=True)
    kind = Enum(required=True, enum_cls=ApiJobKind)
    _job_id = String(required=True)
    _api_status = Enum(required=True, enum_cls=ApiJobStatus)

    # Optional properties with a default value.
    _name = String(missing=None)
    shots = Integer(validate=Range(min=0), missing=None)
    _time_per_step = Dict(keys=String, values=String, missing=None)
    _result = Nested(ResultSchema, missing=None)
    _qobj = Nested(QobjSchema, missing=None)
    _error = Nested(JobResponseErrorSchema, missing=None)

    # Optional properties
    _backend_info = Nested(JobResponseBackendSchema)
    allow_object_storage = Boolean()
    error = String()

    @pre_load
    def preprocess_field_names(self, data, **_):  # type: ignore
        """Pre-process the job response fields.

        Rename selected fields of the job response due to name clashes, and
        convert from camel-case the rest of the fields.

        TODO: when updating to terra 0.10, check if changes related to
        marshmallow 3 allow to use directly `data_key`, as in 0.9 terra
        duplicates the unknown keys.
        """
        rename_map = {}
        for field_name in data:
            if field_name in FIELDS_MAP:
                rename_map[field_name] = FIELDS_MAP[field_name]
            else:
                rename_map[field_name] = to_python_identifier(field_name)

        for old_name, new_name in rename_map.items():
            data[new_name] = data.pop(old_name)

        return data
Пример #2
0
class QasmQobjExperimentSchema(QobjExperimentSchema):
    """Schema for QasmQobjExperiment."""

    # Required properties.
    instructions = Nested(QasmQobjInstructionSchema, required=True, many=True)

    # Optional properties.
    config = Nested(QasmQobjExperimentConfigSchema)
Пример #3
0
class PulseQobjExperimentSchema(QobjExperimentSchema):
    """Schema for PulseQobjExperiment."""

    # Required properties.
    instructions = Nested(PulseQobjInstructionSchema, required=True, many=True,
                          validate=Length(min=1))

    # Optional properties.
    config = Nested(PulseQobjExperimentConfigSchema)
Пример #4
0
class QobjExperimentSchema(BaseSchema):
    """Base Schema for QobjExperiment."""

    # Required properties.
    instructions = Nested(QobjInstructionSchema, required=True, many=True)

    # Optional properties.
    header = Nested(QobjExperimentHeaderSchema)
    config = Nested(QobjExperimentConfigSchema)
Пример #5
0
class PulseQobjSchema(QobjSchema):
    """Schema for PulseQobj."""

    # Required properties.
    config = Nested(PulseQobjConfigSchema, required=True)
    experiments = Nested(PulseQobjExperimentSchema, required=True, many=True)

    type = String(required=True, validate=Equal(QobjType.PULSE),
                  missing=QobjType.PULSE)
Пример #6
0
class ExperimentResultDataSchema(BaseSchema):
    """Schema for ExperimentResultData."""

    counts = Nested(ObjSchema,
                    validate=PatternProperties(
                        {Regexp('^0x([0-9A-Fa-f])+$'): Integer()}))
    snapshots = Nested(ObjSchema)
    memory = List(Raw(), validate=Length(min=1))
    statevector = List(Complex(), validate=Length(min=1))
    unitary = List(List(Complex(), validate=Length(min=1)),
                   validate=Length(min=1))
Пример #7
0
class QobjSchema(BaseSchema):
    """Schema for Qobj."""
    # Required properties.
    qobj_id = String(required=True)
    schema_version = String(required=True, missing=QOBJ_VERSION)

    # Required properties depend on Qobj type.
    config = Nested(QobjConfigSchema, required=True)
    experiments = Nested(QobjExperimentSchema, required=True, many=True)
    header = Nested(QobjHeaderSchema, required=True)
    type = String(required=True, validate=OneOf(choices=(QobjType.QASM, QobjType.PULSE)))
Пример #8
0
class PulseDefaultsSchema(BaseSchema):
    """Schema for PulseDefaults."""

    # Required properties.
    qubit_freq_est = List(Number(), required=True, validate=Length(min=1))
    meas_freq_est = List(Number(), required=True, validate=Length(min=1))
    buffer = Integer(required=True, validate=Range(min=0))
    pulse_library = Nested(PulseLibraryItemSchema, required=True, many=True)
    cmd_def = Nested(CommandSchema, many=True, required=True)

    # Optional properties.
    meas_kernel = Nested(MeasurementKernelSchema)
    discriminator = Nested(DiscriminatorSchema)
Пример #9
0
class JobResponseSchema(BaseSchema):
    """Schema for ``IBMQJob``.

    The following conventions are in use in order to provide enough
    flexibility in regards to attributes:

        * the "Required properties" reflect attributes that will always be present
          in the model.
        * the "Optional properties with a default value" reflect attributes that
          are always present in the model, but might contain uninitialized values
          depending on the state of the job.
        * some properties are prepended by underscore due to name clashes and extra
          constraints in the ``IBMQJob`` class (for example, existing ``IBMQJob``
          methods that have the same name as a response field).

    The schema is used for ``GET /Jobs``, ``GET /Jobs/{id}``, and ``POST /Jobs``
    responses.
    """
    # pylint: disable=invalid-name

    # Required properties.
    _creation_date = DateTime(required=True)
    _job_id = String(required=True)
    _api_status = Enum(required=True, enum_cls=ApiJobStatus)

    # Optional properties with a default value.
    kind = Enum(enum_cls=ApiJobKind, missing=None)
    _name = String(missing=None)
    _time_per_step = Dict(keys=String, values=String, missing=None)
    _result = Nested(ResultSchema, missing=None)
    _qobj = Raw(missing=None)
    _error = Nested(JobResponseErrorSchema, missing=None)
    _tags = List(String, missing=[])
    _run_mode = String(missing=None)

    # Optional properties
    _backend_info = Nested(JobResponseBackendSchema)
    allow_object_storage = Boolean()

    @pre_load
    def preprocess_field_names(self, data, **_):  # type: ignore
        """Pre-process the job response fields.

        Rename selected fields of the job response due to name clashes, and
        convert the rest of the fields to Python convention.

        TODO: when updating to terra 0.10, check if changes related to
        marshmallow 3 allow to use directly `data_key`, as in 0.9 terra
        duplicates the unknown keys.
        """
        return map_field_names(FIELDS_MAP, data)
Пример #10
0
class PulseQobjSchema(QobjSchema):
    """Schema for PulseQobj."""

    # Required properties.
    config = Nested(PulseQobjConfigSchema, required=True)
    experiments = Nested(PulseQobjExperimentSchema, required=True, many=True)

    type = String(required=True, validate=Equal(QobjType.PULSE))

    @pre_load
    def add_type(self, data, **_):
        """Add the Qobj type (PULSE) on loading."""
        data['type'] = QobjType.PULSE.value
        return data
Пример #11
0
class ResultSchema(BaseSchema):
    """Schema for Result."""

    # Required fields.
    backend_name = String(required=True)
    backend_version = String(required=True,
                             validate=Regexp('[0-9]+.[0-9]+.[0-9]+$'))
    qobj_id = String(required=True)
    job_id = String(required=True)
    success = Boolean(required=True)
    results = Nested(ExperimentResultSchema, required=True, many=True)

    # Optional fields.
    date = DateTime()
    status = String()
    header = Nested(ObjSchema)
Пример #12
0
class UserInfoResponseSchema(BaseSchema):
    """Schema for UserInfoResponse."""

    # Required properties.
    urls = Nested(UserApiUrlResponseSchema, required=True,
                  description='base URLs for the services. Currently supported keys: '
                              'http and ws')
Пример #13
0
class BackendConfigurationSchema(BaseSchema):
    """Schema for BackendConfiguration."""
    # Required properties.
    backend_name = String(required=True)
    backend_version = String(required=True,
                             validate=Regexp("[0-9]+.[0-9]+.[0-9]+$"))
    n_qubits = Integer(required=True, validate=Range(min=1))
    basis_gates = List(String(), required=True, validate=Length(min=1))
    gates = Nested(GateConfigSchema,
                   required=True,
                   many=True,
                   validate=Length(min=1))
    local = Boolean(required=True)
    simulator = Boolean(required=True)
    conditional = Boolean(required=True)
    memory = Boolean(required=True)
    max_shots = Integer(required=True, validate=Range(min=1))
    open_pulse = Boolean(required=True)

    # Optional properties.
    max_experiments = Integer(validate=Range(min=1))
    sample_name = String()
    coupling_map = List(List(Integer(), validate=Length(min=1)),
                        validate=Length(min=1),
                        allow_none=True)
    n_registers = Integer(validate=Range(min=1))
    register_map = List(List(Integer(validate=OneOf([0, 1])),
                             validate=Length(min=1)),
                        validate=Length(min=1))
    configurable = Boolean()
    credits_required = Boolean()
    online_date = DateTime()
    display_name = String()
    description = String()
    tags = List(String())
Пример #14
0
class BackendPropertiesSchema(BaseSchema):
    """Schema for BackendProperties."""

    # Required properties.
    backend_name = String(required=True)
    backend_version = String(required=True,
                             validate=Regexp("[0-9]+.[0-9]+.[0-9]+$"))
    last_update_date = DateTime(required=True)
    qubits = List(Nested(NduvSchema, many=True, validate=Length(min=1)),
                  required=True,
                  validate=Length(min=1))
    gates = Nested(GateSchema,
                   required=True,
                   many=True,
                   validate=Length(min=1))
    general = Nested(NduvSchema, required=True, many=True)
Пример #15
0
class PulseBackendConfigurationSchema(QasmBackendConfigurationSchema):
    """Schema for pulse backend"""
    # Required properties.
    open_pulse = Boolean(required=True, validate=OneOf([True]))
    n_uchannels = Integer(required=True, validate=Range(min=0))
    u_channel_lo = List(
        Nested(UchannelLOSchema,
               validate=Length(min=1),
               required=True,
               many=True))
    meas_levels = List(Integer(), validate=Length(min=1), required=True)
    qubit_lo_range = List(List(Float(validate=Range(min=0)),
                               validate=Length(equal=2)),
                          required=True)
    meas_lo_range = List(List(Float(validate=Range(min=0)),
                              validate=Length(equal=2)),
                         required=True)
    dt = Float(required=True, validate=Range(min=0))  # pylint: disable=invalid-name
    dtm = Float(required=True, validate=Range(min=0))
    rep_times = List(Float(validate=Range(min=0)), required=True)
    meas_kernels = List(String(), required=True)
    discriminators = List(String(), required=True)

    # Optional properties.
    meas_map = List(List(Integer(), validate=Length(min=1)))
    channel_bandwidth = List(List(Float(), validate=Length(equal=2)))
    acquisition_latency = List(List(Integer()))
    conditional_latency = List(List(Integer()))
    hamiltonian = PulseHamiltonianSchema()
Пример #16
0
class ExperimentResultSchema(BaseSchema):
    """Schema for ExperimentResult."""

    # Required fields.
    shots = ByType([
        Integer(),
        List(Integer(validate=Range(min=1)), validate=Length(equal=2))
    ],
                   required=True)
    success = Boolean(required=True)
    data = Nested(ExperimentResultDataSchema, required=True)

    # Optional fields.
    status = String()
    seed = Integer()
    meas_return = String(validate=OneOf(['single', 'avg']))
    header = Nested(ObjSchema)
Пример #17
0
class ExperimentResultSchema(BaseSchema):
    """Schema for ExperimentResult."""

    # Required fields.
    shots = ByType([Integer(), List(Integer(validate=Range(min=1)),
                                    validate=Length(equal=2))],
                   required=True)
    success = Boolean(required=True)
    data = Nested(ExperimentResultDataSchema, required=True)

    # Optional fields.
    status = String()
    seed = Integer()
    meas_level = Integer(validate=Range(min=0, max=2))
    meas_return = String(validate=OneOf(choices=(MeasReturnType.AVERAGE,
                                                 MeasReturnType.SINGLE)))
    header = Nested(ObjSchema)
Пример #18
0
class StatusResponseSchema(BaseSchema):
    """Schema for StatusResponse"""

    # Optional properties
    infoQueue = Nested(InfoQueueResponseSchema, required=False)

    # Required properties
    status = String(required=True, validate=OneOf([status.value for status in ApiJobStatus]))
Пример #19
0
class QobjSchema(BaseSchema):
    """Schema for Qobj."""
    # Required properties.
    qobj_id = String(required=True)
    schema_version = String(required=True)

    # Required properties depend on Qobj type.
    config = Nested(QobjConfigSchema, required=True)
    experiments = Nested(QobjExperimentSchema, required=True, many=True)
    header = Nested(QobjHeaderSchema, required=True)
    type = String(required=True,
                  validate=OneOf(choices=(QobjType.QASM, QobjType.PULSE)))

    @pre_load
    def add_schema_version(self, data, **_):
        """Add the schema version on loading."""
        data['schema_version'] = QOBJ_VERSION
        return data
Пример #20
0
class CommandSchema(BaseSchema):
    """Schema for Command."""

    # Required properties.
    name = String(required=True)

    # Optional properties.
    qubits = List(Integer(validate=Range(min=0)), validate=Length(min=1))
    sequence = Nested(PulseQobjInstructionSchema, many=True)
Пример #21
0
class QasmQobjInstructionSchema(QobjInstructionSchema):
    """Schema for QasmQobjInstruction."""

    # Optional properties.
    qubits = List(Integer(validate=Range(min=0)),
                  validate=Length(min=1))
    params = List(InstructionParameter())
    memory = List(Integer(validate=Range(min=0)),
                  validate=Length(min=1))
    conditional = Nested(QobjConditionalSchema)
Пример #22
0
class GateSchema(BaseSchema):
    """Schema for Gate."""

    # Required properties.
    qubits = List(Integer(), required=True, validate=Length(min=1))
    gate = String(required=True)
    parameters = Nested(NduvSchema,
                        required=True,
                        many=True,
                        validate=Length(min=1))
Пример #23
0
class PulseQobjInstructionSchema(QobjInstructionSchema):
    """Schema for PulseQobjInstruction."""
    # pylint: disable=invalid-name

    # Required properties
    t0 = Integer(required=True, validate=Range(min=0))

    # Optional properties.
    ch = String(validate=Regexp('[dum]([0-9])+'))
    conditional = Integer(validate=Range(min=0))
    val = ByType([Complex(), String()])
    phase = ByType([Float(), String()])
    duration = Integer(validate=Range(min=1))
    qubits = List(Integer(validate=Range(min=0)), validate=Length(min=1))
    memory_slot = List(Integer(validate=Range(min=0)), validate=Length(min=1))
    register_slot = List(Integer(validate=Range(min=0)), validate=Length(min=1))
    kernels = Nested(QobjMeasurementOptionSchema, many=True)
    discriminators = Nested(QobjMeasurementOptionSchema, many=True)
    label = String()
    type = String()
Пример #24
0
class JobsRequestSchema(BaseSchema):
    """Schema for JobsRequest"""

    # Optional properties
    name = String(required=False,
                  description="custom name to be assigned to the job.")

    # Required properties
    qObject = Dict(required=True,
                   description="the Qobj to be executed, as a dictionary.")
    backend = Nested(BackendRequestSchema, required=True)
Пример #25
0
class QobjInstructionSchema(BaseSchema):
    """Schema for QobjInstruction."""

    # Required properties.
    name = String(required=True)

    # Optional properties.
    qubits = List(Integer(validate=Range(min=0)),
                  validate=Length(min=1))
    params = List(InstructionParameter())
    memory = List(Integer(validate=Range(min=0)),
                  validate=Length(min=1))
    conditional = Nested(QobjConditionalSchema)
Пример #26
0
class PulseQobjConfigSchema(QobjConfigSchema):
    """Schema for PulseQobjConfig."""

    # Required properties.
    # TODO : check if they are always required by backend
    meas_level = Integer(required=True, validate=Range(min=0, max=2))
    memory_slot_size = Integer(required=True)
    pulse_library = Nested(QobjPulseLibrarySchema, many=True, required=True)
    qubit_lo_freq = List(Number(), required=True)
    meas_lo_freq = List(Number(), required=True)
    rep_time = Integer(required=True)
    meas_return = String(validate=OneOf(choices=(MeasReturnType.AVERAGE,
                                                 MeasReturnType.SINGLE)))
Пример #27
0
class CircuitResponseSchema(BaseSchema):
    """Schema for CircuitResponse"""
    # pylint: disable=invalid-name

    # Optional properties
    error = Dict(Nested(CircuitErrorResponseSchema), required=False)

    # Required properties
    id = String(required=True,
                description="the job ID of an already submitted job.")
    creationDate = String(required=True, description="when the job was run.")
    status = String(
        required=True,
        description="`status` field directly from the API response.")
Пример #28
0
class PulseQobjConfigSchema(QobjConfigSchema):
    """Schema for PulseQobjConfig of device backend."""

    # Required properties.
    meas_level = Integer(required=True, validate=Range(min=0, max=2))
    meas_return = String(required=True, validate=OneOf(choices=(MeasReturnType.AVERAGE,
                                                                MeasReturnType.SINGLE)))
    pulse_library = Nested(PulseLibraryItemSchema, required=True, many=True)
    qubit_lo_freq = List(Number(validate=Range(min=0)), required=True)
    meas_lo_freq = List(Number(validate=Range(min=0)), required=True)

    # Optional properties.
    memory_slot_size = Integer(validate=Range(min=1))
    rep_time = Integer(validate=Range(min=0))
Пример #29
0
class GroupsResponseSchema(BaseSchema):
    """Nested schema for HubsResponseSchema"""

    # Required properties.
    group_name = String(required=True)
    group = Nested(GroupResponseSchema, required=True)
Пример #30
0
class GroupResponseSchema(BaseSchema):
    """Nested schema for GroupsResponseSchema"""

    # Required properties.
    projects = Dict(Nested(ProjectsResponseSchema), required=True)