UnitarySynthesisPlugin#
- class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin[código fonte]#
Bases:
ABC
Abstract unitary synthesis plugin class
This abstract class defines the interface for unitary synthesis plugins.
Attributes
- max_qubits#
Return the maximum number of qubits the unitary synthesis plugin supports.
If the size of the unitary to be synthesized exceeds this value the
default
plugin will be used. If there is no upper bound returnNone
and all unitaries (>= min_qubits
if it’s defined) will be passed to this plugin when it’s enabled.
- min_qubits#
Return the minimum number of qubits the unitary synthesis plugin supports.
If the size of the unitary to be synthesized is below this value the
default
plugin will be used. If there is no lower bound returnNone
and all unitaries (<= max_qubits
if it’s defined) will be passed to this plugin when it’s enabled.
- supported_bases#
Returns a dictionary of supported bases for synthesis
This is expected to return a dictionary where the key is a string basis and the value is a list of gate names that the basis works in. If the synthesis method doesn’t support multiple bases this should return
None
. For example:{ "XZX": ["rz", "rx"], "XYX": ["rx", "ry"], }
If a dictionary is returned by this method the run kwargs will be passed a parameter
matched_basis
which contains a list of the basis strings (i.e. keys in the dictionary) which match the target basis gate set for the transpilation. If no entry in the dictionary matches the target basis gate set then thematched_basis
kwarg will be set to an empty list, and a plugin can choose how to deal with the target basis gate set not matching the plugin’s capabilities.
- supports_basis_gates#
Return whether the plugin supports taking
basis_gates
If this returns
True
the plugin’srun()
method will be passed abasis_gates
kwarg with a list of gate names the target backend supports. For example,['sx', 'x', 'cx', 'id', 'rz']
.
- supports_coupling_map#
Return whether the plugin supports taking
coupling_map
If this returns
True
the plugin’srun()
method will receive one kwargcoupling_map
. Thecoupling_map
kwarg will be set to a tuple with the first element being aCouplingMap
object representing the qubit connectivity of the target backend, the second element will be a list of integers that represent the qubit indices in the coupling map that unitary is on. Note that if the target backend doesn’t have a coupling map set, thecoupling_map
kwarg’s value will be(None, qubit_indices)
.
- supports_gate_errors#
Return whether the plugin supports taking
gate_errors
gate_errors
will be a dictionary in the form of{gate_name: {(qubit_1, qubit_2): error}}
. For example:{ 'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126}, 'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07} }
Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate errors on every gate for each qubit. The gate error rates reported in
gate_errors
are provided by the target deviceBackend
object and the exact meaning might be different depending on the backend.
- supports_gate_errors_by_qubit#
Return whether the plugin supports taking
gate_errors_by_qubit
This differs from
supports_gate_errors
/gate_errors
by using a different view of the same data. Instead of being keyed by gate name this is keyed by qubit and usesGate
instances to represent gates (instead of gate names).gate_errors_by_qubit
will be a dictionary in the form of{(qubits,): [Gate, error]}
. For example:{ (0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0], (0, 1): [CXGate(): 0.012012477900732316] }
Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate errors on every gate for each qubit. The gate error rates reported in
gate_errors
are provided by the target deviceBackend
object and the exact meaning might be different depending on the backend.This defaults to False
- supports_gate_lengths#
Return whether the plugin supports taking
gate_lengths
gate_lengths
will be a dictionary in the form of{gate_name: {(qubit_1, qubit_2): length}}
. For example:{ 'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126}, 'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07} }
where the
length
value is in units of seconds.Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate lengths on every gate for each qubit.
- supports_gate_lengths_by_qubit#
Return whether the plugin supports taking
gate_lengths_by_qubit
This differs from
supports_gate_lengths
/gate_lengths
by using a different view of the same data. Instead of being keyed by gate name this is keyed by qubit and usesGate
instances to represent gates (instead of gate names)gate_lengths_by_qubit
will be a dictionary in the form of{(qubits,): [Gate, length]}
. For example:{ (0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0], (0, 1): [CXGate(): 0.012012477900732316] }
where the
length
value is in units of seconds.Do note that this dictionary might not be complete or could be empty as it depends on the target backend reporting gate lengths on every gate for each qubit.
This defaults to False
- supports_natural_direction#
Return whether the plugin supports a toggle for considering directionality of 2-qubit gates as
natural_direction
.Refer to the documentation for
UnitarySynthesis
for the possible values and meaning of these values.
- supports_pulse_optimize#
Return whether the plugin supports a toggle to optimize pulses during synthesis as
pulse_optimize
.Refer to the documentation for
UnitarySynthesis
for the possible values and meaning of these values.
- supports_target#
Whether the plugin supports taking
target
as an optiontarget
will be aTarget
object representing the target device for the output of the synthesis pass.By default this will be
False
since the plugin interface predates theTarget
class. If a plugin returnsTrue
for this attribute, it is expected that the plugin will use theTarget
instead of the values passed if any ofsupports_gate_lengths
,supports_gate_errors
,supports_coupling_map
, andsupports_basis_gates
are set (although ideally all those parameters should contain duplicate information).
Methods
- abstract run(unitary, **options)[código fonte]#
Run synthesis for the given unitary matrix
- Parâmetros:
unitary (numpy.ndarray) – The unitary matrix to synthesize to a
DAGCircuit
objectoptions – The optional kwargs that are passed based on the output the
support_*
methods on the class. Refer to the documentation for these methods onUnitarySynthesisPlugin
to see what the keys and values are.
- Retorno:
The dag circuit representation of the unitary. Alternatively, you can return a tuple of the form
(dag, wires)
wheredag
is the dag circuit representation of the circuit representation of the unitary andwires
is the mapping wires to use forqiskit.dagcircuit.DAGCircuit.substitute_node_with_dag()
. If you return a tuple andwires
isNone
this will behave just as if only aDAGCircuit
was returned. Additionally if this returnsNone
no substitution will be made.- Tipo de retorno: