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.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +19 -1
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +13 -21
- qiskit/circuit/_add_control.py +57 -31
- qiskit/circuit/_classical_resource_map.py +4 -0
- qiskit/circuit/annotation.py +404 -0
- qiskit/circuit/classical/expr/__init__.py +1 -1
- qiskit/circuit/classical/expr/expr.py +104 -446
- qiskit/circuit/classical/expr/visitors.py +6 -0
- qiskit/circuit/classical/types/types.py +7 -130
- qiskit/circuit/controlflow/box.py +32 -7
- qiskit/circuit/delay.py +11 -9
- qiskit/circuit/library/arithmetic/adders/adder.py +5 -5
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -3
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +7 -3
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +23 -15
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +22 -14
- qiskit/circuit/library/arithmetic/quadratic_form.py +6 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +43 -24
- qiskit/circuit/library/basis_change/qft.py +2 -2
- qiskit/circuit/library/blueprintcircuit.py +6 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +2 -2
- qiskit/circuit/library/boolean_logic/quantum_and.py +2 -2
- qiskit/circuit/library/boolean_logic/quantum_or.py +3 -3
- qiskit/circuit/library/boolean_logic/quantum_xor.py +2 -2
- qiskit/circuit/library/data_preparation/_z_feature_map.py +2 -2
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +2 -2
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +2 -2
- qiskit/circuit/library/fourier_checking.py +2 -2
- qiskit/circuit/library/generalized_gates/diagonal.py +5 -1
- qiskit/circuit/library/generalized_gates/gms.py +5 -1
- qiskit/circuit/library/generalized_gates/linear_function.py +2 -2
- qiskit/circuit/library/generalized_gates/permutation.py +5 -1
- qiskit/circuit/library/generalized_gates/uc.py +1 -1
- qiskit/circuit/library/generalized_gates/unitary.py +21 -2
- qiskit/circuit/library/graph_state.py +2 -2
- qiskit/circuit/library/grover_operator.py +2 -2
- qiskit/circuit/library/hidden_linear_function.py +2 -2
- qiskit/circuit/library/iqp.py +2 -2
- qiskit/circuit/library/n_local/efficient_su2.py +2 -2
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
- qiskit/circuit/library/n_local/excitation_preserving.py +7 -9
- qiskit/circuit/library/n_local/n_local.py +4 -3
- qiskit/circuit/library/n_local/pauli_two_design.py +2 -2
- qiskit/circuit/library/n_local/real_amplitudes.py +2 -2
- qiskit/circuit/library/n_local/two_local.py +2 -2
- qiskit/circuit/library/overlap.py +2 -2
- qiskit/circuit/library/pauli_evolution.py +3 -2
- qiskit/circuit/library/phase_estimation.py +2 -2
- qiskit/circuit/library/standard_gates/dcx.py +11 -12
- qiskit/circuit/library/standard_gates/ecr.py +21 -24
- qiskit/circuit/library/standard_gates/equivalence_library.py +232 -96
- qiskit/circuit/library/standard_gates/global_phase.py +5 -6
- qiskit/circuit/library/standard_gates/h.py +22 -45
- qiskit/circuit/library/standard_gates/i.py +1 -1
- qiskit/circuit/library/standard_gates/iswap.py +13 -31
- qiskit/circuit/library/standard_gates/p.py +19 -26
- qiskit/circuit/library/standard_gates/r.py +11 -17
- qiskit/circuit/library/standard_gates/rx.py +21 -45
- qiskit/circuit/library/standard_gates/rxx.py +7 -22
- qiskit/circuit/library/standard_gates/ry.py +21 -39
- qiskit/circuit/library/standard_gates/ryy.py +13 -28
- qiskit/circuit/library/standard_gates/rz.py +18 -35
- qiskit/circuit/library/standard_gates/rzx.py +7 -22
- qiskit/circuit/library/standard_gates/rzz.py +7 -19
- qiskit/circuit/library/standard_gates/s.py +44 -39
- qiskit/circuit/library/standard_gates/swap.py +25 -38
- qiskit/circuit/library/standard_gates/sx.py +34 -41
- qiskit/circuit/library/standard_gates/t.py +18 -27
- qiskit/circuit/library/standard_gates/u.py +8 -24
- qiskit/circuit/library/standard_gates/u1.py +28 -52
- qiskit/circuit/library/standard_gates/u2.py +9 -9
- qiskit/circuit/library/standard_gates/u3.py +24 -40
- qiskit/circuit/library/standard_gates/x.py +190 -336
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +12 -50
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +13 -52
- qiskit/circuit/library/standard_gates/y.py +19 -23
- qiskit/circuit/library/standard_gates/z.py +31 -38
- qiskit/circuit/parameter.py +14 -5
- qiskit/circuit/parameterexpression.py +109 -75
- qiskit/circuit/quantumcircuit.py +168 -98
- qiskit/circuit/quantumcircuitdata.py +1 -0
- qiskit/circuit/random/__init__.py +37 -2
- qiskit/circuit/random/utils.py +445 -56
- qiskit/circuit/tools/pi_check.py +5 -13
- qiskit/compiler/transpiler.py +1 -1
- qiskit/converters/circuit_to_instruction.py +2 -2
- qiskit/dagcircuit/dagnode.py +8 -3
- qiskit/primitives/__init__.py +2 -2
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +0 -3
- qiskit/primitives/containers/observables_array.py +192 -108
- qiskit/primitives/primitive_job.py +29 -10
- qiskit/providers/fake_provider/generic_backend_v2.py +2 -0
- qiskit/qasm3/__init__.py +106 -12
- qiskit/qasm3/ast.py +15 -1
- qiskit/qasm3/exporter.py +59 -36
- qiskit/qasm3/printer.py +12 -0
- qiskit/qpy/__init__.py +183 -7
- qiskit/qpy/binary_io/circuits.py +256 -24
- qiskit/qpy/binary_io/parse_sympy_repr.py +5 -0
- qiskit/qpy/binary_io/schedules.py +12 -32
- qiskit/qpy/binary_io/value.py +36 -18
- qiskit/qpy/common.py +11 -3
- qiskit/qpy/formats.py +17 -1
- qiskit/qpy/interface.py +52 -12
- qiskit/qpy/type_keys.py +7 -1
- qiskit/quantum_info/__init__.py +10 -0
- qiskit/quantum_info/operators/__init__.py +1 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +1 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +26 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +2 -2
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1 -1
- qiskit/result/sampled_expval.py +3 -1
- qiskit/synthesis/__init__.py +10 -0
- qiskit/synthesis/arithmetic/__init__.py +1 -1
- qiskit/synthesis/arithmetic/adders/__init__.py +1 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +6 -2
- qiskit/synthesis/arithmetic/adders/rv_ripple_carry_adder.py +156 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +14 -126
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +161 -121
- qiskit/synthesis/evolution/lie_trotter.py +10 -7
- qiskit/synthesis/evolution/product_formula.py +10 -7
- qiskit/synthesis/evolution/qdrift.py +10 -7
- qiskit/synthesis/evolution/suzuki_trotter.py +10 -7
- qiskit/synthesis/multi_controlled/__init__.py +4 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +402 -178
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +14 -15
- qiskit/synthesis/qft/qft_decompose_lnn.py +7 -25
- qiskit/synthesis/unitary/qsd.py +80 -9
- qiskit/transpiler/__init__.py +19 -8
- qiskit/transpiler/instruction_durations.py +2 -20
- qiskit/transpiler/passes/__init__.py +4 -2
- qiskit/transpiler/passes/layout/dense_layout.py +26 -6
- qiskit/transpiler/passes/layout/disjoint_utils.py +1 -166
- qiskit/transpiler/passes/layout/sabre_layout.py +22 -3
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +1 -1
- qiskit/transpiler/passes/layout/vf2_layout.py +49 -13
- qiskit/transpiler/passes/layout/vf2_utils.py +13 -1
- qiskit/transpiler/passes/optimization/__init__.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +2 -1
- qiskit/transpiler/passes/optimization/optimize_clifford_t.py +68 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -9
- qiskit/transpiler/passes/routing/sabre_swap.py +12 -2
- qiskit/transpiler/passes/routing/star_prerouting.py +106 -81
- qiskit/transpiler/passes/scheduling/__init__.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/__init__.py +1 -0
- qiskit/transpiler/passes/scheduling/padding/context_aware_dynamical_decoupling.py +876 -0
- qiskit/transpiler/passes/synthesis/__init__.py +1 -0
- qiskit/transpiler/passes/synthesis/clifford_unitary_synth_plugin.py +123 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +472 -92
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +27 -22
- qiskit/transpiler/passmanager_config.py +3 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +149 -28
- qiskit/transpiler/preset_passmanagers/common.py +101 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +6 -0
- qiskit/transpiler/preset_passmanagers/level3.py +2 -2
- qiskit/utils/optionals.py +6 -5
- qiskit/visualization/circuit/_utils.py +5 -3
- qiskit/visualization/circuit/latex.py +9 -2
- qiskit/visualization/circuit/matplotlib.py +26 -4
- qiskit/visualization/circuit/qcstyle.py +9 -157
- qiskit/visualization/dag/__init__.py +13 -0
- qiskit/visualization/dag/dagstyle.py +103 -0
- qiskit/visualization/dag/styles/__init__.py +13 -0
- qiskit/visualization/dag/styles/color.json +10 -0
- qiskit/visualization/dag/styles/plain.json +5 -0
- qiskit/visualization/dag_visualization.py +169 -98
- qiskit/visualization/style.py +223 -0
- {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/METADATA +14 -13
- {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/RECORD +177 -168
- {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/entry_points.txt +6 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +0 -265
- qiskit/synthesis/discrete_basis/gate_sequence.py +0 -421
- {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/WHEEL +0 -0
- {qiskit-2.0.2.dist-info → qiskit-2.1.0rc1.dist-info}/licenses/LICENSE.txt +0 -0
- {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.
|
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
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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.
|
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
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
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.
|
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
|
84
|
-
from .u3 import U3Gate
|
83
|
+
from qiskit.circuit import QuantumCircuit
|
85
84
|
|
86
|
-
|
87
|
-
|
88
|
-
|
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 =
|
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.
|
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
|
231
|
-
from .s import SGate, SdgGate
|
232
|
-
from .x import CXGate
|
227
|
+
from qiskit.circuit import QuantumCircuit
|
233
228
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
qc._append(instr, qargs, cargs)
|
229
|
+
# q_0: ─────────■───────
|
230
|
+
# ┌─────┐┌─┴─┐┌───┐
|
231
|
+
# q_1: ┤ Sdg ├┤ X ├┤ S ├
|
232
|
+
# └─────┘└───┘└───┘
|
239
233
|
|
240
|
-
self.definition =
|
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.
|
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
|
87
|
-
from .u1 import U1Gate
|
86
|
+
from qiskit.circuit import QuantumCircuit
|
88
87
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
for instr, qargs, cargs in rules:
|
93
|
-
qc._append(instr, qargs, cargs)
|
88
|
+
# ┌──────┐
|
89
|
+
# q: ┤ P(π) ├
|
90
|
+
# └──────┘
|
94
91
|
|
95
|
-
self.definition =
|
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.
|
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
|
209
|
+
from qiskit.circuit import QuantumCircuit
|
213
210
|
|
214
|
-
|
215
|
-
|
211
|
+
# q_0: ───────■───────
|
212
|
+
# ┌───┐┌─┴─┐┌───┐
|
213
|
+
# q_1: ┤ H ├┤ X ├┤ H ├
|
214
|
+
# └───┘└───┘└───┘
|
216
215
|
|
217
|
-
|
218
|
-
|
219
|
-
|
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.
|
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
|
303
|
+
from qiskit.circuit import QuantumCircuit
|
311
304
|
|
312
|
-
|
313
|
-
|
305
|
+
# q_0: ───────■───────
|
306
|
+
# │
|
307
|
+
# q_1: ───────■───────
|
308
|
+
# ┌───┐┌─┴─┐┌───┐
|
309
|
+
# q_2: ┤ H ├┤ X ├┤ H ├
|
310
|
+
# └───┘└───┘└───┘
|
314
311
|
|
315
|
-
|
316
|
-
|
317
|
-
|
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).
|
qiskit/circuit/parameter.py
CHANGED
@@ -17,13 +17,16 @@ from __future__ import annotations
|
|
17
17
|
|
18
18
|
from uuid import uuid4, UUID
|
19
19
|
|
20
|
-
import
|
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 =
|
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({},
|
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
|
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)
|