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
@@ -85,7 +85,7 @@ class iSwapGate(SingletonGate):
85
85
  \end{pmatrix}
86
86
  """
87
87
 
88
- _standard_gate = StandardGate.ISwapGate
88
+ _standard_gate = StandardGate.ISwap
89
89
 
90
90
  def __init__(self, label: Optional[str] = None):
91
91
  """Create new iSwap gate."""
@@ -94,37 +94,19 @@ class iSwapGate(SingletonGate):
94
94
  _singleton_lookup_key = stdlib_singleton_key()
95
95
 
96
96
  def _define(self):
97
- """
98
- gate iswap a,b {
99
- s q[0];
100
- s q[1];
101
- h q[0];
102
- cx q[0],q[1];
103
- cx q[1],q[0];
104
- h q[1];
105
- }
106
- """
97
+ """Default definition"""
107
98
  # pylint: disable=cyclic-import
108
- from qiskit.circuit import QuantumCircuit, QuantumRegister
109
-
110
- from .h import HGate
111
- from .s import SGate
112
- from .x import CXGate
113
-
114
- q = QuantumRegister(2, "q")
115
- qc = QuantumCircuit(q, name=self.name)
116
- rules = [
117
- (SGate(), [q[0]], []),
118
- (SGate(), [q[1]], []),
119
- (HGate(), [q[0]], []),
120
- (CXGate(), [q[0], q[1]], []),
121
- (CXGate(), [q[1], q[0]], []),
122
- (HGate(), [q[1]], []),
123
- ]
124
- for instr, qargs, cargs in rules:
125
- qc._append(instr, qargs, cargs)
126
-
127
- self.definition = qc
99
+ from qiskit.circuit import QuantumCircuit
100
+
101
+ # ┌───┐┌───┐ ┌───┐
102
+ # q_0: S ├┤ H ├──■──┤ X ├─────
103
+ # ├───┤└───┘┌─┴─┐└─┬─┘┌───┐
104
+ # q_1: ┤ S ├─────┤ X ├──■──┤ H ├
105
+ # └───┘ └───┘ └───┘
106
+
107
+ self.definition = QuantumCircuit._from_circuit_data(
108
+ StandardGate.ISwap._get_definition(self.params), add_regs=True, name=self.name
109
+ )
128
110
 
129
111
  def power(self, exponent: float, annotated: bool = False):
130
112
  return XXPlusYYGate(-np.pi * exponent)
@@ -75,21 +75,24 @@ class PhaseGate(Gate):
75
75
  `1612.00858 <https://arxiv.org/abs/1612.00858>`_
76
76
  """
77
77
 
78
- _standard_gate = StandardGate.PhaseGate
78
+ _standard_gate = StandardGate.Phase
79
79
 
80
80
  def __init__(self, theta: ParameterValueType, label: str | None = None):
81
81
  """Create new Phase gate."""
82
82
  super().__init__("p", 1, [theta], label=label)
83
83
 
84
84
  def _define(self):
85
+ """Default definition"""
85
86
  # pylint: disable=cyclic-import
86
- from qiskit.circuit import QuantumCircuit, QuantumRegister
87
- from .u import UGate
87
+ from qiskit.circuit import QuantumCircuit
88
88
 
89
- q = QuantumRegister(1, "q")
90
- qc = QuantumCircuit(q, name=self.name)
91
- qc.append(UGate(0, 0, self.params[0]), [0])
92
- self.definition = qc
89
+ # ┌──────────┐
90
+ # q: ┤ U(0,0,θ)
91
+ # └──────────┘
92
+
93
+ self.definition = QuantumCircuit._from_circuit_data(
94
+ StandardGate.Phase._get_definition(self.params), add_regs=True, name=self.name
95
+ )
93
96
 
94
97
  def control(
95
98
  self,
@@ -197,7 +200,7 @@ class CPhaseGate(ControlledGate):
197
200
  phase difference.
198
201
  """
199
202
 
200
- _standard_gate = StandardGate.CPhaseGate
203
+ _standard_gate = StandardGate.CPhase
201
204
 
202
205
  def __init__(
203
206
  self,
@@ -219,29 +222,19 @@ class CPhaseGate(ControlledGate):
219
222
  )
220
223
 
221
224
  def _define(self):
222
- """
223
- gate cphase(lambda) a,b
224
- { phase(lambda/2) a; cx a,b;
225
- phase(-lambda/2) b; cx a,b;
226
- phase(lambda/2) b;
227
- }
228
- """
225
+ """Default definition"""
229
226
  # pylint: disable=cyclic-import
230
- from qiskit.circuit import QuantumCircuit, QuantumRegister
227
+ from qiskit.circuit import QuantumCircuit
231
228
 
232
229
  # ┌────────┐
233
- # q_0: ┤ P(λ/2) ├──■───────────────■────────────
230
+ # q_0: ┤ P(θ/2) ├──■───────────────■────────────
234
231
  # └────────┘┌─┴─┐┌─────────┐┌─┴─┐┌────────┐
235
- # q_1: ──────────┤ X ├┤ P(-λ/2) ├┤ X ├┤ P(λ/2) ├
232
+ # q_1: ──────────┤ X ├┤ P(-θ/2) ├┤ X ├┤ P(θ/2) ├
236
233
  # └───┘└─────────┘└───┘└────────┘
237
- q = QuantumRegister(2, "q")
238
- qc = QuantumCircuit(q, name=self.name)
239
- qc.p(self.params[0] / 2, 0)
240
- qc.cx(0, 1)
241
- qc.p(-self.params[0] / 2, 1)
242
- qc.cx(0, 1)
243
- qc.p(self.params[0] / 2, 1)
244
- self.definition = qc
234
+
235
+ self.definition = QuantumCircuit._from_circuit_data(
236
+ StandardGate.CPhase._get_definition(self.params), add_regs=True, name=self.name
237
+ )
245
238
 
246
239
  def control(
247
240
  self,
@@ -14,7 +14,6 @@
14
14
 
15
15
  import math
16
16
  from cmath import exp
17
- from math import pi
18
17
  from typing import Optional
19
18
  import numpy
20
19
  from qiskit.circuit.gate import Gate
@@ -50,7 +49,7 @@ class RGate(Gate):
50
49
  \end{pmatrix}
51
50
  """
52
51
 
53
- _standard_gate = StandardGate.RGate
52
+ _standard_gate = StandardGate.R
54
53
 
55
54
  def __init__(
56
55
  self,
@@ -62,22 +61,17 @@ class RGate(Gate):
62
61
  super().__init__("r", 1, [theta, phi], label=label)
63
62
 
64
63
  def _define(self):
65
- """
66
- gate r(θ, φ) a {u3(θ, φ - π/2, -φ + π/2) a;}
67
- """
64
+ """Default definition"""
68
65
  # pylint: disable=cyclic-import
69
- from qiskit.circuit import QuantumCircuit, QuantumRegister
70
- from .u3 import U3Gate
71
-
72
- q = QuantumRegister(1, "q")
73
- qc = QuantumCircuit(q, name=self.name)
74
- theta = self.params[0]
75
- phi = self.params[1]
76
- rules = [(U3Gate(theta, phi - pi / 2, -phi + pi / 2), [q[0]], [])]
77
- for instr, qargs, cargs in rules:
78
- qc._append(instr, qargs, cargs)
79
-
80
- self.definition = qc
66
+ from qiskit.circuit import QuantumCircuit
67
+
68
+ # ┌───────────────────────┐
69
+ # q: U(θ,-π/2 + φ,π/2 - φ)
70
+ # └───────────────────────┘
71
+
72
+ self.definition = QuantumCircuit._from_circuit_data(
73
+ StandardGate.R._get_definition(self.params), add_regs=True, name=self.name
74
+ )
81
75
 
82
76
  def inverse(self, annotated: bool = False):
83
77
  r"""Invert this gate as: :math:`R(θ, φ)^{\dagger} = R(-θ, φ)`
@@ -15,7 +15,6 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import math
18
- from math import pi
19
18
  from typing import Optional, Union
20
19
  import numpy
21
20
 
@@ -52,27 +51,24 @@ class RXGate(Gate):
52
51
  \end{pmatrix}
53
52
  """
54
53
 
55
- _standard_gate = StandardGate.RXGate
54
+ _standard_gate = StandardGate.RX
56
55
 
57
56
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
58
57
  """Create new RX gate."""
59
58
  super().__init__("rx", 1, [theta], label=label)
60
59
 
61
60
  def _define(self):
62
- """
63
- gate rx(theta) a {r(theta, 0) a;}
64
- """
61
+ """Default definition"""
65
62
  # pylint: disable=cyclic-import
66
- from qiskit.circuit import QuantumCircuit, QuantumRegister
67
- from .r import RGate
63
+ from qiskit.circuit import QuantumCircuit
68
64
 
69
- q = QuantumRegister(1, "q")
70
- qc = QuantumCircuit(q, name=self.name)
71
- rules = [(RGate(self.params[0], 0), [q[0]], [])]
72
- for instr, qargs, cargs in rules:
73
- qc._append(instr, qargs, cargs)
65
+ # ┌────────┐
66
+ # q: ┤ R(θ,0)
67
+ # └────────┘
74
68
 
75
- self.definition = qc
69
+ self.definition = QuantumCircuit._from_circuit_data(
70
+ StandardGate.RX._get_definition(self.params), add_regs=True, name=self.name
71
+ )
76
72
 
77
73
  def control(
78
74
  self,
@@ -202,7 +198,7 @@ class CRXGate(ControlledGate):
202
198
  \end{pmatrix}
203
199
  """
204
200
 
205
- _standard_gate = StandardGate.CRXGate
201
+ _standard_gate = StandardGate.CRX
206
202
 
207
203
  def __init__(
208
204
  self,
@@ -224,38 +220,18 @@ class CRXGate(ControlledGate):
224
220
  )
225
221
 
226
222
  def _define(self):
227
- """
228
- gate cu3(theta,phi,lambda) c, t
229
- { u1(pi/2) t;
230
- cx c,t;
231
- u3(-theta/2,0,0) t;
232
- cx c,t;
233
- u3(theta/2,-pi/2,0) t;
234
- }
235
- """
223
+ """Default definition"""
236
224
  # pylint: disable=cyclic-import
237
- from qiskit.circuit import QuantumCircuit, QuantumRegister
238
- from .u1 import U1Gate
239
- from .u3 import U3Gate
240
- from .x import CXGate
241
-
242
- # q_0: ─────────────■───────────────────■────────────────────
243
- # ┌─────────┐┌─┴─┐┌─────────────┐┌─┴─┐┌────────────────┐
244
- # q_1: ┤ U1(π/2) ├┤ X ├┤ U3(0/2,0,0) ├┤ X ├┤ U3(0/2,-π/2,0) ├
245
- # └─────────┘└───┘└─────────────┘└───┘└────────────────┘
246
- q = QuantumRegister(2, "q")
247
- qc = QuantumCircuit(q, name=self.name)
248
- rules = [
249
- (U1Gate(pi / 2), [q[1]], []),
250
- (CXGate(), [q[0], q[1]], []),
251
- (U3Gate(-self.params[0] / 2, 0, 0), [q[1]], []),
252
- (CXGate(), [q[0], q[1]], []),
253
- (U3Gate(self.params[0] / 2, -pi / 2, 0), [q[1]], []),
254
- ]
255
- for instr, qargs, cargs in rules:
256
- qc._append(instr, qargs, cargs)
257
-
258
- self.definition = qc
225
+ from qiskit.circuit import QuantumCircuit
226
+
227
+ # q_0: ───────■────────────────────■──────────────────────
228
+ # ┌───┐┌─┴─┐┌──────────────┐┌─┴─┐┌───────────┐┌─────┐
229
+ # q_1: ┤ S ├┤ X ├┤ Ry((-0.5)*θ) ├┤ X ├┤ Ry(0.5*θ) ├┤ Sdg ├
230
+ # └───┘└───┘└──────────────┘└───┘└───────────┘└─────┘
231
+
232
+ self.definition = QuantumCircuit._from_circuit_data(
233
+ StandardGate.CRX._get_definition(self.params), add_regs=True, name=self.name
234
+ )
259
235
 
260
236
  def inverse(self, annotated: bool = False):
261
237
  """Return inverse CRX gate (i.e. with the negative rotation angle).
@@ -75,41 +75,26 @@ class RXXGate(Gate):
75
75
  \end{pmatrix}
76
76
  """
77
77
 
78
- _standard_gate = StandardGate.RXXGate
78
+ _standard_gate = StandardGate.RXX
79
79
 
80
80
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
81
81
  """Create new RXX gate."""
82
82
  super().__init__("rxx", 2, [theta], label=label)
83
83
 
84
84
  def _define(self):
85
- """Calculate a subcircuit that implements this unitary."""
85
+ """Default definition"""
86
86
  # pylint: disable=cyclic-import
87
- from qiskit.circuit import QuantumCircuit, QuantumRegister
88
- from .x import CXGate
89
- from .h import HGate
90
- from .rz import RZGate
87
+ from qiskit.circuit import QuantumCircuit
91
88
 
92
89
  # ┌───┐ ┌───┐
93
90
  # q_0: ┤ H ├──■─────────────■──┤ H ├
94
91
  # ├───┤┌─┴─┐┌───────┐┌─┴─┐├───┤
95
92
  # q_1: ┤ H ├┤ X ├┤ Rz(0) ├┤ X ├┤ H ├
96
93
  # └───┘└───┘└───────┘└───┘└───┘
97
- theta = self.params[0]
98
- q = QuantumRegister(2, "q")
99
- qc = QuantumCircuit(q, name=self.name)
100
- rules = [
101
- (HGate(), [q[0]], []),
102
- (HGate(), [q[1]], []),
103
- (CXGate(), [q[0], q[1]], []),
104
- (RZGate(theta), [q[1]], []),
105
- (CXGate(), [q[0], q[1]], []),
106
- (HGate(), [q[1]], []),
107
- (HGate(), [q[0]], []),
108
- ]
109
- for instr, qargs, cargs in rules:
110
- qc._append(instr, qargs, cargs)
111
-
112
- self.definition = qc
94
+
95
+ self.definition = QuantumCircuit._from_circuit_data(
96
+ StandardGate.RXX._get_definition(self.params), add_regs=True, name=self.name
97
+ )
113
98
 
114
99
  def control(
115
100
  self,
@@ -15,7 +15,6 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import math
18
- from math import pi
19
18
  from typing import Optional, Union
20
19
  import numpy
21
20
  from qiskit.circuit.controlledgate import ControlledGate
@@ -51,27 +50,24 @@ class RYGate(Gate):
51
50
  \end{pmatrix}
52
51
  """
53
52
 
54
- _standard_gate = StandardGate.RYGate
53
+ _standard_gate = StandardGate.RY
55
54
 
56
55
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
57
56
  """Create new RY gate."""
58
57
  super().__init__("ry", 1, [theta], label=label)
59
58
 
60
59
  def _define(self):
61
- """
62
- gate ry(theta) a { r(theta, pi/2) a; }
63
- """
60
+ """Default definition"""
64
61
  # pylint: disable=cyclic-import
65
- from qiskit.circuit import QuantumCircuit, QuantumRegister
66
- from .r import RGate
62
+ from qiskit.circuit import QuantumCircuit
67
63
 
68
- q = QuantumRegister(1, "q")
69
- qc = QuantumCircuit(q, name=self.name)
70
- rules = [(RGate(self.params[0], pi / 2), [q[0]], [])]
71
- for instr, qargs, cargs in rules:
72
- qc._append(instr, qargs, cargs)
64
+ # ┌──────────┐
65
+ # q: ┤ R(θ,π/2)
66
+ # └──────────┘
73
67
 
74
- self.definition = qc
68
+ self.definition = QuantumCircuit._from_circuit_data(
69
+ StandardGate.RY._get_definition(self.params), add_regs=True, name=self.name
70
+ )
75
71
 
76
72
  def control(
77
73
  self,
@@ -201,7 +197,7 @@ class CRYGate(ControlledGate):
201
197
  \end{pmatrix}
202
198
  """
203
199
 
204
- _standard_gate = StandardGate.CRYGate
200
+ _standard_gate = StandardGate.CRY
205
201
 
206
202
  def __init__(
207
203
  self,
@@ -223,32 +219,18 @@ class CRYGate(ControlledGate):
223
219
  )
224
220
 
225
221
  def _define(self):
226
- """
227
- gate cry(lambda) a,b
228
- { u3(lambda/2,0,0) b; cx a,b;
229
- u3(-lambda/2,0,0) b; cx a,b;
230
- }
231
- """
222
+ """Default definition"""
232
223
  # pylint: disable=cyclic-import
233
- from qiskit.circuit import QuantumCircuit, QuantumRegister
234
- from .x import CXGate
235
-
236
- # q_0: ─────────────■───────────────■──
237
- # ┌─────────┐┌─┴─┐┌─────────┐┌─┴─┐
238
- # q_1: ┤ Ry(λ/2) ├┤ X ├┤ Ry(λ/2) ├┤ X ├
239
- # └─────────┘└───┘└─────────┘└───┘
240
- q = QuantumRegister(2, "q")
241
- qc = QuantumCircuit(q, name=self.name)
242
- rules = [
243
- (RYGate(self.params[0] / 2), [q[1]], []),
244
- (CXGate(), [q[0], q[1]], []),
245
- (RYGate(-self.params[0] / 2), [q[1]], []),
246
- (CXGate(), [q[0], q[1]], []),
247
- ]
248
- for instr, qargs, cargs in rules:
249
- qc._append(instr, qargs, cargs)
250
-
251
- self.definition = qc
224
+ from qiskit.circuit import QuantumCircuit
225
+
226
+ # q_0: ─────────────■────────────────■──
227
+ # ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
228
+ # q_1: ┤ Ry(θ/2) ├┤ X ├┤ Ry(-θ/2) ├┤ X ├
229
+ # └─────────┘└───┘└──────────┘└───┘
230
+
231
+ self.definition = QuantumCircuit._from_circuit_data(
232
+ StandardGate.CRY._get_definition(self.params), add_regs=True, name=self.name
233
+ )
252
234
 
253
235
  def inverse(self, annotated: bool = False):
254
236
  """Return inverse CRY gate (i.e. with the negative rotation angle)
@@ -75,41 +75,26 @@ class RYYGate(Gate):
75
75
  \end{pmatrix}
76
76
  """
77
77
 
78
- _standard_gate = StandardGate.RYYGate
78
+ _standard_gate = StandardGate.RYY
79
79
 
80
80
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
81
81
  """Create new RYY gate."""
82
82
  super().__init__("ryy", 2, [theta], label=label)
83
83
 
84
84
  def _define(self):
85
- """Calculate a subcircuit that implements this unitary."""
85
+ """Default definition"""
86
86
  # pylint: disable=cyclic-import
87
- from qiskit.circuit import QuantumCircuit, QuantumRegister
88
- from .x import CXGate
89
- from .rx import RXGate
90
- from .rz import RZGate
91
-
92
- # ┌─────────┐ ┌──────────┐
93
- # q_0: ┤ Rx(π/2) ├──■─────────────■──┤ Rx(-π/2) ├
94
- # ├─────────┤┌─┴─┐┌───────┐┌─┴─┐├──────────┤
95
- # q_1: ┤ Rx(π/2) ├┤ X ├┤ Rz(0) ├┤ X ├┤ Rx(-π/2) ├
96
- # └─────────┘└───┘└───────┘└───┘└──────────┘
97
- q = QuantumRegister(2, "q")
98
- theta = self.params[0]
99
- qc = QuantumCircuit(q, name=self.name)
100
- rules = [
101
- (RXGate(np.pi / 2), [q[0]], []),
102
- (RXGate(np.pi / 2), [q[1]], []),
103
- (CXGate(), [q[0], q[1]], []),
104
- (RZGate(theta), [q[1]], []),
105
- (CXGate(), [q[0], q[1]], []),
106
- (RXGate(-np.pi / 2), [q[0]], []),
107
- (RXGate(-np.pi / 2), [q[1]], []),
108
- ]
109
- for instr, qargs, cargs in rules:
110
- qc._append(instr, qargs, cargs)
111
-
112
- self.definition = qc
87
+ from qiskit.circuit import QuantumCircuit
88
+
89
+ # ┌──────┐ ┌────┐
90
+ # q_0: √Xdg ├──■─────────────■──┤ √X ├
91
+ # ├──────┤┌─┴─┐┌───────┐┌─┴─┐├────┤
92
+ # q_1: ┤ √Xdg ├┤ X ├┤ Rz(θ) ├┤ X ├┤ √X ├
93
+ # └──────┘└───┘└───────┘└───┘└────┘
94
+
95
+ self.definition = QuantumCircuit._from_circuit_data(
96
+ StandardGate.RYY._get_definition(self.params), add_regs=True, name=self.name
97
+ )
113
98
 
114
99
  def control(
115
100
  self,
@@ -62,28 +62,25 @@ class RZGate(Gate):
62
62
  `1612.00858 <https://arxiv.org/abs/1612.00858>`_
63
63
  """
64
64
 
65
- _standard_gate = StandardGate.RZGate
65
+ _standard_gate = StandardGate.RZ
66
66
 
67
67
  def __init__(self, phi: ParameterValueType, label: Optional[str] = None):
68
68
  """Create new RZ gate."""
69
69
  super().__init__("rz", 1, [phi], label=label)
70
70
 
71
71
  def _define(self):
72
- """
73
- gate rz(phi) a { u1(phi) a; }
74
- """
72
+ """Default definition"""
75
73
  # pylint: disable=cyclic-import
76
- from qiskit.circuit import QuantumCircuit, QuantumRegister
77
- from .u1 import U1Gate
74
+ from qiskit.circuit import QuantumCircuit
78
75
 
79
- q = QuantumRegister(1, "q")
80
- theta = self.params[0]
81
- qc = QuantumCircuit(q, name=self.name, global_phase=-theta / 2)
82
- rules = [(U1Gate(theta), [q[0]], [])]
83
- for instr, qargs, cargs in rules:
84
- qc._append(instr, qargs, cargs)
76
+ # global phase: -0.5*φ
77
+ # ┌──────┐
78
+ # q: P(φ)
79
+ # └──────┘
85
80
 
86
- self.definition = qc
81
+ self.definition = QuantumCircuit._from_circuit_data(
82
+ StandardGate.RZ._get_definition(self.params), add_regs=True, name=self.name
83
+ )
87
84
 
88
85
  def control(
89
86
  self,
@@ -220,7 +217,7 @@ class CRZGate(ControlledGate):
220
217
  phase difference.
221
218
  """
222
219
 
223
- _standard_gate = StandardGate.CRZGate
220
+ _standard_gate = StandardGate.CRZ
224
221
 
225
222
  def __init__(
226
223
  self,
@@ -242,32 +239,18 @@ class CRZGate(ControlledGate):
242
239
  )
243
240
 
244
241
  def _define(self):
245
- """
246
- gate crz(lambda) a,b
247
- { rz(lambda/2) b; cx a,b;
248
- rz(-lambda/2) b; cx a,b;
249
- }
250
- """
242
+ """Default definition"""
251
243
  # pylint: disable=cyclic-import
252
- from qiskit.circuit import QuantumCircuit, QuantumRegister
253
- from .x import CXGate
244
+ from qiskit.circuit import QuantumCircuit
254
245
 
255
246
  # q_0: ─────────────■────────────────■──
256
247
  # ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
257
- # q_1: ┤ Rz(λ/2) ├┤ X ├┤ Rz(-λ/2) ├┤ X ├
248
+ # q_1: ┤ Rz(θ/2) ├┤ X ├┤ Rz(-θ/2) ├┤ X ├
258
249
  # └─────────┘└───┘└──────────┘└───┘
259
- q = QuantumRegister(2, "q")
260
- qc = QuantumCircuit(q, name=self.name)
261
- rules = [
262
- (RZGate(self.params[0] / 2), [q[1]], []),
263
- (CXGate(), [q[0], q[1]], []),
264
- (RZGate(-self.params[0] / 2), [q[1]], []),
265
- (CXGate(), [q[0], q[1]], []),
266
- ]
267
- for instr, qargs, cargs in rules:
268
- qc._append(instr, qargs, cargs)
269
-
270
- self.definition = qc
250
+
251
+ self.definition = QuantumCircuit._from_circuit_data(
252
+ StandardGate.CRZ._get_definition(self.params), add_regs=True, name=self.name
253
+ )
271
254
 
272
255
  def inverse(self, annotated: bool = False):
273
256
  """Return inverse CRZ gate (i.e. with the negative rotation angle).
@@ -120,40 +120,25 @@ class RZXGate(Gate):
120
120
  \end{pmatrix}
121
121
  """
122
122
 
123
- _standard_gate = StandardGate.RZXGate
123
+ _standard_gate = StandardGate.RZX
124
124
 
125
125
  def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
126
126
  """Create new RZX gate."""
127
127
  super().__init__("rzx", 2, [theta], label=label)
128
128
 
129
129
  def _define(self):
130
- """
131
- gate rzx(theta) a, b { h b; cx a, b; u1(theta) b; cx a, b; h b;}
132
- """
130
+ """Default definition"""
133
131
  # pylint: disable=cyclic-import
134
- from qiskit.circuit import QuantumCircuit, QuantumRegister
135
- from .h import HGate
136
- from .x import CXGate
137
- from .rz import RZGate
132
+ from qiskit.circuit import QuantumCircuit
138
133
 
139
134
  # q_0: ───────■─────────────■───────
140
135
  # ┌───┐┌─┴─┐┌───────┐┌─┴─┐┌───┐
141
136
  # q_1: ┤ H ├┤ X ├┤ Rz(0) ├┤ X ├┤ H ├
142
137
  # └───┘└───┘└───────┘└───┘└───┘
143
- theta = self.params[0]
144
- q = QuantumRegister(2, "q")
145
- qc = QuantumCircuit(q, name=self.name)
146
- rules = [
147
- (HGate(), [q[1]], []),
148
- (CXGate(), [q[0], q[1]], []),
149
- (RZGate(theta), [q[1]], []),
150
- (CXGate(), [q[0], q[1]], []),
151
- (HGate(), [q[1]], []),
152
- ]
153
- for instr, qargs, cargs in rules:
154
- qc._append(instr, qargs, cargs)
155
-
156
- self.definition = qc
138
+
139
+ self.definition = QuantumCircuit._from_circuit_data(
140
+ StandardGate.RZX._get_definition(self.params), add_regs=True, name=self.name
141
+ )
157
142
 
158
143
  def control(
159
144
  self,