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
@@ -85,7 +85,7 @@ class iSwapGate(SingletonGate):
|
|
85
85
|
\end{pmatrix}
|
86
86
|
"""
|
87
87
|
|
88
|
-
_standard_gate = StandardGate.
|
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
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
(
|
118
|
-
|
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.
|
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
|
87
|
-
from .u import UGate
|
87
|
+
from qiskit.circuit import QuantumCircuit
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
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.
|
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
|
227
|
+
from qiskit.circuit import QuantumCircuit
|
231
228
|
|
232
229
|
# ┌────────┐
|
233
|
-
# q_0: ┤ P(
|
230
|
+
# q_0: ┤ P(θ/2) ├──■───────────────■────────────
|
234
231
|
# └────────┘┌─┴─┐┌─────────┐┌─┴─┐┌────────┐
|
235
|
-
# q_1: ──────────┤ X ├┤ P(
|
232
|
+
# q_1: ──────────┤ X ├┤ P(-θ/2) ├┤ X ├┤ P(θ/2) ├
|
236
233
|
# └───┘└─────────┘└───┘└────────┘
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
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.
|
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
|
70
|
-
|
71
|
-
|
72
|
-
q
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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.
|
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
|
67
|
-
from .r import RGate
|
63
|
+
from qiskit.circuit import QuantumCircuit
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
for instr, qargs, cargs in rules:
|
73
|
-
qc._append(instr, qargs, cargs)
|
65
|
+
# ┌────────┐
|
66
|
+
# q: ┤ R(θ,0) ├
|
67
|
+
# └────────┘
|
74
68
|
|
75
|
-
self.definition =
|
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.
|
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
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
#
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
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.
|
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
|
-
"""
|
85
|
+
"""Default definition"""
|
86
86
|
# pylint: disable=cyclic-import
|
87
|
-
from qiskit.circuit import QuantumCircuit
|
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
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
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.
|
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
|
66
|
-
from .r import RGate
|
62
|
+
from qiskit.circuit import QuantumCircuit
|
67
63
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
for instr, qargs, cargs in rules:
|
72
|
-
qc._append(instr, qargs, cargs)
|
64
|
+
# ┌──────────┐
|
65
|
+
# q: ┤ R(θ,π/2) ├
|
66
|
+
# └──────────┘
|
73
67
|
|
74
|
-
self.definition =
|
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.
|
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
|
234
|
-
|
235
|
-
|
236
|
-
#
|
237
|
-
#
|
238
|
-
#
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
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.
|
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
|
-
"""
|
85
|
+
"""Default definition"""
|
86
86
|
# pylint: disable=cyclic-import
|
87
|
-
from qiskit.circuit import QuantumCircuit
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
#
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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.
|
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
|
77
|
-
from .u1 import U1Gate
|
74
|
+
from qiskit.circuit import QuantumCircuit
|
78
75
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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 =
|
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.
|
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
|
253
|
-
from .x import CXGate
|
244
|
+
from qiskit.circuit import QuantumCircuit
|
254
245
|
|
255
246
|
# q_0: ─────────────■────────────────■──
|
256
247
|
# ┌─────────┐┌─┴─┐┌──────────┐┌─┴─┐
|
257
|
-
# q_1: ┤ Rz(
|
248
|
+
# q_1: ┤ Rz(θ/2) ├┤ X ├┤ Rz(-θ/2) ├┤ X ├
|
258
249
|
# └─────────┘└───┘└──────────┘└───┘
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
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.
|
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
|
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
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
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,
|