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
@@ -16,20 +16,13 @@ from __future__ import annotations
16
16
 
17
17
  import math
18
18
  from cmath import exp
19
- from math import pi
20
19
  from typing import Optional
21
20
 
22
21
  import numpy as np
23
22
 
24
23
  from qiskit.circuit.gate import Gate
25
- from qiskit.circuit.library.standard_gates.ry import RYGate
26
- from qiskit.circuit.library.standard_gates.rz import RZGate
27
- from qiskit.circuit.library.standard_gates.s import SdgGate, SGate
28
- from qiskit.circuit.library.standard_gates.sx import SXdgGate, SXGate
29
- from qiskit.circuit.library.standard_gates.x import CXGate
30
24
  from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
31
25
  from qiskit.circuit.quantumcircuit import QuantumCircuit
32
- from qiskit.circuit import QuantumRegister
33
26
  from qiskit._accelerate.circuit import StandardGate
34
27
 
35
28
 
@@ -65,7 +58,7 @@ class XXMinusYYGate(Gate):
65
58
  \end{pmatrix}
66
59
  """
67
60
 
68
- _standard_gate = StandardGate.XXMinusYYGate
61
+ _standard_gate = StandardGate.XXMinusYY
69
62
 
70
63
  def __init__(
71
64
  self,
@@ -83,48 +76,17 @@ class XXMinusYYGate(Gate):
83
76
  super().__init__("xx_minus_yy", 2, [theta, beta], label=label)
84
77
 
85
78
  def _define(self):
86
- """
87
- gate xx_minus_yy(theta, beta) a, b {
88
- rz(-beta) b;
89
- rz(-pi/2) a;
90
- sx a;
91
- rz(pi/2) a;
92
- s b;
93
- cx a, b;
94
- ry(theta/2) a;
95
- ry(-theta/2) b;
96
- cx a, b;
97
- sdg b;
98
- rz(-pi/2) a;
99
- sxdg a;
100
- rz(pi/2) a;
101
- rz(beta) b;
102
- }
103
- """
104
- theta, beta = self.params
105
- register = QuantumRegister(2, "q")
106
- circuit = QuantumCircuit(register, name=self.name)
107
- a, b = register
108
- rules = [
109
- (RZGate(-beta), [b], []),
110
- (RZGate(-pi / 2), [a], []),
111
- (SXGate(), [a], []),
112
- (RZGate(pi / 2), [a], []),
113
- (SGate(), [b], []),
114
- (CXGate(), [a, b], []),
115
- (RYGate(theta / 2), [a], []),
116
- (RYGate(-theta / 2), [b], []),
117
- (CXGate(), [a, b], []),
118
- (SdgGate(), [b], []),
119
- (RZGate(-pi / 2), [a], []),
120
- (SXdgGate(), [a], []),
121
- (RZGate(pi / 2), [a], []),
122
- (RZGate(beta), [b], []),
123
- ]
124
- for instr, qargs, cargs in rules:
125
- circuit._append(instr, qargs, cargs)
126
-
127
- self.definition = circuit
79
+ """Default definition"""
80
+
81
+ # ┌─────┐ ┌────┐┌───┐ ┌─────────┐ ┌─────┐ ┌──────┐┌───┐
82
+ # q_0: ─┤ Sdg ├──┤ √X ├┤ S ├──■──┤ Ry(θ/2) ├───■──┤ Sdg ├─┤ √Xdg ├┤ S ├
83
+ # ┌┴─────┴─┐├───┬┘└───┘┌─┴─┐├─────────┴┐┌─┴─┐├─────┤┌┴──────┤└───┘
84
+ # q_1: ┤ Rz(-β) ├┤ S ├──────┤ X ├┤ Ry(-θ/2) ├┤ X ├┤ Sdg ├┤ Rz(β) ├─────
85
+ # └────────┘└───┘ └───┘└──────────┘└───┘└─────┘└───────┘
86
+
87
+ self.definition = QuantumCircuit._from_circuit_data(
88
+ StandardGate.XXMinusYY._get_definition(self.params), add_regs=True, name=self.name
89
+ )
128
90
 
129
91
  def control(
130
92
  self,
@@ -16,13 +16,11 @@ from __future__ import annotations
16
16
 
17
17
  import math
18
18
  from cmath import exp
19
- from math import pi
20
19
  from typing import Optional
21
20
 
22
21
  import numpy
23
22
 
24
23
  from qiskit.circuit.gate import Gate
25
- from qiskit.circuit import QuantumRegister
26
24
  from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
27
25
  from qiskit._accelerate.circuit import StandardGate
28
26
 
@@ -91,7 +89,7 @@ class XXPlusYYGate(Gate):
91
89
  \end{pmatrix}
92
90
  """
93
91
 
94
- _standard_gate = StandardGate.XXPlusYYGate
92
+ _standard_gate = StandardGate.XXPlusYY
95
93
 
96
94
  def __init__(
97
95
  self,
@@ -109,56 +107,19 @@ class XXPlusYYGate(Gate):
109
107
  super().__init__("xx_plus_yy", 2, [theta, beta], label=label)
110
108
 
111
109
  def _define(self):
112
- """
113
- gate xx_plus_yy(theta, beta) a, b {
114
- rz(beta) b;
115
- rz(-pi/2) a;
116
- sx a;
117
- rz(pi/2) a;
118
- s b;
119
- cx a, b;
120
- ry(theta/2) a;
121
- ry(theta/2) b;
122
- cx a, b;
123
- sdg b;
124
- rz(-pi/2) a;
125
- sxdg a;
126
- rz(pi/2) a;
127
- rz(-beta) b;
128
- }
129
- """
110
+ """Default definition"""
130
111
  # pylint: disable=cyclic-import
131
- from qiskit.circuit.quantumcircuit import QuantumCircuit
132
- from .x import CXGate
133
- from .s import SGate, SdgGate
134
- from .sx import SXGate, SXdgGate
135
- from .rz import RZGate
136
- from .ry import RYGate
137
-
138
- theta = self.params[0]
139
- beta = self.params[1]
140
- q = QuantumRegister(2, "q")
141
- qc = QuantumCircuit(q, name=self.name)
142
- rules = [
143
- (RZGate(beta), [q[0]], []),
144
- (RZGate(-pi / 2), [q[1]], []),
145
- (SXGate(), [q[1]], []),
146
- (RZGate(pi / 2), [q[1]], []),
147
- (SGate(), [q[0]], []),
148
- (CXGate(), [q[1], q[0]], []),
149
- (RYGate(-theta / 2), [q[1]], []),
150
- (RYGate(-theta / 2), [q[0]], []),
151
- (CXGate(), [q[1], q[0]], []),
152
- (SdgGate(), [q[0]], []),
153
- (RZGate(-pi / 2), [q[1]], []),
154
- (SXdgGate(), [q[1]], []),
155
- (RZGate(pi / 2), [q[1]], []),
156
- (RZGate(-beta), [q[0]], []),
157
- ]
158
- for instr, qargs, cargs in rules:
159
- qc._append(instr, qargs, cargs)
160
-
161
- self.definition = qc
112
+ from qiskit.circuit import QuantumCircuit
113
+
114
+ # ┌───────┐┌───┐ ┌───┐┌──────────┐┌───┐┌─────┐┌────────┐
115
+ # q_0: Rz(β) ├┤ S ├──────┤ X ├┤ Ry(-θ/2) ├┤ X ├┤ Sdg ├┤ Rz(-β) ├─────
116
+ # └┬─────┬┘├───┴┐┌───┐└─┬─┘├──────────┤└─┬─┘├─────┤└┬──────┬┘┌───┐
117
+ # q_1: ─┤ Sdg ├─┤ √X ├┤ S ├──■──┤ Ry(-θ/2) ├──■──┤ Sdg ├─┤ √Xdg ├─┤ S ├
118
+ # └─────┘ └────┘└───┘ └──────────┘ └─────┘ └──────┘ └───┘
119
+
120
+ self.definition = QuantumCircuit._from_circuit_data(
121
+ StandardGate.XXPlusYY._get_definition(self.params), add_regs=True, name=self.name
122
+ )
162
123
 
163
124
  def control(
164
125
  self,
@@ -12,7 +12,6 @@
12
12
 
13
13
  """Y and CY gates."""
14
14
 
15
- from math import pi
16
15
  from typing import Optional, Union
17
16
 
18
17
  # pylint: disable=cyclic-import
@@ -70,7 +69,7 @@ class YGate(SingletonGate):
70
69
  |1\rangle \rightarrow -i|0\rangle
71
70
  """
72
71
 
73
- _standard_gate = StandardGate.YGate
72
+ _standard_gate = StandardGate.Y
74
73
 
75
74
  def __init__(self, label: Optional[str] = None):
76
75
  """Create new Y gate."""
@@ -79,17 +78,17 @@ class YGate(SingletonGate):
79
78
  _singleton_lookup_key = stdlib_singleton_key()
80
79
 
81
80
  def _define(self):
81
+ """Default definition"""
82
82
  # pylint: disable=cyclic-import
83
- from qiskit.circuit import QuantumCircuit, QuantumRegister
84
- from .u3 import U3Gate
83
+ from qiskit.circuit import QuantumCircuit
85
84
 
86
- q = QuantumRegister(1, "q")
87
- qc = QuantumCircuit(q, name=self.name)
88
- rules = [(U3Gate(pi, pi / 2, pi / 2), [q[0]], [])]
89
- for instr, qargs, cargs in rules:
90
- qc._append(instr, qargs, cargs)
85
+ # ┌──────────────┐
86
+ # q: ┤ U(π,π/2,π/2)
87
+ # └──────────────┘
91
88
 
92
- self.definition = qc
89
+ self.definition = QuantumCircuit._from_circuit_data(
90
+ StandardGate.Y._get_definition(self.params), add_regs=True, name=self.name
91
+ )
93
92
 
94
93
  def control(
95
94
  self,
@@ -200,7 +199,7 @@ class CYGate(SingletonControlledGate):
200
199
 
201
200
  """
202
201
 
203
- _standard_gate = StandardGate.CYGate
202
+ _standard_gate = StandardGate.CY
204
203
 
205
204
  def __init__(
206
205
  self,
@@ -223,21 +222,18 @@ class CYGate(SingletonControlledGate):
223
222
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
224
223
 
225
224
  def _define(self):
226
- """
227
- gate cy a,b { sdg b; cx a,b; s b; }
228
- """
225
+ """Default definition"""
229
226
  # pylint: disable=cyclic-import
230
- from qiskit.circuit import QuantumCircuit, QuantumRegister
231
- from .s import SGate, SdgGate
232
- from .x import CXGate
227
+ from qiskit.circuit import QuantumCircuit
233
228
 
234
- q = QuantumRegister(2, "q")
235
- qc = QuantumCircuit(q, name=self.name)
236
- rules = [(SdgGate(), [q[1]], []), (CXGate(), [q[0], q[1]], []), (SGate(), [q[1]], [])]
237
- for instr, qargs, cargs in rules:
238
- qc._append(instr, qargs, cargs)
229
+ # q_0: ─────────■───────
230
+ # ┌─────┐┌─┴─┐┌───┐
231
+ # q_1: Sdg ├┤ X ├┤ S
232
+ # └─────┘└───┘└───┘
239
233
 
240
- self.definition = qc
234
+ self.definition = QuantumCircuit._from_circuit_data(
235
+ StandardGate.CY._get_definition(self.params), add_regs=True, name=self.name
236
+ )
241
237
 
242
238
  def inverse(self, annotated: bool = False):
243
239
  """Return inverted CY gate (itself).
@@ -12,7 +12,6 @@
12
12
 
13
13
  """Z, CZ and CCZ gates."""
14
14
 
15
- from math import pi
16
15
  from typing import Optional, Union
17
16
 
18
17
  import numpy
@@ -73,7 +72,7 @@ class ZGate(SingletonGate):
73
72
  |1\rangle \rightarrow -|1\rangle
74
73
  """
75
74
 
76
- _standard_gate = StandardGate.ZGate
75
+ _standard_gate = StandardGate.Z
77
76
 
78
77
  def __init__(self, label: Optional[str] = None):
79
78
  """Create new Z gate."""
@@ -82,17 +81,17 @@ class ZGate(SingletonGate):
82
81
  _singleton_lookup_key = stdlib_singleton_key()
83
82
 
84
83
  def _define(self):
84
+ """Default definition"""
85
85
  # pylint: disable=cyclic-import
86
- from qiskit.circuit import QuantumCircuit, QuantumRegister
87
- from .u1 import U1Gate
86
+ from qiskit.circuit import QuantumCircuit
88
87
 
89
- q = QuantumRegister(1, "q")
90
- qc = QuantumCircuit(q, name=self.name)
91
- rules = [(U1Gate(pi), [q[0]], [])]
92
- for instr, qargs, cargs in rules:
93
- qc._append(instr, qargs, cargs)
88
+ # ┌──────┐
89
+ # q: ┤ P(π)
90
+ # └──────┘
94
91
 
95
- self.definition = qc
92
+ self.definition = QuantumCircuit._from_circuit_data(
93
+ StandardGate.Z._get_definition(self.params), add_regs=True, name=self.name
94
+ )
96
95
 
97
96
  def control(
98
97
  self,
@@ -182,7 +181,7 @@ class CZGate(SingletonControlledGate):
182
181
  the target qubit if the control qubit is in the :math:`|1\rangle` state.
183
182
  """
184
183
 
185
- _standard_gate = StandardGate.CZGate
184
+ _standard_gate = StandardGate.CZ
186
185
 
187
186
  def __init__(
188
187
  self,
@@ -205,22 +204,18 @@ class CZGate(SingletonControlledGate):
205
204
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
206
205
 
207
206
  def _define(self):
208
- """
209
- gate cz a,b { h b; cx a,b; h b; }
210
- """
207
+ """Default definition"""
211
208
  # pylint: disable=cyclic-import
212
- from qiskit.circuit import QuantumCircuit, QuantumRegister
209
+ from qiskit.circuit import QuantumCircuit
213
210
 
214
- from .h import HGate
215
- from .x import CXGate
211
+ # q_0: ───────■───────
212
+ # ┌───┐┌─┴─┐┌───┐
213
+ # q_1: ┤ H ├┤ X ├┤ H ├
214
+ # └───┘└───┘└───┘
216
215
 
217
- q = QuantumRegister(2, "q")
218
- qc = QuantumCircuit(q, name=self.name)
219
- rules = [(HGate(), [q[1]], []), (CXGate(), [q[0], q[1]], []), (HGate(), [q[1]], [])]
220
- for instr, qargs, cargs in rules:
221
- qc._append(instr, qargs, cargs)
222
-
223
- self.definition = qc
216
+ self.definition = QuantumCircuit._from_circuit_data(
217
+ StandardGate.CZ._get_definition(self.params), add_regs=True, name=self.name
218
+ )
224
219
 
225
220
  def inverse(self, annotated: bool = False):
226
221
  """Return inverted CZ gate (itself).
@@ -280,7 +275,7 @@ class CCZGate(SingletonControlledGate):
280
275
  the target qubit if the control qubits are in the :math:`|11\rangle` state.
281
276
  """
282
277
 
283
- _standard_gate = StandardGate.CCZGate
278
+ _standard_gate = StandardGate.CCZ
284
279
 
285
280
  def __init__(
286
281
  self,
@@ -303,22 +298,20 @@ class CCZGate(SingletonControlledGate):
303
298
  _singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=2)
304
299
 
305
300
  def _define(self):
306
- """
307
- gate ccz a,b,c { h c; ccx a,b,c; h c; }
308
- """
301
+ """Default definition"""
309
302
  # pylint: disable=cyclic-import
310
- from qiskit.circuit import QuantumCircuit, QuantumRegister
303
+ from qiskit.circuit import QuantumCircuit
311
304
 
312
- from .h import HGate
313
- from .x import CCXGate
305
+ # q_0: ───────■───────
306
+ # │
307
+ # q_1: ───────■───────
308
+ # ┌───┐┌─┴─┐┌───┐
309
+ # q_2: ┤ H ├┤ X ├┤ H ├
310
+ # └───┘└───┘└───┘
314
311
 
315
- q = QuantumRegister(3, "q")
316
- qc = QuantumCircuit(q, name=self.name)
317
- rules = [(HGate(), [q[2]], []), (CCXGate(), [q[0], q[1], q[2]], []), (HGate(), [q[2]], [])]
318
- for instr, qargs, cargs in rules:
319
- qc._append(instr, qargs, cargs)
320
-
321
- self.definition = qc
312
+ self.definition = QuantumCircuit._from_circuit_data(
313
+ StandardGate.CCZ._get_definition(self.params), add_regs=True, name=self.name
314
+ )
322
315
 
323
316
  def inverse(self, annotated: bool = False):
324
317
  """Return inverted CCZ gate (itself).
@@ -17,13 +17,16 @@ from __future__ import annotations
17
17
 
18
18
  from uuid import uuid4, UUID
19
19
 
20
- import symengine
21
-
20
+ import qiskit._accelerate.circuit
22
21
  from qiskit.circuit.exceptions import CircuitError
22
+ from qiskit.utils.optionals import HAS_SYMPY
23
23
 
24
24
  from .parameterexpression import ParameterExpression
25
25
 
26
26
 
27
+ SymbolExpr = qiskit._accelerate.circuit.ParameterExpression
28
+
29
+
27
30
  class Parameter(ParameterExpression):
28
31
  """A compile-time symbolic parameter.
29
32
 
@@ -81,7 +84,7 @@ class Parameter(ParameterExpression):
81
84
  allows them to be equal. This is useful during serialization and deserialization.
82
85
  """
83
86
  self._uuid = uuid4() if uuid is None else uuid
84
- symbol = symengine.Symbol(name)
87
+ symbol = SymbolExpr.Symbol(name)
85
88
 
86
89
  self._symbol_expr = symbol
87
90
  self._parameter_keys = frozenset((self._hash_key(),))
@@ -103,7 +106,7 @@ class Parameter(ParameterExpression):
103
106
  return value
104
107
  # This is the `super().bind` case, where we're required to return a `ParameterExpression`,
105
108
  # so we need to lift the given value to a symbolic expression.
106
- return ParameterExpression({}, symengine.sympify(value))
109
+ return ParameterExpression({}, SymbolExpr.Value(value))
107
110
 
108
111
  def subs(self, parameter_map: dict, allow_unknown_parameters: bool = False):
109
112
  """Substitute self with the corresponding parameter in ``parameter_map``."""
@@ -156,7 +159,7 @@ class Parameter(ParameterExpression):
156
159
  # its hash as part of the equality comparison but has its own more complete symbolic
157
160
  # expression, so its full hash key is split into `(parameter_keys, symbolic_expression)`.
158
161
  # This method lets containing expressions get only the bits they need for equality checks in
159
- # the first value, without wasting time re-hashing individual Sympy/Symengine symbols.
162
+ # the first value, without wasting time re-hashing individual symbols.
160
163
  return (self._symbol_expr, self._uuid)
161
164
 
162
165
  def __hash__(self):
@@ -177,3 +180,9 @@ class Parameter(ParameterExpression):
177
180
  self._name_map = None
178
181
  self._qpy_replay = []
179
182
  self._standalone_param = True
183
+
184
+ @HAS_SYMPY.require_in_call
185
+ def sympify(self):
186
+ import sympy
187
+
188
+ return sympy.Symbol(self.name)