qiskit 2.0.2__cp39-abi3-macosx_11_0_arm64.whl → 2.1.0rc1__cp39-abi3-macosx_11_0_arm64.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 (179) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +19 -1
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +13 -21
  5. qiskit/circuit/_add_control.py +57 -31
  6. qiskit/circuit/_classical_resource_map.py +4 -0
  7. qiskit/circuit/annotation.py +404 -0
  8. qiskit/circuit/classical/expr/__init__.py +1 -1
  9. qiskit/circuit/classical/expr/expr.py +104 -446
  10. qiskit/circuit/classical/expr/visitors.py +6 -0
  11. qiskit/circuit/classical/types/types.py +7 -130
  12. qiskit/circuit/controlflow/box.py +32 -7
  13. qiskit/circuit/delay.py +11 -9
  14. qiskit/circuit/library/arithmetic/adders/adder.py +5 -5
  15. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -3
  16. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +7 -3
  17. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +23 -15
  18. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +22 -14
  19. qiskit/circuit/library/arithmetic/quadratic_form.py +6 -0
  20. qiskit/circuit/library/arithmetic/weighted_adder.py +43 -24
  21. qiskit/circuit/library/basis_change/qft.py +2 -2
  22. qiskit/circuit/library/blueprintcircuit.py +6 -0
  23. qiskit/circuit/library/boolean_logic/inner_product.py +2 -2
  24. qiskit/circuit/library/boolean_logic/quantum_and.py +2 -2
  25. qiskit/circuit/library/boolean_logic/quantum_or.py +3 -3
  26. qiskit/circuit/library/boolean_logic/quantum_xor.py +2 -2
  27. qiskit/circuit/library/data_preparation/_z_feature_map.py +2 -2
  28. qiskit/circuit/library/data_preparation/_zz_feature_map.py +2 -2
  29. qiskit/circuit/library/data_preparation/pauli_feature_map.py +2 -2
  30. qiskit/circuit/library/fourier_checking.py +2 -2
  31. qiskit/circuit/library/generalized_gates/diagonal.py +5 -1
  32. qiskit/circuit/library/generalized_gates/gms.py +5 -1
  33. qiskit/circuit/library/generalized_gates/linear_function.py +2 -2
  34. qiskit/circuit/library/generalized_gates/permutation.py +5 -1
  35. qiskit/circuit/library/generalized_gates/uc.py +1 -1
  36. qiskit/circuit/library/generalized_gates/unitary.py +21 -2
  37. qiskit/circuit/library/graph_state.py +2 -2
  38. qiskit/circuit/library/grover_operator.py +2 -2
  39. qiskit/circuit/library/hidden_linear_function.py +2 -2
  40. qiskit/circuit/library/iqp.py +2 -2
  41. qiskit/circuit/library/n_local/efficient_su2.py +2 -2
  42. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  43. qiskit/circuit/library/n_local/excitation_preserving.py +7 -9
  44. qiskit/circuit/library/n_local/n_local.py +4 -3
  45. qiskit/circuit/library/n_local/pauli_two_design.py +2 -2
  46. qiskit/circuit/library/n_local/real_amplitudes.py +2 -2
  47. qiskit/circuit/library/n_local/two_local.py +2 -2
  48. qiskit/circuit/library/overlap.py +2 -2
  49. qiskit/circuit/library/pauli_evolution.py +3 -2
  50. qiskit/circuit/library/phase_estimation.py +2 -2
  51. qiskit/circuit/library/standard_gates/dcx.py +11 -12
  52. qiskit/circuit/library/standard_gates/ecr.py +21 -24
  53. qiskit/circuit/library/standard_gates/equivalence_library.py +232 -96
  54. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  55. qiskit/circuit/library/standard_gates/h.py +22 -45
  56. qiskit/circuit/library/standard_gates/i.py +1 -1
  57. qiskit/circuit/library/standard_gates/iswap.py +13 -31
  58. qiskit/circuit/library/standard_gates/p.py +19 -26
  59. qiskit/circuit/library/standard_gates/r.py +11 -17
  60. qiskit/circuit/library/standard_gates/rx.py +21 -45
  61. qiskit/circuit/library/standard_gates/rxx.py +7 -22
  62. qiskit/circuit/library/standard_gates/ry.py +21 -39
  63. qiskit/circuit/library/standard_gates/ryy.py +13 -28
  64. qiskit/circuit/library/standard_gates/rz.py +18 -35
  65. qiskit/circuit/library/standard_gates/rzx.py +7 -22
  66. qiskit/circuit/library/standard_gates/rzz.py +7 -19
  67. qiskit/circuit/library/standard_gates/s.py +44 -39
  68. qiskit/circuit/library/standard_gates/swap.py +25 -38
  69. qiskit/circuit/library/standard_gates/sx.py +34 -41
  70. qiskit/circuit/library/standard_gates/t.py +18 -27
  71. qiskit/circuit/library/standard_gates/u.py +8 -24
  72. qiskit/circuit/library/standard_gates/u1.py +28 -52
  73. qiskit/circuit/library/standard_gates/u2.py +9 -9
  74. qiskit/circuit/library/standard_gates/u3.py +24 -40
  75. qiskit/circuit/library/standard_gates/x.py +190 -336
  76. qiskit/circuit/library/standard_gates/xx_minus_yy.py +12 -50
  77. qiskit/circuit/library/standard_gates/xx_plus_yy.py +13 -52
  78. qiskit/circuit/library/standard_gates/y.py +19 -23
  79. qiskit/circuit/library/standard_gates/z.py +31 -38
  80. qiskit/circuit/parameter.py +14 -5
  81. qiskit/circuit/parameterexpression.py +109 -75
  82. qiskit/circuit/quantumcircuit.py +168 -98
  83. qiskit/circuit/quantumcircuitdata.py +1 -0
  84. qiskit/circuit/random/__init__.py +37 -2
  85. qiskit/circuit/random/utils.py +445 -56
  86. qiskit/circuit/tools/pi_check.py +5 -13
  87. qiskit/compiler/transpiler.py +1 -1
  88. qiskit/converters/circuit_to_instruction.py +2 -2
  89. qiskit/dagcircuit/dagnode.py +8 -3
  90. qiskit/primitives/__init__.py +2 -2
  91. qiskit/primitives/base/base_estimator.py +2 -2
  92. qiskit/primitives/containers/data_bin.py +0 -3
  93. qiskit/primitives/containers/observables_array.py +192 -108
  94. qiskit/primitives/primitive_job.py +29 -10
  95. qiskit/providers/fake_provider/generic_backend_v2.py +2 -0
  96. qiskit/qasm3/__init__.py +106 -12
  97. qiskit/qasm3/ast.py +15 -1
  98. qiskit/qasm3/exporter.py +59 -36
  99. qiskit/qasm3/printer.py +12 -0
  100. qiskit/qpy/__init__.py +183 -7
  101. qiskit/qpy/binary_io/circuits.py +256 -24
  102. qiskit/qpy/binary_io/parse_sympy_repr.py +5 -0
  103. qiskit/qpy/binary_io/schedules.py +12 -32
  104. qiskit/qpy/binary_io/value.py +36 -18
  105. qiskit/qpy/common.py +11 -3
  106. qiskit/qpy/formats.py +17 -1
  107. qiskit/qpy/interface.py +52 -12
  108. qiskit/qpy/type_keys.py +7 -1
  109. qiskit/quantum_info/__init__.py +10 -0
  110. qiskit/quantum_info/operators/__init__.py +1 -0
  111. qiskit/quantum_info/operators/symplectic/__init__.py +1 -0
  112. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +26 -0
  113. qiskit/quantum_info/operators/symplectic/pauli.py +2 -2
  114. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1 -1
  115. qiskit/result/sampled_expval.py +3 -1
  116. qiskit/synthesis/__init__.py +10 -0
  117. qiskit/synthesis/arithmetic/__init__.py +1 -1
  118. qiskit/synthesis/arithmetic/adders/__init__.py +1 -0
  119. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +6 -2
  120. qiskit/synthesis/arithmetic/adders/rv_ripple_carry_adder.py +156 -0
  121. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +14 -126
  122. qiskit/synthesis/discrete_basis/solovay_kitaev.py +161 -121
  123. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  124. qiskit/synthesis/evolution/product_formula.py +10 -7
  125. qiskit/synthesis/evolution/qdrift.py +10 -7
  126. qiskit/synthesis/evolution/suzuki_trotter.py +10 -7
  127. qiskit/synthesis/multi_controlled/__init__.py +4 -0
  128. qiskit/synthesis/multi_controlled/mcx_synthesis.py +402 -178
  129. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +14 -15
  130. qiskit/synthesis/qft/qft_decompose_lnn.py +7 -25
  131. qiskit/synthesis/unitary/qsd.py +80 -9
  132. qiskit/transpiler/__init__.py +19 -8
  133. qiskit/transpiler/instruction_durations.py +2 -20
  134. qiskit/transpiler/passes/__init__.py +4 -2
  135. qiskit/transpiler/passes/layout/dense_layout.py +26 -6
  136. qiskit/transpiler/passes/layout/disjoint_utils.py +1 -166
  137. qiskit/transpiler/passes/layout/sabre_layout.py +22 -3
  138. qiskit/transpiler/passes/layout/sabre_pre_layout.py +1 -1
  139. qiskit/transpiler/passes/layout/vf2_layout.py +49 -13
  140. qiskit/transpiler/passes/layout/vf2_utils.py +13 -1
  141. qiskit/transpiler/passes/optimization/__init__.py +1 -1
  142. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +2 -1
  143. qiskit/transpiler/passes/optimization/optimize_clifford_t.py +68 -0
  144. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -9
  145. qiskit/transpiler/passes/routing/sabre_swap.py +12 -2
  146. qiskit/transpiler/passes/routing/star_prerouting.py +106 -81
  147. qiskit/transpiler/passes/scheduling/__init__.py +1 -1
  148. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  149. qiskit/transpiler/passes/scheduling/padding/__init__.py +1 -0
  150. qiskit/transpiler/passes/scheduling/padding/context_aware_dynamical_decoupling.py +876 -0
  151. qiskit/transpiler/passes/synthesis/__init__.py +1 -0
  152. qiskit/transpiler/passes/synthesis/clifford_unitary_synth_plugin.py +123 -0
  153. qiskit/transpiler/passes/synthesis/hls_plugins.py +472 -92
  154. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +27 -22
  155. qiskit/transpiler/passmanager_config.py +3 -0
  156. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +149 -28
  157. qiskit/transpiler/preset_passmanagers/common.py +101 -0
  158. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +6 -0
  159. qiskit/transpiler/preset_passmanagers/level3.py +2 -2
  160. qiskit/utils/optionals.py +6 -5
  161. qiskit/visualization/circuit/_utils.py +5 -3
  162. qiskit/visualization/circuit/latex.py +9 -2
  163. qiskit/visualization/circuit/matplotlib.py +26 -4
  164. qiskit/visualization/circuit/qcstyle.py +9 -157
  165. qiskit/visualization/dag/__init__.py +13 -0
  166. qiskit/visualization/dag/dagstyle.py +103 -0
  167. qiskit/visualization/dag/styles/__init__.py +13 -0
  168. qiskit/visualization/dag/styles/color.json +10 -0
  169. qiskit/visualization/dag/styles/plain.json +5 -0
  170. qiskit/visualization/dag_visualization.py +169 -98
  171. qiskit/visualization/style.py +223 -0
  172. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/METADATA +14 -13
  173. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/RECORD +177 -168
  174. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/entry_points.txt +6 -0
  175. qiskit/synthesis/discrete_basis/commutator_decompose.py +0 -265
  176. qiskit/synthesis/discrete_basis/gate_sequence.py +0 -421
  177. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/WHEEL +0 -0
  178. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/licenses/LICENSE.txt +0 -0
  179. {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/top_level.txt +0 -0
@@ -87,37 +87,25 @@ class RZZGate(Gate):
87
87
  \end{pmatrix}
88
88
  """
89
89
 
90
- _standard_gate = StandardGate.RZZGate
90
+ _standard_gate = StandardGate.RZZ
91
91
 
92
92
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
93
93
  """Create new RZZ gate."""
94
94
  super().__init__("rzz", 2, [theta], label=label)
95
95
 
96
96
  def _define(self):
97
- """
98
- gate rzz(theta) a, b { cx a, b; u1(theta) b; cx a, b; }
99
- """
97
+ """Default definition"""
100
98
  # pylint: disable=cyclic-import
101
- from qiskit.circuit import QuantumCircuit, QuantumRegister
102
- from .x import CXGate
103
- from .rz import RZGate
99
+ from qiskit.circuit import QuantumCircuit
104
100
 
105
101
  # q_0: ──■─────────────■──
106
102
  # ┌─┴─┐┌───────┐┌─┴─┐
107
103
  # q_1: ┤ X ├┤ Rz(0) ├┤ X ├
108
104
  # └───┘└───────┘└───┘
109
- q = QuantumRegister(2, "q")
110
- theta = self.params[0]
111
- qc = QuantumCircuit(q, name=self.name)
112
- rules = [
113
- (CXGate(), [q[0], q[1]], []),
114
- (RZGate(theta), [q[1]], []),
115
- (CXGate(), [q[0], q[1]], []),
116
- ]
117
- for instr, qargs, cargs in rules:
118
- qc._append(instr, qargs, cargs)
119
-
120
- self.definition = qc
105
+
106
+ self.definition = QuantumCircuit._from_circuit_data(
107
+ StandardGate.RZZ._get_definition(self.params), add_regs=True, name=self.name
108
+ )
121
109
 
122
110
  def control(
123
111
  self,
@@ -14,7 +14,6 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from math import pi
18
17
  from typing import Optional, Union
19
18
 
20
19
  import numpy
@@ -59,7 +58,7 @@ class SGate(SingletonGate):
59
58
  Equivalent to a :math:`\pi/2` radian rotation about the Z axis.
60
59
  """
61
60
 
62
- _standard_gate = StandardGate.SGate
61
+ _standard_gate = StandardGate.S
63
62
 
64
63
  def __init__(self, label: Optional[str] = None):
65
64
  """Create new S gate."""
@@ -68,21 +67,17 @@ class SGate(SingletonGate):
68
67
  _singleton_lookup_key = stdlib_singleton_key()
69
68
 
70
69
  def _define(self):
71
- """
72
- gate s a { u1(pi/2) a; }
73
- """
70
+ """Default definition"""
74
71
  # pylint: disable=cyclic-import
75
- from qiskit.circuit import QuantumCircuit, QuantumRegister
76
-
77
- from .u1 import U1Gate
72
+ from qiskit.circuit import QuantumCircuit
78
73
 
79
- q = QuantumRegister(1, "q")
80
- qc = QuantumCircuit(q, name=self.name)
81
- rules = [(U1Gate(pi / 2), [q[0]], [])]
82
- for instr, qargs, cargs in rules:
83
- qc._append(instr, qargs, cargs)
74
+ # ┌────────┐
75
+ # q: ┤ P(π/2)
76
+ # └────────┘
84
77
 
85
- self.definition = qc
78
+ self.definition = QuantumCircuit._from_circuit_data(
79
+ StandardGate.S._get_definition(self.params), add_regs=True, name=self.name
80
+ )
86
81
 
87
82
  def control(
88
83
  self,
@@ -171,7 +166,7 @@ class SdgGate(SingletonGate):
171
166
  Equivalent to a :math:`-\pi/2` radian rotation about the Z axis.
172
167
  """
173
168
 
174
- _standard_gate = StandardGate.SdgGate
169
+ _standard_gate = StandardGate.Sdg
175
170
 
176
171
  def __init__(self, label: Optional[str] = None):
177
172
  """Create new Sdg gate."""
@@ -180,21 +175,17 @@ class SdgGate(SingletonGate):
180
175
  _singleton_lookup_key = stdlib_singleton_key()
181
176
 
182
177
  def _define(self):
183
- """
184
- gate sdg a { u1(-pi/2) a; }
185
- """
178
+ """Default definition"""
186
179
  # pylint: disable=cyclic-import
187
- from qiskit.circuit import QuantumCircuit, QuantumRegister
188
-
189
- from .u1 import U1Gate
180
+ from qiskit.circuit import QuantumCircuit
190
181
 
191
- q = QuantumRegister(1, "q")
192
- qc = QuantumCircuit(q, name=self.name)
193
- rules = [(U1Gate(-pi / 2), [q[0]], [])]
194
- for instr, qargs, cargs in rules:
195
- qc._append(instr, qargs, cargs)
182
+ # ┌─────────┐
183
+ # q: ┤ P(-π/2)
184
+ # └─────────┘
196
185
 
197
- self.definition = qc
186
+ self.definition = QuantumCircuit._from_circuit_data(
187
+ StandardGate.Sdg._get_definition(self.params), add_regs=True, name=self.name
188
+ )
198
189
 
199
190
  def control(
200
191
  self,
@@ -282,7 +273,7 @@ class CSGate(SingletonControlledGate):
282
273
  \end{pmatrix}
283
274
  """
284
275
 
285
- _standard_gate = StandardGate.CSGate
276
+ _standard_gate = StandardGate.CS
286
277
 
287
278
  def __init__(
288
279
  self,
@@ -306,12 +297,19 @@ class CSGate(SingletonControlledGate):
306
297
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
307
298
 
308
299
  def _define(self):
309
- """
310
- gate cs a,b { h b; cp(pi/2) a,b; h b; }
311
- """
312
- from .p import CPhaseGate
300
+ """Default definition"""
301
+ # pylint: disable=cyclic-import
302
+ from qiskit.circuit import QuantumCircuit
313
303
 
314
- self.definition = CPhaseGate(theta=pi / 2).definition
304
+ # ┌───┐
305
+ # q_0: ┤ T ├──■───────────■───────
306
+ # └───┘┌─┴─┐┌─────┐┌─┴─┐┌───┐
307
+ # q_1: ─────┤ X ├┤ Tdg ├┤ X ├┤ T ├
308
+ # └───┘└─────┘└───┘└───┘
309
+
310
+ self.definition = QuantumCircuit._from_circuit_data(
311
+ StandardGate.CS._get_definition(self.params), add_regs=True, name=self.name
312
+ )
315
313
 
316
314
  def inverse(self, annotated: bool = False):
317
315
  """Return inverse of CSGate (CSdgGate).
@@ -366,7 +364,7 @@ class CSdgGate(SingletonControlledGate):
366
364
  \end{pmatrix}
367
365
  """
368
366
 
369
- _standard_gate = StandardGate.CSdgGate
367
+ _standard_gate = StandardGate.CSdg
370
368
 
371
369
  def __init__(
372
370
  self,
@@ -389,12 +387,19 @@ class CSdgGate(SingletonControlledGate):
389
387
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
390
388
 
391
389
  def _define(self):
392
- """
393
- gate csdg a,b { h b; cp(-pi/2) a,b; h b; }
394
- """
395
- from .p import CPhaseGate
390
+ """Default definition"""
391
+ # pylint: disable=cyclic-import
392
+ from qiskit.circuit import QuantumCircuit
396
393
 
397
- self.definition = CPhaseGate(theta=-pi / 2).definition
394
+ # ┌─────┐
395
+ # q_0: ┤ Tdg ├──■─────────■─────────
396
+ # └─────┘┌─┴─┐┌───┐┌─┴─┐┌─────┐
397
+ # q_1: ───────┤ X ├┤ T ├┤ X ├┤ Tdg ├
398
+ # └───┘└───┘└───┘└─────┘
399
+
400
+ self.definition = QuantumCircuit._from_circuit_data(
401
+ StandardGate.CSdg._get_definition(self.params), add_regs=True, name=self.name
402
+ )
398
403
 
399
404
  def inverse(self, annotated: bool = False):
400
405
  """Return inverse of CSdgGate (CSGate).
@@ -60,7 +60,7 @@ class SwapGate(SingletonGate):
60
60
  |a, b\rangle \rightarrow |b, a\rangle
61
61
  """
62
62
 
63
- _standard_gate = StandardGate.SwapGate
63
+ _standard_gate = StandardGate.Swap
64
64
 
65
65
  def __init__(self, label: Optional[str] = None):
66
66
  """Create new SWAP gate."""
@@ -69,24 +69,19 @@ class SwapGate(SingletonGate):
69
69
  _singleton_lookup_key = stdlib_singleton_key()
70
70
 
71
71
  def _define(self):
72
- """
73
- gate swap a,b { cx a,b; cx b,a; cx a,b; }
74
- """
72
+ """Default definition"""
75
73
  # pylint: disable=cyclic-import
76
- from qiskit.circuit import QuantumCircuit, QuantumRegister
77
- from .x import CXGate
74
+ from qiskit.circuit import QuantumCircuit
78
75
 
79
- q = QuantumRegister(2, "q")
80
- qc = QuantumCircuit(q, name=self.name)
81
- rules = [
82
- (CXGate(), [q[0], q[1]], []),
83
- (CXGate(), [q[1], q[0]], []),
84
- (CXGate(), [q[0], q[1]], []),
85
- ]
86
- for instr, qargs, cargs in rules:
87
- qc._append(instr, qargs, cargs)
76
+ # ┌───┐
77
+ # q_0: ──■──┤ X ├──■──
78
+ # ┌─┴─┐└─┬─┘┌─┴─┐
79
+ # q_1: X ├──■──┤ X ├
80
+ # └───┘ └───┘
88
81
 
89
- self.definition = qc
82
+ self.definition = QuantumCircuit._from_circuit_data(
83
+ StandardGate.Swap._get_definition(self.params), add_regs=True, name=self.name
84
+ )
90
85
 
91
86
  def control(
92
87
  self,
@@ -217,7 +212,7 @@ class CSwapGate(SingletonControlledGate):
217
212
  |1, b, c\rangle \rightarrow |1, c, b\rangle
218
213
  """
219
214
 
220
- _standard_gate = StandardGate.CSwapGate
215
+ _standard_gate = StandardGate.CSwap
221
216
 
222
217
  def __init__(
223
218
  self,
@@ -240,28 +235,20 @@ class CSwapGate(SingletonControlledGate):
240
235
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
241
236
 
242
237
  def _define(self):
243
- """
244
- gate cswap a,b,c
245
- { cx c,b;
246
- ccx a,b,c;
247
- cx c,b;
248
- }
249
- """
238
+ """Default definition"""
250
239
  # pylint: disable=cyclic-import
251
- from qiskit.circuit import QuantumCircuit, QuantumRegister
252
- from .x import CXGate, CCXGate
253
-
254
- q = QuantumRegister(3, "q")
255
- qc = QuantumCircuit(q, name=self.name)
256
- rules = [
257
- (CXGate(), [q[2], q[1]], []),
258
- (CCXGate(), [q[0], q[1], q[2]], []),
259
- (CXGate(), [q[2], q[1]], []),
260
- ]
261
- for instr, qargs, cargs in rules:
262
- qc._append(instr, qargs, cargs)
263
-
264
- self.definition = qc
240
+ from qiskit.circuit import QuantumCircuit
241
+
242
+ # q_0: ───────■───────
243
+ # ┌───┐ │ ┌───┐
244
+ # q_1: X ├──■──┤ X ├
245
+ # └─┬─┘┌─┴─┐└─┬─┘
246
+ # q_2: ──■──┤ X ├──■──
247
+ # └───┘
248
+
249
+ self.definition = QuantumCircuit._from_circuit_data(
250
+ StandardGate.CSwap._get_definition(self.params), add_regs=True, name=self.name
251
+ )
265
252
 
266
253
  def inverse(self, annotated: bool = False):
267
254
  """Return inverse CSwap gate (itself).
@@ -14,7 +14,6 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from math import pi
18
17
  from typing import Optional, Union
19
18
  from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
20
19
  from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
@@ -64,7 +63,7 @@ class SXGate(SingletonGate):
64
63
 
65
64
  """
66
65
 
67
- _standard_gate = StandardGate.SXGate
66
+ _standard_gate = StandardGate.SX
68
67
 
69
68
  def __init__(self, label: Optional[str] = None):
70
69
  """Create new SX gate."""
@@ -73,20 +72,18 @@ class SXGate(SingletonGate):
73
72
  _singleton_lookup_key = stdlib_singleton_key()
74
73
 
75
74
  def _define(self):
76
- """
77
- gate sx a { rz(-pi/2) a; h a; rz(-pi/2); }
78
- """
75
+ """Default definition"""
79
76
  # pylint: disable=cyclic-import
80
- from qiskit.circuit import QuantumCircuit, QuantumRegister
81
- from .s import SdgGate
82
- from .h import HGate
77
+ from qiskit.circuit import QuantumCircuit
83
78
 
84
- q = QuantumRegister(1, "q")
85
- qc = QuantumCircuit(q, name=self.name, global_phase=pi / 4)
86
- rules = [(SdgGate(), [q[0]], []), (HGate(), [q[0]], []), (SdgGate(), [q[0]], [])]
87
- for operation, qubits, clbits in rules:
88
- qc._append(operation, qubits, clbits)
89
- self.definition = qc
79
+ # global phase: π/4
80
+ # ┌─────┐┌───┐┌─────┐
81
+ # q: Sdg ├┤ H ├┤ Sdg
82
+ # └─────┘└───┘└─────┘
83
+
84
+ self.definition = QuantumCircuit._from_circuit_data(
85
+ StandardGate.SX._get_definition(self.params), add_regs=True, name=self.name
86
+ )
90
87
 
91
88
  def inverse(self, annotated: bool = False):
92
89
  """Return inverse SX gate (i.e. SXdg).
@@ -168,7 +165,7 @@ class SXdgGate(SingletonGate):
168
165
  = e^{-i \pi/4} \sqrt{X}^{\dagger}
169
166
  """
170
167
 
171
- _standard_gate = StandardGate.SXdgGate
168
+ _standard_gate = StandardGate.SXdg
172
169
 
173
170
  def __init__(self, label: Optional[str] = None):
174
171
  """Create new SXdg gate."""
@@ -177,20 +174,18 @@ class SXdgGate(SingletonGate):
177
174
  _singleton_lookup_key = stdlib_singleton_key()
178
175
 
179
176
  def _define(self):
180
- """
181
- gate sxdg a { rz(pi/2) a; h a; rz(pi/2); }
182
- """
177
+ """Default definition"""
183
178
  # pylint: disable=cyclic-import
184
- from qiskit.circuit import QuantumCircuit, QuantumRegister
185
- from .s import SGate
186
- from .h import HGate
179
+ from qiskit.circuit import QuantumCircuit
187
180
 
188
- q = QuantumRegister(1, "q")
189
- qc = QuantumCircuit(q, name=self.name, global_phase=-pi / 4)
190
- rules = [(SGate(), [q[0]], []), (HGate(), [q[0]], []), (SGate(), [q[0]], [])]
191
- for operation, qubits, clbits in rules:
192
- qc._append(operation, qubits, clbits)
193
- self.definition = qc
181
+ # global phase: 7π/4
182
+ # ┌───┐┌───┐┌───┐
183
+ # q: S ├┤ H ├┤ S
184
+ # └───┘└───┘└───┘
185
+
186
+ self.definition = QuantumCircuit._from_circuit_data(
187
+ StandardGate.SXdg._get_definition(self.params), add_regs=True, name=self.name
188
+ )
194
189
 
195
190
  def inverse(self, annotated: bool = False):
196
191
  """Return inverse SXdg gate (i.e. SX).
@@ -268,7 +263,7 @@ class CSXGate(SingletonControlledGate):
268
263
 
269
264
  """
270
265
 
271
- _standard_gate = StandardGate.CSXGate
266
+ _standard_gate = StandardGate.CSX
272
267
 
273
268
  def __init__(
274
269
  self,
@@ -291,20 +286,18 @@ class CSXGate(SingletonControlledGate):
291
286
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
292
287
 
293
288
  def _define(self):
294
- """
295
- gate csx a,b { h b; cu1(pi/2) a,b; h b; }
296
- """
289
+ """Default definition"""
297
290
  # pylint: disable=cyclic-import
298
- from qiskit.circuit import QuantumCircuit, QuantumRegister
299
- from .h import HGate
300
- from .u1 import CU1Gate
301
-
302
- q = QuantumRegister(2, "q")
303
- qc = QuantumCircuit(q, name=self.name)
304
- rules = [(HGate(), [q[1]], []), (CU1Gate(pi / 2), [q[0], q[1]], []), (HGate(), [q[1]], [])]
305
- for operation, qubits, clbits in rules:
306
- qc._append(operation, qubits, clbits)
307
- self.definition = qc
291
+ from qiskit.circuit import QuantumCircuit
292
+
293
+ # q_0: ───────■───────
294
+ # ┌───┐┌─┴─┐┌───┐
295
+ # q_1: H ├┤ S ├┤ H ├
296
+ # └───┘└───┘└───┘
297
+
298
+ self.definition = QuantumCircuit._from_circuit_data(
299
+ StandardGate.CSX._get_definition(self.params), add_regs=True, name=self.name
300
+ )
308
301
 
309
302
  def __eq__(self, other):
310
303
  return isinstance(other, CSXGate) and self.ctrl_state == other.ctrl_state
@@ -12,7 +12,6 @@
12
12
 
13
13
  """T and Tdg gate."""
14
14
  import math
15
- from math import pi
16
15
  from typing import Optional
17
16
 
18
17
  import numpy
@@ -55,7 +54,7 @@ class TGate(SingletonGate):
55
54
  Equivalent to a :math:`\pi/4` radian rotation about the Z axis.
56
55
  """
57
56
 
58
- _standard_gate = StandardGate.TGate
57
+ _standard_gate = StandardGate.T
59
58
 
60
59
  def __init__(self, label: Optional[str] = None):
61
60
  """Create new T gate."""
@@ -64,21 +63,17 @@ class TGate(SingletonGate):
64
63
  _singleton_lookup_key = stdlib_singleton_key()
65
64
 
66
65
  def _define(self):
67
- """
68
- gate t a { u1(pi/4) a; }
69
- """
66
+ """Default definition"""
70
67
  # pylint: disable=cyclic-import
71
- from qiskit.circuit import QuantumCircuit, QuantumRegister
72
-
73
- from .u1 import U1Gate
68
+ from qiskit.circuit import QuantumCircuit
74
69
 
75
- q = QuantumRegister(1, "q")
76
- qc = QuantumCircuit(q, name=self.name)
77
- rules = [(U1Gate(pi / 4), [q[0]], [])]
78
- for instr, qargs, cargs in rules:
79
- qc._append(instr, qargs, cargs)
70
+ # ┌────────┐
71
+ # q: ┤ P(π/4)
72
+ # └────────┘
80
73
 
81
- self.definition = qc
74
+ self.definition = QuantumCircuit._from_circuit_data(
75
+ StandardGate.T._get_definition(self.params), add_regs=True, name=self.name
76
+ )
82
77
 
83
78
  def inverse(self, annotated: bool = False):
84
79
  """Return inverse T gate (i.e. Tdg).
@@ -132,7 +127,7 @@ class TdgGate(SingletonGate):
132
127
  Equivalent to a :math:`-\pi/4` radian rotation about the Z axis.
133
128
  """
134
129
 
135
- _standard_gate = StandardGate.TdgGate
130
+ _standard_gate = StandardGate.Tdg
136
131
 
137
132
  def __init__(self, label: Optional[str] = None):
138
133
  """Create new Tdg gate."""
@@ -141,21 +136,17 @@ class TdgGate(SingletonGate):
141
136
  _singleton_lookup_key = stdlib_singleton_key()
142
137
 
143
138
  def _define(self):
144
- """
145
- gate tdg a { u1(pi/4) a; }
146
- """
139
+ """Default definition"""
147
140
  # pylint: disable=cyclic-import
148
- from qiskit.circuit import QuantumCircuit, QuantumRegister
149
-
150
- from .u1 import U1Gate
141
+ from qiskit.circuit import QuantumCircuit
151
142
 
152
- q = QuantumRegister(1, "q")
153
- qc = QuantumCircuit(q, name=self.name)
154
- rules = [(U1Gate(-pi / 4), [q[0]], [])]
155
- for instr, qargs, cargs in rules:
156
- qc._append(instr, qargs, cargs)
143
+ # ┌─────────┐
144
+ # q: ┤ P(-π/4)
145
+ # └─────────┘
157
146
 
158
- self.definition = qc
147
+ self.definition = QuantumCircuit._from_circuit_data(
148
+ StandardGate.Tdg._get_definition(self.params), add_regs=True, name=self.name
149
+ )
159
150
 
160
151
  def inverse(self, annotated: bool = False):
161
152
  """Return inverse Tdg gate (i.e. T).
@@ -71,7 +71,7 @@ class UGate(Gate):
71
71
  U(\theta, 0, 0) = RY(\theta)
72
72
  """
73
73
 
74
- _standard_gate = StandardGate.UGate
74
+ _standard_gate = StandardGate.U
75
75
 
76
76
  def __init__(
77
77
  self,
@@ -269,7 +269,7 @@ class CUGate(ControlledGate):
269
269
  \end{pmatrix}
270
270
  """
271
271
 
272
- _standard_gate = StandardGate.CUGate
272
+ _standard_gate = StandardGate.CU
273
273
 
274
274
  def __init__(
275
275
  self,
@@ -294,35 +294,19 @@ class CUGate(ControlledGate):
294
294
  )
295
295
 
296
296
  def _define(self):
297
- """
298
- gate cu(theta,phi,lambda,gamma) c, t
299
- { phase(gamma) c;
300
- phase((lambda+phi)/2) c;
301
- phase((lambda-phi)/2) t;
302
- cx c,t;
303
- u(-theta/2,0,-(phi+lambda)/2) t;
304
- cx c,t;
305
- u(theta/2,phi,0) t;
306
- }
307
- """
297
+ """Default definition"""
308
298
  # pylint: disable=cyclic-import
309
- from qiskit.circuit import QuantumCircuit, QuantumRegister
299
+ from qiskit.circuit import QuantumCircuit
310
300
 
311
301
  # ┌──────┐ ┌──────────────┐
312
302
  # q_0: ────┤ P(γ) ├────┤ P(λ/2 + φ/2) ├──■────────────────────────────■────────────────
313
303
  # ┌───┴──────┴───┐└──────────────┘┌─┴─┐┌──────────────────────┐┌─┴─┐┌────────────┐
314
304
  # q_1: ┤ P(λ/2 - φ/2) ├────────────────┤ X ├┤ U(-0/2,0,-λ/2 - φ/2) ├┤ X ├┤ U(0/2,φ,0) ├
315
305
  # └──────────────┘ └───┘└──────────────────────┘└───┘└────────────┘
316
- q = QuantumRegister(2, "q")
317
- qc = QuantumCircuit(q, name=self.name)
318
- qc.p(self.params[3], 0)
319
- qc.p((self.params[2] + self.params[1]) / 2, 0)
320
- qc.p((self.params[2] - self.params[1]) / 2, 1)
321
- qc.cx(0, 1)
322
- qc.u(-self.params[0] / 2, 0, -(self.params[1] + self.params[2]) / 2, 1)
323
- qc.cx(0, 1)
324
- qc.u(self.params[0] / 2, self.params[1], 0, 1)
325
- self.definition = qc
306
+
307
+ self.definition = QuantumCircuit._from_circuit_data(
308
+ StandardGate.CU._get_definition(self.params), add_regs=True, name=self.name
309
+ )
326
310
 
327
311
  def inverse(self, annotated: bool = False):
328
312
  r"""Return inverted CU gate.