qiskit 1.4.2__cp39-abi3-macosx_10_12_x86_64.whl → 1.4.3__cp39-abi3-macosx_10_12_x86_64.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 (32) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/_accelerate.abi3.so +0 -0
  3. qiskit/circuit/duration.py +16 -16
  4. qiskit/circuit/library/standard_gates/r.py +4 -3
  5. qiskit/circuit/library/standard_gates/x.py +1 -2
  6. qiskit/circuit/quantumcircuit.py +9 -9
  7. qiskit/converters/circuit_to_dag.py +2 -2
  8. qiskit/converters/dag_to_circuit.py +2 -3
  9. qiskit/dagcircuit/dagdependency_v2.py +3 -2
  10. qiskit/primitives/statevector_estimator.py +1 -1
  11. qiskit/qpy/binary_io/circuits.py +5 -0
  12. qiskit/synthesis/discrete_basis/commutator_decompose.py +30 -6
  13. qiskit/synthesis/discrete_basis/gate_sequence.py +10 -4
  14. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  15. qiskit/synthesis/discrete_basis/solovay_kitaev.py +36 -13
  16. qiskit/transpiler/passes/layout/sabre_layout.py +4 -1
  17. qiskit/transpiler/passes/layout/vf2_utils.py +2 -5
  18. qiskit/transpiler/passes/scheduling/alap.py +2 -2
  19. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +3 -3
  20. qiskit/transpiler/passes/scheduling/asap.py +2 -2
  21. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +1 -1
  22. qiskit/transpiler/passes/scheduling/padding/base_padding.py +2 -2
  23. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -5
  24. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -1
  25. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +29 -19
  26. qiskit/visualization/timeline/core.py +1 -1
  27. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info}/METADATA +4 -3
  28. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info}/RECORD +32 -32
  29. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info}/WHEEL +1 -1
  30. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info}/entry_points.txt +0 -0
  31. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info/licenses}/LICENSE.txt +0 -0
  32. {qiskit-1.4.2.dist-info → qiskit-1.4.3.dist-info}/top_level.txt +0 -0
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 1.4.2
1
+ 1.4.3
Binary file
@@ -65,29 +65,29 @@ def convert_durations_to_dt(qc: QuantumCircuit, dt_in_sec: float, inplace=True):
65
65
 
66
66
  for instruction in circ.data:
67
67
  operation = instruction.operation
68
- if operation.unit == "dt" or operation.duration is None:
68
+ if operation._unit == "dt" or operation._duration is None:
69
69
  continue
70
70
 
71
- if not operation.unit.endswith("s"):
72
- raise CircuitError(f"Invalid time unit: '{operation.unit}'")
71
+ if not operation._unit.endswith("s"):
72
+ raise CircuitError(f"Invalid time unit: '{operation._unit}'")
73
73
 
74
- duration = operation.duration
75
- if operation.unit != "s":
76
- duration = apply_prefix(duration, operation.unit)
74
+ duration = operation._duration
75
+ if operation._unit != "s":
76
+ duration = apply_prefix(duration, operation._unit)
77
77
 
78
- operation.duration = duration_in_dt(duration, dt_in_sec)
79
- operation.unit = "dt"
78
+ operation._duration = duration_in_dt(duration, dt_in_sec)
79
+ operation._unit = "dt"
80
80
 
81
- if circ.duration is not None and circ.unit != "dt":
82
- if not circ.unit.endswith("s"):
83
- raise CircuitError(f"Invalid time unit: '{circ.unit}'")
81
+ if circ._duration is not None and circ._unit != "dt":
82
+ if not circ._unit.endswith("s"):
83
+ raise CircuitError(f"Invalid time unit: '{circ._unit}'")
84
84
 
85
- duration = circ.duration
86
- if circ.unit != "s":
87
- duration = apply_prefix(duration, circ.unit)
85
+ duration = circ._duration
86
+ if circ._unit != "s":
87
+ duration = apply_prefix(duration, circ._unit)
88
88
 
89
- circ.duration = duration_in_dt(duration, dt_in_sec)
90
- circ.unit = "dt"
89
+ circ._duration = duration_in_dt(duration, dt_in_sec)
90
+ circ._unit = "dt"
91
91
 
92
92
  if not inplace:
93
93
  return circ
@@ -33,9 +33,10 @@ class RGate(Gate):
33
33
 
34
34
  .. code-block:: text
35
35
 
36
- ┌──────┐
37
- q_0: ┤ R(ϴ)
38
- └──────┘
36
+ ┌─────────┐
37
+ q_0: ┤ R(θ,ϕ)
38
+ └─────────┘
39
+
39
40
 
40
41
  **Matrix Representation:**
41
42
 
@@ -306,8 +306,7 @@ class CCXGate(SingletonControlledGate):
306
306
  r"""CCX gate, also known as Toffoli gate.
307
307
 
308
308
  Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
309
- with the :meth:`~qiskit.circuit.QuantumCircuit.ccx` and
310
- :meth:`~qiskit.circuit.QuantumCircuit.toffoli` methods.
309
+ with the :meth:`~qiskit.circuit.QuantumCircuit.ccx` method.
311
310
 
312
311
  **Circuit symbol:**
313
312
 
@@ -1546,8 +1546,8 @@ class QuantumCircuit:
1546
1546
  for instruction in reversed(self.data):
1547
1547
  reverse_circ._append(instruction.replace(operation=instruction.operation.reverse_ops()))
1548
1548
 
1549
- reverse_circ.duration = self.duration
1550
- reverse_circ.unit = self.unit
1549
+ reverse_circ._duration = self._duration
1550
+ reverse_circ._unit = self._unit
1551
1551
  return reverse_circ
1552
1552
 
1553
1553
  def reverse_bits(self) -> "QuantumCircuit":
@@ -2620,8 +2620,8 @@ class QuantumCircuit:
2620
2620
  """
2621
2621
  if _standard_gate:
2622
2622
  self._data.append(instruction)
2623
- self.duration = None
2624
- self.unit = "dt"
2623
+ self._duration = None
2624
+ self._unit = "dt"
2625
2625
  return instruction
2626
2626
 
2627
2627
  old_style = not isinstance(instruction, CircuitInstruction)
@@ -2643,8 +2643,8 @@ class QuantumCircuit:
2643
2643
  self._data.append_manual_params(instruction, params)
2644
2644
 
2645
2645
  # Invalidate whole circuit duration if an instruction is added
2646
- self.duration = None
2647
- self.unit = "dt"
2646
+ self._duration = None
2647
+ self._unit = "dt"
2648
2648
  return instruction.operation if old_style else instruction
2649
2649
 
2650
2650
  @typing.overload
@@ -6584,7 +6584,7 @@ class QuantumCircuit:
6584
6584
  Raises:
6585
6585
  CircuitError: if ``self`` is a not-yet scheduled circuit.
6586
6586
  """
6587
- if self.duration is None:
6587
+ if self._duration is None:
6588
6588
  # circuit has only delays, this is kind of scheduled
6589
6589
  for instruction in self._data:
6590
6590
  if not isinstance(instruction.operation, Delay):
@@ -6626,7 +6626,7 @@ class QuantumCircuit:
6626
6626
  Raises:
6627
6627
  CircuitError: if ``self`` is a not-yet scheduled circuit.
6628
6628
  """
6629
- if self.duration is None:
6629
+ if self._duration is None:
6630
6630
  # circuit has only delays, this is kind of scheduled
6631
6631
  for instruction in self._data:
6632
6632
  if not isinstance(instruction.operation, Delay):
@@ -6637,7 +6637,7 @@ class QuantumCircuit:
6637
6637
 
6638
6638
  qubits = [self.qubits[q] if isinstance(q, int) else q for q in qubits]
6639
6639
 
6640
- stops = {q: self.duration for q in qubits}
6640
+ stops = {q: self._duration for q in qubits}
6641
6641
  dones = {q: False for q in qubits}
6642
6642
  for instruction in reversed(self._data):
6643
6643
  for q in qubits:
@@ -73,6 +73,6 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
73
73
 
74
74
  dagcircuit = core_circuit_to_dag(circuit, copy_operations, qubit_order, clbit_order)
75
75
 
76
- dagcircuit.duration = circuit._duration
77
- dagcircuit.unit = circuit._unit
76
+ dagcircuit._duration = circuit._duration
77
+ dagcircuit._unit = circuit._unit
78
78
  return dagcircuit
@@ -74,7 +74,6 @@ def dag_to_circuit(dag, copy_operations=True):
74
74
  circuit._calibrations_prop = dag._calibrations_prop
75
75
 
76
76
  circuit._data = circuit_data
77
-
78
- circuit._duration = dag.duration
79
- circuit._unit = dag.unit
77
+ circuit._duration = dag._duration
78
+ circuit._unit = dag._unit
80
79
  return circuit
@@ -525,8 +525,6 @@ class _DAGDependencyV2:
525
525
  target_dag = _DAGDependencyV2()
526
526
  target_dag.name = self.name
527
527
  target_dag._global_phase = self._global_phase
528
- target_dag.duration = self.duration
529
- target_dag.unit = self.unit
530
528
  target_dag.metadata = self.metadata
531
529
  target_dag._key_cache = self._key_cache
532
530
  target_dag.comm_checker = self.comm_checker
@@ -534,6 +532,9 @@ class _DAGDependencyV2:
534
532
  target_dag.add_qubits(self.qubits)
535
533
  target_dag.add_clbits(self.clbits)
536
534
 
535
+ target_dag.duration = self.duration
536
+ target_dag.unit = self.unit
537
+
537
538
  for qreg in self.qregs.values():
538
539
  target_dag.add_qreg(qreg)
539
540
  for creg in self.cregs.values():
@@ -33,7 +33,7 @@ class StatevectorEstimator(BaseEstimatorV2):
33
33
  Simple implementation of :class:`BaseEstimatorV2` with full state vector simulation.
34
34
 
35
35
  This class is implemented via :class:`~.Statevector` which turns provided circuits into
36
- pure state vectors. These states are subsequently acted on by :class:~.SparsePauliOp`,
36
+ pure state vectors. These states are subsequently acted on by :class:`~.SparsePauliOp`,
37
37
  which implies that, at present, this implementation is only compatible with Pauli-based
38
38
  observables.
39
39
 
@@ -776,6 +776,11 @@ def _write_instruction(
776
776
  custom_operations[gate_class_name] = instruction.operation
777
777
  custom_operations_list.append(gate_class_name)
778
778
 
779
+ elif isinstance(instruction.operation, library.MCMTGate):
780
+ gate_class_name = instruction.operation.name + "_" + str(uuid.uuid4())
781
+ custom_operations[gate_class_name] = instruction.operation
782
+ custom_operations_list.append(gate_class_name)
783
+
779
784
  condition_type = type_keys.Condition.NONE
780
785
  condition_register = b""
781
786
  condition_value = 0
@@ -53,16 +53,40 @@ def _compute_rotation_axis(matrix: np.ndarray) -> np.ndarray:
53
53
  """
54
54
  _check_is_so3(matrix)
55
55
 
56
+ # If theta represents the rotation angle, then trace = 1 + 2cos(theta).
56
57
  trace = _compute_trace_so3(matrix)
57
- theta = math.acos(0.5 * (trace - 1))
58
- if math.sin(theta) > 1e-10:
59
- x = 1 / (2 * math.sin(theta)) * (matrix[2][1] - matrix[1][2])
60
- y = 1 / (2 * math.sin(theta)) * (matrix[0][2] - matrix[2][0])
61
- z = 1 / (2 * math.sin(theta)) * (matrix[1][0] - matrix[0][1])
62
- else:
58
+
59
+ if trace >= 3 - 1e-10:
60
+ # The matrix is the identity (rotation by 0)
63
61
  x = 1.0
64
62
  y = 0.0
65
63
  z = 0.0
64
+
65
+ elif trace <= -1 + 1e-10:
66
+ # The matrix is the 180-degree rotation
67
+ squares = (1 + np.diagonal(matrix)) / 2
68
+ index_of_max = np.argmax(squares)
69
+
70
+ if index_of_max == 0:
71
+ x = math.sqrt(squares[0])
72
+ y = matrix[0][1] / (2 * x)
73
+ z = matrix[0][2] / (2 * x)
74
+ elif index_of_max == 1:
75
+ y = math.sqrt(squares[1])
76
+ x = matrix[0][1] / (2 * y)
77
+ z = matrix[1][2] / (2 * y)
78
+ else:
79
+ z = math.sqrt(squares[2])
80
+ x = matrix[0][2] / (2 * z)
81
+ y = matrix[1][2] / (2 * z)
82
+
83
+ else:
84
+ # The matrix is the rotation by theta with sin(theta)!=0
85
+ theta = math.acos(0.5 * (trace - 1))
86
+ x = 1 / (2 * math.sin(theta)) * (matrix[2][1] - matrix[1][2])
87
+ y = 1 / (2 * math.sin(theta)) * (matrix[0][2] - matrix[2][0])
88
+ z = 1 / (2 * math.sin(theta)) * (matrix[1][0] - matrix[0][1])
89
+
66
90
  return np.array([x, y, z])
67
91
 
68
92
 
@@ -55,7 +55,6 @@ class GateSequence:
55
55
  self.name = " ".join(self.labels)
56
56
  self.global_phase = global_phase
57
57
  self.product = so3_matrix
58
- self.product_su2 = su2_matrix
59
58
 
60
59
  def remove_cancelling_pair(self, indices: Sequence[int]) -> None:
61
60
  """Remove a pair of indices that cancel each other and *do not* change the matrices."""
@@ -106,6 +105,16 @@ class GateSequence:
106
105
 
107
106
  return circuit
108
107
 
108
+ def _to_u2(self):
109
+ """Creates the U2 matrix corresponding to the stored sequence of gates
110
+ and the global phase.
111
+ """
112
+ u2 = np.eye(2, dtype=complex)
113
+ for mat in self.gates:
114
+ u2 = mat.to_matrix().dot(u2)
115
+ u2 = np.exp(1j * self.global_phase) * u2
116
+ return u2
117
+
109
118
  def to_dag(self):
110
119
  """Convert to a :class:`.DAGCircuit`.
111
120
 
@@ -149,7 +158,6 @@ class GateSequence:
149
158
  so3 = _convert_su2_to_so3(su2)
150
159
 
151
160
  self.product = so3.dot(self.product)
152
- self.product_su2 = su2.dot(self.product_su2)
153
161
  self.global_phase = self.global_phase + phase
154
162
 
155
163
  self.gates.append(gate)
@@ -172,7 +180,6 @@ class GateSequence:
172
180
  adjoint.labels = [inv.name for inv in adjoint.gates]
173
181
  adjoint.name = " ".join(adjoint.labels)
174
182
  adjoint.product = np.conj(self.product).T
175
- adjoint.product_su2 = np.conj(self.product_su2).T
176
183
  adjoint.global_phase = -self.global_phase
177
184
 
178
185
  return adjoint
@@ -190,7 +197,6 @@ class GateSequence:
190
197
  out.matrices = self.matrices.copy()
191
198
  out.global_phase = self.global_phase
192
199
  out.product = self.product.copy()
193
- out.product_su2 = self.product_su2.copy()
194
200
  out.name = self.name
195
201
  out._eulers = self._eulers
196
202
  return out
@@ -76,7 +76,7 @@ def _check_candidate_greedy(candidate, existing_sequences, tol=1e-10):
76
76
  return False
77
77
 
78
78
  for existing in existing_sequences:
79
- if matrix_equal(existing.product_su2, candidate.product_su2, ignore_phase=True, atol=tol):
79
+ if matrix_equal(existing.product, candidate.product, ignore_phase=True, atol=tol):
80
80
  # is the new sequence less or more efficient?
81
81
  return len(candidate.gates) < len(existing.gates)
82
82
  return True
@@ -24,7 +24,7 @@ from .generate_basis_approximations import generate_basic_approximations, _1q_ga
24
24
  class SolovayKitaevDecomposition:
25
25
  """The Solovay Kitaev discrete decomposition algorithm.
26
26
 
27
- This class is called recursively by the transpiler pass, which is why it is separeted.
27
+ This class is called recursively by the transpiler pass, which is why it is separated.
28
28
  See :class:`qiskit.transpiler.passes.SolovayKitaev` for more information.
29
29
  """
30
30
 
@@ -33,7 +33,7 @@ class SolovayKitaevDecomposition:
33
33
  ) -> None:
34
34
  """
35
35
  Args:
36
- basic_approximations: A specification of the basic SU(2) approximations in terms
36
+ basic_approximations: A specification of the basic SO(3) approximations in terms
37
37
  of discrete gates. At each iteration this algorithm, the remaining error is
38
38
  approximated with the closest sequence of gates in this set.
39
39
  If a ``str``, this specifies a ``.npy`` filename from which to load the
@@ -116,23 +116,33 @@ class SolovayKitaevDecomposition:
116
116
  """
117
117
  # make input matrix SU(2) and get the according global phase
118
118
  z = 1 / np.sqrt(np.linalg.det(gate_matrix))
119
- gate_matrix_su2 = GateSequence.from_matrix(z * gate_matrix)
119
+
120
+ gate_matrix_su2 = z * gate_matrix
121
+ gate_matrix_as_sequence = GateSequence.from_matrix(gate_matrix_su2)
120
122
  global_phase = np.arctan2(np.imag(z), np.real(z))
121
123
 
122
124
  # get the decomposition as GateSequence type
123
- decomposition = self._recurse(gate_matrix_su2, recursion_degree, check_input=check_input)
125
+ decomposition = self._recurse(
126
+ gate_matrix_as_sequence, recursion_degree, check_input=check_input
127
+ )
124
128
 
125
129
  # simplify
126
130
  _remove_identities(decomposition)
127
131
  _remove_inverse_follows_gate(decomposition)
128
132
 
133
+ # adjust to the correct SU(2) phase
134
+ adjust_phase = (
135
+ np.pi if _should_adjust_phase(decomposition._to_u2(), gate_matrix_su2) else 0.0
136
+ )
137
+
129
138
  # convert to a circuit and attach the right phases
130
139
  if return_dag:
131
140
  out = decomposition.to_dag()
132
141
  else:
133
142
  out = decomposition.to_circuit()
134
143
 
135
- out.global_phase = decomposition.global_phase - global_phase
144
+ out.global_phase += adjust_phase
145
+ out.global_phase -= global_phase
136
146
 
137
147
  return out
138
148
 
@@ -155,17 +165,20 @@ class SolovayKitaevDecomposition:
155
165
  raise ValueError("Shape of U must be (3, 3) but is", sequence.shape)
156
166
 
157
167
  if n == 0:
158
- return self.find_basic_approximation(sequence)
168
+ res = self.find_basic_approximation(sequence)
159
169
 
160
- u_n1 = self._recurse(sequence, n - 1, check_input=check_input)
170
+ else:
171
+ u_n1 = self._recurse(sequence, n - 1, check_input=check_input)
161
172
 
162
- v_n, w_n = commutator_decompose(
163
- sequence.dot(u_n1.adjoint()).product, check_input=check_input
164
- )
173
+ v_n, w_n = commutator_decompose(
174
+ sequence.dot(u_n1.adjoint()).product, check_input=check_input
175
+ )
176
+
177
+ v_n1 = self._recurse(v_n, n - 1, check_input=check_input)
178
+ w_n1 = self._recurse(w_n, n - 1, check_input=check_input)
179
+ res = v_n1.dot(w_n1).dot(v_n1.adjoint()).dot(w_n1.adjoint()).dot(u_n1)
165
180
 
166
- v_n1 = self._recurse(v_n, n - 1, check_input=check_input)
167
- w_n1 = self._recurse(w_n, n - 1, check_input=check_input)
168
- return v_n1.dot(w_n1).dot(v_n1.adjoint()).dot(w_n1.adjoint()).dot(u_n1)
181
+ return res
169
182
 
170
183
  def find_basic_approximation(self, sequence: GateSequence) -> GateSequence:
171
184
  """Find ``GateSequence`` in ``self._basic_approximations`` that approximates ``sequence``.
@@ -215,3 +228,13 @@ def _remove_identities(sequence):
215
228
  sequence.gates.pop(index)
216
229
  else:
217
230
  index += 1
231
+
232
+
233
+ def _should_adjust_phase(computed: np.ndarray, target: np.ndarray) -> bool:
234
+ """
235
+ The implemented SolovayKitaevDecomposition has a global phase uncertainty of +-1,
236
+ due to approximating not the original SU(2) matrix but its projection onto SO(3).
237
+ This function returns ``True`` if the global phase of the computed approximation
238
+ should be adjusted (by adding pi) to better much the target.
239
+ """
240
+ return np.linalg.norm(-computed - target) < np.linalg.norm(computed - target)
@@ -305,6 +305,9 @@ class SabreLayout(TransformationPass):
305
305
  # the layout and routing together as part of resolving the Sabre result.
306
306
  physical_qubits = QuantumRegister(self.coupling_map.size(), "q")
307
307
  mapped_dag = DAGCircuit()
308
+ mapped_dag.name = dag.name
309
+ mapped_dag.metadata = dag.metadata
310
+ mapped_dag.global_phase = dag.global_phase
308
311
  mapped_dag.add_qreg(physical_qubits)
309
312
  mapped_dag.add_clbits(dag.clbits)
310
313
  for creg in dag.cregs.values():
@@ -315,7 +318,7 @@ class SabreLayout(TransformationPass):
315
318
  mapped_dag.add_captured_var(var)
316
319
  for var in dag.iter_declared_vars():
317
320
  mapped_dag.add_declared_var(var)
318
- mapped_dag.global_phase = dag.global_phase
321
+
319
322
  self.property_set["original_qubit_indices"] = {
320
323
  bit: index for index, bit in enumerate(dag.qubits)
321
324
  }
@@ -203,11 +203,8 @@ def build_average_error_map(target, properties, coupling_map):
203
203
  coupling_map = target.build_coupling_map()
204
204
  if not built and coupling_map is not None:
205
205
  for qubit in range(num_qubits):
206
- avg_map.add_error(
207
- (qubit, qubit),
208
- (coupling_map.graph.out_degree(qubit) + coupling_map.graph.in_degree(qubit))
209
- / num_qubits,
210
- )
206
+ degree = len(set(coupling_map.graph.neighbors_undirected(qubit)))
207
+ avg_map.add_error((qubit, qubit), degree / num_qubits)
211
208
  for edge in coupling_map.graph.edge_list():
212
209
  avg_map.add_error(edge, (avg_map[edge[0], edge[0]] + avg_map[edge[1], edge[1]]) / 2)
213
210
  built = True
@@ -147,7 +147,7 @@ class ALAPSchedule(BaseSchedulerTransform):
147
147
  new_dag._calibrations_prop = dag._calibrations_prop
148
148
 
149
149
  # set circuit duration and unit to indicate it is scheduled
150
- new_dag.duration = circuit_duration
151
- new_dag.unit = time_unit
150
+ new_dag._duration = circuit_duration
151
+ new_dag._unit = time_unit
152
152
 
153
153
  return new_dag
@@ -129,7 +129,7 @@ class AlignMeasures(TransformationPass):
129
129
  return dag
130
130
 
131
131
  # if circuit is not yet scheduled, schedule with ALAP method
132
- if dag.duration is None:
132
+ if dag._duration is None:
133
133
  raise TranspilerError(
134
134
  f"This circuit {dag.name} may involve a delay instruction violating the "
135
135
  "pulse controller alignment. To adjust instructions to "
@@ -201,8 +201,8 @@ class AlignMeasures(TransformationPass):
201
201
  new_dag.metadata = dag.metadata
202
202
 
203
203
  # set circuit duration and unit to indicate it is scheduled
204
- new_dag.duration = circuit_duration
205
- new_dag.unit = time_unit
204
+ new_dag._duration = circuit_duration
205
+ new_dag._unit = time_unit
206
206
 
207
207
  return new_dag
208
208
 
@@ -170,6 +170,6 @@ class ASAPSchedule(BaseSchedulerTransform):
170
170
  new_dag._calibrations_prop = dag._calibrations_prop
171
171
 
172
172
  # set circuit duration and unit to indicate it is scheduled
173
- new_dag.duration = circuit_duration
174
- new_dag.unit = time_unit
173
+ new_dag._duration = circuit_duration
174
+ new_dag._unit = time_unit
175
175
  return new_dag
@@ -168,7 +168,7 @@ class DynamicalDecoupling(TransformationPass):
168
168
  if len(dag.qregs) != 1 or dag.qregs.get("q", None) is None:
169
169
  raise TranspilerError("DD runs on physical circuits only.")
170
170
 
171
- if dag.duration is None:
171
+ if dag._duration is None:
172
172
  raise TranspilerError("DD runs after circuit is scheduled.")
173
173
 
174
174
  durations = self._update_inst_durations(dag)
@@ -98,7 +98,7 @@ class BasePadding(TransformationPass):
98
98
 
99
99
  new_dag.name = dag.name
100
100
  new_dag.metadata = dag.metadata
101
- new_dag.unit = self.property_set["time_unit"]
101
+ new_dag._unit = self.property_set["time_unit"]
102
102
  new_dag._calibrations_prop = dag._calibrations_prop
103
103
  new_dag.global_phase = dag.global_phase
104
104
 
@@ -161,7 +161,7 @@ class BasePadding(TransformationPass):
161
161
  prev_node=prev_node,
162
162
  )
163
163
 
164
- new_dag.duration = circuit_duration
164
+ new_dag._duration = circuit_duration
165
165
 
166
166
  return new_dag
167
167
 
@@ -348,14 +348,14 @@ class PadDynamicalDecoupling(BasePadding):
348
348
 
349
349
  if not self.__is_dd_qubit(dag.qubits.index(qubit)):
350
350
  # Target physical qubit is not the target of this DD sequence.
351
- self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag.unit), qubit)
351
+ self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag._unit), qubit)
352
352
  return
353
353
 
354
354
  if self._skip_reset_qubits and (
355
355
  isinstance(prev_node, DAGInNode) or isinstance(prev_node.op, Reset)
356
356
  ):
357
357
  # Previous node is the start edge or reset, i.e. qubit is ground state.
358
- self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag.unit), qubit)
358
+ self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag._unit), qubit)
359
359
  return
360
360
 
361
361
  slack = time_interval - np.sum(self._dd_sequence_lengths[qubit])
@@ -363,7 +363,7 @@ class PadDynamicalDecoupling(BasePadding):
363
363
 
364
364
  if slack <= 0:
365
365
  # Interval too short.
366
- self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag.unit), qubit)
366
+ self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag._unit), qubit)
367
367
  return
368
368
 
369
369
  if len(self._dd_sequence) == 1:
@@ -389,7 +389,7 @@ class PadDynamicalDecoupling(BasePadding):
389
389
  sequence_gphase += phase
390
390
  else:
391
391
  # Don't do anything if there's no single-qubit gate to absorb the inverse
392
- self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag.unit), qubit)
392
+ self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag._unit), qubit)
393
393
  return
394
394
 
395
395
  def _constrained_length(values):
@@ -425,7 +425,7 @@ class PadDynamicalDecoupling(BasePadding):
425
425
  if dd_ind < len(taus):
426
426
  tau = taus[dd_ind]
427
427
  if tau > 0:
428
- self._apply_scheduled_op(dag, idle_after, Delay(tau, dag.unit), qubit)
428
+ self._apply_scheduled_op(dag, idle_after, Delay(tau, dag._unit), qubit)
429
429
  idle_after += tau
430
430
  if dd_ind < len(self._dd_sequence):
431
431
  gate = self._dd_sequence[dd_ind]
@@ -79,4 +79,4 @@ class PadDelay(BasePadding):
79
79
  return
80
80
 
81
81
  time_interval = t_end - t_start
82
- self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag.unit), qubit)
82
+ self._apply_scheduled_op(dag, t_start, Delay(time_interval, dag._unit), qubit)
@@ -201,7 +201,7 @@ class SolovayKitaevSynthesis(UnitarySynthesisPlugin):
201
201
 
202
202
  Supported parameters in the dictionary:
203
203
 
204
- basis_approximations (str | dict):
204
+ basic_approximations (str | dict):
205
205
  The basic approximations for the finding the best discrete decomposition at the root of the
206
206
  recursion. If a string, it specifies the ``.npy`` file to load the approximations from.
207
207
  If a dictionary, it contains ``{label: SO(3)-matrix}`` pairs. If None, a default based on
@@ -209,19 +209,31 @@ class SolovayKitaevSynthesis(UnitarySynthesisPlugin):
209
209
 
210
210
  basis_gates (list):
211
211
  A list of strings specifying the discrete basis gates to decompose to. If None,
212
- defaults to ``["h", "t", "tdg"]``.
212
+ it defaults to ``["h", "t", "tdg"]``. If ``basic_approximations`` is not None,
213
+ ``basis_set`` is required to correspond to the basis set that was used to
214
+ generate it.
213
215
 
214
216
  depth (int):
215
217
  The gate-depth of the basic approximations. All possible, unique combinations of the
216
218
  basis gates up to length ``depth`` are considered. If None, defaults to 10.
219
+ If ``basic_approximations`` is not None, ``depth`` is required to correspond to the
220
+ depth that was used to generate it.
217
221
 
218
222
  recursion_degree (int):
219
223
  The number of times the decomposition is recursively improved. If None, defaults to 3.
220
224
  """
221
225
 
222
- # we cache an instance of the Solovay-Kitaev class to generate the
223
- # computationally expensive basis approximation of single qubit gates only once
226
+ # Generating basic approximations of single-qubit gates is computationally expensive.
227
+ # We cache the instance of the Solovay-Kitaev class (which contains the approximations),
228
+ # as well as the basis gates and the depth (used to generate it).
229
+ # When the plugin is called again, we check if the specified basis gates and depth are
230
+ # the same as before. If so, the stored basic approximations are reused, and if not, the
231
+ # approximations are re-generated. In practice (when the plugin is run as a part of the
232
+ # UnitarySynthesis transpiler pass), the basis gates and the depth do not change, and
233
+ # basic approximations are not re-generated.
224
234
  _sk = None
235
+ _basis_gates = None
236
+ _depth = None
225
237
 
226
238
  @property
227
239
  def max_qubits(self):
@@ -271,27 +283,25 @@ class SolovayKitaevSynthesis(UnitarySynthesisPlugin):
271
283
  return False
272
284
 
273
285
  def run(self, unitary, **options):
286
+ """Run the SolovayKitaevSynthesis synthesis plugin on the given unitary."""
274
287
 
275
- # Runtime imports to avoid the overhead of these imports for
276
- # plugin discovery and only use them if the plugin is run/used
277
288
  config = options.get("config") or {}
278
-
289
+ basis_gates = options.get("basis_gates", ["h", "t", "tdg"])
290
+ depth = config.get("depth", 10)
291
+ basic_approximations = config.get("basic_approximations", None)
279
292
  recursion_degree = config.get("recursion_degree", 3)
280
293
 
281
- # if we didn't yet construct the Solovay-Kitaev instance, which contains
282
- # the basic approximations, do it now
283
- if SolovayKitaevSynthesis._sk is None:
284
- basic_approximations = config.get("basic_approximations", None)
285
- basis_gates = options.get("basis_gates", ["h", "t", "tdg"])
286
-
287
- # if the basic approximations are not generated and not given,
288
- # try to generate them if the basis set is specified
294
+ # Check if we didn't yet construct the Solovay-Kitaev instance (which contains the basic
295
+ # approximations) or if the basic approximations need need to be recomputed.
296
+ if (SolovayKitaevSynthesis._sk is None) or (
297
+ (basis_gates != SolovayKitaevSynthesis._basis_gates)
298
+ or (depth != SolovayKitaevSynthesis._depth)
299
+ ):
289
300
  if basic_approximations is None:
290
- depth = config.get("depth", 10)
291
301
  basic_approximations = generate_basic_approximations(basis_gates, depth)
292
302
 
303
+ SolovayKitaevSynthesis._basis_gates = basis_gates
304
+ SolovayKitaevSynthesis._depth = depth
293
305
  SolovayKitaevSynthesis._sk = SolovayKitaevDecomposition(basic_approximations)
294
-
295
306
  approximate_circuit = SolovayKitaevSynthesis._sk.run(unitary, recursion_degree)
296
- dag_circuit = circuit_to_dag(approximate_circuit)
297
- return dag_circuit
307
+ return circuit_to_dag(approximate_circuit)
@@ -254,7 +254,7 @@ class DrawerCanvas:
254
254
  self.add_data(datum)
255
255
 
256
256
  # update time range
257
- t_end = max(program.duration, self.formatter["margin.minimum_duration"])
257
+ t_end = max(program._duration, self.formatter["margin.minimum_duration"])
258
258
  self.set_time_range(t_start=0, t_end=t_end)
259
259
 
260
260
  def set_time_range(self, t_start: int, t_end: int):
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: qiskit
3
- Version: 1.4.2
3
+ Version: 1.4.3
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
@@ -51,6 +51,7 @@ Provides-Extra: csp-layout-pass
51
51
  Requires-Dist: python-constraint>=1.4; extra == "csp-layout-pass"
52
52
  Provides-Extra: all
53
53
  Requires-Dist: qiskit[crosstalk-pass,csp-layout-pass,qasm3-import,visualization]; extra == "all"
54
+ Dynamic: license-file
54
55
 
55
56
  # Qiskit
56
57
 
@@ -121,7 +122,7 @@ from qiskit.primitives import StatevectorSampler
121
122
  sampler = StatevectorSampler()
122
123
  job = sampler.run([qc_measured], shots=1000)
123
124
  result = job.result()
124
- print(f" > Counts: {result[0].data["meas"].get_counts()}")
125
+ print(f" > Counts: {result[0].data['meas'].get_counts()}")
125
126
  ```
126
127
  Running this will give an outcome similar to `{'000': 497, '111': 503}` which is `000` 50% of the time and `111` 50% of the time up to statistical fluctuations.
127
128
  To illustrate the power of the Estimator, we now use the quantum information toolbox to create the operator $XXY+XYX+YXX-YYY$ and pass it to the `run()` function, along with our quantum circuit. Note that the Estimator requires a circuit _**without**_ measurements, so we use the `qc` circuit we created earlier.
@@ -1,10 +1,10 @@
1
1
  qiskit/version.py,sha256=MiraFeJt5GQEspFyvP3qJedHen2C1e8dNEttzg0u7YU,2498
2
2
  qiskit/__init__.py,sha256=qHC4vqYe3q0haxUm_RIlJD75soAGA3FgS53x_NCSlwE,7565
3
- qiskit/_accelerate.abi3.so,sha256=LJPOMS1izzhA9ebJIW4mUWe5XUwy7lbXM1Sf7Z4bYEI,9563420
3
+ qiskit/_accelerate.abi3.so,sha256=I5bjrWT_9-dQULgTa4lpSlgjerR2UXn0zeh7Nx4guf8,9568028
4
4
  qiskit/user_config.py,sha256=I7QCF9W2IDpleWunxDjgYGySsVUlq57gfj_137o0Dac,10109
5
5
  qiskit/_numpy_compat.py,sha256=ZlnDTF2KBTKcVF489ZuxoBk6r9KLsMuhAlozFhOn0a8,2815
6
6
  qiskit/exceptions.py,sha256=78bbfww9680_v4CaNgepavY5DwGTN7_j47Ckob3lLPM,5619
7
- qiskit/VERSION.txt,sha256=uZtMfN8jb1m8n2XZY96uyuOxan2th5OcrLkFf3Zk2u4,6
7
+ qiskit/VERSION.txt,sha256=vTHo2c-NFKHp4_3zufalJIGa7Q0bFGJ1I8Z2V2fH2PE,6
8
8
  qiskit/visualization/circuit_visualization.py,sha256=6R-A96Uwb_RZOovsSB0LGVsC7lP5IhtLNp6VP2yVBwE,698
9
9
  qiskit/visualization/counts_visualization.py,sha256=qBJHQyD6oSAa9nacOQvUPu6WpGGJ7baxy2Y6YerAWVU,16887
10
10
  qiskit/visualization/pass_manager_visualization.py,sha256=19m4pUdYG0csZgQbuxfFP-zfoVGnk0pJr0HVToD1Y04,10886
@@ -52,7 +52,7 @@ qiskit/visualization/circuit/styles/textbook.json,sha256=iRDk82xHfS7kVvivWaEpTwR
52
52
  qiskit/visualization/timeline/drawings.py,sha256=RCOw9TKZWbLwCVx1n7COPgzyC-2Id9l7F_67_PqQc18,9721
53
53
  qiskit/visualization/timeline/interface.py,sha256=DZyxwwOcxLTwMr9R8j-6aA5AqfWPtfQBgFSRoOshdbA,21442
54
54
  qiskit/visualization/timeline/__init__.py,sha256=Xr7ejeUy4xwJDHzhTW4ZpaltmQum9xK-953zDHdUnzQ,701
55
- qiskit/visualization/timeline/core.py,sha256=TTRFLBU8A_0-Pp6mrTP_zVxWACkCDC2OuUUH4f34yug,19321
55
+ qiskit/visualization/timeline/core.py,sha256=vP4GpmLPheTg7gyfUR11m30rFGWUMIpsmOtteXkEso8,19322
56
56
  qiskit/visualization/timeline/types.py,sha256=-mp8Oh7FrDvmCJGfFjViuY_SGuJMZZdkxJdhsaTTOAU,4627
57
57
  qiskit/visualization/timeline/generators.py,sha256=SwoPHpssTayvOTNke9jsJFxh0u8dNhluUYUChK7cb-E,15259
58
58
  qiskit/visualization/timeline/stylesheet.py,sha256=S62ob_aO7GvS5KGdyB6xve53vNtNunWcG7Yx3D2Fd1A,10914
@@ -81,10 +81,10 @@ qiskit/transpiler/passes/analysis/num_qubits.py,sha256=148iY9QgjtFF8yX8s0pY1GGM6
81
81
  qiskit/transpiler/passes/analysis/depth.py,sha256=jXHZh9d1Jaz37hhwiphri3BupneLYf69eWB0C_rF3AE,1176
82
82
  qiskit/transpiler/passes/analysis/width.py,sha256=M1OdalctWGZKoH8KPqtG8qixZ2UpwrWdk--SEgk5-9s,913
83
83
  qiskit/transpiler/passes/analysis/count_ops.py,sha256=7SksGCe0VqXfnu7o61NffbQdE4HcohiSENUn5gTsF0w,991
84
- qiskit/transpiler/passes/scheduling/alap.py,sha256=zJ35E7rK03KiVLVIE-NfsLOCn5hNFjzqvxzeN9svrJE,6716
84
+ qiskit/transpiler/passes/scheduling/alap.py,sha256=AfHXg_8w1HvZJIu7hhFMsGv9y_TRGHcxF7bacQZafAg,6718
85
85
  qiskit/transpiler/passes/scheduling/base_scheduler.py,sha256=a3wYAUwgNawwee1Ho5oBYXsf_XO1bB7EcKqnW3ZbgsU,15241
86
- qiskit/transpiler/passes/scheduling/asap.py,sha256=ljE56pEs4MXFmDjdeBWc-4OvLgy_RjQ9US3Qejc4Odw,7468
87
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py,sha256=fFQ4mhTqK3qaQixUexUVQ8epQc4-7vmtBGx6zuILZws,13822
86
+ qiskit/transpiler/passes/scheduling/asap.py,sha256=j_wSQ3FjXC1Aeqw6o2zRR6DaX5E59JW2T3mvMUFdSNw,7470
87
+ qiskit/transpiler/passes/scheduling/dynamical_decoupling.py,sha256=vu2oofAVNUJL8ZjPNgcnGfejwNVWTUdkqzU44omo1Fo,13823
88
88
  qiskit/transpiler/passes/scheduling/__init__.py,sha256=4kG8za8xe2nxhkRTH2unz5_lyyjXq_dvWCYWtKlytfc,1112
89
89
  qiskit/transpiler/passes/scheduling/time_unit_conversion.py,sha256=EAlJq_Ye1E-VA0SQ-QZCMcK5aKLOKq6_waU9bUipWFQ,6456
90
90
  qiskit/transpiler/passes/scheduling/scheduling/alap.py,sha256=RZT5l24mesdhXsFtVHwF9aqxC9NOnqgi1wKvsuHtoyw,5675
@@ -92,14 +92,14 @@ qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py,sha256=f44vQ-g9
92
92
  qiskit/transpiler/passes/scheduling/scheduling/asap.py,sha256=W2QQHfL271vNvd-m7cDFD5ujtA80_8FC9BEMlZHkzjM,5782
93
93
  qiskit/transpiler/passes/scheduling/scheduling/__init__.py,sha256=nuRmai-BprATkKLqoHzH-2vLu-E7VRPS9hbhTY8xiDo,654
94
94
  qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py,sha256=NzdU1K_aBt5yQCIuUHUSjkwZhdVtk6SG3uOMT5bZVsU,2854
95
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py,sha256=sj-v77drDNbCbDJioPmO1EC-e9Mk0j95aWYH1rlMnvw,21498
96
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py,sha256=3u7LnV6QIyIj52Ep1p-v5B4ftStEy7MLy6XGs2p6jvU,2866
95
+ qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py,sha256=YHhSi6iQ2L2J_M8Llg82Zz0Ijx80c177RYYBu-KHDaQ,21503
96
+ qiskit/transpiler/passes/scheduling/padding/pad_delay.py,sha256=10WNVGhQZYBm4xzCOfl-y5t84gqPh1RUSbQ0uDEsvwU,2867
97
97
  qiskit/transpiler/passes/scheduling/padding/__init__.py,sha256=SFLOuwUFgrBv5zRCemIWW5JQvlwCd0acsC3FytrYzII,629
98
- qiskit/transpiler/passes/scheduling/padding/base_padding.py,sha256=Q5r5glNrVwOT4GXzxKRsOxzJMz9IA3ErsDycXGQ7Szc,10465
98
+ qiskit/transpiler/passes/scheduling/padding/base_padding.py,sha256=WkN6ImJ6guna0ulGsTEPOmucPnFMqWRYmccx5gITM3E,10467
99
99
  qiskit/transpiler/passes/scheduling/alignments/reschedule.py,sha256=OJ9tuUmIo1y0zGqEhgt5JkRtHeSdEuLsVMm6-nzGT3s,10713
100
100
  qiskit/transpiler/passes/scheduling/alignments/__init__.py,sha256=BzOIhQ0xjuDcluWw60bE6IwBK6028Q6i7b1Yov2q8zs,4138
101
101
  qiskit/transpiler/passes/scheduling/alignments/check_durations.py,sha256=0HbPFlLTDFUwkjdgDYHx2RX88qRD6gGdmFun4cvhyds,3391
102
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py,sha256=3YB0vgtJEuOOf93XVxDiETY2w6VkQ5_Eso3PDYa8NIw,11174
102
+ qiskit/transpiler/passes/scheduling/alignments/align_measures.py,sha256=YzBPN8bqtf0JFOxoGDIvcb2qUnNXTKRaIJaYMqYU21o,11177
103
103
  qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py,sha256=-UYWL65v6FJ23m18vq3AwC_JFQUebGFY1ZSLZr4DQAQ,4909
104
104
  qiskit/transpiler/passes/calibration/builders.py,sha256=LfE8PPIy0owVUYKDxAhBmk7SJclTsxJUovC-LH7ZZAo,740
105
105
  qiskit/transpiler/passes/calibration/base_builder.py,sha256=Ht70gUplj0Zy5rC-iVCPzA94RNsCu8zZbkvP2XtwKwA,2859
@@ -109,12 +109,12 @@ qiskit/transpiler/passes/calibration/exceptions.py,sha256=HDBOCj1WqLo8nFt6hDKg7E
109
109
  qiskit/transpiler/passes/calibration/rx_builder.py,sha256=FWhH-t5Qr5OtX6FMFbTW0f_7hKzRwKAz1krzyMb78AI,6193
110
110
  qiskit/transpiler/passes/calibration/pulse_gate.py,sha256=I3MpueLKWH_KeZQtToZ0NguwbM2bhfC-tUfcDpemwLY,3823
111
111
  qiskit/transpiler/passes/calibration/rzx_builder.py,sha256=lF4G5kPdLUqCce2JkfFs_LxOSvPNwHpQBPZVhnGE8WE,17619
112
- qiskit/transpiler/passes/layout/sabre_layout.py,sha256=xtJdFtDVGKYfo5hTDepfVoT_VQ3ztm8iKSr8weBzNJU,23545
112
+ qiskit/transpiler/passes/layout/sabre_layout.py,sha256=zBBAs8-UNQHm9ZTx9WqgSUD0BjM7J6nUc5l-Kpf5WkY,23624
113
113
  qiskit/transpiler/passes/layout/enlarge_with_ancilla.py,sha256=1sEO0IHeuQuZWkzGE-CQaB7oPs6Y1g-kO1_Vuor_Dyk,1724
114
114
  qiskit/transpiler/passes/layout/full_ancilla_allocation.py,sha256=MOvTh_axWmUf8ibxpnO6JODQG1zetE7d80h6SHMTByE,4664
115
115
  qiskit/transpiler/passes/layout/vf2_layout.py,sha256=aOsu4U5_9oOO4BiMv0qUxziivGoMeKxggreXY3m44uU,12501
116
116
  qiskit/transpiler/passes/layout/_csp_custom_solver.py,sha256=BnyCQim89cPPzdMczvTA9e0CZ_zxn6n6H72waJzu3Oc,2748
117
- qiskit/transpiler/passes/layout/vf2_utils.py,sha256=KL4WLnChd-sHc2DyguqZG6KA-uaFMjEc6UDehRroyBU,10801
117
+ qiskit/transpiler/passes/layout/vf2_utils.py,sha256=qxlE_ZCwlmUwAR5HsXZLuxf1PeFcMrf2KDXAhH-iEqc,10746
118
118
  qiskit/transpiler/passes/layout/__init__.py,sha256=sS1jZFl4JORuzuU7uEjryZNhLbwqoo4dWAyfry4v-2Y,1042
119
119
  qiskit/transpiler/passes/layout/set_layout.py,sha256=KJFDlhNsQUe58SWbJVhMlGHLQyN_mJMayT-qmBet74w,2514
120
120
  qiskit/transpiler/passes/layout/layout_2q_distance.py,sha256=BC6zrKgVQD18fvnQZlZffeF2uhwSzWIqCUnOHbJODVE,2723
@@ -180,7 +180,7 @@ qiskit/transpiler/passes/utils/filter_op_nodes.py,sha256=iTy_oBNIFJOTFEEUUe3qW6_
180
180
  qiskit/transpiler/passes/utils/gates_basis.py,sha256=9AQ8uKi4CmiGF0CBnLQfc07ca_H5LBOyGshpcKW4UnA,1987
181
181
  qiskit/transpiler/passes/utils/barrier_before_final_measurements.py,sha256=1N8OMvteNo9UpRPn7aST62D56u8ikSTYK8ZFZWKOYGE,1530
182
182
  qiskit/transpiler/passes/utils/fixed_point.py,sha256=AiwkNvu-SLHvodddJRKfFEl7FPC62u1f3CB9lRne9eY,1773
183
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py,sha256=xM0KHNaH8N9-tn5rhC5tAGc5-faID8GvVFbH6HCqnsE,11052
183
+ qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py,sha256=8WRqmcUHm7qBbZ_TAx4YgBqElNJFoG_juKL1mCoAPwM,11946
184
184
  qiskit/transpiler/passes/synthesis/hls_plugins.py,sha256=Tx6fYnJuxchfzMtw8AtgSdcCkGI-lzdj2LU01z6MRhY,61914
185
185
  qiskit/transpiler/passes/synthesis/__init__.py,sha256=VYO9Sl_SJyoZ_bLronrkvK9u8kL-LW9G93LbWyWNEaM,925
186
186
  qiskit/transpiler/passes/synthesis/plugin.py,sha256=LnvGzGJ8Q5gSPKSJNmJ7fvnUub8lzG5iGGTqOTODpes,30806
@@ -261,7 +261,7 @@ qiskit/circuit/parametervector.py,sha256=2YfNejcpqiKPHFOVQP7MME3jqSRrjpXcBBQ7HCu
261
261
  qiskit/circuit/annotated_operation.py,sha256=9TPDzb_iFHjz1Qb-zekywdwD2FIe1J2kZM1yZxc7xR0,10487
262
262
  qiskit/circuit/barrier.py,sha256=cag3kUtDI2jwG2r3sCg0QqdUn5V0MoKD2Kr2y-0aoHo,1716
263
263
  qiskit/circuit/reset.py,sha256=gaUpq_mgDh6eYN6N90cXGG1zuq6Yck06Rgh2wCEp7a8,1128
264
- qiskit/circuit/duration.py,sha256=JtMbAdMGIPXg2xSf2LJXcmtyVUwdMQ95SScYC5XRUdA,2952
264
+ qiskit/circuit/duration.py,sha256=Y6AfG7IS4qjr7HdQoKr9yaJbdKh1VWKdoy6xAdwPu-8,2970
265
265
  qiskit/circuit/__init__.py,sha256=bcP6Z4PDC9Mz_pGTJam-fuTmieP6wCaZuDB_wJn4HUc,61656
266
266
  qiskit/circuit/classicalregister.py,sha256=oLKotR8jFREs6i2M1K7Jrvm5rrfG7TzLgaB0-PGa040,1691
267
267
  qiskit/circuit/operation.py,sha256=5SrIb_ap6EVKRHMNud5t-Iu7RU3Hz_KFSFjUUfHuf9w,2077
@@ -277,7 +277,7 @@ qiskit/circuit/controlledgate.py,sha256=n09UsVpdEGSbQ6aCGbBILyMrTrIIav2SalZjlA20
277
277
  qiskit/circuit/bit.py,sha256=YoVQ4GFaMtMBaQbB61brhOZf56Gbl2lncLoZqgnOjpk,3656
278
278
  qiskit/circuit/exceptions.py,sha256=QoT6kFuoVLe6lWUlTKkSMWufVtyfDCgaUe1kyv79WAY,691
279
279
  qiskit/circuit/equivalence_library.py,sha256=7f2T6c7sbDWaVQNVALNJL0olLVFZmHgA9xzcy7_FdDQ,708
280
- qiskit/circuit/quantumcircuit.py,sha256=kD4nPVb9KgnhK2RHuOakxd9mQNBuML7XQ4GGlvscq_o,296800
280
+ qiskit/circuit/quantumcircuit.py,sha256=ZP1w8DOEiWN0qQ4631hmeO8HIH-TLO4j5nZy9pHGi5s,296811
281
281
  qiskit/circuit/_standard_gates_commutations.py,sha256=1E6i6Atz3PkHGpguFFfTOcD9ffXCncCE1Jx6AlafMww,99006
282
282
  qiskit/circuit/instruction.py,sha256=__yzcCha2y0gZ1yFxJG6KcouLSt61Nf4Z-RI22z0J7M,26901
283
283
  qiskit/circuit/equivalence.py,sha256=8KmspRNLHbMx3OYG76ESA5_nXZJRDfvoDb3mhy7eV4A,3436
@@ -362,11 +362,11 @@ qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py,sha256=fhFUM0
362
362
  qiskit/circuit/library/standard_gates/s.py,sha256=eiGuG8LxUpGaphRwweW7WE68eVGsi5Jm-hG48WRL6_c,12822
363
363
  qiskit/circuit/library/standard_gates/rz.py,sha256=iSjn0hK4pTbyHbqRqMk28A7JIvd_4BsEilCUSTi2f_o,11098
364
364
  qiskit/circuit/library/standard_gates/u1.py,sha256=61IxPYB-dZywhoQa_aNWs7Wm32a-XfhRIihV4X4BduY,16018
365
- qiskit/circuit/library/standard_gates/r.py,sha256=0oRui_6pwk5cTF_ZWVDO7uRnQD_W4xm6ri_ioToEmZ8,4003
365
+ qiskit/circuit/library/standard_gates/r.py,sha256=9850R5UhHDAh_mjxskYYpvqiZkEYH1zRwZMd9AKJjsc,4033
366
366
  qiskit/circuit/library/standard_gates/swap.py,sha256=KGve1kKTQ7mo2Qld7_XUw9-ZWzIWIDehHlEBdC3sGwM,8991
367
367
  qiskit/circuit/library/standard_gates/y.py,sha256=kBM__007T5tzEwS126SHdxKo74MOOPNVBBb--SkY0so,7892
368
368
  qiskit/circuit/library/standard_gates/__init__.py,sha256=i_BgTcwVZn542eBjsKkr6GB-h30eDv10Yvd0FCrDNJI,3965
369
- qiskit/circuit/library/standard_gates/x.py,sha256=CQV6rABiguloIqvGl0pLYP8fdIJ69Y_d9_saOmhz3ZI,51710
369
+ qiskit/circuit/library/standard_gates/x.py,sha256=KKFd-1TLIN6RJe51m3uhiRmrrcqmttOHv8H3BPvWf3U,51654
370
370
  qiskit/circuit/library/standard_gates/global_phase.py,sha256=eXHt_02D8-MbEiCFTybG2d2Z8OdQnazYm-W4Weyjl0E,2913
371
371
  qiskit/circuit/library/standard_gates/rzz.py,sha256=5s0xe9I952oji3J-ZJB7OmJ1GWcf7_hurnCGj22_4QE,6519
372
372
  qiskit/circuit/library/standard_gates/xx_minus_yy.py,sha256=RNbZsrRCaTDtpfvDGxT8Ghyf7kEh03-GlYWTZVL_ti8,6823
@@ -588,20 +588,20 @@ qiskit/pulse/transforms/dag.py,sha256=x19_a3qVk1r_L50PRTjVNiR_oI2jkB_fPTCrtdrpec
588
588
  qiskit/pulse/transforms/__init__.py,sha256=4-BGF8CMvejz-cPitYW6YkxyiXOQ6_rTyIHwXRh_Hq4,2493
589
589
  qiskit/pulse/transforms/base_transforms.py,sha256=4UAs4ku2yYOLhF05AFvfl4e_FdcEvX8DqkMEggRxvTE,2401
590
590
  qiskit/converters/dagdependency_to_dag.py,sha256=SW9_g8QboCFLQ3-AW9OLSdycOXmPWXuz1rFri6cFQ_E,1854
591
- qiskit/converters/circuit_to_dag.py,sha256=ZOGmSZB_d09Dws7mi7IDDbvDgUnnsUmumY32FGLHwHA,3400
591
+ qiskit/converters/circuit_to_dag.py,sha256=CcrkHVx7sUDOSUdHRiGhpVVThD7cC0WGK7SBey4cE0w,3402
592
592
  qiskit/converters/circuit_to_gate.py,sha256=a8OkRYeWMDH2iq3o7KCp_aQOi58x6_ATYXK020uJTYA,4092
593
593
  qiskit/converters/__init__.py,sha256=2GTLmBLr9Azkfn7cYAJ35rVEzGeSnot_aRuMKBPAkTM,2169
594
594
  qiskit/converters/circuit_to_instruction.py,sha256=ghZrL2PRdmOoaY4x_e4aITCZ_xA0CPhMgA87ghJA7m4,6404
595
595
  qiskit/converters/circuit_to_dagdependency.py,sha256=tBhzkRkNtdr5ZImyqm1J67XSIgyI9ZB6ImGPfkt01Fs,1743
596
596
  qiskit/converters/circuit_to_dagdependency_v2.py,sha256=-dInfh_UkX2gpl4L6NfkALa3xM0SOX-Yxvsf-LBE3Rg,1578
597
597
  qiskit/converters/dagdependency_to_circuit.py,sha256=HO8hShGKwJz7puF_ZhuuPwenYZS6KcVH5M0-VT-AiiU,1553
598
- qiskit/converters/dag_to_circuit.py,sha256=YHRnHFntAXSknkVO9rRDB8km4AylNufz9Qhx1REdjl8,2901
598
+ qiskit/converters/dag_to_circuit.py,sha256=AnzmvuR02QOOHzqCFE755Oun1VCpHlXprQ1mpx4C5ME,2902
599
599
  qiskit/converters/dag_to_dagdependency_v2.py,sha256=r0iAXgA-cBz0lNqCcO4TxBlLkZ7eyR4GeU4B3myB3ls,1497
600
600
  qiskit/converters/dag_to_dagdependency.py,sha256=4Y5Frj5-6ydxkXTjfnD1O8-9I7VIqJFDEjDZk09Vzqg,1840
601
601
  qiskit/dagcircuit/collect_blocks.py,sha256=lrNP5GvTJ5WjDz4PLHPfwHYwI9ejyMZUqelb2owbvyk,16480
602
602
  qiskit/dagcircuit/dagdependency.py,sha256=zKiSeTwn1FLWOQ-jO3ZVPa3SQxviR-1bZ6s3_47gGpc,24581
603
603
  qiskit/dagcircuit/dagdepnode.py,sha256=gdZAyL9eZQPTMj4ZDKxz_bXd57QJbRB3RIi-dhBkHH0,5255
604
- qiskit/dagcircuit/dagdependency_v2.py,sha256=Y412XjI5scs-lylob36wqxTNiRykAStAAYdbGiMx6XQ,25218
604
+ qiskit/dagcircuit/dagdependency_v2.py,sha256=ruIkyRsw8zbYoNOj0KbKLbQw2NV6EfkS3JTAOQCo_2U,25219
605
605
  qiskit/dagcircuit/__init__.py,sha256=_EqnZKmQ3CdSov9QQDTSYcV21NKMluxy-YKluO9llPE,1192
606
606
  qiskit/dagcircuit/exceptions.py,sha256=Jy8-MnQBLRphHwwE1PAeDfj9HOY70qp7r0k1sC_CiZE,1234
607
607
  qiskit/dagcircuit/dagnode.py,sha256=N7l8TKqKzaYoLlPVkBXqFMKy2R89DYx3Wq2v_1GXgqY,6309
@@ -699,14 +699,14 @@ qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py,sha256=Nfr3ImXVD93CHwP-tOybdvI1
699
699
  qiskit/synthesis/linear_phase/cnot_phase_synth.py,sha256=RjMyvC9wLguZGhcmOGaPFFfzU20ig76zdiNO7ymHTuM,8616
700
700
  qiskit/synthesis/linear_phase/cz_depth_lnn.py,sha256=F4SaI8p2FWNrHgfJfY56tYW0JbaeFPQmfka_WwDSHSc,2171
701
701
  qiskit/synthesis/linear_phase/__init__.py,sha256=L68gn0ALnVL3H9W83Nwkj0TorHJT-a2lvnJK2Cu62tI,685
702
- qiskit/synthesis/discrete_basis/gate_sequence.py,sha256=FLVVnihU8IA1BboTZGk9Wy-08Di3SdiOctjXDSsEKJU,13908
703
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py,sha256=WUQQhh7mhlB6o-ROCB0GOs1Usk7mNecMRcS5x2DZG08,5301
702
+ qiskit/synthesis/discrete_basis/gate_sequence.py,sha256=_rbTklA3U-qThkj1aRmN9Q6lBcsA324NIDR8tRiZSnU,14030
703
+ qiskit/synthesis/discrete_basis/generate_basis_approximations.py,sha256=SgSYleWJ0x8fVkO1jwqyh8dWCH8tuKnwP2Fa_SF04JA,5293
704
704
  qiskit/synthesis/discrete_basis/__init__.py,sha256=enFeQyxhsY3GD9HtoVPZ-A3DRyjTJJUhrh-yaeD8wD4,656
705
- qiskit/synthesis/discrete_basis/commutator_decompose.py,sha256=POPNbXgBAiWivXVLgtTwJV6K_f4hYR3GAoDsc1yehuM,7553
706
- qiskit/synthesis/discrete_basis/solovay_kitaev.py,sha256=uLNQYWT4U-VjnDydJOUIKBxmx9YzFBpOwkyZrdHRMvc,8816
705
+ qiskit/synthesis/discrete_basis/commutator_decompose.py,sha256=0CDSpp4xyS718UOlOx6BfNM_519GPUSqWNg1Cd4hSLE,8343
706
+ qiskit/synthesis/discrete_basis/solovay_kitaev.py,sha256=a9FJO8zPNch_FAfmf4hHyjCg5JEu_ex0wHt9VZ96hQo,9640
707
707
  qiskit/primitives/backend_estimator_v2.py,sha256=xHuc1fmvEMvCawRaChBIUGBTFkNoXAAfanWs4NozcQ8,19278
708
708
  qiskit/primitives/backend_estimator.py,sha256=gYRa8EpGF9uEikthCpaCgRxYPrc3XE_6lJj2PPbdHcQ,19128
709
- qiskit/primitives/statevector_estimator.py,sha256=tUBKVuTxBEqIR4Pd6rbvgdiaKfNVs9rEfY-p6eB5rWA,7145
709
+ qiskit/primitives/statevector_estimator.py,sha256=yzP0kurA5GI4LTOpEFjnvRvdJvcgQWI0lR30Zs7SKtI,7146
710
710
  qiskit/primitives/statevector_sampler.py,sha256=7IkvHKw0sPsuKPzjHb_b4TyA0ONc0Uabh3M505TX0hY,10993
711
711
  qiskit/primitives/__init__.py,sha256=HvNeFcnzLd3yH34dB3lul7xHFKEg087TUHfq3vMsWS8,16899
712
712
  qiskit/primitives/primitive_job.py,sha256=qImFX0DlKQCQqPe_YOLV4narEa2sU_LAY4KArDh1GwI,2617
@@ -742,7 +742,7 @@ qiskit/qpy/common.py,sha256=kKcrLZAdEbXssanEPCHQ693FznmtNmucmmApDnd1e9I,12258
742
742
  qiskit/qpy/type_keys.py,sha256=_2FKRgX1H6B5L6UOt3RCBzbeecNh0LPISZUr75felQg,15761
743
743
  qiskit/qpy/formats.py,sha256=E9I8sxK1Zj5Nhk5-BbyHbSaBrdsj15AR3DGoVvTrL0k,11520
744
744
  qiskit/qpy/exceptions.py,sha256=YOwVSKR74VYOrXS5hBdln7EZ0ett0qsSQSALJDoJxwA,1847
745
- qiskit/qpy/binary_io/circuits.py,sha256=BKT8cpUM9kMnnX-jJyLHNSwqvVnjiV3XmXeUNnHP3O4,57960
745
+ qiskit/qpy/binary_io/circuits.py,sha256=0wkHUv6FKTCFDdCKV7Cg5OJygBckZmKlrDF1N-X-g68,58224
746
746
  qiskit/qpy/binary_io/__init__.py,sha256=1RUijiS9HbWuiCER5Hkkqg1Dlutap-ZhbIwK958qK-o,1073
747
747
  qiskit/qpy/binary_io/value.py,sha256=9gGgHGXH7MuOVeCLNsvopv27C7Rx7gDLHs9_OkDROFs,40893
748
748
  qiskit/qpy/binary_io/parse_sympy_repr.py,sha256=68szuHlFtspE9_fDlSoW15gU56g3doK9vfV4THARMKE,3290
@@ -829,9 +829,9 @@ qiskit/compiler/__init__.py,sha256=Far4-zXOyDGCqdNmFP4Q8zV47meApMw6sbIdd1t_wM4,9
829
829
  qiskit/compiler/assembler.py,sha256=aIt6k44m_wO2bfDmfzpy64n7ldUtYoZgDVNmsNsyqmg,28211
830
830
  qiskit/compiler/transpiler.py,sha256=BbH26PV2GorZOuWVcVxuTeiEQpJterLnUBR_g8QghJ8,26502
831
831
  qiskit/compiler/scheduler.py,sha256=RYwAaSym3Y4GwRhbx356FtsvF_JN_rhOLwKP84nUp9E,4532
832
- qiskit-1.4.2.dist-info/RECORD,,
833
- qiskit-1.4.2.dist-info/WHEEL,sha256=LkUlohpWK1iu6W5xldD9Lm80N2mBEDOTd8w6H_Ke57o,109
834
- qiskit-1.4.2.dist-info/entry_points.txt,sha256=8f4O6ZbFAIr5AzsP3wWosbp6n4_WI-sYGkgID9Y9JSE,5673
835
- qiskit-1.4.2.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
836
- qiskit-1.4.2.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
837
- qiskit-1.4.2.dist-info/METADATA,sha256=77Z5yTVCZT9Id9OKDWYrN7OmkFZT_v63Nc5A422gH4I,12729
832
+ qiskit-1.4.3.dist-info/RECORD,,
833
+ qiskit-1.4.3.dist-info/WHEEL,sha256=l8VcCeaGtal5kYQpq299pi6QNlpRVhF8YCwB5eaBLis,109
834
+ qiskit-1.4.3.dist-info/entry_points.txt,sha256=8f4O6ZbFAIr5AzsP3wWosbp6n4_WI-sYGkgID9Y9JSE,5673
835
+ qiskit-1.4.3.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
836
+ qiskit-1.4.3.dist-info/METADATA,sha256=IRq5iJIOZ18oSCJKsZKuY2PfTaOEG09JuOxi0l3parU,12751
837
+ qiskit-1.4.3.dist-info/licenses/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-abi3-macosx_10_12_x86_64
5
5