qiskit 1.3.0rc2__cp39-abi3-win32.whl → 1.3.2__cp39-abi3-win32.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 (93) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/_accelerate.pyd +0 -0
  3. qiskit/circuit/__init__.py +2 -0
  4. qiskit/circuit/add_control.py +110 -92
  5. qiskit/circuit/controlledgate.py +2 -0
  6. qiskit/circuit/library/__init__.py +1 -0
  7. qiskit/circuit/library/arithmetic/adders/adder.py +25 -0
  8. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  9. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -1
  10. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  11. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +9 -0
  12. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -0
  13. qiskit/circuit/library/basis_change/qft.py +3 -0
  14. qiskit/circuit/library/boolean_logic/inner_product.py +2 -0
  15. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -0
  16. qiskit/circuit/library/boolean_logic/quantum_or.py +4 -0
  17. qiskit/circuit/library/boolean_logic/quantum_xor.py +2 -0
  18. qiskit/circuit/library/fourier_checking.py +2 -0
  19. qiskit/circuit/library/generalized_gates/gms.py +1 -0
  20. qiskit/circuit/library/generalized_gates/gr.py +4 -0
  21. qiskit/circuit/library/generalized_gates/mcmt.py +1 -0
  22. qiskit/circuit/library/generalized_gates/permutation.py +5 -1
  23. qiskit/circuit/library/generalized_gates/unitary.py +1 -1
  24. qiskit/circuit/library/graph_state.py +2 -0
  25. qiskit/circuit/library/grover_operator.py +7 -3
  26. qiskit/circuit/library/hidden_linear_function.py +2 -0
  27. qiskit/circuit/library/iqp.py +5 -0
  28. qiskit/circuit/library/n_local/efficient_su2.py +7 -2
  29. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -0
  30. qiskit/circuit/library/n_local/excitation_preserving.py +14 -8
  31. qiskit/circuit/library/n_local/n_local.py +10 -5
  32. qiskit/circuit/library/n_local/pauli_two_design.py +5 -2
  33. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -0
  34. qiskit/circuit/library/n_local/real_amplitudes.py +10 -4
  35. qiskit/circuit/library/overlap.py +1 -0
  36. qiskit/circuit/library/phase_estimation.py +2 -0
  37. qiskit/circuit/library/quantum_volume.py +3 -0
  38. qiskit/circuit/operation.py +1 -0
  39. qiskit/circuit/parameter.py +1 -0
  40. qiskit/circuit/parameterexpression.py +1 -1
  41. qiskit/circuit/quantumcircuit.py +13 -19
  42. qiskit/circuit/random/utils.py +2 -0
  43. qiskit/converters/dag_to_circuit.py +1 -0
  44. qiskit/primitives/statevector_estimator.py +1 -0
  45. qiskit/providers/fake_provider/__init__.py +1 -0
  46. qiskit/pulse/builder.py +8 -0
  47. qiskit/pulse/library/symbolic_pulses.py +1 -0
  48. qiskit/qasm2/export.py +2 -2
  49. qiskit/qasm3/__init__.py +1 -0
  50. qiskit/qasm3/exporter.py +6 -3
  51. qiskit/qpy/__init__.py +5 -5
  52. qiskit/quantum_info/operators/channel/chi.py +9 -9
  53. qiskit/quantum_info/operators/channel/choi.py +9 -9
  54. qiskit/quantum_info/operators/channel/ptm.py +9 -9
  55. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -3
  56. qiskit/quantum_info/operators/channel/stinespring.py +9 -9
  57. qiskit/quantum_info/operators/channel/superop.py +5 -9
  58. qiskit/quantum_info/operators/symplectic/pauli_list.py +8 -8
  59. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +10 -1
  60. qiskit/quantum_info/states/densitymatrix.py +17 -15
  61. qiskit/quantum_info/states/stabilizerstate.py +7 -6
  62. qiskit/quantum_info/states/statevector.py +15 -6
  63. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -0
  64. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -0
  65. qiskit/synthesis/evolution/product_formula.py +0 -6
  66. qiskit/synthesis/evolution/suzuki_trotter.py +22 -5
  67. qiskit/transpiler/__init__.py +22 -1
  68. qiskit/transpiler/layout.py +3 -0
  69. qiskit/transpiler/passes/basis/decompose.py +24 -4
  70. qiskit/transpiler/passes/optimization/inverse_cancellation.py +2 -0
  71. qiskit/transpiler/passes/routing/star_prerouting.py +1 -0
  72. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +1 -0
  73. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +1 -0
  74. qiskit/transpiler/passes/synthesis/hls_plugins.py +137 -30
  75. qiskit/transpiler/passes/utils/filter_op_nodes.py +2 -1
  76. qiskit/transpiler/passes/utils/remove_barriers.py +1 -0
  77. qiskit/transpiler/preset_passmanagers/__init__.py +5 -5
  78. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +19 -22
  79. qiskit/transpiler/target.py +1 -1
  80. qiskit/visualization/__init__.py +6 -0
  81. qiskit/visualization/circuit/circuit_visualization.py +1 -0
  82. qiskit/visualization/counts_visualization.py +2 -0
  83. qiskit/visualization/dag_visualization.py +1 -0
  84. qiskit/visualization/gate_map.py +7 -3
  85. qiskit/visualization/pulse_v2/interface.py +4 -1
  86. qiskit/visualization/state_visualization.py +13 -2
  87. qiskit/visualization/timeline/interface.py +6 -3
  88. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/METADATA +26 -26
  89. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/RECORD +93 -93
  90. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/WHEEL +1 -1
  91. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/entry_points.txt +1 -1
  92. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/LICENSE.txt +0 -0
  93. {qiskit-1.3.0rc2.dist-info → qiskit-1.3.2.dist-info}/top_level.txt +0 -0
qiskit/VERSION.txt CHANGED
@@ -1 +1 @@
1
- 1.3.0rc2
1
+ 1.3.2
qiskit/_accelerate.pyd CHANGED
Binary file
@@ -64,6 +64,7 @@ defined as:
64
64
 
65
65
 
66
66
  .. plot::
67
+ :alt: Circuit diagram output by the previous code.
67
68
  :include-source:
68
69
 
69
70
  from qiskit import QuantumCircuit
@@ -1140,6 +1141,7 @@ If we draw this circuit, we will see that Qiskit places the zeroth qubit on the
1140
1141
  drawing:
1141
1142
 
1142
1143
  .. plot::
1144
+ :alt: Circuit diagram output by the previous code.
1143
1145
  :include-source:
1144
1146
  :context:
1145
1147
  :show-source-link: False
@@ -13,6 +13,7 @@
13
13
  """Add control to operation if supported."""
14
14
  from __future__ import annotations
15
15
 
16
+ from math import pi
16
17
  from qiskit.circuit.exceptions import CircuitError
17
18
  from qiskit.circuit.library import UnitaryGate
18
19
  from qiskit.transpiler import PassManager
@@ -92,7 +93,6 @@ def control(
92
93
  Raises:
93
94
  CircuitError: gate contains non-gate in definition
94
95
  """
95
- from math import pi
96
96
 
97
97
  # pylint: disable=cyclic-import
98
98
  from qiskit.circuit import controlledgate
@@ -101,22 +101,23 @@ def control(
101
101
 
102
102
  q_control = QuantumRegister(num_ctrl_qubits, name="control")
103
103
  q_target = QuantumRegister(operation.num_qubits, name="target")
104
- q_ancillae = None # TODO: add
105
104
  controlled_circ = QuantumCircuit(q_control, q_target, name=f"c_{operation.name}")
106
105
  if isinstance(operation, controlledgate.ControlledGate):
107
106
  original_ctrl_state = operation.ctrl_state
107
+ operation = operation.to_mutable()
108
+ operation.ctrl_state = None
109
+
108
110
  global_phase = 0
109
- if operation.name == "x" or (
110
- isinstance(operation, controlledgate.ControlledGate) and operation.base_gate.name == "x"
111
- ):
112
- controlled_circ.mcx(q_control[:] + q_target[:-1], q_target[-1], q_ancillae)
113
- if operation.definition is not None and operation.definition.global_phase:
114
- global_phase += operation.definition.global_phase
111
+
112
+ basis = ["p", "u", "x", "z", "rx", "ry", "rz", "cx"]
113
+
114
+ if operation.name in basis:
115
+ apply_basic_controlled_gate(controlled_circ, operation, q_control, q_target[0])
115
116
  else:
116
- basis = ["p", "u", "x", "z", "rx", "ry", "rz", "cx"]
117
117
  if isinstance(operation, controlledgate.ControlledGate):
118
118
  operation = operation.to_mutable()
119
119
  operation.ctrl_state = None
120
+
120
121
  unrolled_gate = _unroll_gate(operation, basis_gates=basis)
121
122
  if unrolled_gate.definition.global_phase:
122
123
  global_phase += unrolled_gate.definition.global_phase
@@ -130,87 +131,17 @@ def control(
130
131
 
131
132
  for instruction in definition.data:
132
133
  gate, qargs = instruction.operation, instruction.qubits
133
- if gate.name == "x":
134
- controlled_circ.mcx(q_control, q_target[bit_indices[qargs[0]]], q_ancillae)
135
- elif gate.name == "rx":
136
- controlled_circ.mcrx(
137
- gate.definition.data[0].operation.params[0],
138
- q_control,
139
- q_target[bit_indices[qargs[0]]],
140
- use_basis_gates=False,
141
- )
142
- elif gate.name == "ry":
143
- controlled_circ.mcry(
144
- gate.definition.data[0].operation.params[0],
145
- q_control,
146
- q_target[bit_indices[qargs[0]]],
147
- q_ancillae,
148
- mode="noancilla",
149
- use_basis_gates=False,
150
- )
151
- elif gate.name == "rz":
152
- controlled_circ.mcrz(
153
- gate.definition.data[0].operation.params[0],
154
- q_control,
155
- q_target[bit_indices[qargs[0]]],
156
- use_basis_gates=False,
157
- )
158
- continue
159
- elif gate.name == "p":
160
- from qiskit.circuit.library import MCPhaseGate
161
134
 
162
- controlled_circ.append(
163
- MCPhaseGate(gate.params[0], num_ctrl_qubits),
164
- q_control[:] + [q_target[bit_indices[qargs[0]]]],
165
- )
166
- elif gate.name == "cx":
167
- controlled_circ.mcx(
168
- q_control[:] + [q_target[bit_indices[qargs[0]]]],
169
- q_target[bit_indices[qargs[1]]],
170
- q_ancillae,
171
- )
172
- elif gate.name == "u":
173
- theta, phi, lamb = gate.params
174
- if num_ctrl_qubits == 1:
175
- if theta == 0 and phi == 0:
176
- controlled_circ.cp(lamb, q_control[0], q_target[bit_indices[qargs[0]]])
177
- else:
178
- controlled_circ.cu(
179
- theta, phi, lamb, 0, q_control[0], q_target[bit_indices[qargs[0]]]
180
- )
181
- else:
182
- if phi == -pi / 2 and lamb == pi / 2:
183
- controlled_circ.mcrx(
184
- theta, q_control, q_target[bit_indices[qargs[0]]], use_basis_gates=True
185
- )
186
- elif phi == 0 and lamb == 0:
187
- controlled_circ.mcry(
188
- theta,
189
- q_control,
190
- q_target[bit_indices[qargs[0]]],
191
- q_ancillae,
192
- use_basis_gates=True,
193
- )
194
- elif theta == 0 and phi == 0:
195
- controlled_circ.mcp(lamb, q_control, q_target[bit_indices[qargs[0]]])
196
- else:
197
- controlled_circ.mcp(lamb, q_control, q_target[bit_indices[qargs[0]]])
198
- controlled_circ.mcry(
199
- theta,
200
- q_control,
201
- q_target[bit_indices[qargs[0]]],
202
- q_ancillae,
203
- use_basis_gates=True,
204
- )
205
- controlled_circ.mcp(phi, q_control, q_target[bit_indices[qargs[0]]])
206
- elif gate.name == "z":
207
- controlled_circ.h(q_target[bit_indices[qargs[0]]])
208
- controlled_circ.mcx(q_control, q_target[bit_indices[qargs[0]]], q_ancillae)
209
- controlled_circ.h(q_target[bit_indices[qargs[0]]])
135
+ if len(qargs) == 1:
136
+ target = q_target[bit_indices[qargs[0]]]
210
137
  else:
211
- raise CircuitError(f"gate contains non-controllable instructions: {gate.name}")
212
- if gate.definition is not None and gate.definition.global_phase:
138
+ target = [q_target[bit_indices[qarg]] for qarg in qargs]
139
+
140
+ apply_basic_controlled_gate(controlled_circ, gate, q_control, target)
141
+
142
+ if gate.definition is not None and gate.definition.global_phase and gate.name != "rz":
213
143
  global_phase += gate.definition.global_phase
144
+
214
145
  # apply controlled global phase
215
146
  if global_phase:
216
147
  if len(q_control) < 2:
@@ -228,6 +159,7 @@ def control(
228
159
  new_ctrl_state = ctrl_state
229
160
  base_name = operation.name
230
161
  base_gate = operation
162
+
231
163
  # In order to maintain some backward compatibility with gate names this
232
164
  # uses a naming convention where if the number of controls is <=2 the gate
233
165
  # is named like "cc<base_gate.name>", else it is named like
@@ -250,15 +182,101 @@ def control(
250
182
  return cgate
251
183
 
252
184
 
185
+ def apply_basic_controlled_gate(circuit, gate, controls, target):
186
+ """Apply a controlled version of ``gate`` to the circuit.
187
+
188
+ This implements multi-control operations for the following basis gates:
189
+
190
+ ["p", "u", "x", "z", "rx", "ry", "rz", "cx"]
191
+
192
+ """
193
+ num_ctrl_qubits = len(controls)
194
+
195
+ if gate.name == "x":
196
+ circuit.mcx(controls, target)
197
+
198
+ elif gate.name == "rx":
199
+ circuit.mcrx(
200
+ gate.definition.data[0].operation.params[0],
201
+ controls,
202
+ target,
203
+ use_basis_gates=False,
204
+ )
205
+ elif gate.name == "ry":
206
+ circuit.mcry(
207
+ gate.definition.data[0].operation.params[0],
208
+ controls,
209
+ target,
210
+ mode="noancilla",
211
+ use_basis_gates=False,
212
+ )
213
+ elif gate.name == "rz":
214
+ circuit.mcrz(
215
+ gate.definition.data[0].operation.params[0],
216
+ controls,
217
+ target,
218
+ use_basis_gates=False,
219
+ )
220
+ # continue
221
+ elif gate.name == "p":
222
+ from qiskit.circuit.library import MCPhaseGate
223
+
224
+ circuit.append(
225
+ MCPhaseGate(gate.params[0], num_ctrl_qubits),
226
+ controls[:] + [target],
227
+ )
228
+ elif gate.name == "cx":
229
+ circuit.mcx(
230
+ controls[:] + [target[0]], # CX has two targets
231
+ target[1],
232
+ )
233
+ elif gate.name == "u":
234
+ theta, phi, lamb = gate.params
235
+ if num_ctrl_qubits == 1:
236
+ if theta == 0 and phi == 0:
237
+ circuit.cp(lamb, controls[0], target)
238
+ else:
239
+ circuit.cu(theta, phi, lamb, 0, controls[0], target)
240
+ else:
241
+ if phi == -pi / 2 and lamb == pi / 2:
242
+ circuit.mcrx(theta, controls, target, use_basis_gates=True)
243
+ elif phi == 0 and lamb == 0:
244
+ circuit.mcry(
245
+ theta,
246
+ controls,
247
+ target,
248
+ use_basis_gates=True,
249
+ )
250
+ elif theta == 0 and phi == 0:
251
+ circuit.mcp(lamb, controls, target)
252
+ else:
253
+ circuit.mcp(lamb, controls, target)
254
+ circuit.mcry(
255
+ theta,
256
+ controls,
257
+ target,
258
+ use_basis_gates=True,
259
+ )
260
+ circuit.mcp(phi, controls, target)
261
+
262
+ elif gate.name == "z":
263
+ circuit.h(target)
264
+ circuit.mcx(controls, target)
265
+ circuit.h(target)
266
+
267
+ else:
268
+ raise CircuitError(f"Gate {gate} not in supported basis.")
269
+
270
+
253
271
  def _gate_to_circuit(operation):
254
272
  """Converts a gate instance to a QuantumCircuit"""
255
273
  if hasattr(operation, "definition") and operation.definition is not None:
256
274
  return operation.definition
257
- else:
258
- qr = QuantumRegister(operation.num_qubits)
259
- qc = QuantumCircuit(qr, name=operation.name)
260
- qc.append(operation, qr)
261
- return qc
275
+
276
+ qr = QuantumRegister(operation.num_qubits)
277
+ qc = QuantumCircuit(qr, name=operation.name)
278
+ qc.append(operation, qr)
279
+ return qc
262
280
 
263
281
 
264
282
  def _unroll_gate(operation, basis_gates):
@@ -70,6 +70,7 @@ class ControlledGate(Gate):
70
70
  Create a controlled standard gate and apply it to a circuit.
71
71
 
72
72
  .. plot::
73
+ :alt: Circuit diagram output by the previous code.
73
74
  :include-source:
74
75
 
75
76
  from qiskit import QuantumCircuit, QuantumRegister
@@ -84,6 +85,7 @@ class ControlledGate(Gate):
84
85
  Create a controlled custom gate and apply it to a circuit.
85
86
 
86
87
  .. plot::
88
+ :alt: Circuit diagram output by the previous code.
87
89
  :include-source:
88
90
 
89
91
  from qiskit import QuantumCircuit, QuantumRegister
@@ -26,6 +26,7 @@ method and so the circuit library allows users to program at higher levels of ab
26
26
  For example, to append a multi-controlled CNOT:
27
27
 
28
28
  .. plot::
29
+ :alt: Circuit diagram output by the previous code.
29
30
  :include-source:
30
31
 
31
32
  from qiskit.circuit.library import MCXGate
@@ -116,6 +116,15 @@ class HalfAdderGate(Gate):
116
116
  """
117
117
  return self._num_state_qubits
118
118
 
119
+ def _define(self):
120
+ """Populates self.definition with some decomposition of this gate."""
121
+ from qiskit.synthesis.arithmetic import adder_qft_d00
122
+
123
+ # This particular decomposition does not use any ancilla qubits.
124
+ # Note that the transpiler may choose a different decomposition
125
+ # based on the number of ancilla qubits available.
126
+ self.definition = adder_qft_d00(self.num_state_qubits, kind="half")
127
+
119
128
 
120
129
  class ModularAdderGate(Gate):
121
130
  r"""Compute the sum modulo :math:`2^n` of two :math:`n`-sized qubit registers.
@@ -162,6 +171,15 @@ class ModularAdderGate(Gate):
162
171
  """
163
172
  return self._num_state_qubits
164
173
 
174
+ def _define(self):
175
+ """Populates self.definition with some decomposition of this gate."""
176
+ from qiskit.synthesis.arithmetic import adder_qft_d00
177
+
178
+ # This particular decomposition does not use any ancilla qubits.
179
+ # Note that the transpiler may choose a different decomposition
180
+ # based on the number of ancilla qubits available.
181
+ self.definition = adder_qft_d00(self.num_state_qubits, kind="fixed")
182
+
165
183
 
166
184
  class FullAdderGate(Gate):
167
185
  r"""Compute the sum of two :math:`n`-sized qubit registers, including carry-in and -out bits.
@@ -208,3 +226,10 @@ class FullAdderGate(Gate):
208
226
  The number of state qubits.
209
227
  """
210
228
  return self._num_state_qubits
229
+
230
+ def _define(self):
231
+ """Populates self.definition with a decomposition of this gate."""
232
+ from qiskit.synthesis.arithmetic import adder_ripple_c04
233
+
234
+ # In the case of a full adder, this method does not use any ancilla qubits
235
+ self.definition = adder_ripple_c04(self.num_state_qubits, kind="full")
@@ -84,7 +84,7 @@ class CDKMRippleCarryAdder(Adder):
84
84
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
85
85
  is functionally equivalent to ``kind="fixed"``.
86
86
 
87
- :class:`.AdderGate`: A generic inplace adder. This
87
+ :class:`.HalfAdderGate`: A generic inplace adder. This
88
88
  is functionally equivalent to ``kind="half"``.
89
89
 
90
90
  :class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
@@ -54,7 +54,7 @@ class DraperQFTAdder(Adder):
54
54
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
55
55
  is functionally equivalent to ``kind="fixed"``.
56
56
 
57
- :class:`.AdderGate`: A generic inplace adder. This
57
+ :class:`.HalfAdderGate`: A generic inplace adder. This
58
58
  is functionally equivalent to ``kind="half"``.
59
59
 
60
60
  **References:**
@@ -60,7 +60,7 @@ class VBERippleCarryAdder(Adder):
60
60
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
61
61
  is functionally equivalent to ``kind="fixed"``.
62
62
 
63
- :class:`.AdderGate`: A generic inplace adder. This
63
+ :class:`.HalfAdderGate`: A generic inplace adder. This
64
64
  is functionally equivalent to ``kind="half"``.
65
65
 
66
66
  :class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
@@ -190,3 +190,12 @@ class MultiplierGate(Gate):
190
190
  The number of result qubits.
191
191
  """
192
192
  return self._num_result_qubits
193
+
194
+ def _define(self):
195
+ """Populates self.definition with some decomposition of this gate."""
196
+ from qiskit.synthesis.arithmetic import multiplier_qft_r17
197
+
198
+ # This particular decomposition does not use any ancilla qubits.
199
+ # Note that the transpiler may choose a different decomposition
200
+ # based on the number of ancilla qubits available.
201
+ self.definition = multiplier_qft_r17(self.num_state_qubits)
@@ -37,6 +37,7 @@ class PiecewiseChebyshev(BlueprintCircuit):
37
37
  Examples:
38
38
 
39
39
  .. plot::
40
+ :alt: Circuit diagram output by the previous code.
40
41
  :include-source:
41
42
 
42
43
  import numpy as np
@@ -38,6 +38,7 @@ class QFT(BlueprintCircuit):
38
38
  For 4 qubits, the circuit that implements this transformation is:
39
39
 
40
40
  .. plot::
41
+ :alt: Diagram illustrating the previously described circuit.
41
42
 
42
43
  from qiskit.circuit.library import QFT
43
44
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -48,6 +49,7 @@ class QFT(BlueprintCircuit):
48
49
  The respective circuit diagram is:
49
50
 
50
51
  .. plot::
52
+ :alt: Diagram illustrating the previously described circuit.
51
53
 
52
54
  from qiskit.circuit.library import QFT
53
55
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -64,6 +66,7 @@ class QFT(BlueprintCircuit):
64
66
  on 5 qubits with approximation degree 2 yields (the barriers are dropped in this example):
65
67
 
66
68
  .. plot::
69
+ :alt: Diagram illustrating the previously described circuit.
67
70
 
68
71
  from qiskit.circuit.library import QFT
69
72
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -55,6 +55,7 @@ class InnerProduct(QuantumCircuit):
55
55
 
56
56
  Reference Circuit:
57
57
  .. plot::
58
+ :alt: Diagram illustrating the previously described circuit.
58
59
 
59
60
  from qiskit.circuit.library import InnerProduct
60
61
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -121,6 +122,7 @@ class InnerProductGate(Gate):
121
122
 
122
123
  Reference Circuit:
123
124
  .. plot::
125
+ :alt: Diagram illustrating the previously described circuit.
124
126
 
125
127
  from qiskit.circuit import QuantumCircuit
126
128
  from qiskit.circuit.library import InnerProductGate
@@ -32,6 +32,7 @@ class AND(QuantumCircuit):
32
32
  The AND gate without special flags equals the multi-controlled-X gate:
33
33
 
34
34
  .. plot::
35
+ :alt: Diagram illustrating the previously described circuit.
35
36
 
36
37
  from qiskit.circuit.library import AND
37
38
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -43,6 +44,7 @@ class AND(QuantumCircuit):
43
44
  ``[-1, 0, 0, 1, 1]``.
44
45
 
45
46
  .. plot::
47
+ :alt: Diagram illustrating the previously described circuit.
46
48
 
47
49
  from qiskit.circuit.library import AND
48
50
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -116,6 +118,7 @@ class AndGate(Gate):
116
118
  The AndGate gate without special flags equals the multi-controlled-X gate:
117
119
 
118
120
  .. plot::
121
+ :alt: Diagram illustrating the previously described circuit.
119
122
 
120
123
  from qiskit.circuit import QuantumCircuit
121
124
  from qiskit.circuit.library import AndGate
@@ -129,6 +132,7 @@ class AndGate(Gate):
129
132
  ``[-1, 0, 0, 1, 1]``.
130
133
 
131
134
  .. plot::
135
+ :alt: Diagram illustrating the previously described circuit.
132
136
 
133
137
  from qiskit.circuit import QuantumCircuit
134
138
  from qiskit.circuit.library import AndGate
@@ -33,6 +33,7 @@ class OR(QuantumCircuit):
33
33
  The OR gate without special flags:
34
34
 
35
35
  .. plot::
36
+ :alt: Diagram illustrating the previously described circuit.
36
37
 
37
38
  from qiskit.circuit.library import OR
38
39
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -44,6 +45,7 @@ class OR(QuantumCircuit):
44
45
  flags ``[-1, 0, 0, 1, 1]``.
45
46
 
46
47
  .. plot::
48
+ :alt: Diagram illustrating the previously described circuit.
47
49
 
48
50
  from qiskit.circuit.library import OR
49
51
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -117,6 +119,7 @@ class OrGate(Gate):
117
119
  The OrGate gate without special flags:
118
120
 
119
121
  .. plot::
122
+ :alt: Diagram illustrating the previously described circuit.
120
123
 
121
124
  from qiskit.circuit import QuantumCircuit
122
125
  from qiskit.circuit.library import OrGate
@@ -130,6 +133,7 @@ class OrGate(Gate):
130
133
  flags ``[-1, 0, 0, 1, 1]``.
131
134
 
132
135
  .. plot::
136
+ :alt: Diagram illustrating the previously described circuit.
133
137
 
134
138
  from qiskit.circuit import QuantumCircuit
135
139
  from qiskit.circuit.library import OrGate
@@ -53,6 +53,7 @@ class XOR(QuantumCircuit):
53
53
 
54
54
  Reference Circuit:
55
55
  .. plot::
56
+ :alt: Diagram illustrating the previously described circuit.
56
57
 
57
58
  from qiskit.circuit.library import XOR
58
59
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -88,6 +89,7 @@ class BitwiseXorGate(Gate):
88
89
  Reference Circuit:
89
90
 
90
91
  .. plot::
92
+ :alt: Diagram illustrating the previously described circuit.
91
93
 
92
94
  from qiskit.circuit import QuantumCircuit
93
95
  from qiskit.circuit.library import BitwiseXorGate
@@ -70,6 +70,7 @@ class FourierChecking(QuantumCircuit):
70
70
 
71
71
  Reference Circuit:
72
72
  .. plot::
73
+ :alt: Diagram illustrating the previously described circuit.
73
74
 
74
75
  from qiskit.circuit.library import FourierChecking
75
76
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -124,6 +125,7 @@ def fourier_checking(f: Sequence[int], g: Sequence[int]) -> QuantumCircuit:
124
125
  **Reference Circuit:**
125
126
 
126
127
  .. plot::
128
+ :alt: Circuit diagram output by the previous code.
127
129
  :include-source:
128
130
 
129
131
  from qiskit.circuit.library import fourier_checking
@@ -45,6 +45,7 @@ class GMS(QuantumCircuit):
45
45
  **Expanded Circuit:**
46
46
 
47
47
  .. plot::
48
+ :alt: Diagram illustrating the previously described circuit.
48
49
 
49
50
  from qiskit.circuit.library import GMS
50
51
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -45,6 +45,7 @@ class GR(QuantumCircuit):
45
45
  **Expanded Circuit:**
46
46
 
47
47
  .. plot::
48
+ :alt: Diagram illustrating the previously described circuit.
48
49
 
49
50
  from qiskit.circuit.library import GR
50
51
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -99,6 +100,7 @@ class GRX(GR):
99
100
  **Expanded Circuit:**
100
101
 
101
102
  .. plot::
103
+ :alt: Diagram illustrating the previously described circuit.
102
104
 
103
105
  from qiskit.circuit.library import GRX
104
106
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -147,6 +149,7 @@ class GRY(GR):
147
149
  **Expanded Circuit:**
148
150
 
149
151
  .. plot::
152
+ :alt: Diagram illustrating the previously described circuit.
150
153
 
151
154
  from qiskit.circuit.library import GRY
152
155
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -195,6 +198,7 @@ class GRZ(QuantumCircuit):
195
198
  **Expanded Circuit:**
196
199
 
197
200
  .. plot::
201
+ :alt: Diagram illustrating the previously described circuit.
198
202
 
199
203
  from qiskit.circuit.library import GRZ
200
204
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -129,6 +129,7 @@ class MCMTVChain(MCMT):
129
129
  **Expanded Circuit:**
130
130
 
131
131
  .. plot::
132
+ :alt: Diagram illustrating the previously described circuit.
132
133
 
133
134
  from qiskit.circuit.library import MCMTVChain, ZGate
134
135
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -54,6 +54,7 @@ class Permutation(QuantumCircuit):
54
54
 
55
55
  Reference Circuit:
56
56
  .. plot::
57
+ :alt: Diagram illustrating the previously described circuit.
57
58
 
58
59
  from qiskit.circuit.library import Permutation
59
60
  A = [2,4,3,0,1]
@@ -62,6 +63,7 @@ class Permutation(QuantumCircuit):
62
63
 
63
64
  Expanded Circuit:
64
65
  .. plot::
66
+ :alt: Diagram illustrating the previously described circuit.
65
67
 
66
68
  from qiskit.circuit.library import Permutation
67
69
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -116,6 +118,7 @@ class PermutationGate(Gate):
116
118
 
117
119
  Reference Circuit:
118
120
  .. plot::
121
+ :alt: Diagram illustrating the previously described circuit.
119
122
 
120
123
  from qiskit.circuit.quantumcircuit import QuantumCircuit
121
124
  from qiskit.circuit.library import PermutationGate
@@ -127,6 +130,7 @@ class PermutationGate(Gate):
127
130
 
128
131
  Expanded Circuit:
129
132
  .. plot::
133
+ :alt: Diagram illustrating the previously described circuit.
130
134
 
131
135
  from qiskit.circuit.quantumcircuit import QuantumCircuit
132
136
  from qiskit.circuit.library import PermutationGate
@@ -182,7 +186,7 @@ class PermutationGate(Gate):
182
186
 
183
187
  return PermutationGate(pattern=_inverse_pattern(self.pattern))
184
188
 
185
- def _qasm2_decomposition(self):
189
+ def _qasm_decomposition(self):
186
190
  # pylint: disable=cyclic-import
187
191
  from qiskit.synthesis.permutation import synth_permutation_basic
188
192
 
@@ -200,7 +200,7 @@ class UnitaryGate(Gate):
200
200
  )
201
201
  return gate
202
202
 
203
- def _qasm2_decomposition(self):
203
+ def _qasm_decomposition(self):
204
204
  """Return an unparameterized version of ourselves, so the OQ2 exporter doesn't choke on the
205
205
  non-standard things in our `params` field."""
206
206
  out = self.definition.to_gate()
@@ -41,6 +41,7 @@ class GraphState(QuantumCircuit):
41
41
  **Reference Circuit:**
42
42
 
43
43
  .. plot::
44
+ :alt: Diagram illustrating the previously described circuit.
44
45
 
45
46
  from qiskit.circuit.library import GraphState
46
47
  from qiskit.visualization.library import _generate_circuit_library_visualization
@@ -105,6 +106,7 @@ class GraphStateGate(Gate):
105
106
  **Reference Circuit:**
106
107
 
107
108
  .. plot::
109
+ :alt: Circuit diagram output by the previous code.
108
110
  :include-source:
109
111
 
110
112
  from qiskit.circuit import QuantumCircuit