qiskit 1.4.2__cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 1.4.3__cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.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,14 +1,14 @@
1
- qiskit-1.4.2.dist-info/RECORD,,
2
- qiskit-1.4.2.dist-info/entry_points.txt,sha256=8f4O6ZbFAIr5AzsP3wWosbp6n4_WI-sYGkgID9Y9JSE,5673
3
- qiskit-1.4.2.dist-info/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
4
- qiskit-1.4.2.dist-info/WHEEL,sha256=KTDFJkDvZIjnqdwIpF1RkAzuH8E1ynyWpKqiZK1bK9g,149
5
- qiskit-1.4.2.dist-info/METADATA,sha256=77Z5yTVCZT9Id9OKDWYrN7OmkFZT_v63Nc5A422gH4I,12729
6
- qiskit-1.4.2.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
7
- qiskit/VERSION.txt,sha256=uZtMfN8jb1m8n2XZY96uyuOxan2th5OcrLkFf3Zk2u4,6
1
+ qiskit-1.4.3.dist-info/RECORD,,
2
+ qiskit-1.4.3.dist-info/entry_points.txt,sha256=8f4O6ZbFAIr5AzsP3wWosbp6n4_WI-sYGkgID9Y9JSE,5673
3
+ qiskit-1.4.3.dist-info/WHEEL,sha256=FqawStKelaw6A7XqkT3flcAlgHwm9MXqZKVuPu97mSY,149
4
+ qiskit-1.4.3.dist-info/METADATA,sha256=IRq5iJIOZ18oSCJKsZKuY2PfTaOEG09JuOxi0l3parU,12751
5
+ qiskit-1.4.3.dist-info/top_level.txt,sha256=_vjFXLv7qrHyJJOC2-JXfG54o4XQygW9GuQPxgtSt9Q,7
6
+ qiskit-1.4.3.dist-info/licenses/LICENSE.txt,sha256=IXrBXbzaJ4LgBPUVKIbYR5iMY2eqoMT8jDVTY8Ib0iQ,11416
7
+ qiskit/VERSION.txt,sha256=vTHo2c-NFKHp4_3zufalJIGa7Q0bFGJ1I8Z2V2fH2PE,6
8
8
  qiskit/__init__.py,sha256=qHC4vqYe3q0haxUm_RIlJD75soAGA3FgS53x_NCSlwE,7565
9
9
  qiskit/user_config.py,sha256=I7QCF9W2IDpleWunxDjgYGySsVUlq57gfj_137o0Dac,10109
10
10
  qiskit/exceptions.py,sha256=78bbfww9680_v4CaNgepavY5DwGTN7_j47Ckob3lLPM,5619
11
- qiskit/_accelerate.abi3.so,sha256=H8qrLvfr9_gNLZfwe0Owln0xwFCzq5DyHpdfIJOaess,10056256
11
+ qiskit/_accelerate.abi3.so,sha256=9xQeR6iMgahMb8Boj1d08DjAx5E5b3W1CQwTg-ZV5NU,10061696
12
12
  qiskit/_numpy_compat.py,sha256=ZlnDTF2KBTKcVF489ZuxoBk6r9KLsMuhAlozFhOn0a8,2815
13
13
  qiskit/version.py,sha256=MiraFeJt5GQEspFyvP3qJedHen2C1e8dNEttzg0u7YU,2498
14
14
  qiskit/compiler/__init__.py,sha256=Far4-zXOyDGCqdNmFP4Q8zV47meApMw6sbIdd1t_wM4,989
@@ -116,7 +116,7 @@ qiskit/visualization/pulse_v2/generators/chart.py,sha256=Y2na3oCE4--YbZ802VC6LhV
116
116
  qiskit/visualization/pulse_v2/generators/snapshot.py,sha256=pJxWrZQQ67qaM4aChcrTJNh0xxKfaZ9e0q6SGXIO9G8,4128
117
117
  qiskit/visualization/pulse_v2/generators/barrier.py,sha256=uzKh4pRj1YXnYiskoclWcYy14lUSlDgLk9u90s5U5xk,2563
118
118
  qiskit/visualization/pulse_v2/generators/frame.py,sha256=sCqwaXoY99lNclGmK4GwiBckHOXezfLVKhPz7w7tPII,13932
119
- qiskit/visualization/timeline/core.py,sha256=TTRFLBU8A_0-Pp6mrTP_zVxWACkCDC2OuUUH4f34yug,19321
119
+ qiskit/visualization/timeline/core.py,sha256=vP4GpmLPheTg7gyfUR11m30rFGWUMIpsmOtteXkEso8,19322
120
120
  qiskit/visualization/timeline/layouts.py,sha256=hVfzIjX9H_l6vvptGGpy7dR-EnPCoJkzHqaFsTsZWlA,3187
121
121
  qiskit/visualization/timeline/interface.py,sha256=DZyxwwOcxLTwMr9R8j-6aA5AqfWPtfQBgFSRoOshdbA,21442
122
122
  qiskit/visualization/timeline/__init__.py,sha256=Xr7ejeUy4xwJDHzhTW4ZpaltmQum9xK-953zDHdUnzQ,701
@@ -150,10 +150,10 @@ qiskit/transpiler/passes/layout/_csp_custom_solver.py,sha256=BnyCQim89cPPzdMczvT
150
150
  qiskit/transpiler/passes/layout/vf2_layout.py,sha256=aOsu4U5_9oOO4BiMv0qUxziivGoMeKxggreXY3m44uU,12501
151
151
  qiskit/transpiler/passes/layout/sabre_pre_layout.py,sha256=utjTNMcyAOI-7iCmP3AAP5HibsvYNlc3BTiSMGs5w5M,9429
152
152
  qiskit/transpiler/passes/layout/disjoint_utils.py,sha256=rf48bvP5j2C2eZf_CFFIlXnYJZxnw7rX23hD-pocNFs,9409
153
- qiskit/transpiler/passes/layout/sabre_layout.py,sha256=xtJdFtDVGKYfo5hTDepfVoT_VQ3ztm8iKSr8weBzNJU,23545
153
+ qiskit/transpiler/passes/layout/sabre_layout.py,sha256=zBBAs8-UNQHm9ZTx9WqgSUD0BjM7J6nUc5l-Kpf5WkY,23624
154
154
  qiskit/transpiler/passes/layout/csp_layout.py,sha256=J_IHZIYsZkEw0M5WcP-Rub9o6McJbYKyhycaxsMgPU4,5421
155
155
  qiskit/transpiler/passes/layout/trivial_layout.py,sha256=vLtp3gr4-KRrEwtw2NEVrY5LKuFrMKOY0Cr7LhdoMBs,2379
156
- qiskit/transpiler/passes/layout/vf2_utils.py,sha256=KL4WLnChd-sHc2DyguqZG6KA-uaFMjEc6UDehRroyBU,10801
156
+ qiskit/transpiler/passes/layout/vf2_utils.py,sha256=qxlE_ZCwlmUwAR5HsXZLuxf1PeFcMrf2KDXAhH-iEqc,10746
157
157
  qiskit/transpiler/passes/analysis/num_tensor_factors.py,sha256=KK5DcFja8JsO0pfYvmYGnyEAPMZPYUTJpT9xWhwiYWI,950
158
158
  qiskit/transpiler/passes/analysis/__init__.py,sha256=zFkmqBW9ZfrVg0Ol6krRE7D0h-S5sF89qkfDdW_t5Eg,875
159
159
  qiskit/transpiler/passes/analysis/num_qubits.py,sha256=148iY9QgjtFF8yX8s0pY1GGM6yU1neSwt1mO7nOAaQw,896
@@ -251,7 +251,7 @@ qiskit/transpiler/passes/calibration/exceptions.py,sha256=HDBOCj1WqLo8nFt6hDKg7E
251
251
  qiskit/transpiler/passes/calibration/rx_builder.py,sha256=FWhH-t5Qr5OtX6FMFbTW0f_7hKzRwKAz1krzyMb78AI,6193
252
252
  qiskit/transpiler/passes/calibration/builders.py,sha256=LfE8PPIy0owVUYKDxAhBmk7SJclTsxJUovC-LH7ZZAo,740
253
253
  qiskit/transpiler/passes/synthesis/__init__.py,sha256=VYO9Sl_SJyoZ_bLronrkvK9u8kL-LW9G93LbWyWNEaM,925
254
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py,sha256=xM0KHNaH8N9-tn5rhC5tAGc5-faID8GvVFbH6HCqnsE,11052
254
+ qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py,sha256=8WRqmcUHm7qBbZ_TAx4YgBqElNJFoG_juKL1mCoAPwM,11946
255
255
  qiskit/transpiler/passes/synthesis/high_level_synthesis.py,sha256=rTORc72gdQhty_0XE8VMESznuRbNiDdAp2O4QfCZl74,40585
256
256
  qiskit/transpiler/passes/synthesis/unitary_synthesis.py,sha256=aspQI0wy-ASJHRC_Jt7jBxvG0GDyTBHoQSCTyy_pbj0,46211
257
257
  qiskit/transpiler/passes/synthesis/hls_plugins.py,sha256=Tx6fYnJuxchfzMtw8AtgSdcCkGI-lzdj2LU01z6MRhY,61914
@@ -260,19 +260,19 @@ qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py,sha256=Q1r-52HM
260
260
  qiskit/transpiler/passes/synthesis/aqc_plugin.py,sha256=SDgHqcCHR0hON50ckSHQDrVnBzOc-I7hYibE6r6oaB8,5343
261
261
  qiskit/transpiler/passes/scheduling/base_scheduler.py,sha256=a3wYAUwgNawwee1Ho5oBYXsf_XO1bB7EcKqnW3ZbgsU,15241
262
262
  qiskit/transpiler/passes/scheduling/__init__.py,sha256=4kG8za8xe2nxhkRTH2unz5_lyyjXq_dvWCYWtKlytfc,1112
263
- qiskit/transpiler/passes/scheduling/asap.py,sha256=ljE56pEs4MXFmDjdeBWc-4OvLgy_RjQ9US3Qejc4Odw,7468
264
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py,sha256=fFQ4mhTqK3qaQixUexUVQ8epQc4-7vmtBGx6zuILZws,13822
263
+ qiskit/transpiler/passes/scheduling/asap.py,sha256=j_wSQ3FjXC1Aeqw6o2zRR6DaX5E59JW2T3mvMUFdSNw,7470
264
+ qiskit/transpiler/passes/scheduling/dynamical_decoupling.py,sha256=vu2oofAVNUJL8ZjPNgcnGfejwNVWTUdkqzU44omo1Fo,13823
265
265
  qiskit/transpiler/passes/scheduling/time_unit_conversion.py,sha256=EAlJq_Ye1E-VA0SQ-QZCMcK5aKLOKq6_waU9bUipWFQ,6456
266
- qiskit/transpiler/passes/scheduling/alap.py,sha256=zJ35E7rK03KiVLVIE-NfsLOCn5hNFjzqvxzeN9svrJE,6716
266
+ qiskit/transpiler/passes/scheduling/alap.py,sha256=AfHXg_8w1HvZJIu7hhFMsGv9y_TRGHcxF7bacQZafAg,6718
267
267
  qiskit/transpiler/passes/scheduling/alignments/reschedule.py,sha256=OJ9tuUmIo1y0zGqEhgt5JkRtHeSdEuLsVMm6-nzGT3s,10713
268
268
  qiskit/transpiler/passes/scheduling/alignments/__init__.py,sha256=BzOIhQ0xjuDcluWw60bE6IwBK6028Q6i7b1Yov2q8zs,4138
269
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py,sha256=3YB0vgtJEuOOf93XVxDiETY2w6VkQ5_Eso3PDYa8NIw,11174
269
+ qiskit/transpiler/passes/scheduling/alignments/align_measures.py,sha256=YzBPN8bqtf0JFOxoGDIvcb2qUnNXTKRaIJaYMqYU21o,11177
270
270
  qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py,sha256=-UYWL65v6FJ23m18vq3AwC_JFQUebGFY1ZSLZr4DQAQ,4909
271
271
  qiskit/transpiler/passes/scheduling/alignments/check_durations.py,sha256=0HbPFlLTDFUwkjdgDYHx2RX88qRD6gGdmFun4cvhyds,3391
272
- qiskit/transpiler/passes/scheduling/padding/base_padding.py,sha256=Q5r5glNrVwOT4GXzxKRsOxzJMz9IA3ErsDycXGQ7Szc,10465
272
+ qiskit/transpiler/passes/scheduling/padding/base_padding.py,sha256=WkN6ImJ6guna0ulGsTEPOmucPnFMqWRYmccx5gITM3E,10467
273
273
  qiskit/transpiler/passes/scheduling/padding/__init__.py,sha256=SFLOuwUFgrBv5zRCemIWW5JQvlwCd0acsC3FytrYzII,629
274
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py,sha256=3u7LnV6QIyIj52Ep1p-v5B4ftStEy7MLy6XGs2p6jvU,2866
275
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py,sha256=sj-v77drDNbCbDJioPmO1EC-e9Mk0j95aWYH1rlMnvw,21498
274
+ qiskit/transpiler/passes/scheduling/padding/pad_delay.py,sha256=10WNVGhQZYBm4xzCOfl-y5t84gqPh1RUSbQ0uDEsvwU,2867
275
+ qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py,sha256=YHhSi6iQ2L2J_M8Llg82Zz0Ijx80c177RYYBu-KHDaQ,21503
276
276
  qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py,sha256=f44vQ-g9KtZCuN7KUoLU1eKvE2PKxE9vdg5xGDk8zOg,3728
277
277
  qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py,sha256=NzdU1K_aBt5yQCIuUHUSjkwZhdVtk6SG3uOMT5bZVsU,2854
278
278
  qiskit/transpiler/passes/scheduling/scheduling/__init__.py,sha256=nuRmai-BprATkKLqoHzH-2vLu-E7VRPS9hbhTY8xiDo,654
@@ -306,7 +306,7 @@ qiskit/qpy/formats.py,sha256=E9I8sxK1Zj5Nhk5-BbyHbSaBrdsj15AR3DGoVvTrL0k,11520
306
306
  qiskit/qpy/exceptions.py,sha256=YOwVSKR74VYOrXS5hBdln7EZ0ett0qsSQSALJDoJxwA,1847
307
307
  qiskit/qpy/binary_io/parse_sympy_repr.py,sha256=68szuHlFtspE9_fDlSoW15gU56g3doK9vfV4THARMKE,3290
308
308
  qiskit/qpy/binary_io/__init__.py,sha256=1RUijiS9HbWuiCER5Hkkqg1Dlutap-ZhbIwK958qK-o,1073
309
- qiskit/qpy/binary_io/circuits.py,sha256=BKT8cpUM9kMnnX-jJyLHNSwqvVnjiV3XmXeUNnHP3O4,57960
309
+ qiskit/qpy/binary_io/circuits.py,sha256=0wkHUv6FKTCFDdCKV7Cg5OJygBckZmKlrDF1N-X-g68,58224
310
310
  qiskit/qpy/binary_io/value.py,sha256=9gGgHGXH7MuOVeCLNsvopv27C7Rx7gDLHs9_OkDROFs,40893
311
311
  qiskit/qpy/binary_io/schedules.py,sha256=RNluF-gVs8neuu8nD27nvmOPWeHEI7QPeVwiAnn2qEw,25483
312
312
  qiskit/passmanager/base_tasks.py,sha256=65HKH9XtDcRIG3fNkyez9swTnpE9Gx0QHOWNHGzQgqc,7541
@@ -389,9 +389,9 @@ qiskit/converters/circuit_to_dagdependency.py,sha256=tBhzkRkNtdr5ZImyqm1J67XSIgy
389
389
  qiskit/converters/dagdependency_to_dag.py,sha256=SW9_g8QboCFLQ3-AW9OLSdycOXmPWXuz1rFri6cFQ_E,1854
390
390
  qiskit/converters/circuit_to_gate.py,sha256=a8OkRYeWMDH2iq3o7KCp_aQOi58x6_ATYXK020uJTYA,4092
391
391
  qiskit/converters/circuit_to_instruction.py,sha256=ghZrL2PRdmOoaY4x_e4aITCZ_xA0CPhMgA87ghJA7m4,6404
392
- qiskit/converters/dag_to_circuit.py,sha256=YHRnHFntAXSknkVO9rRDB8km4AylNufz9Qhx1REdjl8,2901
392
+ qiskit/converters/dag_to_circuit.py,sha256=AnzmvuR02QOOHzqCFE755Oun1VCpHlXprQ1mpx4C5ME,2902
393
393
  qiskit/converters/dagdependency_to_circuit.py,sha256=HO8hShGKwJz7puF_ZhuuPwenYZS6KcVH5M0-VT-AiiU,1553
394
- qiskit/converters/circuit_to_dag.py,sha256=ZOGmSZB_d09Dws7mi7IDDbvDgUnnsUmumY32FGLHwHA,3400
394
+ qiskit/converters/circuit_to_dag.py,sha256=CcrkHVx7sUDOSUdHRiGhpVVThD7cC0WGK7SBey4cE0w,3402
395
395
  qiskit/converters/dag_to_dagdependency_v2.py,sha256=r0iAXgA-cBz0lNqCcO4TxBlLkZ7eyR4GeU4B3myB3ls,1497
396
396
  qiskit/converters/circuit_to_dagdependency_v2.py,sha256=-dInfh_UkX2gpl4L6NfkALa3xM0SOX-Yxvsf-LBE3Rg,1578
397
397
  qiskit/converters/dag_to_dagdependency.py,sha256=4Y5Frj5-6ydxkXTjfnD1O8-9I7VIqJFDEjDZk09Vzqg,1840
@@ -406,11 +406,11 @@ qiskit/synthesis/permutation/permutation_utils.py,sha256=9is8GgPp7J5Tsw2l0-AnJDZ
406
406
  qiskit/synthesis/permutation/permutation_full.py,sha256=f6T9eXz7ajb5A1O_rKd1vB5APSTV3B2RHQ9modBWdKg,3352
407
407
  qiskit/synthesis/permutation/permutation_reverse_lnn.py,sha256=A4XeuLN_oKamQmnWL9XUrtUwTlZej3wCZ7f-6pUXSl4,3206
408
408
  qiskit/synthesis/permutation/permutation_lnn.py,sha256=dmqhE6t0_Du7gCn3fZJEdDE9ocpxtkVSINVoHR_G3Sw,2445
409
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py,sha256=WUQQhh7mhlB6o-ROCB0GOs1Usk7mNecMRcS5x2DZG08,5301
409
+ qiskit/synthesis/discrete_basis/generate_basis_approximations.py,sha256=SgSYleWJ0x8fVkO1jwqyh8dWCH8tuKnwP2Fa_SF04JA,5293
410
410
  qiskit/synthesis/discrete_basis/__init__.py,sha256=enFeQyxhsY3GD9HtoVPZ-A3DRyjTJJUhrh-yaeD8wD4,656
411
- qiskit/synthesis/discrete_basis/commutator_decompose.py,sha256=POPNbXgBAiWivXVLgtTwJV6K_f4hYR3GAoDsc1yehuM,7553
412
- qiskit/synthesis/discrete_basis/solovay_kitaev.py,sha256=uLNQYWT4U-VjnDydJOUIKBxmx9YzFBpOwkyZrdHRMvc,8816
413
- qiskit/synthesis/discrete_basis/gate_sequence.py,sha256=FLVVnihU8IA1BboTZGk9Wy-08Di3SdiOctjXDSsEKJU,13908
411
+ qiskit/synthesis/discrete_basis/commutator_decompose.py,sha256=0CDSpp4xyS718UOlOx6BfNM_519GPUSqWNg1Cd4hSLE,8343
412
+ qiskit/synthesis/discrete_basis/solovay_kitaev.py,sha256=a9FJO8zPNch_FAfmf4hHyjCg5JEu_ex0wHt9VZ96hQo,9640
413
+ qiskit/synthesis/discrete_basis/gate_sequence.py,sha256=_rbTklA3U-qThkj1aRmN9Q6lBcsA324NIDR8tRiZSnU,14030
414
414
  qiskit/synthesis/two_qubit/__init__.py,sha256=MEMY-lKO6W30WF_CmWR5xvV7oLt-LEV0ggMbb129TUg,673
415
415
  qiskit/synthesis/two_qubit/two_qubit_decompose.py,sha256=pLF6IRY5yrlr_UQRmMjK9zQIJd3iy1CSeX5oTiqj-yU,27059
416
416
  qiskit/synthesis/two_qubit/local_invariance.py,sha256=8LhHeY4dzTkUo_EJCGGf73Ra-WEbbTtmHsT0J7ATG7w,2085
@@ -485,9 +485,9 @@ qiskit/circuit/_classical_resource_map.py,sha256=vgnkvPsdKn5czlLM3CfMn02HY8J7m1d
485
485
  qiskit/circuit/add_control.py,sha256=jT_PaSowKSFa3g_upN0PP0qCLIKsFpkP4h11H-T55js,10308
486
486
  qiskit/circuit/commutation_checker.py,sha256=7LjLY8bngEOmDX6l3VOR_aujfMC9eRqdJp-Tfq3OxvY,3790
487
487
  qiskit/circuit/__init__.py,sha256=bcP6Z4PDC9Mz_pGTJam-fuTmieP6wCaZuDB_wJn4HUc,61656
488
- qiskit/circuit/duration.py,sha256=JtMbAdMGIPXg2xSf2LJXcmtyVUwdMQ95SScYC5XRUdA,2952
488
+ qiskit/circuit/duration.py,sha256=Y6AfG7IS4qjr7HdQoKr9yaJbdKh1VWKdoy6xAdwPu-8,2970
489
489
  qiskit/circuit/quantumcircuitdata.py,sha256=Wc2il1uEGf4UY7gcSs6UoaOlQvYZzD60ZARmkzuegQE,4878
490
- qiskit/circuit/quantumcircuit.py,sha256=kD4nPVb9KgnhK2RHuOakxd9mQNBuML7XQ4GGlvscq_o,296800
490
+ qiskit/circuit/quantumcircuit.py,sha256=ZP1w8DOEiWN0qQ4631hmeO8HIH-TLO4j5nZy9pHGi5s,296811
491
491
  qiskit/circuit/measure.py,sha256=T4Rt2MZ4IH2ERnKOHe5YepiX21poxnYKYJFUt1N2ZL4,1470
492
492
  qiskit/circuit/reset.py,sha256=gaUpq_mgDh6eYN6N90cXGG1zuq6Yck06Rgh2wCEp7a8,1128
493
493
  qiskit/circuit/_standard_gates_commutations.py,sha256=1E6i6Atz3PkHGpguFFfTOcD9ffXCncCE1Jx6AlafMww,99006
@@ -632,7 +632,7 @@ qiskit/circuit/library/standard_gates/rz.py,sha256=iSjn0hK4pTbyHbqRqMk28A7JIvd_4
632
632
  qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py,sha256=9U6GRJU6VF43F9VGq0P0qIfPITvyx3hlSUpV_rxACu4,14960
633
633
  qiskit/circuit/library/standard_gates/p.py,sha256=rqnuS6aIrHugFkLdmrUKHlhlKiohfkvg8Evwpg7ttwI,14917
634
634
  qiskit/circuit/library/standard_gates/__init__.py,sha256=i_BgTcwVZn542eBjsKkr6GB-h30eDv10Yvd0FCrDNJI,3965
635
- qiskit/circuit/library/standard_gates/r.py,sha256=0oRui_6pwk5cTF_ZWVDO7uRnQD_W4xm6ri_ioToEmZ8,4003
635
+ qiskit/circuit/library/standard_gates/r.py,sha256=9850R5UhHDAh_mjxskYYpvqiZkEYH1zRwZMd9AKJjsc,4033
636
636
  qiskit/circuit/library/standard_gates/i.py,sha256=Q7LTzUwrVe_nlf5Fu-Ty0EGXti2BwriCpgmz_ozu6uM,2379
637
637
  qiskit/circuit/library/standard_gates/sx.py,sha256=VuYsoq_QMpK90h3agVI8OgB6NRd67GIH-ltFL2h4OSk,9990
638
638
  qiskit/circuit/library/standard_gates/u2.py,sha256=N-LLbaT7Nlcb7MtlQ13GkDSaIvFxjbaU3cuA5YpvRzw,4403
@@ -657,7 +657,7 @@ qiskit/circuit/library/standard_gates/t.py,sha256=IjXh1WP5bgDS08oONmLnLja9hzSVVp
657
657
  qiskit/circuit/library/standard_gates/xx_plus_yy.py,sha256=tiLkyrW05BAXNsfWgrE7FJ8Hf-aH8t4_gglJySonfe0,8280
658
658
  qiskit/circuit/library/standard_gates/global_phase.py,sha256=eXHt_02D8-MbEiCFTybG2d2Z8OdQnazYm-W4Weyjl0E,2913
659
659
  qiskit/circuit/library/standard_gates/equivalence_library.py,sha256=wCkPovpYzuDpBTlCJuHJsbyxJ6tSqdIiq59HJ_6hcGs,74211
660
- qiskit/circuit/library/standard_gates/x.py,sha256=CQV6rABiguloIqvGl0pLYP8fdIJ69Y_d9_saOmhz3ZI,51710
660
+ qiskit/circuit/library/standard_gates/x.py,sha256=KKFd-1TLIN6RJe51m3uhiRmrrcqmttOHv8H3BPvWf3U,51654
661
661
  qiskit/circuit/library/n_local/real_amplitudes.py,sha256=Hn0WHRPSwSI8nGOCHNapnEtwnlcXbdnEDqPNz9KkuZI,19657
662
662
  qiskit/circuit/library/n_local/n_local.py,sha256=8Z3kOLW8QVxANZ_q33xolRRXdw5-EtR6bIgIfMg7vac,61099
663
663
  qiskit/circuit/library/n_local/efficient_su2.py,sha256=Pw1EpB2VwRJefSbYi9lsbZo1cYuJtTHrOc4b4RjJSgQ,15539
@@ -746,7 +746,7 @@ qiskit/primitives/statevector_sampler.py,sha256=7IkvHKw0sPsuKPzjHb_b4TyA0ONc0Uab
746
746
  qiskit/primitives/sampler.py,sha256=H2sgcx66xTZsodunf4CpfdZ12aVLLNUYHjR7VmaUkj0,5861
747
747
  qiskit/primitives/primitive_job.py,sha256=qImFX0DlKQCQqPe_YOLV4narEa2sU_LAY4KArDh1GwI,2617
748
748
  qiskit/primitives/utils.py,sha256=32gJvSOdFOh08DLlUBvZ2js4ijkrKk2vBGHViZHd20s,8346
749
- qiskit/primitives/statevector_estimator.py,sha256=tUBKVuTxBEqIR4Pd6rbvgdiaKfNVs9rEfY-p6eB5rWA,7145
749
+ qiskit/primitives/statevector_estimator.py,sha256=yzP0kurA5GI4LTOpEFjnvRvdJvcgQWI0lR30Zs7SKtI,7146
750
750
  qiskit/primitives/estimator.py,sha256=Y7bxOSDPmZ5L9Ut-Y48SJtP0iT1maojsnFhpBgyEM1w,6734
751
751
  qiskit/primitives/containers/observables_array.py,sha256=OAKP7IDwiadZxXqV58wZYX3BA10pdSQ6-uh_sm8OzlY,10198
752
752
  qiskit/primitives/containers/object_array.py,sha256=V50bfBDMhpIiD9UNI5r4R9bPmUN2abvMbZs_yEEn21g,3375
@@ -812,7 +812,7 @@ qiskit/dagcircuit/dagcircuit.py,sha256=5Q-E4j-SmDU3ysdW50Iw5Wdww94HaSW3JZ8ov1Xsl
812
812
  qiskit/dagcircuit/dagdepnode.py,sha256=gdZAyL9eZQPTMj4ZDKxz_bXd57QJbRB3RIi-dhBkHH0,5255
813
813
  qiskit/dagcircuit/exceptions.py,sha256=Jy8-MnQBLRphHwwE1PAeDfj9HOY70qp7r0k1sC_CiZE,1234
814
814
  qiskit/dagcircuit/collect_blocks.py,sha256=lrNP5GvTJ5WjDz4PLHPfwHYwI9ejyMZUqelb2owbvyk,16480
815
- qiskit/dagcircuit/dagdependency_v2.py,sha256=Y412XjI5scs-lylob36wqxTNiRykAStAAYdbGiMx6XQ,25218
815
+ qiskit/dagcircuit/dagdependency_v2.py,sha256=ruIkyRsw8zbYoNOj0KbKLbQw2NV6EfkS3JTAOQCo_2U,25219
816
816
  qiskit/dagcircuit/dagdependency.py,sha256=zKiSeTwn1FLWOQ-jO3ZVPa3SQxviR-1bZ6s3_47gGpc,24581
817
817
  qiskit/assembler/run_config.py,sha256=4LiIAUBG7pnO24eGbZn6dhnsd0N7mXKKMX1BbiyE7WM,2461
818
818
  qiskit/assembler/__init__.py,sha256=bK10qN2xsjjSUh7VcLuTZkpFs6lTAPHC3vhpNZ_s2iU,1136
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.4.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-abi3-manylinux_2_17_aarch64
5
5
  Tag: cp39-abi3-manylinux2014_aarch64