qiskit 1.2.0__cp38-abi3-win32.whl → 1.2.1__cp38-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/_accelerate.pyd +0 -0
  3. qiskit/circuit/__init__.py +10 -0
  4. qiskit/circuit/library/basis_change/qft.py +3 -1
  5. qiskit/circuit/library/data_preparation/initializer.py +5 -2
  6. qiskit/circuit/library/data_preparation/state_preparation.py +2 -2
  7. qiskit/circuit/library/standard_gates/__init__.py +32 -25
  8. qiskit/circuit/quantumcircuit.py +39 -14
  9. qiskit/pulse/library/symbolic_pulses.py +4 -3
  10. qiskit/quantum_info/operators/operator.py +24 -0
  11. qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -1
  12. qiskit/synthesis/clifford/clifford_decompose_greedy.py +1 -1
  13. qiskit/synthesis/linear/cnot_synth.py +1 -1
  14. qiskit/synthesis/one_qubit/one_qubit_decompose.py +2 -1
  15. qiskit/synthesis/permutation/permutation_full.py +2 -2
  16. qiskit/synthesis/permutation/permutation_lnn.py +3 -1
  17. qiskit/synthesis/two_qubit/two_qubit_decompose.py +2 -2
  18. qiskit/transpiler/instruction_durations.py +4 -0
  19. qiskit/transpiler/passes/__init__.py +2 -0
  20. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  21. qiskit/transpiler/passes/optimization/hoare_opt.py +12 -8
  22. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +16 -20
  23. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +9 -0
  24. qiskit/utils/optionals.py +173 -150
  25. qiskit/visualization/gate_map.py +28 -6
  26. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/METADATA +1 -1
  27. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/RECORD +31 -31
  28. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/LICENSE.txt +0 -0
  29. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/WHEEL +0 -0
  30. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/entry_points.txt +0 -0
  31. {qiskit-1.2.0.dist-info → qiskit-1.2.1.dist-info}/top_level.txt +0 -0
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.2.1
qiskit/_accelerate.pyd CHANGED
Binary file
@@ -580,6 +580,16 @@ The :class:`Store` instruction is particularly special, in that it allows writin
580
580
  :class:`Qubit` nor :class:`Clbit` operands, but has an explicit :attr:`~Store.lvalue` and
581
581
  :attr:`~Store.rvalue`.
582
582
 
583
+ For example, to determine the parity of a bitstring ``cr`` and store it in another register ``creg``,
584
+ the :class:`Store` instruction can be used in the following way::
585
+
586
+ parity = expr.lift(cr[0])
587
+ for i in range(1,n):
588
+ parity = expr.bit_xor(cr[i], parity)
589
+ qc.store(creg[0], parity)
590
+
591
+
592
+
583
593
  .. autoclass:: Store
584
594
  :show-inheritance:
585
595
  :members:
@@ -315,8 +315,10 @@ class QFTGate(Gate):
315
315
  """
316
316
  super().__init__(name="qft", num_qubits=num_qubits, params=[])
317
317
 
318
- def __array__(self, dtype=complex):
318
+ def __array__(self, dtype=complex, copy=None):
319
319
  """Return a numpy array for the QFTGate."""
320
+ if copy is False:
321
+ raise ValueError("unable to avoid copy while creating an array as requested")
320
322
  n = self.num_qubits
321
323
  nums = np.arange(2**n)
322
324
  outer = np.outer(nums, nums)
@@ -21,6 +21,7 @@ import typing
21
21
  from qiskit.circuit.quantumcircuit import QuantumCircuit
22
22
  from qiskit.circuit.quantumregister import QuantumRegister
23
23
  from qiskit.circuit.instruction import Instruction
24
+ from qiskit.circuit.library.generalized_gates import Isometry
24
25
  from .state_preparation import StatePreparation
25
26
 
26
27
  if typing.TYPE_CHECKING:
@@ -86,9 +87,11 @@ class Initialize(Instruction):
86
87
  """Call to create a circuit with gates that take the desired vector to zero.
87
88
 
88
89
  Returns:
89
- Circuit to take ``self.params`` vector to :math:`|{00\\ldots0}\\rangle`
90
+ QuantumCircuit: circuit to take ``self.params`` vector to :math:`|{00\\ldots0}\\rangle`
90
91
  """
91
- return self._stateprep._gates_to_uncompute()
92
+
93
+ isom = Isometry(self.params, 0, 0)
94
+ return isom._gates_to_uncompute()
92
95
 
93
96
  @property
94
97
  def params(self):
@@ -173,8 +173,8 @@ class StatePreparation(Gate):
173
173
  q = QuantumRegister(self.num_qubits, "q")
174
174
  initialize_circuit = QuantumCircuit(q, name="init_def")
175
175
 
176
- isom = Isometry(self._params_arg, 0, 0)
177
- initialize_circuit.append(isom, q[:])
176
+ isom = Isometry(self.params, 0, 0)
177
+ initialize_circuit.compose(isom.definition, copy=False, inplace=True)
178
178
 
179
179
  # invert the circuit to create the desired vector from zero (assuming
180
180
  # the qubits are in the zero state)
@@ -54,6 +54,13 @@ def get_standard_gate_name_mapping():
54
54
  from qiskit.circuit.delay import Delay
55
55
  from qiskit.circuit.reset import Reset
56
56
 
57
+ lambda_ = Parameter("λ")
58
+ theta = Parameter("ϴ")
59
+ phi = Parameter("φ")
60
+ gamma = Parameter("γ")
61
+ beta = Parameter("β")
62
+ time = Parameter("t")
63
+
57
64
  # Standard gates library mapping, multicontrolled gates not included since they're
58
65
  # variable width
59
66
  gates = [
@@ -61,38 +68,37 @@ def get_standard_gate_name_mapping():
61
68
  SXGate(),
62
69
  XGate(),
63
70
  CXGate(),
64
- RZGate(Parameter("λ")),
65
- RGate(Parameter("ϴ"), Parameter("φ")),
66
- Reset(),
71
+ RZGate(lambda_),
72
+ RGate(theta, phi),
67
73
  C3SXGate(),
68
74
  CCXGate(),
69
75
  DCXGate(),
70
76
  CHGate(),
71
- CPhaseGate(Parameter("ϴ")),
72
- CRXGate(Parameter("ϴ")),
73
- CRYGate(Parameter("ϴ")),
74
- CRZGate(Parameter("ϴ")),
77
+ CPhaseGate(theta),
78
+ CRXGate(theta),
79
+ CRYGate(theta),
80
+ CRZGate(theta),
75
81
  CSwapGate(),
76
82
  CSXGate(),
77
- CUGate(Parameter("ϴ"), Parameter("φ"), Parameter("λ"), Parameter("γ")),
78
- CU1Gate(Parameter("λ")),
79
- CU3Gate(Parameter("ϴ"), Parameter("φ"), Parameter("λ")),
83
+ CUGate(theta, phi, lambda_, gamma),
84
+ CU1Gate(lambda_),
85
+ CU3Gate(theta, phi, lambda_),
80
86
  CYGate(),
81
87
  CZGate(),
82
88
  CCZGate(),
83
- GlobalPhaseGate(Parameter("ϴ")),
89
+ GlobalPhaseGate(theta),
84
90
  HGate(),
85
- PhaseGate(Parameter("ϴ")),
91
+ PhaseGate(theta),
86
92
  RCCXGate(),
87
93
  RC3XGate(),
88
- RXGate(Parameter("ϴ")),
89
- RXXGate(Parameter("ϴ")),
90
- RYGate(Parameter("ϴ")),
91
- RYYGate(Parameter("ϴ")),
92
- RZZGate(Parameter("ϴ")),
93
- RZXGate(Parameter("ϴ")),
94
- XXMinusYYGate(Parameter("ϴ"), Parameter("β")),
95
- XXPlusYYGate(Parameter("ϴ"), Parameter("β")),
94
+ RXGate(theta),
95
+ RXXGate(theta),
96
+ RYGate(theta),
97
+ RYYGate(theta),
98
+ RZZGate(theta),
99
+ RZXGate(theta),
100
+ XXMinusYYGate(theta, beta),
101
+ XXPlusYYGate(theta, beta),
96
102
  ECRGate(),
97
103
  SGate(),
98
104
  SdgGate(),
@@ -103,13 +109,14 @@ def get_standard_gate_name_mapping():
103
109
  SXdgGate(),
104
110
  TGate(),
105
111
  TdgGate(),
106
- UGate(Parameter("ϴ"), Parameter("φ"), Parameter("λ")),
107
- U1Gate(Parameter("λ")),
108
- U2Gate(Parameter("φ"), Parameter("λ")),
109
- U3Gate(Parameter("ϴ"), Parameter("φ"), Parameter("λ")),
112
+ UGate(theta, phi, lambda_),
113
+ U1Gate(lambda_),
114
+ U2Gate(phi, lambda_),
115
+ U3Gate(theta, phi, lambda_),
110
116
  YGate(),
111
117
  ZGate(),
112
- Delay(Parameter("t")),
118
+ Delay(time),
119
+ Reset(),
113
120
  Measure(),
114
121
  ]
115
122
  name_mapping = {gate.name: gate for gate in gates}
@@ -1152,17 +1152,41 @@ class QuantumCircuit:
1152
1152
  """The unit that :attr:`duration` is specified in."""
1153
1153
  self.metadata = {} if metadata is None else metadata
1154
1154
  """Arbitrary user-defined metadata for the circuit.
1155
-
1155
+
1156
1156
  Qiskit will not examine the content of this mapping, but it will pass it through the
1157
1157
  transpiler and reattach it to the output, so you can track your own metadata."""
1158
1158
 
1159
1159
  @classmethod
1160
- def _from_circuit_data(cls, data: CircuitData) -> typing.Self:
1160
+ def _from_circuit_data(cls, data: CircuitData, add_regs: bool = False) -> typing.Self:
1161
1161
  """A private constructor from rust space circuit data."""
1162
1162
  out = QuantumCircuit()
1163
+
1164
+ if data.num_qubits > 0:
1165
+ if add_regs:
1166
+ qr = QuantumRegister(name="q", bits=data.qubits)
1167
+ out.qregs = [qr]
1168
+ out._qubit_indices = {
1169
+ bit: BitLocations(index, [(qr, index)]) for index, bit in enumerate(data.qubits)
1170
+ }
1171
+ else:
1172
+ out._qubit_indices = {
1173
+ bit: BitLocations(index, []) for index, bit in enumerate(data.qubits)
1174
+ }
1175
+
1176
+ if data.num_clbits > 0:
1177
+ if add_regs:
1178
+ cr = ClassicalRegister(name="c", bits=data.clbits)
1179
+ out.cregs = [cr]
1180
+ out._clbit_indices = {
1181
+ bit: BitLocations(index, [(cr, index)]) for index, bit in enumerate(data.clbits)
1182
+ }
1183
+ else:
1184
+ out._clbit_indices = {
1185
+ bit: BitLocations(index, []) for index, bit in enumerate(data.clbits)
1186
+ }
1187
+
1163
1188
  out._data = data
1164
- out._qubit_indices = {bit: BitLocations(index, []) for index, bit in enumerate(data.qubits)}
1165
- out._clbit_indices = {bit: BitLocations(index, []) for index, bit in enumerate(data.clbits)}
1189
+
1166
1190
  return out
1167
1191
 
1168
1192
  @staticmethod
@@ -3013,16 +3037,7 @@ class QuantumCircuit:
3013
3037
  self._ancillas.append(bit)
3014
3038
 
3015
3039
  if isinstance(register, QuantumRegister):
3016
- self.qregs.append(register)
3017
-
3018
- for idx, bit in enumerate(register):
3019
- if bit in self._qubit_indices:
3020
- self._qubit_indices[bit].registers.append((register, idx))
3021
- else:
3022
- self._data.add_qubit(bit)
3023
- self._qubit_indices[bit] = BitLocations(
3024
- self._data.num_qubits - 1, [(register, idx)]
3025
- )
3040
+ self._add_qreg(register)
3026
3041
 
3027
3042
  elif isinstance(register, ClassicalRegister):
3028
3043
  self.cregs.append(register)
@@ -3041,6 +3056,16 @@ class QuantumCircuit:
3041
3056
  else:
3042
3057
  raise CircuitError("expected a register")
3043
3058
 
3059
+ def _add_qreg(self, qreg: QuantumRegister) -> None:
3060
+ self.qregs.append(qreg)
3061
+
3062
+ for idx, bit in enumerate(qreg):
3063
+ if bit in self._qubit_indices:
3064
+ self._qubit_indices[bit].registers.append((qreg, idx))
3065
+ else:
3066
+ self._data.add_qubit(bit)
3067
+ self._qubit_indices[bit] = BitLocations(self._data.num_qubits - 1, [(qreg, idx)])
3068
+
3044
3069
  def add_bits(self, bits: Iterable[Bit]) -> None:
3045
3070
  """Add Bits to the circuit."""
3046
3071
  duplicate_bits = {
@@ -1773,12 +1773,13 @@ def Square(
1773
1773
  is the sign function with the convention :math:`\\text{sign}\\left(0\\right)=1`.
1774
1774
 
1775
1775
  Args:
1776
- duration: Pulse length in terms of the sampling period `dt`.
1777
- amp: The magnitude of the amplitude of the square wave. Wave range is [-`amp`,`amp`].
1776
+ duration: Pulse length in terms of the sampling period ``dt``.
1777
+ amp: The magnitude of the amplitude of the square wave. Wave range is
1778
+ :math:`\\left[-\\texttt{amp},\\texttt{amp}\\right]`.
1778
1779
  phase: The phase of the square wave (note that this is not equivalent to the angle of
1779
1780
  the complex amplitude).
1780
1781
  freq: The frequency of the square wave, in terms of 1 over sampling period.
1781
- If not provided defaults to a single cycle (i.e :math:'\\frac{1}{\\text{duration}}').
1782
+ If not provided defaults to a single cycle (i.e :math:`\\frac{1}{\\text{duration}}`).
1782
1783
  The frequency is limited to the range :math:`\\left(0,0.5\\right]` (the Nyquist frequency).
1783
1784
  angle: The angle in radians of the complex phase factor uniformly
1784
1785
  scaling the pulse. Default value 0.
@@ -55,6 +55,30 @@ class Operator(LinearOp):
55
55
  .. math::
56
56
 
57
57
  \rho \mapsto M \rho M^\dagger.
58
+
59
+ For example, the following operator :math:`M = X` applied to the zero state
60
+ :math:`|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|)` changes it to the
61
+ one state :math:`|\psi\rangle=|1\rangle (\rho = |1\rangle\langle 1|)`:
62
+
63
+ .. code-block:: python
64
+
65
+ >>> import numpy as np
66
+ >>> from qiskit.quantum_info import Operator
67
+ >>> op = Operator(np.array([[0.0, 1.0], [1.0, 0.0]])) # Represents Pauli X operator
68
+
69
+ >>> from qiskit.quantum_info import Statevector
70
+ >>> sv = Statevector(np.array([1.0, 0.0]))
71
+ >>> sv.evolve(op)
72
+ Statevector([0.+0.j, 1.+0.j],
73
+ dims=(2,))
74
+
75
+ >>> from qiskit.quantum_info import DensityMatrix
76
+ >>> dm = DensityMatrix(np.array([[1.0, 0.0], [0.0, 0.0]]))
77
+ >>> dm.evolve(op)
78
+ DensityMatrix([[0.+0.j, 0.+0.j],
79
+ [0.+0.j, 1.+0.j]],
80
+ dims=(2,))
81
+
58
82
  """
59
83
 
60
84
  def __init__(
@@ -41,7 +41,7 @@ def synth_clifford_bm(clifford: Clifford) -> QuantumCircuit:
41
41
  `arXiv:2003.09412 [quant-ph] <https://arxiv.org/abs/2003.09412>`_
42
42
  """
43
43
  circuit = QuantumCircuit._from_circuit_data(
44
- synth_clifford_bm_inner(clifford.tableau.astype(bool))
44
+ synth_clifford_bm_inner(clifford.tableau.astype(bool)), add_regs=True
45
45
  )
46
46
  circuit.name = str(clifford)
47
47
  return circuit
@@ -51,7 +51,7 @@ def synth_clifford_greedy(clifford: Clifford) -> QuantumCircuit:
51
51
  `arXiv:2105.02291 [quant-ph] <https://arxiv.org/abs/2105.02291>`_
52
52
  """
53
53
  circuit = QuantumCircuit._from_circuit_data(
54
- synth_clifford_greedy_inner(clifford.tableau.astype(bool))
54
+ synth_clifford_greedy_inner(clifford.tableau.astype(bool)), add_regs=True
55
55
  )
56
56
  circuit.name = str(clifford)
57
57
  return circuit
@@ -66,4 +66,4 @@ def synth_cnot_count_full_pmh(
66
66
  circuit_data = fast_pmh(normalized, section_size)
67
67
 
68
68
  # construct circuit from the data
69
- return QuantumCircuit._from_circuit_data(circuit_data)
69
+ return QuantumCircuit._from_circuit_data(circuit_data, add_regs=True)
@@ -224,7 +224,8 @@ class OneQubitEulerDecomposer:
224
224
  return QuantumCircuit._from_circuit_data(
225
225
  euler_one_qubit_decomposer.unitary_to_circuit(
226
226
  unitary, [self.basis], 0, None, simplify, atol
227
- )
227
+ ),
228
+ add_regs=True,
228
229
  )
229
230
 
230
231
  @property
@@ -42,7 +42,7 @@ def synth_permutation_basic(pattern: list[int] | np.ndarray[int]) -> QuantumCirc
42
42
  Returns:
43
43
  The synthesized quantum circuit.
44
44
  """
45
- return QuantumCircuit._from_circuit_data(_synth_permutation_basic(pattern))
45
+ return QuantumCircuit._from_circuit_data(_synth_permutation_basic(pattern), add_regs=True)
46
46
 
47
47
 
48
48
  def synth_permutation_acg(pattern: list[int] | np.ndarray[int]) -> QuantumCircuit:
@@ -75,4 +75,4 @@ def synth_permutation_acg(pattern: list[int] | np.ndarray[int]) -> QuantumCircui
75
75
  *Routing Permutations on Graphs Via Matchings.*,
76
76
  `(Full paper) <https://www.cs.tau.ac.il/~nogaa/PDFS/r.pdf>`_
77
77
  """
78
- return QuantumCircuit._from_circuit_data(_synth_permutation_acg(pattern))
78
+ return QuantumCircuit._from_circuit_data(_synth_permutation_acg(pattern), add_regs=True)
@@ -49,4 +49,6 @@ def synth_permutation_depth_lnn_kms(pattern: list[int] | np.ndarray[int]) -> Qua
49
49
  # In the permutation synthesis code below the notation is opposite:
50
50
  # [2, 4, 3, 0, 1] means that 0 maps to 2, 1 to 3, 2 to 3, 3 to 0, and 4 to 1.
51
51
  # This is why we invert the pattern.
52
- return QuantumCircuit._from_circuit_data(_synth_permutation_depth_lnn_kms(pattern))
52
+ return QuantumCircuit._from_circuit_data(
53
+ _synth_permutation_depth_lnn_kms(pattern), add_regs=True
54
+ )
@@ -233,7 +233,7 @@ class TwoQubitWeylDecomposition:
233
233
  circuit_data = self._inner_decomposition.circuit(
234
234
  euler_basis=euler_basis, simplify=simplify, atol=atol
235
235
  )
236
- return QuantumCircuit._from_circuit_data(circuit_data)
236
+ return QuantumCircuit._from_circuit_data(circuit_data, add_regs=True)
237
237
 
238
238
  def actual_fidelity(self, **kwargs) -> float:
239
239
  """Calculates the actual fidelity of the decomposed circuit to the input unitary."""
@@ -671,7 +671,7 @@ class TwoQubitBasisDecomposer:
671
671
  approximate,
672
672
  _num_basis_uses=_num_basis_uses,
673
673
  )
674
- return QuantumCircuit._from_circuit_data(circ_data)
674
+ return QuantumCircuit._from_circuit_data(circ_data, add_regs=True)
675
675
  else:
676
676
  sequence = self._inner_decomposer(
677
677
  np.asarray(unitary, dtype=complex),
@@ -18,6 +18,7 @@ import qiskit.circuit
18
18
  from qiskit.circuit import Barrier, Delay, Instruction, ParameterExpression
19
19
  from qiskit.circuit.duration import duration_in_dt
20
20
  from qiskit.providers import Backend
21
+ from qiskit.providers.backend import BackendV2
21
22
  from qiskit.transpiler.exceptions import TranspilerError
22
23
  from qiskit.utils.units import apply_prefix
23
24
 
@@ -75,6 +76,9 @@ class InstructionDurations:
75
76
  TranspilerError: If dt and dtm is different in the backend.
76
77
  """
77
78
  # All durations in seconds in gate_length
79
+ if isinstance(backend, BackendV2):
80
+ return backend.target.durations()
81
+
78
82
  instruction_durations = []
79
83
  backend_properties = backend.properties()
80
84
  if hasattr(backend_properties, "_gates"):
@@ -71,6 +71,7 @@ Optimizations
71
71
  Collect1qRuns
72
72
  Collect2qBlocks
73
73
  CollectMultiQBlocks
74
+ CollectAndCollapse
74
75
  CollectLinearFunctions
75
76
  CollectCliffords
76
77
  ConsolidateBlocks
@@ -238,6 +239,7 @@ from .optimization import HoareOptimizer
238
239
  from .optimization import TemplateOptimization
239
240
  from .optimization import InverseCancellation
240
241
  from .optimization import EchoRZXWeylDecomposition
242
+ from .optimization import CollectAndCollapse
241
243
  from .optimization import CollectLinearFunctions
242
244
  from .optimization import CollectCliffords
243
245
  from .optimization import ResetAfterMeasureSimplification
@@ -39,3 +39,4 @@ from .elide_permutations import ElidePermutations
39
39
  from .normalize_rx_angle import NormalizeRXAngle
40
40
  from .optimize_annotated import OptimizeAnnotated
41
41
  from .split_2q_unitaries import Split2QUnitaries
42
+ from .collect_and_collapse import CollectAndCollapse
@@ -203,20 +203,24 @@ class HoareOptimizer(TransformationPass):
203
203
  """
204
204
  import z3
205
205
 
206
- for node in dag.topological_op_nodes():
206
+ # Pre-generate all DAG nodes, since we later iterate over them, while
207
+ # potentially modifying and removing some of them.
208
+ nodes = list(dag.topological_op_nodes())
209
+ for node in nodes:
207
210
  gate = node.op
208
- ctrlqb, ctrlvar, trgtqb, trgtvar = self._seperate_ctrl_trgt(node)
211
+ _, ctrlvar, trgtqb, trgtvar = self._seperate_ctrl_trgt(node)
209
212
 
210
213
  ctrl_ones = z3.And(*ctrlvar)
211
214
 
212
- remove_ctrl, new_dag, qb_idx = self._remove_control(gate, ctrlvar, trgtvar)
215
+ remove_ctrl, new_dag, _ = self._remove_control(gate, ctrlvar, trgtvar)
213
216
 
214
217
  if remove_ctrl:
215
- dag.substitute_node_with_dag(node, new_dag)
216
- gate = gate.base_gate
217
- node.op = gate.to_mutable()
218
- node.name = gate.name
219
- node.qargs = tuple((ctrlqb + trgtqb)[qi] for qi in qb_idx)
218
+ # We are replacing a node by a new node over a smaller number of qubits.
219
+ # This can be done using substitute_node_with_dag, which furthermore returns
220
+ # a mapping from old node ids to new nodes.
221
+ mapped_nodes = dag.substitute_node_with_dag(node, new_dag)
222
+ node = next(iter(mapped_nodes.values()))
223
+ gate = node.op
220
224
  _, ctrlvar, trgtqb, trgtvar = self._seperate_ctrl_trgt(node)
221
225
 
222
226
  ctrl_ones = z3.And(*ctrlvar)
@@ -9,8 +9,8 @@
9
9
  # Any modifications or derivative works of this code must retain this
10
10
  # copyright notice, and modified files need to carry a notice indicating
11
11
  # that they have been altered from the originals.
12
+
12
13
  """Splits each two-qubit gate in the `dag` into two single-qubit gates, if possible without error."""
13
- from typing import Optional
14
14
 
15
15
  from qiskit.transpiler.basepasses import TransformationPass
16
16
  from qiskit.circuit.quantumcircuitdata import CircuitInstruction
@@ -20,37 +20,33 @@ from qiskit.synthesis.two_qubit.two_qubit_decompose import TwoQubitWeylDecomposi
20
20
 
21
21
 
22
22
  class Split2QUnitaries(TransformationPass):
23
- """Attempt to splits two-qubit gates in a :class:`.DAGCircuit` into two single-qubit gates
23
+ """Attempt to splits two-qubit unitaries in a :class:`.DAGCircuit` into two single-qubit gates.
24
24
 
25
- This pass will analyze all the two qubit gates in the circuit and analyze the gate's unitary
26
- matrix to determine if the gate is actually a product of 2 single qubit gates. In these
27
- cases the 2q gate can be simplified into two single qubit gates and this pass will
28
- perform this optimization and will replace the two qubit gate with two single qubit
29
- :class:`.UnitaryGate`.
25
+ This pass will analyze all :class:`.UnitaryGate` instances and determine whether the
26
+ matrix is actually a product of 2 single qubit gates. In these cases the 2q gate can be
27
+ simplified into two single qubit gates and this pass will perform this optimization and will
28
+ replace the two qubit gate with two single qubit :class:`.UnitaryGate`.
30
29
  """
31
30
 
32
- def __init__(self, fidelity: Optional[float] = 1.0 - 1e-16):
33
- """Split2QUnitaries initializer.
34
-
31
+ def __init__(self, fidelity: float = 1.0 - 1e-16):
32
+ """
35
33
  Args:
36
- fidelity (float): Allowed tolerance for splitting two-qubit unitaries and gate decompositions
34
+ fidelity: Allowed tolerance for splitting two-qubit unitaries and gate decompositions.
37
35
  """
38
36
  super().__init__()
39
37
  self.requested_fidelity = fidelity
40
38
 
41
- def run(self, dag: DAGCircuit):
39
+ def run(self, dag: DAGCircuit) -> DAGCircuit:
42
40
  """Run the Split2QUnitaries pass on `dag`."""
41
+
43
42
  for node in dag.topological_op_nodes():
44
- # skip operations without two-qubits and for which we can not determine a potential 1q split
45
- if (
46
- len(node.cargs) > 0
47
- or len(node.qargs) != 2
48
- or node.matrix is None
49
- or node.is_parameterized()
50
- ):
43
+ # We only attempt to split UnitaryGate objects, but this could be extended in future
44
+ # -- however we need to ensure that we can compile the resulting single-qubit unitaries
45
+ # to the supported basis gate set.
46
+ if not (len(node.qargs) == 2 and node.op.name == "unitary"):
51
47
  continue
52
48
 
53
- decomp = TwoQubitWeylDecomposition(node.op, fidelity=self.requested_fidelity)
49
+ decomp = TwoQubitWeylDecomposition(node.matrix, fidelity=self.requested_fidelity)
54
50
  if (
55
51
  decomp._inner_decomposition.specialization
56
52
  == TwoQubitWeylDecomposition._specializations.IdEquiv
@@ -343,6 +343,7 @@ def generate_preset_pass_manager(
343
343
  # Parse non-target dependent pm options
344
344
  initial_layout = _parse_initial_layout(initial_layout)
345
345
  approximation_degree = _parse_approximation_degree(approximation_degree)
346
+ seed_transpiler = _parse_seed_transpiler(seed_transpiler)
346
347
 
347
348
  pm_options = {
348
349
  "target": target,
@@ -516,3 +517,11 @@ def _parse_approximation_degree(approximation_degree):
516
517
  if approximation_degree < 0.0 or approximation_degree > 1.0:
517
518
  raise TranspilerError("Approximation degree must be in [0.0, 1.0]")
518
519
  return approximation_degree
520
+
521
+
522
+ def _parse_seed_transpiler(seed_transpiler):
523
+ if seed_transpiler is None:
524
+ return None
525
+ if not isinstance(seed_transpiler, int) or seed_transpiler < 0:
526
+ raise ValueError("Expected non-negative integer as seed for transpiler.")
527
+ return seed_transpiler
qiskit/utils/optionals.py CHANGED
@@ -25,172 +25,195 @@ Available Testers
25
25
  Qiskit Components
26
26
  -----------------
27
27
 
28
- .. list-table::
29
- :widths: 25 75
28
+ .. py:data:: HAS_AER
30
29
 
31
- * - .. py:data:: HAS_AER
32
- - `Qiskit Aer <https://qiskit.github.io/qiskit-aer/>` provides high-performance simulators for
33
- the quantum circuits constructed within Qiskit.
30
+ `Qiskit Aer <https://qiskit.github.io/qiskit-aer/>` provides high-performance simulators for
31
+ the quantum circuits constructed within Qiskit.
34
32
 
35
- * - .. py:data:: HAS_IBMQ
36
- - The :mod:`Qiskit IBMQ Provider <qiskit.providers.ibmq>` is used for accessing IBM Quantum
37
- hardware in the IBM cloud.
33
+ .. py:data:: HAS_IBMQ
38
34
 
39
- * - .. py:data:: HAS_IGNIS
40
- - :mod:`Qiskit Ignis <qiskit.ignis>` provides tools for quantum hardware verification, noise
41
- characterization, and error correction.
35
+ The :mod:`Qiskit IBMQ Provider <qiskit.providers.ibmq>` is used for accessing IBM Quantum
36
+ hardware in the IBM cloud.
42
37
 
43
- * - .. py:data:: HAS_TOQM
44
- - `Qiskit TOQM <https://github.com/qiskit-toqm/qiskit-toqm>`__ provides transpiler passes
45
- for the `Time-optimal Qubit mapping algorithm <https://doi.org/10.1145/3445814.3446706>`__.
38
+ .. py:data:: HAS_IGNIS
39
+
40
+ :mod:`Qiskit Ignis <qiskit.ignis>` provides tools for quantum hardware verification, noise
41
+ characterization, and error correction.
42
+
43
+ .. py:data:: HAS_TOQM
44
+
45
+ `Qiskit TOQM <https://github.com/qiskit-toqm/qiskit-toqm>`__ provides transpiler passes
46
+ for the `Time-optimal Qubit mapping algorithm <https://doi.org/10.1145/3445814.3446706>`__.
46
47
 
47
48
 
48
49
  External Python Libraries
49
50
  -------------------------
50
51
 
51
- .. list-table::
52
- :widths: 25 75
53
-
54
- * - .. py:data:: HAS_CONSTRAINT
55
- - `python-constraint <https://github.com/python-constraint/python-constraint>`__ is a
56
- constraint satisfaction problem solver, used in the :class:`~.CSPLayout` transpiler pass.
57
-
58
- * - .. py:data:: HAS_CPLEX
59
- - The `IBM CPLEX Optimizer <https://www.ibm.com/analytics/cplex-optimizer>`__ is a
60
- high-performance mathematical programming solver for linear, mixed-integer and quadratic
61
- programming. This is no longer by Qiskit, but it weas historically and the optional
62
- remains for backwards compatibility.
63
-
64
- * - .. py:data:: HAS_CVXPY
65
- - `CVXPY <https://www.cvxpy.org/>`__ is a Python package for solving convex optimization
66
- problems. It is required for calculating diamond norms with
67
- :func:`.quantum_info.diamond_norm`.
68
-
69
- * - .. py:data:: HAS_DOCPLEX
70
- - `IBM Decision Optimization CPLEX Modelling
71
- <http://ibmdecisionoptimization.github.io/docplex-doc/>`__ is a library for prescriptive
72
- analysis. Like CPLEX, this is no longer by Qiskit, but it weas historically and the
73
- optional remains for backwards compatibility.
74
-
75
- * - .. py:data:: HAS_FIXTURES
76
- - The test suite has additional features that are available if the optional `fixtures
77
- <https://launchpad.net/python-fixtures>`__ module is installed. This generally also needs
78
- :data:`HAS_TESTTOOLS` as well. This is generally only needed for Qiskit developers.
79
-
80
- * - .. py:data:: HAS_IPYTHON
81
- - If `the IPython kernel <https://ipython.org/>`__ is available, certain additional
82
- visualizations and line magics are made available.
83
-
84
- * - .. py:data:: HAS_IPYWIDGETS
85
- - Monitoring widgets for jobs running on external backends can be provided if `ipywidgets
86
- <https://ipywidgets.readthedocs.io/en/latest/>`__ is available.
87
-
88
- * - .. py:data:: HAS_JAX
89
- - Some methods of gradient calculation within :mod:`.opflow.gradients` require `JAX
90
- <https://github.com/google/jax>`__ for autodifferentiation.
91
-
92
- * - .. py:data:: HAS_JUPYTER
93
- - Some of the tests require a complete `Jupyter <https://jupyter.org/>`__ installation to test
94
- interactivity features.
95
-
96
- * - .. py:data:: HAS_MATPLOTLIB
97
- - Qiskit provides several visualization tools in the :mod:`.visualization` module.
98
- Almost all of these are built using `Matplotlib <https://matplotlib.org/>`__, which must
99
- be installed in order to use them.
100
-
101
- * - .. py:data:: HAS_NETWORKX
102
- - No longer used by Qiskit. Internally, Qiskit now uses the high-performance `rustworkx
103
- <https://github.com/Qiskit/rustworkx>`__ library as a core dependency, and during the
104
- change-over period, it was sometimes convenient to convert things into the Python-only
105
- `NetworkX <https://networkx.org/>`__ format. Some tests of application modules, such as
106
- `Qiskit Nature <https://qiskit-community.github.io/qiskit-nature/>`__ still use NetworkX.
107
-
108
- * - .. py:data:: HAS_NLOPT
109
- - `NLopt <https://nlopt.readthedocs.io/en/latest/>`__ is a nonlinear optimization library,
110
- used by the global optimizers in the :mod:`.algorithms.optimizers` module.
111
-
112
- * - .. py:data:: HAS_PIL
113
- - PIL is a Python image-manipulation library. Qiskit actually uses the `pillow
114
- <https://pillow.readthedocs.io/en/stable/>`__ fork of PIL if it is available when generating
115
- certain visualizations, for example of both :class:`.QuantumCircuit` and
116
- :class:`.DAGCircuit` in certain modes.
117
-
118
- * - .. py:data:: HAS_PYDOT
119
- - For some graph visualizations, Qiskit uses `pydot <https://github.com/pydot/pydot>`__ as an
120
- interface to GraphViz (see :data:`HAS_GRAPHVIZ`).
121
-
122
- * - .. py:data:: HAS_PYGMENTS
123
- - Pygments is a code highlighter and formatter used by many environments that involve rich
124
- display of code blocks, including Sphinx and Jupyter. Qiskit uses this when producing rich
125
- output for these environments.
126
-
127
- * - .. py:data:: HAS_PYLATEX
128
- - Various LaTeX-based visualizations, especially the circuit drawers, need access to the
129
- `pylatexenc <https://github.com/phfaist/pylatexenc>`__ project to work correctly.
130
-
131
- * - .. py:data:: HAS_QASM3_IMPORT
132
- - The functions :func:`.qasm3.load` and :func:`.qasm3.loads` for importing OpenQASM 3 programs
133
- into :class:`.QuantumCircuit` instances use `an external importer package
134
- <https://qiskit.github.io/qiskit-qasm3-import>`__.
135
-
136
- * - .. py:data:: HAS_SEABORN
137
- - Qiskit provides several visualization tools in the :mod:`.visualization` module. Some
138
- of these are built using `Seaborn <https://seaborn.pydata.org/>`__, which must be installed
139
- in order to use them.
140
-
141
- * - .. py:data:: HAS_SKLEARN
142
- - Some of the gradient functions in :mod:`.opflow.gradients` use regularisation methods from
143
- `Scikit Learn <https://scikit-learn.org/stable/>`__.
144
-
145
- * - .. py:data:: HAS_SKQUANT
146
- - Some of the optimisers in :mod:`.algorithms.optimizers` are based on those found in `Scikit
147
- Quant <https://github.com/scikit-quant/scikit-quant>`__, which must be installed to use
148
- them.
149
-
150
- * - .. py:data:: HAS_SQSNOBFIT
151
- - `SQSnobFit <https://pypi.org/project/SQSnobFit/>`__ is a library for the "stable noisy
152
- optimization by branch and fit" algorithm. It is used by the :class:`.SNOBFIT` optimizer.
153
-
154
- * - .. py:data:: HAS_SYMENGINE
155
- - `Symengine <https://github.com/symengine/symengine>`__ is a fast C++ backend for the
156
- symbolic-manipulation library `Sympy <https://www.sympy.org/en/index.html>`__. Qiskit uses
157
- special methods from Symengine to accelerate its handling of
158
- :class:`~.circuit.Parameter`\\ s if available.
159
-
160
- * - .. py:data:: HAS_TESTTOOLS
161
- - Qiskit's test suite has more advanced functionality available if the optional
162
- `testtools <https://pypi.org/project/testtools/>`__ library is installed. This is generally
163
- only needed for Qiskit developers.
164
-
165
- * - .. py:data:: HAS_TWEEDLEDUM
166
- - `Tweedledum <https://github.com/boschmitt/tweedledum>`__ is an extension library for
167
- synthesis and optimization of circuits that may involve classical oracles. Qiskit's
168
- :class:`.PhaseOracle` uses this, which is used in turn by amplification algorithms via
169
- the :class:`.AmplificationProblem`.
170
-
171
- * - .. py:data:: HAS_Z3
172
- - `Z3 <https://github.com/Z3Prover/z3>`__ is a theorem prover, used in the
173
- :class:`.CrosstalkAdaptiveSchedule` and :class:`.HoareOptimizer` transpiler passes.
52
+ .. py:data:: HAS_CONSTRAINT
53
+
54
+ `python-constraint <https://github.com/python-constraint/python-constraint>`__ is a
55
+ constraint satisfaction problem solver, used in the :class:`~.CSPLayout` transpiler pass.
56
+
57
+ .. py:data:: HAS_CPLEX
58
+
59
+ The `IBM CPLEX Optimizer <https://www.ibm.com/analytics/cplex-optimizer>`__ is a
60
+ high-performance mathematical programming solver for linear, mixed-integer and quadratic
61
+ programming. This is no longer by Qiskit, but it weas historically and the optional
62
+ remains for backwards compatibility.
63
+
64
+ .. py:data:: HAS_CVXPY
65
+
66
+ `CVXPY <https://www.cvxpy.org/>`__ is a Python package for solving convex optimization
67
+ problems. It is required for calculating diamond norms with
68
+ :func:`.quantum_info.diamond_norm`.
69
+
70
+ .. py:data:: HAS_DOCPLEX
71
+
72
+ `IBM Decision Optimization CPLEX Modelling
73
+ <http://ibmdecisionoptimization.github.io/docplex-doc/>`__ is a library for prescriptive
74
+ analysis. Like CPLEX, this is no longer by Qiskit, but it weas historically and the
75
+ optional remains for backwards compatibility.
76
+
77
+ .. py:data:: HAS_FIXTURES
78
+
79
+ The test suite has additional features that are available if the optional `fixtures
80
+ <https://launchpad.net/python-fixtures>`__ module is installed. This generally also needs
81
+ :data:`HAS_TESTTOOLS` as well. This is generally only needed for Qiskit developers.
82
+
83
+ .. py:data:: HAS_IPYTHON
84
+
85
+ If `the IPython kernel <https://ipython.org/>`__ is available, certain additional
86
+ visualizations and line magics are made available.
87
+
88
+ .. py:data:: HAS_IPYWIDGETS
89
+
90
+ Monitoring widgets for jobs running on external backends can be provided if `ipywidgets
91
+ <https://ipywidgets.readthedocs.io/en/latest/>`__ is available.
92
+
93
+ .. py:data:: HAS_JAX
94
+
95
+ Some methods of gradient calculation within :mod:`.opflow.gradients` require `JAX
96
+ <https://github.com/google/jax>`__ for autodifferentiation.
97
+
98
+ .. py:data:: HAS_JUPYTER
99
+
100
+ Some of the tests require a complete `Jupyter <https://jupyter.org/>`__ installation to test
101
+ interactivity features.
102
+
103
+ .. py:data:: HAS_MATPLOTLIB
104
+
105
+ Qiskit provides several visualization tools in the :mod:`.visualization` module.
106
+ Almost all of these are built using `Matplotlib <https://matplotlib.org/>`__, which must
107
+ be installed in order to use them.
108
+
109
+ .. py:data:: HAS_NETWORKX
110
+
111
+ No longer used by Qiskit. Internally, Qiskit now uses the high-performance `rustworkx
112
+ <https://github.com/Qiskit/rustworkx>`__ library as a core dependency, and during the
113
+ change-over period, it was sometimes convenient to convert things into the Python-only
114
+ `NetworkX <https://networkx.org/>`__ format. Some tests of application modules, such as
115
+ `Qiskit Nature <https://qiskit-community.github.io/qiskit-nature/>`__ still use NetworkX.
116
+
117
+ .. py:data:: HAS_NLOPT
118
+
119
+ `NLopt <https://nlopt.readthedocs.io/en/latest/>`__ is a nonlinear optimization library,
120
+ used by the global optimizers in the :mod:`.algorithms.optimizers` module.
121
+
122
+ .. py:data:: HAS_PIL
123
+
124
+ PIL is a Python image-manipulation library. Qiskit actually uses the `pillow
125
+ <https://pillow.readthedocs.io/en/stable/>`__ fork of PIL if it is available when generating
126
+ certain visualizations, for example of both :class:`.QuantumCircuit` and
127
+ :class:`.DAGCircuit` in certain modes.
128
+
129
+ .. py:data:: HAS_PYDOT
130
+
131
+ For some graph visualizations, Qiskit uses `pydot <https://github.com/pydot/pydot>`__ as an
132
+ interface to GraphViz (see :data:`HAS_GRAPHVIZ`).
133
+
134
+ .. py:data:: HAS_PYGMENTS
135
+
136
+ Pygments is a code highlighter and formatter used by many environments that involve rich
137
+ display of code blocks, including Sphinx and Jupyter. Qiskit uses this when producing rich
138
+ output for these environments.
139
+
140
+ .. py:data:: HAS_PYLATEX
141
+
142
+ Various LaTeX-based visualizations, especially the circuit drawers, need access to the
143
+ `pylatexenc <https://github.com/phfaist/pylatexenc>`__ project to work correctly.
144
+
145
+ .. py:data:: HAS_QASM3_IMPORT
146
+
147
+ The functions :func:`.qasm3.load` and :func:`.qasm3.loads` for importing OpenQASM 3 programs
148
+ into :class:`.QuantumCircuit` instances use `an external importer package
149
+ <https://qiskit.github.io/qiskit-qasm3-import>`__.
150
+
151
+ .. py:data:: HAS_SEABORN
152
+
153
+ Qiskit provides several visualization tools in the :mod:`.visualization` module. Some
154
+ of these are built using `Seaborn <https://seaborn.pydata.org/>`__, which must be installed
155
+ in order to use them.
156
+
157
+ .. py:data:: HAS_SKLEARN
158
+
159
+ Some of the gradient functions in :mod:`.opflow.gradients` use regularisation methods from
160
+ `Scikit Learn <https://scikit-learn.org/stable/>`__.
161
+
162
+ .. py:data:: HAS_SKQUANT
163
+
164
+ Some of the optimisers in :mod:`.algorithms.optimizers` are based on those found in `Scikit
165
+ Quant <https://github.com/scikit-quant/scikit-quant>`__, which must be installed to use
166
+ them.
167
+
168
+ .. py:data:: HAS_SQSNOBFIT
169
+
170
+ `SQSnobFit <https://pypi.org/project/SQSnobFit/>`__ is a library for the "stable noisy
171
+ optimization by branch and fit" algorithm. It is used by the :class:`.SNOBFIT` optimizer.
172
+
173
+ .. py:data:: HAS_SYMENGINE
174
+
175
+ `Symengine <https://github.com/symengine/symengine>`__ is a fast C++ backend for the
176
+ symbolic-manipulation library `Sympy <https://www.sympy.org/en/index.html>`__. Qiskit uses
177
+ special methods from Symengine to accelerate its handling of
178
+ :class:`~.circuit.Parameter`\\ s if available.
179
+
180
+ .. py:data:: HAS_TESTTOOLS
181
+
182
+ Qiskit's test suite has more advanced functionality available if the optional
183
+ `testtools <https://pypi.org/project/testtools/>`__ library is installed. This is generally
184
+ only needed for Qiskit developers.
185
+
186
+ .. py:data:: HAS_TWEEDLEDUM
187
+
188
+ `Tweedledum <https://github.com/boschmitt/tweedledum>`__ is an extension library for
189
+ synthesis and optimization of circuits that may involve classical oracles. Qiskit's
190
+ :class:`.PhaseOracle` uses this, which is used in turn by amplification algorithms via
191
+ the :class:`.AmplificationProblem`.
192
+
193
+ .. py:data:: HAS_Z3
194
+
195
+ `Z3 <https://github.com/Z3Prover/z3>`__ is a theorem prover, used in the
196
+ :class:`.CrosstalkAdaptiveSchedule` and :class:`.HoareOptimizer` transpiler passes.
174
197
 
175
198
  External Command-Line Tools
176
199
  ---------------------------
177
200
 
178
- .. list-table::
179
- :widths: 25 75
201
+ .. py:data:: HAS_GRAPHVIZ
202
+
203
+ For some graph visualizations, Qiskit uses the `GraphViz <https://graphviz.org/>`__
204
+ visualization tool via its ``pydot`` interface (see :data:`HAS_PYDOT`).
205
+
206
+ .. py:data:: HAS_PDFLATEX
180
207
 
181
- * - .. py:data:: HAS_GRAPHVIZ
182
- - For some graph visualizations, Qiskit uses the `GraphViz <https://graphviz.org/>`__
183
- visualization tool via its ``pydot`` interface (see :data:`HAS_PYDOT`).
208
+ Visualization tools that use LaTeX in their output, such as the circuit drawers, require
209
+ ``pdflatex`` to be available. You will generally need to ensure that you have a working
210
+ LaTeX installation available, and the ``qcircuit.tex`` package.
184
211
 
185
- * - .. py:data:: HAS_PDFLATEX
186
- - Visualization tools that use LaTeX in their output, such as the circuit drawers, require
187
- ``pdflatex`` to be available. You will generally need to ensure that you have a working
188
- LaTeX installation available, and the ``qcircuit.tex`` package.
212
+ .. py:data:: HAS_PDFTOCAIRO
189
213
 
190
- * - .. py:data:: HAS_PDFTOCAIRO
191
- - Visualization tools that convert LaTeX-generated files into rasterized images use the
192
- ``pdftocairo`` tool. This is part of the `Poppler suite of PDF tools
193
- <https://poppler.freedesktop.org/>`__.
214
+ Visualization tools that convert LaTeX-generated files into rasterized images use the
215
+ ``pdftocairo`` tool. This is part of the `Poppler suite of PDF tools
216
+ <https://poppler.freedesktop.org/>`__.
194
217
 
195
218
 
196
219
  Lazy Checker Classes
@@ -945,6 +945,7 @@ def plot_gate_map(
945
945
  font_color,
946
946
  ax,
947
947
  filename,
948
+ planar=rx.is_planar(coupling_map.graph.to_undirected(multigraph=False)),
948
949
  )
949
950
 
950
951
 
@@ -966,6 +967,8 @@ def plot_coupling_map(
966
967
  font_color="white",
967
968
  ax=None,
968
969
  filename=None,
970
+ *,
971
+ planar=True,
969
972
  ):
970
973
  """Plots an arbitrary coupling map of qubits (embedded in a plane).
971
974
 
@@ -987,6 +990,7 @@ def plot_coupling_map(
987
990
  font_color (str): The font color for the qubit labels.
988
991
  ax (Axes): A Matplotlib axes instance.
989
992
  filename (str): file path to save image to.
993
+ planar (bool): If the coupling map is planar or not. Default: ``True`` (i.e. it is planar)
990
994
 
991
995
  Returns:
992
996
  Figure: A Matplotlib figure instance.
@@ -1057,7 +1061,14 @@ def plot_coupling_map(
1057
1061
 
1058
1062
  if font_size is None:
1059
1063
  max_characters = max(1, max(len(str(x)) for x in qubit_labels))
1060
- font_size = max(int(20 / max_characters), 1)
1064
+ if max_characters == 1:
1065
+ font_size = 20
1066
+ elif max_characters == 2:
1067
+ font_size = 14
1068
+ elif max_characters == 3:
1069
+ font_size = 12
1070
+ else:
1071
+ font_size = 1
1061
1072
 
1062
1073
  def color_node(node):
1063
1074
  if qubit_coordinates:
@@ -1065,8 +1076,6 @@ def plot_coupling_map(
1065
1076
  "label": str(qubit_labels[node]),
1066
1077
  "color": f'"{qubit_color[node]}"',
1067
1078
  "fillcolor": f'"{qubit_color[node]}"',
1068
- "style": "filled",
1069
- "shape": "circle",
1070
1079
  "pos": f'"{qubit_coordinates[node][0]},{qubit_coordinates[node][1]}"',
1071
1080
  "pin": "True",
1072
1081
  }
@@ -1075,11 +1084,11 @@ def plot_coupling_map(
1075
1084
  "label": str(qubit_labels[node]),
1076
1085
  "color": f'"{qubit_color[node]}"',
1077
1086
  "fillcolor": f'"{qubit_color[node]}"',
1078
- "style": "filled",
1079
- "shape": "circle",
1080
1087
  }
1088
+ out_dict["style"] = "filled"
1089
+ out_dict["shape"] = "circle"
1081
1090
  out_dict["fontcolor"] = f'"{font_color}"'
1082
- out_dict["fontsize"] = str(font_size)
1091
+ out_dict["fontsize"] = f'"{str(font_size)}!"'
1083
1092
  out_dict["height"] = str(qubit_size * px)
1084
1093
  out_dict["fixedsize"] = "True"
1085
1094
  out_dict["fontname"] = '"DejaVu Sans"'
@@ -1093,9 +1102,22 @@ def plot_coupling_map(
1093
1102
  }
1094
1103
  return out_dict
1095
1104
 
1105
+ graph_attributes = None
1106
+ if not qubit_coordinates:
1107
+ if planar:
1108
+ graph_attributes = {
1109
+ "overlap_scaling": "-7",
1110
+ "overlap": "prism",
1111
+ "model": "subset",
1112
+ }
1113
+ else:
1114
+ graph_attributes = {
1115
+ "overlap": "true",
1116
+ }
1096
1117
  plot = graphviz_draw(
1097
1118
  graph,
1098
1119
  method="neato",
1120
+ graph_attr=graph_attributes,
1099
1121
  node_attr_fn=color_node,
1100
1122
  edge_attr_fn=color_edge,
1101
1123
  filename=filename,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qiskit
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: An open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
5
5
  Author-email: Qiskit Development Team <qiskit@us.ibm.com>
6
6
  License: Apache 2.0
@@ -1,6 +1,6 @@
1
- qiskit/VERSION.txt,sha256=pkcIsBDivPYoFU3cIF7UloimNH75OmakJJJDD2PwIbE,7
1
+ qiskit/VERSION.txt,sha256=18XwW49QnmHLtUgD6V3t9bMor4HNVFb3VU-ymQ-RrM4,7
2
2
  qiskit/__init__.py,sha256=bxCfTQyH6qfT6E-R4FTfP2ovP3F3qz0fVid6TeRHT5A,5540
3
- qiskit/_accelerate.pyd,sha256=Vr7tC5Llkj3My_RiWrxAyG_sMqn_jgzs5z7e6Cpi43s,4675584
3
+ qiskit/_accelerate.pyd,sha256=aF-zLwTl0X1Pv8L2nSrA3j5Ao93VI3XGchz5gtDvIzU,4726784
4
4
  qiskit/_numpy_compat.py,sha256=EV1RihNRJnvWzjb57z8sjMbv9EeRPzk8Mnegzw7ItR0,2888
5
5
  qiskit/exceptions.py,sha256=UamBNQmDJTx6ruzmj7iXgcsrBcvkfE-bZ4TH2-K_ngw,5772
6
6
  qiskit/user_config.py,sha256=IKxY7cK1EX-GqkvPE4Lsss1NMoEcYie6Qq8hkNOtLJA,10371
@@ -10,7 +10,7 @@ qiskit/assembler/assemble_circuits.py,sha256=slVUA-BKYYI1pfDzqIZIJyfbgi9FDqaL92B
10
10
  qiskit/assembler/assemble_schedules.py,sha256=tQ2FytodUcNPA-WeJltCpcnhmDODLNOAWKRK2nYUuCE,15802
11
11
  qiskit/assembler/disassemble.py,sha256=2OJSlfQolQHSLtteyg7CAibkFZH6BKx6Wy6c8J6ku9E,12940
12
12
  qiskit/assembler/run_config.py,sha256=xVw70UASYS5jGtac6mSK6iKCkAzn3Nux6rksbZ2eC6E,2538
13
- qiskit/circuit/__init__.py,sha256=CVfHZy1dyDls2AjUfF7PHiCs3rwqfNKiiIfPyNsB7H0,59910
13
+ qiskit/circuit/__init__.py,sha256=xfqfyqWJpfYczjKUK9PukGFXo226Y6_ymiYk376PMGg,60222
14
14
  qiskit/circuit/_classical_resource_map.py,sha256=HhScd6Mjs74JEOXstQUTDicY9o74RM_B6EjnbrZeho8,7130
15
15
  qiskit/circuit/_standard_gates_commutations.py,sha256=Y9S2xI_SNSJ3OMiZQl7qRe5HsFeNK0M28coATKJ4-UQ,89014
16
16
  qiskit/circuit/_utils.py,sha256=MxIpuBs6ZsdfMDxT6ZCFgskp_32FbK7zVHp7sxmzoCQ,6614
@@ -36,7 +36,7 @@ qiskit/circuit/parameter.py,sha256=WGCSyYDKUwKbZ3QTKF1b-D7MCpeIPb-QtdgB-Lmvfa8,7
36
36
  qiskit/circuit/parameterexpression.py,sha256=JrYj1fO0_UX0fGYwo0u9CumAbjEdORGXeZFml0vGG-A,23887
37
37
  qiskit/circuit/parametertable.py,sha256=4u7EuKAiVskcnWQW8dnfU8jgYKZ92KdH2g6PeTvvjjA,3388
38
38
  qiskit/circuit/parametervector.py,sha256=S92WSzf6lWh7Ay-Y6eAbsm6jxa18D7nu9WaetE9B6Uc,3961
39
- qiskit/circuit/quantumcircuit.py,sha256=5X3_bQ6nQ6tYkbS-0c-j0h32vMWDJTdtVJHV-9W7RWw,298956
39
+ qiskit/circuit/quantumcircuit.py,sha256=s9OoiL99ZtEqxVDW3VxL10Jbh2sGsalZAUGT5iCED-U,299738
40
40
  qiskit/circuit/quantumcircuitdata.py,sha256=mxiyRI9l9dUFfR1t73jzu1mQAzSz6y_cGicmXZBqPJA,5014
41
41
  qiskit/circuit/quantumregister.py,sha256=rtMf7QyEQ_Jyam-KrFFj5pl6BX3DBiHzdGZCAcoVbLU,2107
42
42
  qiskit/circuit/register.py,sha256=sDUEGJnKfQLzJq3OzdgctOpqm1jAlSOZKjw4ngcIhVo,8652
@@ -104,16 +104,16 @@ qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py,sha25
104
104
  qiskit/circuit/library/arithmetic/multipliers/multiplier.py,sha256=_ziEZIzQ9fpIz2KsVtK_bnyA4ADLkVSeRInj1vVCsuY,3696
105
105
  qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py,sha256=bCevaG_0jViq0XhB-He0nJabXxXtRDWW45E-2UuESvU,5962
106
106
  qiskit/circuit/library/basis_change/__init__.py,sha256=NPfRl5EZurnELm_5BPwT48YWRAta2naePDbCvSDTSBk,563
107
- qiskit/circuit/library/basis_change/qft.py,sha256=lCi23pwg60Fy7h0IEWSh0MpplU2dmq9Zf2TUZh2qiGY,11974
107
+ qiskit/circuit/library/basis_change/qft.py,sha256=AhAxaUVqpjEF_wJxv00OjGVl1-CynY0ccz-OaJ25aRE,12103
108
108
  qiskit/circuit/library/boolean_logic/__init__.py,sha256=6OyJMBzP4MYigWUsLEP0X3N63PBr0PbW7czTmBPQbis,663
109
109
  qiskit/circuit/library/boolean_logic/inner_product.py,sha256=HJHPKZRAgDg4XamPpgUCAgSz1CKUORYW5_qPqtzuY4U,2755
110
110
  qiskit/circuit/library/boolean_logic/quantum_and.py,sha256=WIBDocbq4g3m_bCXPYypzzSVEosE_TwdgYVa0JC6UQw,4042
111
111
  qiskit/circuit/library/boolean_logic/quantum_or.py,sha256=TPuBnFFTq73iirb4NG10O96nVUHyeaXrh0V1fFdUKc4,3994
112
112
  qiskit/circuit/library/boolean_logic/quantum_xor.py,sha256=EfSMyh-6bRWdPybhllHu3DTGDPkqdvoBbn9ta023xnI,2382
113
113
  qiskit/circuit/library/data_preparation/__init__.py,sha256=J8HS50haQ7cpRYQynFqyQ4fXZXagkmd6Nd2BXcQTxmI,2390
114
- qiskit/circuit/library/data_preparation/initializer.py,sha256=Z_r9qWdMC2_cyKpZOyZ9D6S6zjFNaVbZd76NF1t76TU,4446
114
+ qiskit/circuit/library/data_preparation/initializer.py,sha256=tUThlYQJfWobXv6eTIcuPaQETRZ5CKbPIDTKFYHrFS8,4560
115
115
  qiskit/circuit/library/data_preparation/pauli_feature_map.py,sha256=no7p1BZQO57kdjkZK42j-Rv1yg4yYlFKjPRBliLDGbA,12901
116
- qiskit/circuit/library/data_preparation/state_preparation.py,sha256=gthdSEZB6zAbaU3irnl8iH_mxrybjIXC6xmU1RcFRD8,14459
116
+ qiskit/circuit/library/data_preparation/state_preparation.py,sha256=cw272QeVmgGFvtHo0sAJDVxmLeVMD-tXJewRB6bHGj8,14486
117
117
  qiskit/circuit/library/data_preparation/z_feature_map.py,sha256=Fgf0b9JcIJOjswC8Ov0ozDH3fd25-iMu_HiuQjhUxSM,6451
118
118
  qiskit/circuit/library/data_preparation/zz_feature_map.py,sha256=vVXgWdrdowqK_-Y0Dbf00dLiniIP0hgcs0whvTWHkQk,6523
119
119
  qiskit/circuit/library/generalized_gates/__init__.py,sha256=iFsOivQreWwDpJgpfl0elN63cffOMPbpjW877ceMmlI,1114
@@ -142,7 +142,7 @@ qiskit/circuit/library/n_local/pauli_two_design.py,sha256=_yBRALN_hIlGyo6AqNVLc4
142
142
  qiskit/circuit/library/n_local/qaoa_ansatz.py,sha256=_aG8sX3ZYh-SHscYDU3TZE4SA5aCkIkBAJ29xQT8QJ0,11558
143
143
  qiskit/circuit/library/n_local/real_amplitudes.py,sha256=XhmlA9TUnhIzapzK0b9_3re-RMKUKbO_SvADcIaGN4s,14316
144
144
  qiskit/circuit/library/n_local/two_local.py,sha256=zH57XPcgVyZvSf40I_4jE7-KtzRocQr7EyI-pEo1HQc,17025
145
- qiskit/circuit/library/standard_gates/__init__.py,sha256=gdy7ltiXjf-hYMtDoNRsk3LfCA5fnhGmoTy0pTzxhj0,3846
145
+ qiskit/circuit/library/standard_gates/__init__.py,sha256=3JCi25d7A0pOjnhSV_6VWN9HaDH6rfe-d8OYjnrwL1A,3651
146
146
  qiskit/circuit/library/standard_gates/dcx.py,sha256=hqM0YzrbnqS-9G5u9y0QXV61Gyc6cyHUVCEBgukdCMw,2589
147
147
  qiskit/circuit/library/standard_gates/ecr.py,sha256=dM3azs6omIXbzCHQj4pCOw8UXT5kX3sCCMLkVN8WaCc,4909
148
148
  qiskit/circuit/library/standard_gates/equivalence_library.py,sha256=Hj674zQXthUr14mV-txiyqNmcCdIOBtAFx7ndXkP_QE,74094
@@ -397,7 +397,7 @@ qiskit/pulse/instructions/snapshot.py,sha256=y8cxeA_Nsq1VgdmxT3_j33h3b1Useyh1o9c
397
397
  qiskit/pulse/library/__init__.py,sha256=aDqY8-8MGEyi5ABunPq-XkuC6pBhJ2I0TySJg1WDYb4,2970
398
398
  qiskit/pulse/library/continuous.py,sha256=kiaieQq0wXEW1OZwn0c4cKOoqiS5IAvr7APqGTHnVj4,15202
399
399
  qiskit/pulse/library/pulse.py,sha256=0-FDFsOL3f-rpYZmZsgZlNJVMViUAfH5wjnqC3HiGf8,5792
400
- qiskit/pulse/library/symbolic_pulses.py,sha256=vCxSNS0PLn5UbfOSqOZsMFLZJ6WeDxuZsG2HbAAq1Yc,79414
400
+ qiskit/pulse/library/symbolic_pulses.py,sha256=xmecb8HQSLCcCqyvW0bahDCY46uud8R1GoWHSmyCreI,79466
401
401
  qiskit/pulse/library/waveform.py,sha256=LgpMeJhcpgdVED-fsAlY51X2u0Dzv-Qx3Y4dSKiATD8,5287
402
402
  qiskit/pulse/library/samplers/__init__.py,sha256=wQw1gTW7dvsyrxklicIKMrsq8Kir-h7Ecp7E1SQhEqo,606
403
403
  qiskit/pulse/library/samplers/decorators.py,sha256=U8F7vjPj4g7YaM_0lJblBb1wnJ5KmD_ooYAWJ2LymgY,11774
@@ -452,7 +452,7 @@ qiskit/quantum_info/operators/custom_iterator.py,sha256=48lqzAPOn-Ud7welRwmwRL5g
452
452
  qiskit/quantum_info/operators/linear_op.py,sha256=f8LDoy88d0t5E58AllUDXCfHV6WGTN9od-FJxuTEDeY,836
453
453
  qiskit/quantum_info/operators/measures.py,sha256=t5Y7K-C--t9-6Kq5-rRPKAZyYZjmHZWgMPjeVtjIPEk,16465
454
454
  qiskit/quantum_info/operators/op_shape.py,sha256=c1pQFf9mW0PCoDilRaOCqlBySYlJ-kbyBJHTAnEbmMk,19720
455
- qiskit/quantum_info/operators/operator.py,sha256=TdnqoktCuRnMpGc2BqZb1qJxSXcDRbd3svOTRgDulQ4,32031
455
+ qiskit/quantum_info/operators/operator.py,sha256=YhrS5RnKgB-h5dbGj7Mz8d5s9QESb9MSNQNMQ_O_qqc,32966
456
456
  qiskit/quantum_info/operators/predicates.py,sha256=N0mthxvOsrPmIq0MjaQzEnixA6X6WTpCynOAZ8hTet8,6058
457
457
  qiskit/quantum_info/operators/random.py,sha256=8tkswigDimRYVJAGsf1_OoW_c0VnSemE3Wry4t4qmFA,5380
458
458
  qiskit/quantum_info/operators/scalar_op.py,sha256=WqvzXdIk7WrX4ukb8c-p7DID7SBNzv-Z3tBF5O0IcCg,9099
@@ -523,9 +523,9 @@ qiskit/scheduler/methods/basic.py,sha256=bVIvH3LB4OH-cdQL8qOIxMDS_uFGYE3ERczbVaY
523
523
  qiskit/synthesis/__init__.py,sha256=qSqOnZC9WxRs4Y6SAMSkdCyCvnY_amWfsypawvpIY1s,4453
524
524
  qiskit/synthesis/clifford/__init__.py,sha256=mTSeq6TJzv8AkUkgD_RkBIp1pHrUeXLKr1OFg-Ty8Fs,867
525
525
  qiskit/synthesis/clifford/clifford_decompose_ag.py,sha256=bqA4CdqySbTJxJ0OAFc26Ql9tIcJp549dONx7H1Mb8I,5878
526
- qiskit/synthesis/clifford/clifford_decompose_bm.py,sha256=8CWmJgP6HMa1C_wmPYrbz6IcWbKerVD_-rmKhPuzook,1622
526
+ qiskit/synthesis/clifford/clifford_decompose_bm.py,sha256=UNL-bquzsjAevLmEo4bUexvht-yawpkhHgbJzhRQddI,1637
527
527
  qiskit/synthesis/clifford/clifford_decompose_full.py,sha256=EhYtmgl_ET1uVp_56pDZ11rWHSmes8H7u0onuqQRuCY,2675
528
- qiskit/synthesis/clifford/clifford_decompose_greedy.py,sha256=815WOnmlPeSHVU4Zl4jlKLkcbeDDevx684nxA6FpI-w,2176
528
+ qiskit/synthesis/clifford/clifford_decompose_greedy.py,sha256=hUWEZk-wvVC1qG_SYeiDO_REP9egxSuqoOV_XjjNZFs,2191
529
529
  qiskit/synthesis/clifford/clifford_decompose_layers.py,sha256=p7F7L1Gvl06mDHo5N5sQOMCDqh18TjvwE6VxnE5x2kw,17629
530
530
  qiskit/synthesis/cnotdihedral/__init__.py,sha256=Y81B6k7LXelgfng91Gu2rqPHp0SXZ0UKoEQvKvBUHJc,772
531
531
  qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py,sha256=8lu2N6djriNJxZZ9TZqZsGE1YC0dxb7ixtLWcz9Klp4,2047
@@ -544,7 +544,7 @@ qiskit/synthesis/evolution/product_formula.py,sha256=aQgWk9PST4wmYC6HKH_oVZh6eRs
544
544
  qiskit/synthesis/evolution/qdrift.py,sha256=oVrQpri1U8cTwugOpMIK9efIvGBjbe_cucriM7qUfKg,5672
545
545
  qiskit/synthesis/evolution/suzuki_trotter.py,sha256=gSt8W0KF9pEFex8HhoYIorZCugBLvpG1kyjSkNjCz7w,6397
546
546
  qiskit/synthesis/linear/__init__.py,sha256=BHZdn101BWWiuT9XvWV9CC3Er4ZBvjiLfWv6jmuTymw,1036
547
- qiskit/synthesis/linear/cnot_synth.py,sha256=G8hVKXHI4v-OpJs1T-hfQv-8bqNs2hSicFPcrh7hbsk,2854
547
+ qiskit/synthesis/linear/cnot_synth.py,sha256=XWSEshsk23M71SG1xdP0-0JEItDdyTgWlW44JiORqqQ,2869
548
548
  qiskit/synthesis/linear/linear_circuits_utils.py,sha256=-msl7pPW9YDJr74f5n5C593-IlN0lUzXylUW1enjwzQ,4846
549
549
  qiskit/synthesis/linear/linear_depth_lnn.py,sha256=IDzFAofDwW52qy_btqyuvN9zdN-1FRVrefGl2aqr2mY,10411
550
550
  qiskit/synthesis/linear/linear_matrix_utils.py,sha256=zsmRzrJxBoEs1EzMOMKjHju7b-pCdt42CVn6Pi4eqo8,900
@@ -553,10 +553,10 @@ qiskit/synthesis/linear_phase/cnot_phase_synth.py,sha256=wHpaBI-v-pG_HMqwrN9pMOk
553
553
  qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py,sha256=uTY_IwCKuA_PDJMgvran7_118Ct5czMpgtb7SRInERs,9695
554
554
  qiskit/synthesis/linear_phase/cz_depth_lnn.py,sha256=uMZ0ZwZaxxsqHyMy1dRnH4mdPlMNgfo5sSRBbiHNQ04,6369
555
555
  qiskit/synthesis/one_qubit/__init__.py,sha256=omr9uaxkjdirX-mhGnhESZbrWjsLut3buDUyDDMQU3E,618
556
- qiskit/synthesis/one_qubit/one_qubit_decompose.py,sha256=Jpxdoacg2RU4DKc6poY7_vCT-qc8l6zeurQW-v4C28w,10599
556
+ qiskit/synthesis/one_qubit/one_qubit_decompose.py,sha256=N0BMa8pVVVnyxsmSTb10Dg5zhjJEbU29Hfqn1mp8Bjw,10628
557
557
  qiskit/synthesis/permutation/__init__.py,sha256=DMcgTyHM8_Rubao0d0N2TPvA5cXhMHA93n5MT830YKY,775
558
- qiskit/synthesis/permutation/permutation_full.py,sha256=_EXIk4G5vsRsOVg7zB0q6cASVs48y1LnvpoOHcTAWZw,3400
559
- qiskit/synthesis/permutation/permutation_lnn.py,sha256=Gfwk2QVKjp2xinsUU9Xl_7I_0vMdDXLjX4jlC58jqnA,2468
558
+ qiskit/synthesis/permutation/permutation_full.py,sha256=ZDR6lZw2PRBqdxq0O6MygOnXnJw4utl4-QCrA1jXGlc,3430
559
+ qiskit/synthesis/permutation/permutation_lnn.py,sha256=MyDzP2xXd5SMxapi1wkNYvnwUVkHUMIwpo7jLAXA7BQ,2499
560
560
  qiskit/synthesis/permutation/permutation_reverse_lnn.py,sha256=ZCbKw2jrniTImGsF7tPrrKm3e9NzcEwJnDE3r6oAY4U,3106
561
561
  qiskit/synthesis/permutation/permutation_utils.py,sha256=eD7FamLnRA9Njqe71x_uBCzXMSSC2t9dAQza1a0kgEQ,671
562
562
  qiskit/synthesis/qft/__init__.py,sha256=fe3r4ylscClkTuQLuXlsnFin9AK7D9TcJEcl40Vo6tw,646
@@ -567,7 +567,7 @@ qiskit/synthesis/stabilizer/stabilizer_circuit.py,sha256=WezW3w9yY7YZZmu1HtIfOLY
567
567
  qiskit/synthesis/stabilizer/stabilizer_decompose.py,sha256=oG5cmkXTy0UdebQDb5ATALLS7vYZqpY8h2q1RAjrSRE,7346
568
568
  qiskit/synthesis/two_qubit/__init__.py,sha256=r0n0V_efULlqFbajfasnMFHUhOqyv7koIL9MOvKZSGw,692
569
569
  qiskit/synthesis/two_qubit/local_invariance.py,sha256=vCSam5bFDKRnPaetv5T__En9rWRRCg7SjOKD6r9jKZc,2148
570
- qiskit/synthesis/two_qubit/two_qubit_decompose.py,sha256=fPhLgWxOxscUsSa3wGGtL-Z5a-f77VgKhtha1NgKYT8,29700
570
+ qiskit/synthesis/two_qubit/two_qubit_decompose.py,sha256=jXFaWUukbvv-xztGiDDWFu74Cl7NWLuCC4rqX6okPnk,29730
571
571
  qiskit/synthesis/two_qubit/weyl.py,sha256=y04fcVEeAgI5BkrrhKhe5Jm0Wg6pv71Jti1ZHnsZNR0,3396
572
572
  qiskit/synthesis/two_qubit/xx_decompose/__init__.py,sha256=rZdo-_eQoVdQfb6pZOlpFrzI4BKDHliZgNs9Nagj4eo,663
573
573
  qiskit/synthesis/two_qubit/xx_decompose/circuits.py,sha256=MK4d66yD53XBj4hhHZamfU4etaVPkYQ7rvy0huCk3Vg,11628
@@ -595,13 +595,13 @@ qiskit/transpiler/__init__.py,sha256=diK-MYizsFTPhZklOc6a-yWtNpZ2Z6LlO6rTYtUrP7Y
595
595
  qiskit/transpiler/basepasses.py,sha256=xnflZCEH6CA1bYUkTS8X3WkM1qS2ujk6qtBtFBp5L38,8990
596
596
  qiskit/transpiler/coupling.py,sha256=8oIvOUPpqT-wIjrCP8u0cHiemI1ON4714cH30BAE_iw,19103
597
597
  qiskit/transpiler/exceptions.py,sha256=ef9tiCFmu-fzGwKXg4e9CiBFjcJJxl5zA02L2Pk7wIQ,1769
598
- qiskit/transpiler/instruction_durations.py,sha256=Y0pALGC7NgvAooCxXQBqnqoMZA8Uz3V7vbgqKQ2YBZk,11376
598
+ qiskit/transpiler/instruction_durations.py,sha256=wqybiRRVUENdQNGbIwdtYnDjyyu2ekK-Hix9Jb-Xd7Q,11517
599
599
  qiskit/transpiler/layout.py,sha256=9fkldzD8awrQGa0M6Ros0Q6mBr8S3cm4RZuj9bVAYHQ,28810
600
600
  qiskit/transpiler/passmanager.py,sha256=XRFGCDel-Vv8jo_-oHtEgNKqF0g-xThNAEYIiIbBDeg,20889
601
601
  qiskit/transpiler/passmanager_config.py,sha256=kFsJ6EdGtAmoRxWJW4Cb4__fWX7OrTv4SccwWsrxgj4,9413
602
602
  qiskit/transpiler/target.py,sha256=0S_fi0U3ErBuXzCZIv0W2qW4VY6px521CU2kZUF4-pk,74490
603
603
  qiskit/transpiler/timing_constraints.py,sha256=YMwO31Im7h0Wxgu11ZPyp5uy60l5Ys24Oepa66M4sD8,2441
604
- qiskit/transpiler/passes/__init__.py,sha256=u_3pxWAbD5OTiKYKGHPpvrrhzPZUkj9-UFgL9QgAT7A,8097
604
+ qiskit/transpiler/passes/__init__.py,sha256=AdQP444AHeZ_MZc7CmANFrGonUaZH2QWPfaHCln-yUQ,8166
605
605
  qiskit/transpiler/passes/analysis/__init__.py,sha256=ygrX-YFaHzfMLqf53ftQ-2DXO4_4PwSEOHkYZkOuMXg,898
606
606
  qiskit/transpiler/passes/analysis/count_ops.py,sha256=PAALTyNJIRXP-QwiE3H2WhER-nlgf52iro9izZCRLt0,1021
607
607
  qiskit/transpiler/passes/analysis/count_ops_longest_path.py,sha256=DEgzeOLG1OBw0xDPx-hb6E6xQyYjoP7E7c9iLhsR72U,1006
@@ -642,7 +642,7 @@ qiskit/transpiler/passes/layout/trivial_layout.py,sha256=E4JV8B_aomdILUNorxvFN_m
642
642
  qiskit/transpiler/passes/layout/vf2_layout.py,sha256=kGlqyuwFmDkNvXqYobF65t1TpkJOic04FIFz0I8bm-0,12231
643
643
  qiskit/transpiler/passes/layout/vf2_post_layout.py,sha256=apt6L42IpQLi21ZMZcrlgVs_1hD7_elyZ_rA3-YBWgI,20103
644
644
  qiskit/transpiler/passes/layout/vf2_utils.py,sha256=OV4PFFxW92SGPAHZWNlq3lEgYV6rWtn74d3FJIEvTq4,11061
645
- qiskit/transpiler/passes/optimization/__init__.py,sha256=xu9KmAkVQf8R_1cQAJuxiXD7454cGUF-dUF_jrNR6cA,2117
645
+ qiskit/transpiler/passes/optimization/__init__.py,sha256=3f-Ilf8P_A1jvTfhoubdET0a-IAK97t1QBaarmkoed4,2171
646
646
  qiskit/transpiler/passes/optimization/_gate_extension.py,sha256=FAizDJc9m0y1blUd28qZK0rCKDeiK48fOvYh1lghAZ0,3386
647
647
  qiskit/transpiler/passes/optimization/collect_1q_runs.py,sha256=JGzjVY_TdtNAST8ZSrjtg6fEFj8UVEGATneuGlx-DtQ,1145
648
648
  qiskit/transpiler/passes/optimization/collect_2q_blocks.py,sha256=2_kzxpyedr2XrRF86eycEKLBfEnjFWZPK78h2vePwkU,1259
@@ -657,7 +657,7 @@ qiskit/transpiler/passes/optimization/consolidate_blocks.py,sha256=sPT3OqVcM7ntu
657
657
  qiskit/transpiler/passes/optimization/cx_cancellation.py,sha256=0e-7eMwdhy4NG6YllXUosWecPm1UwMQYngi-hyuuxak,2401
658
658
  qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py,sha256=JHyADrASrY7F3XFKgXssYHUSPLqTicMgEldYZovbGWs,7176
659
659
  qiskit/transpiler/passes/optimization/elide_permutations.py,sha256=znCVVVsX8OcSqGZHtgkcZUBbQFVchRqV2vowGKPcjNw,5480
660
- qiskit/transpiler/passes/optimization/hoare_opt.py,sha256=_1nvJJ7Smj4W7gU-WmBTM9ZD2mXnoKeqSww1kPkirZ0,16402
660
+ qiskit/transpiler/passes/optimization/hoare_opt.py,sha256=xdSqEmWinuAVkgBGIiFNS-PB7NnzkSFwN-h_BugZOgE,16711
661
661
  qiskit/transpiler/passes/optimization/inverse_cancellation.py,sha256=MuoJwkBJtYKtTJ8KKOCmy-YdSz0eeIb-bEDTe4MA8hU,7007
662
662
  qiskit/transpiler/passes/optimization/normalize_rx_angle.py,sha256=AbnCL0yvtCp-4O1O8lpFzj8fSzMZ3QYG6gjmJI7uHAE,6404
663
663
  qiskit/transpiler/passes/optimization/optimize_1q_commutation.py,sha256=uwoaomez83bG7CgG078cJO55EIe5qjXEIESG4hjqAJU,10583
@@ -670,7 +670,7 @@ qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py,sh
670
670
  qiskit/transpiler/passes/optimization/remove_final_reset.py,sha256=hLQ3lnP2-OApAqzlgGXTXUxXZn2GS6iz2rpOGWOSMPU,1370
671
671
  qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py,sha256=Tsj-ffvKidubmdE9e8ulBS_A_c5OPUkAmfPmZ28P-ug,1284
672
672
  qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py,sha256=Jav9-ulhjqWgHoa_Lh8YVy0K2QF387GMcytR_VqmF-I,2058
673
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py,sha256=GnEVfzB7kKwIsOD8mM2aaWND11w7Yvz9s1wvYNef4vI,3891
673
+ qiskit/transpiler/passes/optimization/split_2q_unitaries.py,sha256=uXAIkoTCaNEJee5dCHp_6XU_XBui0KpTd7vz8CzCofw,3822
674
674
  qiskit/transpiler/passes/optimization/template_optimization.py,sha256=a0mEZuM5nNTgjRmfJLfQsFQgAscJBY6cDprj9rd_3iQ,6891
675
675
  qiskit/transpiler/passes/optimization/template_matching/__init__.py,sha256=-wC8wXv98Qp6R5yBxHdBAEnjfBbRgGgzUM2EqZKRyeE,848
676
676
  qiskit/transpiler/passes/optimization/template_matching/backward_match.py,sha256=GSXpZZtWxz-0pqb_PABDLPxV9RDFVjblWvdu7GgvY_M,30787
@@ -743,7 +743,7 @@ qiskit/transpiler/passes/utils/unroll_forloops.py,sha256=mkjucqYOXyfJpCT3dtXUMJe
743
743
  qiskit/transpiler/preset_passmanagers/__init__.py,sha256=DIC_jvndc-sN6x3F7mag-TPV67QN5QqCS3AC2qvuqsw,2831
744
744
  qiskit/transpiler/preset_passmanagers/builtin_plugins.py,sha256=PPMfx70IugozdHOA7d3XkfKAWFxsCjkfHwbWWpXfbkw,43024
745
745
  qiskit/transpiler/preset_passmanagers/common.py,sha256=N_nRRaqXz_SKtyW3GxOZHpccdNxW0D0p2hekDkFwQHw,26494
746
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py,sha256=R8f_QzIIgmIoh7JL41v78i5_i0gC4-q4aCAXv_xIrP4,26167
746
+ qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py,sha256=R5B6bxooxUo5pftksOyqW4_ds6x0yHCnk4CJVquNvh8,26514
747
747
  qiskit/transpiler/preset_passmanagers/level0.py,sha256=-X8y92rTBnvYlbXnWcFgwkF78FZK9Gn2Z9Pd9h0dvfA,4390
748
748
  qiskit/transpiler/preset_passmanagers/level1.py,sha256=Cxw99_TL8px-pavkr_XRkMFi9z8F5xnXuDiKRCTbFQE,4926
749
749
  qiskit/transpiler/preset_passmanagers/level2.py,sha256=cSOrYsVVJC5DJpjnJ4lNRtkZe_lKH4w385lsb8bogWU,4850
@@ -754,7 +754,7 @@ qiskit/utils/classtools.py,sha256=zFv50IaynNg3BOuQzzolKSDCIKOQa31XH96s6kGoahE,68
754
754
  qiskit/utils/deprecation.py,sha256=Zyw8Ak8BE8kWi2A738hfSjFfC1Ag9PHNDA7qoRyr3rY,20239
755
755
  qiskit/utils/lazy_tester.py,sha256=zDXbus1GkfbQrEbFJO9VkaA7S6Z5E3dikIZE04iFO1U,14910
756
756
  qiskit/utils/multiprocessing.py,sha256=kCgf43ozvliGkRm_o1rLZT3gGORFZ77f-vzFSq-iz2s,1764
757
- qiskit/utils/optionals.py,sha256=bUz_zDfIteMePJoi71SgvinNxvM_S0rcf8ncMB8Ki5Q,14162
757
+ qiskit/utils/optionals.py,sha256=GKQufJk9b7FqA4bJeCkpHpoJUDW9YjXz35cChIRSarI,13505
758
758
  qiskit/utils/parallel.py,sha256=zPaP_4nayCTfsuHAr55y10vDcFJz1reoqosukrZ7NhU,7284
759
759
  qiskit/utils/units.py,sha256=RgSPk4vfieSud67eeicNDWssFB2mjDq6q4X-9jxYaYE,4222
760
760
  qiskit/visualization/__init__.py,sha256=FDaFfsj9CrqFoLr-DdY24CrCwd7Q0Q8P9h-6oPaXqD8,7933
@@ -764,7 +764,7 @@ qiskit/visualization/circuit_visualization.py,sha256=OKcbVjoZ8s9sPXDH6advgO1gn5u
764
764
  qiskit/visualization/counts_visualization.py,sha256=pHDGPWEk_MWlkbNC2x_2BAt9a2Xlz3Mix4O9FUBTIPU,17272
765
765
  qiskit/visualization/dag_visualization.py,sha256=qGluMH_v6ZfpNkZ401wKhCFKVO-m9bBn5viqD6lmN5U,9296
766
766
  qiskit/visualization/exceptions.py,sha256=bSqwc-u6Vf6L4BY9kJ3mlPJf9eh4c5PsDZcRDGKeZC8,703
767
- qiskit/visualization/gate_map.py,sha256=eFLpp-_iFmYUweZlfJnSiBLm4AeWgGyQy866aFYQ-VQ,37855
767
+ qiskit/visualization/gate_map.py,sha256=pSBf3ZQWH3oG-t3keqq3NwGxdyi8Rh5fKClFPvOW66Q,38560
768
768
  qiskit/visualization/library.py,sha256=HTSEdn2He7JxNevx5jkodbfqa_Uqr6-lSVDtaQE9Vio,1332
769
769
  qiskit/visualization/pass_manager_visualization.py,sha256=oa9ay1dIunTUtEs5PN4y84uEU-qOzLL6Q3jozRnEopg,11539
770
770
  qiskit/visualization/state_visualization.py,sha256=PDcCIgAgSzN98PKoEJcb2vt4oTebhw4i3lcMeP8nZGQ,53717
@@ -812,9 +812,9 @@ qiskit/visualization/timeline/types.py,sha256=jtpipQWUpahayNPQYKUst4GG6BqauovO0q
812
812
  qiskit/visualization/timeline/plotters/__init__.py,sha256=Klg9a1cSUIQhc815g8OpnD5vO1hcI51L9KlFfKzcuRg,588
813
813
  qiskit/visualization/timeline/plotters/base_plotter.py,sha256=taRkL2ZbyorRUEf6nJS8egdzKW2eznQ3w5oBLtMG_U8,1805
814
814
  qiskit/visualization/timeline/plotters/matplotlib.py,sha256=lqqNH3-bdf1F1cS2mDla9dLr5qEOeIFuqVl9Rhdg-Dw,7086
815
- qiskit-1.2.0.dist-info/LICENSE.txt,sha256=pUbmRuPr1gJTTTWZu2c8UmNSntz-pDdKfGR-86NRkok,11619
816
- qiskit-1.2.0.dist-info/METADATA,sha256=24huaefHF_hZbEhGJQYeMbC4wL_z-RI2Bpgmg-tsNXA,13089
817
- qiskit-1.2.0.dist-info/WHEEL,sha256=wbeAP3FaEg2XPA1YvjyV0o9Zyj-L4W4y8U1O-4kQUaw,96
818
- qiskit-1.2.0.dist-info/entry_points.txt,sha256=dCqiF7i6g_s6cYnXX7UUO1MM63xFFb5DCHYEYyGAeCc,3556
819
- qiskit-1.2.0.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
820
- qiskit-1.2.0.dist-info/RECORD,,
815
+ qiskit-1.2.1.dist-info/LICENSE.txt,sha256=pUbmRuPr1gJTTTWZu2c8UmNSntz-pDdKfGR-86NRkok,11619
816
+ qiskit-1.2.1.dist-info/METADATA,sha256=X_MvkL4W2gOI8_l3vyqsuT5iQNXM2EkiMr4AnICcxUc,13089
817
+ qiskit-1.2.1.dist-info/WHEEL,sha256=wbeAP3FaEg2XPA1YvjyV0o9Zyj-L4W4y8U1O-4kQUaw,96
818
+ qiskit-1.2.1.dist-info/entry_points.txt,sha256=dCqiF7i6g_s6cYnXX7UUO1MM63xFFb5DCHYEYyGAeCc,3556
819
+ qiskit-1.2.1.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
820
+ qiskit-1.2.1.dist-info/RECORD,,
File without changes