pygsti.extras.devices.experimentaldevice

Functions for interfacing pyGSTi with external devices, including IBM Q and Rigetti

Module Contents

Classes

ExperimentalDevice

Specification of an experimental device.

class pygsti.extras.devices.experimentaldevice.ExperimentalDevice(qubits, graph, gate_mapping=None)

Bases: object

Specification of an experimental device.

Initialize an IBMQ device from qubits and connectivity info.

Parameters

qubits: list

Qubit labels

graph: QubitGraph

QubitGraph depicting device connectivity.

gate_mapping: dict, optional

Mapping between pyGSTi gate names (keys) and IBM native gates (values). If None, simply use {‘Gcnot’: ‘cx’} to recover legacy behavior.

classmethod from_qiskit_backend(backend, gate_mapping=None)

Construct a ExperimentalDevice from Qiskit provider backend information.

Provider backends can be obtained via:

IBMQ.load_account() provider = IBMQ.get_provider() # with potential optional kwargs backend = provider.get_backend(<device name>)

Parameters
backend: IBMQBackend

Backend obtained from IBMQ

gate_mapping: dict, optional

Mapping between pyGSTi gate names (keys) and IBM native gates (values). If None, simply use {‘Gcnot’: ‘cx’} to recover legacy behavior.

Returns

Initialized ExperimentalDevice

classmethod from_legacy_device(devname)

Create a ExperimentalDevice from a legacy pyGSTi pygsti.extras.devices module.

Parameters
devname: str

Name of the pygsti.extras.devices module to use

Returns

Initialized ExperimentalDevice

create_processor_spec(gate_names=None, qubit_subset=None, subset_only=False, remove_edges=None)

Create a QubitProcessorSpec from user-specified gates and device connectivity.

Parameters
gate_names: list of str

List of one-qubit and two-qubit gate names. If None, use the keys of self.gate_mapping.

qubit_subset: list

A subset of qubits to include in the processor spec. If None, use self.qubits.

subset_only: bool

Whether or not to include all the device qubits in the processor spec (False, default) or just qubit_subset (True).

remove_edges: list

A list of edges to drop from the connectivity graph.

Returns

The created QubitProcessorSpec

create_error_rates_model(caldata=None, calformat='ibmq-v2019', model_type='TwirledLayers', idle_name=None)

Create an error rates model (OplessModel) from calibration data.

Parameters
caldata: dict

Calibration data. Currently, this can be retrieved via backend.properties().to_dict().

calformat: One of [‘ibmq-v2018’, ‘ibmq-v2019’, ‘rigetti’, ‘native’]

Calibration data format, defaults to ibmq-v2019. TODO: It seems this has been changed, what version are we actually on?

model_type: One of [‘TwirledLayers’, ‘TwirledGates’, ‘AnyErrorCausesFailure’, ‘AnyErrorCausesRandomOutput’]

Type of OplessModel to create

idle_name: str

Name for the idle gate

Returns

OplessModel

create_local_depolarizing_model(caldata=None, calformat='ibmq-v2019', qubits=None)

Create a LocalNoiseModel with depolarizing noise based on calibration data.

Note: this model is * NOT * suitable for optimization: it is not aware that it is a local depolarization with non-independent error rates model.

Parameters
caldata: dict

Calibration data. Currently, this can be retrieved via backend.properties().to_dict().

calformat: One of [‘ibmq-v2018’, ‘ibmq-v2019’, ‘rigetti’, ‘native’]

Calibration data format, defaults to ibmq-v2019. TODO: It seems this has been changed, what version are we actually on?

qubits: list

Qubit labels to include in the model

Returns

OplessModel