qiskit 1.1.2__cp38-abi3-win32.whl → 1.2.0__cp38-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 (343) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +1 -1
  5. qiskit/assembler/assemble_circuits.py +107 -64
  6. qiskit/assembler/assemble_schedules.py +5 -12
  7. qiskit/assembler/disassemble.py +10 -1
  8. qiskit/circuit/__init__.py +6 -3
  9. qiskit/circuit/_classical_resource_map.py +5 -5
  10. qiskit/circuit/_utils.py +0 -13
  11. qiskit/circuit/add_control.py +1 -1
  12. qiskit/circuit/annotated_operation.py +23 -1
  13. qiskit/circuit/classical/expr/expr.py +4 -4
  14. qiskit/circuit/classical/expr/visitors.py +1 -1
  15. qiskit/circuit/classical/types/__init__.py +1 -1
  16. qiskit/circuit/classical/types/types.py +2 -2
  17. qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
  18. qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
  19. qiskit/circuit/classicalfunction/utils.py +1 -1
  20. qiskit/circuit/classicalregister.py +1 -1
  21. qiskit/circuit/commutation_checker.py +83 -35
  22. qiskit/circuit/controlflow/_builder_utils.py +1 -1
  23. qiskit/circuit/controlflow/builder.py +10 -6
  24. qiskit/circuit/controlflow/if_else.py +2 -2
  25. qiskit/circuit/controlflow/switch_case.py +1 -1
  26. qiskit/circuit/delay.py +1 -1
  27. qiskit/circuit/duration.py +2 -2
  28. qiskit/circuit/equivalence.py +5 -7
  29. qiskit/circuit/gate.py +11 -8
  30. qiskit/circuit/instruction.py +31 -13
  31. qiskit/circuit/instructionset.py +2 -5
  32. qiskit/circuit/library/__init__.py +2 -1
  33. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
  34. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  35. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
  36. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
  37. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
  38. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
  39. qiskit/circuit/library/basis_change/__init__.py +1 -1
  40. qiskit/circuit/library/basis_change/qft.py +40 -6
  41. qiskit/circuit/library/blueprintcircuit.py +3 -5
  42. qiskit/circuit/library/data_preparation/__init__.py +9 -2
  43. qiskit/circuit/library/data_preparation/initializer.py +8 -0
  44. qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
  45. qiskit/circuit/library/generalized_gates/isometry.py +8 -8
  46. qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
  47. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -9
  49. qiskit/circuit/library/generalized_gates/uc.py +3 -3
  50. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
  51. qiskit/circuit/library/generalized_gates/unitary.py +13 -11
  52. qiskit/circuit/library/graph_state.py +1 -1
  53. qiskit/circuit/library/hamiltonian_gate.py +1 -2
  54. qiskit/circuit/library/hidden_linear_function.py +1 -1
  55. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
  56. qiskit/circuit/library/n_local/n_local.py +4 -5
  57. qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
  58. qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
  59. qiskit/circuit/library/n_local/two_local.py +1 -1
  60. qiskit/circuit/library/overlap.py +11 -5
  61. qiskit/circuit/library/pauli_evolution.py +7 -3
  62. qiskit/circuit/library/standard_gates/dcx.py +3 -0
  63. qiskit/circuit/library/standard_gates/ecr.py +3 -0
  64. qiskit/circuit/library/standard_gates/global_phase.py +3 -0
  65. qiskit/circuit/library/standard_gates/h.py +13 -5
  66. qiskit/circuit/library/standard_gates/i.py +3 -0
  67. qiskit/circuit/library/standard_gates/iswap.py +3 -0
  68. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
  69. qiskit/circuit/library/standard_gates/p.py +14 -9
  70. qiskit/circuit/library/standard_gates/r.py +3 -0
  71. qiskit/circuit/library/standard_gates/rx.py +21 -6
  72. qiskit/circuit/library/standard_gates/rxx.py +40 -1
  73. qiskit/circuit/library/standard_gates/ry.py +21 -6
  74. qiskit/circuit/library/standard_gates/ryy.py +40 -1
  75. qiskit/circuit/library/standard_gates/rz.py +22 -6
  76. qiskit/circuit/library/standard_gates/rzx.py +40 -1
  77. qiskit/circuit/library/standard_gates/rzz.py +41 -2
  78. qiskit/circuit/library/standard_gates/s.py +77 -0
  79. qiskit/circuit/library/standard_gates/swap.py +12 -5
  80. qiskit/circuit/library/standard_gates/sx.py +14 -5
  81. qiskit/circuit/library/standard_gates/t.py +5 -0
  82. qiskit/circuit/library/standard_gates/u.py +22 -7
  83. qiskit/circuit/library/standard_gates/u1.py +8 -3
  84. qiskit/circuit/library/standard_gates/u2.py +3 -0
  85. qiskit/circuit/library/standard_gates/u3.py +22 -7
  86. qiskit/circuit/library/standard_gates/x.py +156 -92
  87. qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
  88. qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
  89. qiskit/circuit/library/standard_gates/y.py +6 -1
  90. qiskit/circuit/library/standard_gates/z.py +8 -1
  91. qiskit/circuit/operation.py +1 -1
  92. qiskit/circuit/parameter.py +9 -10
  93. qiskit/circuit/parameterexpression.py +16 -13
  94. qiskit/circuit/parametertable.py +1 -190
  95. qiskit/circuit/parametervector.py +1 -1
  96. qiskit/circuit/quantumcircuit.py +395 -387
  97. qiskit/circuit/quantumcircuitdata.py +3 -5
  98. qiskit/circuit/quantumregister.py +1 -1
  99. qiskit/circuit/random/__init__.py +1 -1
  100. qiskit/circuit/random/utils.py +175 -26
  101. qiskit/circuit/register.py +5 -7
  102. qiskit/circuit/singleton.py +3 -3
  103. qiskit/circuit/tools/pi_check.py +4 -4
  104. qiskit/compiler/assembler.py +95 -24
  105. qiskit/compiler/scheduler.py +2 -2
  106. qiskit/compiler/transpiler.py +42 -128
  107. qiskit/converters/circuit_to_dag.py +4 -6
  108. qiskit/converters/circuit_to_gate.py +4 -8
  109. qiskit/converters/circuit_to_instruction.py +5 -17
  110. qiskit/converters/dag_to_circuit.py +2 -6
  111. qiskit/dagcircuit/collect_blocks.py +2 -2
  112. qiskit/dagcircuit/dagcircuit.py +190 -187
  113. qiskit/dagcircuit/dagdependency.py +4 -4
  114. qiskit/dagcircuit/dagdependency_v2.py +4 -4
  115. qiskit/dagcircuit/dagdepnode.py +1 -1
  116. qiskit/dagcircuit/dagnode.py +66 -157
  117. qiskit/passmanager/flow_controllers.py +1 -1
  118. qiskit/passmanager/passmanager.py +3 -3
  119. qiskit/primitives/__init__.py +1 -5
  120. qiskit/primitives/backend_estimator.py +25 -15
  121. qiskit/primitives/backend_estimator_v2.py +31 -7
  122. qiskit/primitives/backend_sampler.py +21 -12
  123. qiskit/primitives/backend_sampler_v2.py +12 -3
  124. qiskit/primitives/base/base_estimator.py +31 -4
  125. qiskit/primitives/base/base_primitive.py +2 -2
  126. qiskit/primitives/base/base_result.py +2 -2
  127. qiskit/primitives/base/base_sampler.py +26 -2
  128. qiskit/primitives/base/estimator_result.py +2 -2
  129. qiskit/primitives/base/sampler_result.py +2 -2
  130. qiskit/primitives/containers/__init__.py +0 -1
  131. qiskit/primitives/containers/bindings_array.py +2 -2
  132. qiskit/primitives/containers/bit_array.py +108 -10
  133. qiskit/primitives/containers/shape.py +3 -3
  134. qiskit/primitives/estimator.py +9 -2
  135. qiskit/primitives/primitive_job.py +1 -1
  136. qiskit/primitives/sampler.py +10 -3
  137. qiskit/primitives/statevector_estimator.py +5 -3
  138. qiskit/primitives/statevector_sampler.py +11 -5
  139. qiskit/primitives/utils.py +16 -0
  140. qiskit/providers/backend.py +15 -6
  141. qiskit/providers/backend_compat.py +7 -4
  142. qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
  143. qiskit/providers/basic_provider/basic_simulator.py +33 -25
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
  147. qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
  148. qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
  149. qiskit/providers/fake_provider/generic_backend_v2.py +514 -68
  150. qiskit/providers/models/__init__.py +48 -11
  151. qiskit/providers/models/backendconfiguration.py +50 -4
  152. qiskit/providers/models/backendproperties.py +13 -2
  153. qiskit/providers/models/pulsedefaults.py +10 -11
  154. qiskit/providers/options.py +13 -13
  155. qiskit/providers/providerutils.py +3 -1
  156. qiskit/pulse/configuration.py +8 -12
  157. qiskit/pulse/instruction_schedule_map.py +3 -5
  158. qiskit/pulse/instructions/acquire.py +7 -8
  159. qiskit/pulse/instructions/instruction.py +2 -3
  160. qiskit/pulse/library/samplers/decorators.py +5 -9
  161. qiskit/pulse/library/symbolic_pulses.py +4 -7
  162. qiskit/pulse/library/waveform.py +2 -5
  163. qiskit/pulse/macros.py +11 -6
  164. qiskit/pulse/parser.py +8 -10
  165. qiskit/pulse/schedule.py +9 -17
  166. qiskit/pulse/transforms/alignments.py +1 -3
  167. qiskit/pulse/utils.py +1 -2
  168. qiskit/qasm/libs/stdgates.inc +35 -28
  169. qiskit/qasm2/__init__.py +7 -7
  170. qiskit/qasm2/export.py +5 -9
  171. qiskit/qasm2/parse.py +1 -1
  172. qiskit/qasm3/ast.py +9 -25
  173. qiskit/qasm3/exporter.py +582 -479
  174. qiskit/qasm3/printer.py +7 -16
  175. qiskit/qobj/common.py +10 -0
  176. qiskit/qobj/converters/lo_config.py +9 -0
  177. qiskit/qobj/converters/pulse_instruction.py +13 -6
  178. qiskit/qobj/pulse_qobj.py +69 -15
  179. qiskit/qobj/qasm_qobj.py +72 -20
  180. qiskit/qobj/utils.py +9 -0
  181. qiskit/qpy/__init__.py +1 -1
  182. qiskit/qpy/binary_io/circuits.py +8 -5
  183. qiskit/qpy/binary_io/schedules.py +1 -1
  184. qiskit/qpy/binary_io/value.py +3 -3
  185. qiskit/qpy/interface.py +3 -2
  186. qiskit/qpy/type_keys.py +2 -2
  187. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  188. qiskit/quantum_info/operators/channel/superop.py +2 -2
  189. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  190. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  191. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  192. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  193. qiskit/quantum_info/operators/measures.py +2 -2
  194. qiskit/quantum_info/operators/op_shape.py +12 -20
  195. qiskit/quantum_info/operators/operator.py +14 -21
  196. qiskit/quantum_info/operators/predicates.py +1 -0
  197. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  198. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  199. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  200. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  201. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  202. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
  203. qiskit/quantum_info/quaternion.py +1 -1
  204. qiskit/quantum_info/states/densitymatrix.py +5 -8
  205. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  206. qiskit/quantum_info/states/statevector.py +4 -8
  207. qiskit/result/counts.py +2 -2
  208. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  209. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  210. qiskit/result/mitigation/utils.py +1 -3
  211. qiskit/result/models.py +17 -16
  212. qiskit/result/result.py +15 -20
  213. qiskit/scheduler/lowering.py +2 -2
  214. qiskit/synthesis/__init__.py +2 -1
  215. qiskit/synthesis/clifford/__init__.py +1 -1
  216. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  217. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  218. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  219. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  220. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  221. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  222. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  223. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  224. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  225. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  226. qiskit/synthesis/evolution/product_formula.py +111 -55
  227. qiskit/synthesis/evolution/qdrift.py +40 -10
  228. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  229. qiskit/synthesis/linear/__init__.py +1 -0
  230. qiskit/synthesis/linear/cnot_synth.py +22 -96
  231. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  232. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  233. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  234. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  235. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  236. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  237. qiskit/synthesis/permutation/permutation_full.py +5 -29
  238. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  239. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  240. qiskit/synthesis/qft/__init__.py +1 -0
  241. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  242. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  243. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  244. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  245. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  246. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  247. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  248. qiskit/synthesis/unitary/qsd.py +5 -3
  249. qiskit/transpiler/__init__.py +1 -0
  250. qiskit/transpiler/basepasses.py +1 -1
  251. qiskit/transpiler/coupling.py +3 -3
  252. qiskit/transpiler/instruction_durations.py +1 -2
  253. qiskit/transpiler/layout.py +3 -3
  254. qiskit/transpiler/passes/__init__.py +2 -0
  255. qiskit/transpiler/passes/basis/basis_translator.py +84 -64
  256. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  257. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  258. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  259. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  260. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  261. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  262. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  263. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  264. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  265. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  266. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  267. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  268. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  269. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  270. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  271. qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
  272. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  273. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  274. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  275. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  276. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  277. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  278. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  279. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  280. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  281. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  282. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  283. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  284. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  285. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  286. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  287. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  288. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
  289. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  290. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  291. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  292. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  293. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  294. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
  295. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  296. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  297. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  298. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  299. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  300. qiskit/transpiler/passes/utils/__init__.py +0 -1
  301. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  302. qiskit/transpiler/passes/utils/check_map.py +3 -6
  303. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  304. qiskit/transpiler/passes/utils/error.py +2 -2
  305. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  306. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  307. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  308. qiskit/transpiler/passmanager.py +7 -6
  309. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  310. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
  311. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  312. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  313. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  314. qiskit/transpiler/target.py +27 -8
  315. qiskit/user_config.py +29 -6
  316. qiskit/utils/classtools.py +3 -3
  317. qiskit/utils/deprecation.py +3 -2
  318. qiskit/utils/lazy_tester.py +2 -2
  319. qiskit/utils/optionals.py +8 -8
  320. qiskit/visualization/bloch.py +18 -23
  321. qiskit/visualization/circuit/_utils.py +34 -10
  322. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  323. qiskit/visualization/circuit/latex.py +29 -27
  324. qiskit/visualization/circuit/matplotlib.py +4 -2
  325. qiskit/visualization/circuit/qcstyle.py +2 -2
  326. qiskit/visualization/circuit/text.py +9 -15
  327. qiskit/visualization/dag_visualization.py +2 -2
  328. qiskit/visualization/pulse_v2/core.py +1 -1
  329. qiskit/visualization/pulse_v2/events.py +1 -1
  330. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  331. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  332. qiskit/visualization/pulse_v2/layouts.py +1 -5
  333. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/state_visualization.py +5 -6
  335. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  336. qiskit/visualization/transition_visualization.py +7 -2
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/METADATA +12 -12
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/RECORD +342 -340
  339. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
  340. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
  342. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/WHEEL +0 -0
  343. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
@@ -80,15 +80,13 @@ class Permutation(QuantumCircuit):
80
80
 
81
81
  name = "permutation_" + np.array_str(pattern).replace(" ", ",")
82
82
 
83
- circuit = QuantumCircuit(num_qubits, name=name)
84
-
85
83
  super().__init__(num_qubits, name=name)
86
84
 
87
85
  # pylint: disable=cyclic-import
88
- from qiskit.synthesis.permutation.permutation_utils import _get_ordered_swap
86
+ from qiskit.synthesis.permutation import synth_permutation_basic
89
87
 
90
- for i, j in _get_ordered_swap(pattern):
91
- circuit.swap(i, j)
88
+ circuit = synth_permutation_basic(pattern)
89
+ circuit.name = name
92
90
 
93
91
  all_qubits = self.qubits
94
92
  self.append(circuit.to_gate(), all_qubits)
@@ -184,10 +182,11 @@ class PermutationGate(Gate):
184
182
 
185
183
  def _qasm2_decomposition(self):
186
184
  # pylint: disable=cyclic-import
187
- from qiskit.synthesis.permutation.permutation_utils import _get_ordered_swap
185
+ from qiskit.synthesis.permutation import synth_permutation_basic
188
186
 
189
187
  name = f"permutation__{'_'.join(str(n) for n in self.pattern)}_"
190
- out = QuantumCircuit(self.num_qubits, name=name)
191
- for i, j in _get_ordered_swap(self.pattern):
192
- out.swap(i, j)
188
+
189
+ out = synth_permutation_basic(self.pattern)
190
+ out.name = name
191
+
193
192
  return out.to_gate()
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2020.
3
+ # (C) Copyright IBM 2020, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -148,10 +148,10 @@ class UCGate(Gate):
148
148
  the diagonal gate is also returned.
149
149
  """
150
150
  diag = np.ones(2**self.num_qubits).tolist()
151
- q = QuantumRegister(self.num_qubits)
151
+ q = QuantumRegister(self.num_qubits, "q")
152
152
  q_controls = q[1:]
153
153
  q_target = q[0]
154
- circuit = QuantumCircuit(q)
154
+ circuit = QuantumCircuit(q, name="uc")
155
155
  # If there is no control, we use the ZYZ decomposition
156
156
  if not q_controls:
157
157
  circuit.unitary(self.params[0], [q])
@@ -69,7 +69,7 @@ class UCPauliRotGate(Gate):
69
69
  def _define(self):
70
70
  ucr_circuit = self._dec_ucrot()
71
71
  gate = ucr_circuit.to_instruction()
72
- q = QuantumRegister(self.num_qubits)
72
+ q = QuantumRegister(self.num_qubits, "q")
73
73
  ucr_circuit = QuantumCircuit(q)
74
74
  ucr_circuit.append(gate, q[:])
75
75
  self.definition = ucr_circuit
@@ -79,7 +79,7 @@ class UCPauliRotGate(Gate):
79
79
  Finds a decomposition of a UC rotation gate into elementary gates
80
80
  (C-NOTs and single-qubit rotations).
81
81
  """
82
- q = QuantumRegister(self.num_qubits)
82
+ q = QuantumRegister(self.num_qubits, "q")
83
83
  circuit = QuantumCircuit(q)
84
84
  q_target = q[0]
85
85
  q_controls = q[1:]
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2017, 2019.
3
+ # (C) Copyright IBM 2017, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -30,14 +30,8 @@ from qiskit.circuit.library.standard_gates.u import UGate
30
30
  from qiskit.quantum_info.operators.predicates import matrix_equal
31
31
  from qiskit.quantum_info.operators.predicates import is_unitary_matrix
32
32
 
33
- # pylint: disable=cyclic-import
34
- from qiskit.synthesis.one_qubit.one_qubit_decompose import OneQubitEulerDecomposer
35
- from qiskit.synthesis.two_qubit.two_qubit_decompose import two_qubit_cnot_decompose
36
-
37
33
  from .isometry import Isometry
38
34
 
39
- _DECOMPOSER1Q = OneQubitEulerDecomposer("U")
40
-
41
35
  if typing.TYPE_CHECKING:
42
36
  from qiskit.quantum_info.operators.base_operator import BaseOperator
43
37
 
@@ -143,13 +137,21 @@ class UnitaryGate(Gate):
143
137
  def _define(self):
144
138
  """Calculate a subcircuit that implements this unitary."""
145
139
  if self.num_qubits == 1:
140
+ from qiskit.synthesis.one_qubit.one_qubit_decompose import OneQubitEulerDecomposer
141
+
146
142
  q = QuantumRegister(1, "q")
147
143
  qc = QuantumCircuit(q, name=self.name)
148
- theta, phi, lam, global_phase = _DECOMPOSER1Q.angles_and_phase(self.to_matrix())
144
+ theta, phi, lam, global_phase = OneQubitEulerDecomposer("U").angles_and_phase(
145
+ self.to_matrix()
146
+ )
149
147
  qc._append(UGate(theta, phi, lam), [q[0]], [])
150
148
  qc.global_phase = global_phase
151
149
  self.definition = qc
152
150
  elif self.num_qubits == 2:
151
+ from qiskit.synthesis.two_qubit.two_qubit_decompose import ( # pylint: disable=cyclic-import
152
+ two_qubit_cnot_decompose,
153
+ )
154
+
153
155
  self.definition = two_qubit_cnot_decompose(self.to_matrix())
154
156
  else:
155
157
  from qiskit.synthesis.unitary.qsd import ( # pylint: disable=cyclic-import
@@ -163,7 +165,7 @@ class UnitaryGate(Gate):
163
165
  num_ctrl_qubits: int = 1,
164
166
  label: str | None = None,
165
167
  ctrl_state: int | str | None = None,
166
- annotated: bool = False,
168
+ annotated: bool | None = None,
167
169
  ) -> ControlledGate | AnnotatedOperation:
168
170
  """Return controlled version of gate.
169
171
 
@@ -172,8 +174,8 @@ class UnitaryGate(Gate):
172
174
  label: Optional gate label.
173
175
  ctrl_state: The control state in decimal or as a bit string (e.g. ``"1011"``).
174
176
  If ``None``, use ``2**num_ctrl_qubits - 1``.
175
- annotated: indicates whether the controlled gate can be implemented
176
- as an annotated gate.
177
+ annotated: indicates whether the controlled gate should be implemented
178
+ as an annotated gate. If ``None``, this is handled as ``False``.
177
179
 
178
180
  Returns:
179
181
  Controlled version of gate.
@@ -74,7 +74,7 @@ class GraphState(QuantumCircuit):
74
74
  raise CircuitError("The adjacency matrix must be symmetric.")
75
75
 
76
76
  num_qubits = len(adjacency_matrix)
77
- circuit = QuantumCircuit(num_qubits, name="graph: %s" % (adjacency_matrix))
77
+ circuit = QuantumCircuit(num_qubits, name=f"graph: {adjacency_matrix}")
78
78
 
79
79
  circuit.h(range(num_qubits))
80
80
  for i in range(num_qubits):
@@ -103,8 +103,7 @@ class HamiltonianGate(Gate):
103
103
  time = float(self.params[1])
104
104
  except TypeError as ex:
105
105
  raise TypeError(
106
- "Unable to generate Unitary matrix for "
107
- "unbound t parameter {}".format(self.params[1])
106
+ f"Unable to generate Unitary matrix for unbound t parameter {self.params[1]}"
108
107
  ) from ex
109
108
  arr = scipy.linalg.expm(-1j * self.params[0] * time)
110
109
  dtype = complex if dtype is None else dtype
@@ -82,7 +82,7 @@ class HiddenLinearFunction(QuantumCircuit):
82
82
  raise CircuitError("The adjacency matrix must be symmetric.")
83
83
 
84
84
  num_qubits = len(adjacency_matrix)
85
- circuit = QuantumCircuit(num_qubits, name="hlf: %s" % adjacency_matrix)
85
+ circuit = QuantumCircuit(num_qubits, name=f"hlf: {adjacency_matrix}")
86
86
 
87
87
  circuit.h(range(num_qubits))
88
88
  for i in range(num_qubits):
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2021.
3
+ # (C) Copyright IBM 2021, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -22,7 +22,6 @@ from qiskit.circuit.parameter import Parameter
22
22
  from qiskit.circuit.quantumregister import QuantumRegister
23
23
  from qiskit.circuit.quantumcircuit import QuantumCircuit
24
24
  from qiskit.quantum_info import Operator, Pauli, SparsePauliOp
25
- from qiskit.synthesis.evolution import LieTrotter
26
25
 
27
26
  from .n_local import NLocal
28
27
 
@@ -185,6 +184,8 @@ class EvolvedOperatorAnsatz(NLocal):
185
184
  gate = HamiltonianGate(operator, time)
186
185
  # otherwise, use the PauliEvolutionGate
187
186
  else:
187
+ from qiskit.synthesis.evolution import LieTrotter
188
+
188
189
  evolution = LieTrotter() if self._evolution is None else self._evolution
189
190
  gate = PauliEvolutionGate(operator, time, synthesis=evolution)
190
191
 
@@ -162,7 +162,7 @@ class NLocal(BlueprintCircuit):
162
162
  self._bounds: list[tuple[float | None, float | None]] | None = None
163
163
  self._flatten = flatten
164
164
 
165
- # During the build, if a subclass hasn't overridden our parametrisation methods, we can use
165
+ # During the build, if a subclass hasn't overridden our parametrization methods, we can use
166
166
  # a newer fast-path method to parametrise the rotation and entanglement blocks if internally
167
167
  # those are just simple stdlib gates that have been promoted to circuits. We don't
168
168
  # precalculate the fast-path layers themselves because there's far too much that can be
@@ -441,9 +441,8 @@ class NLocal(BlueprintCircuit):
441
441
  ):
442
442
  raise ValueError(
443
443
  "The length of ordered parameters must be equal to the number of "
444
- "settable parameters in the circuit ({}), but is {}".format(
445
- self.num_parameters_settable, len(parameters)
446
- )
444
+ f"settable parameters in the circuit ({self.num_parameters_settable}),"
445
+ f" but is {len(parameters)}"
447
446
  )
448
447
  self._ordered_parameters = parameters
449
448
  self._invalidate()
@@ -1094,7 +1093,7 @@ def _stdlib_gate_from_simple_block(block: QuantumCircuit) -> _StdlibGateResult |
1094
1093
  return None
1095
1094
  instruction = block.data[0]
1096
1095
  # If the single instruction isn't a standard-library gate that spans the full width of the block
1097
- # in the correct order, we're not simple. If the gate isn't fully parametrised with pure,
1096
+ # in the correct order, we're not simple. If the gate isn't fully parametrized with pure,
1098
1097
  # unique `Parameter` instances (expressions are too complex) that are in order, we're not
1099
1098
  # simple.
1100
1099
  if (
@@ -118,7 +118,7 @@ class PauliTwoDesign(TwoLocal):
118
118
  qubits = range(self.num_qubits)
119
119
 
120
120
  # if no gates for this layer were generated, generate them
121
- if i not in self._gates.keys():
121
+ if i not in self._gates:
122
122
  self._gates[i] = list(self._rng.choice(["rx", "ry", "rz"], self.num_qubits))
123
123
  # if not enough gates exist, add more
124
124
  elif len(self._gates[i]) < self.num_qubits:
@@ -97,20 +97,18 @@ class QAOAAnsatz(EvolvedOperatorAnsatz):
97
97
  valid = False
98
98
  if raise_on_failure:
99
99
  raise ValueError(
100
- "The number of qubits of the initial state {} does not match "
101
- "the number of qubits of the cost operator {}".format(
102
- self.initial_state.num_qubits, self.num_qubits
103
- )
100
+ f"The number of qubits of the initial state {self.initial_state.num_qubits}"
101
+ " does not match "
102
+ f"the number of qubits of the cost operator {self.num_qubits}"
104
103
  )
105
104
 
106
105
  if self.mixer_operator is not None and self.mixer_operator.num_qubits != self.num_qubits:
107
106
  valid = False
108
107
  if raise_on_failure:
109
108
  raise ValueError(
110
- "The number of qubits of the mixer {} does not match "
111
- "the number of qubits of the cost operator {}".format(
112
- self.mixer_operator.num_qubits, self.num_qubits
113
- )
109
+ f"The number of qubits of the mixer {self.mixer_operator.num_qubits}"
110
+ f" does not match "
111
+ f"the number of qubits of the cost operator {self.num_qubits}"
114
112
  )
115
113
 
116
114
  return valid
@@ -87,7 +87,7 @@ class TwoLocal(NLocal):
87
87
 
88
88
  >>> two = TwoLocal(3, ['ry','rz'], 'cz', 'full', reps=1, insert_barriers=True)
89
89
  >>> qc = QuantumCircuit(3)
90
- >>> qc += two
90
+ >>> qc &= two
91
91
  >>> print(qc.decompose().draw())
92
92
  ┌──────────┐┌──────────┐ ░ ░ ┌──────────┐ ┌──────────┐
93
93
  q_0: ┤ Ry(θ[0]) ├┤ Rz(θ[3]) ├─░──■──■─────░─┤ Ry(θ[6]) ├─┤ Rz(θ[9]) ├
@@ -59,7 +59,12 @@ class UnitaryOverlap(QuantumCircuit):
59
59
  """
60
60
 
61
61
  def __init__(
62
- self, unitary1: QuantumCircuit, unitary2: QuantumCircuit, prefix1="p1", prefix2="p2"
62
+ self,
63
+ unitary1: QuantumCircuit,
64
+ unitary2: QuantumCircuit,
65
+ prefix1: str = "p1",
66
+ prefix2: str = "p2",
67
+ insert_barrier: bool = False,
63
68
  ):
64
69
  """
65
70
  Args:
@@ -69,6 +74,7 @@ class UnitaryOverlap(QuantumCircuit):
69
74
  if it is parameterized. Defaults to ``"p1"``.
70
75
  prefix2: The name of the parameter vector associated to ``unitary2``,
71
76
  if it is parameterized. Defaults to ``"p2"``.
77
+ insert_barrier: Whether to insert a barrier between the two unitaries.
72
78
 
73
79
  Raises:
74
80
  CircuitError: Number of qubits in ``unitary1`` and ``unitary2`` does not match.
@@ -95,6 +101,8 @@ class UnitaryOverlap(QuantumCircuit):
95
101
  # Generate the actual overlap circuit
96
102
  super().__init__(unitaries[0].num_qubits, name="UnitaryOverlap")
97
103
  self.compose(unitaries[0], inplace=True)
104
+ if insert_barrier:
105
+ self.barrier()
98
106
  self.compose(unitaries[1].inverse(), inplace=True)
99
107
 
100
108
 
@@ -104,8 +112,6 @@ def _check_unitary(circuit):
104
112
  for instruction in circuit.data:
105
113
  if not isinstance(instruction.operation, (Gate, Barrier)):
106
114
  raise CircuitError(
107
- (
108
- "One or more instructions cannot be converted to"
109
- ' a gate. "{}" is not a gate instruction'
110
- ).format(instruction.operation.name)
115
+ "One or more instructions cannot be converted to"
116
+ f' a gate. "{instruction.operation.name}" is not a gate instruction'
111
117
  )
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2021, 2023.
3
+ # (C) Copyright IBM 2021, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -14,14 +14,16 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import Union, Optional
17
+ from typing import Union, Optional, TYPE_CHECKING
18
18
  import numpy as np
19
19
 
20
20
  from qiskit.circuit.gate import Gate
21
21
  from qiskit.circuit.parameterexpression import ParameterExpression
22
- from qiskit.synthesis.evolution import EvolutionSynthesis, LieTrotter
23
22
  from qiskit.quantum_info import Pauli, SparsePauliOp
24
23
 
24
+ if TYPE_CHECKING:
25
+ from qiskit.synthesis.evolution import EvolutionSynthesis
26
+
25
27
 
26
28
  class PauliEvolutionGate(Gate):
27
29
  r"""Time-evolution of an operator consisting of Paulis.
@@ -107,6 +109,8 @@ class PauliEvolutionGate(Gate):
107
109
  operator = _to_sparse_pauli_op(operator)
108
110
 
109
111
  if synthesis is None:
112
+ from qiskit.synthesis.evolution import LieTrotter
113
+
110
114
  synthesis = LieTrotter()
111
115
 
112
116
  if label is None:
@@ -15,6 +15,7 @@
15
15
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
16
16
  from qiskit.circuit.quantumregister import QuantumRegister
17
17
  from qiskit.circuit._utils import with_gate_array
18
+ from qiskit._accelerate.circuit import StandardGate
18
19
 
19
20
 
20
21
  @with_gate_array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]])
@@ -48,6 +49,8 @@ class DCXGate(SingletonGate):
48
49
  \end{pmatrix}
49
50
  """
50
51
 
52
+ _standard_gate = StandardGate.DCXGate
53
+
51
54
  def __init__(self, label=None, *, duration=None, unit="dt"):
52
55
  """Create new DCX gate."""
53
56
  super().__init__("dcx", 2, [], label=label, duration=duration, unit=unit)
@@ -17,6 +17,7 @@ import numpy as np
17
17
  from qiskit.circuit._utils import with_gate_array
18
18
  from qiskit.circuit.quantumregister import QuantumRegister
19
19
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
20
+ from qiskit._accelerate.circuit import StandardGate
20
21
  from .rzx import RZXGate
21
22
  from .x import XGate
22
23
 
@@ -84,6 +85,8 @@ class ECRGate(SingletonGate):
84
85
  \end{pmatrix}
85
86
  """
86
87
 
88
+ _standard_gate = StandardGate.ECRGate
89
+
87
90
  def __init__(self, label=None, *, duration=None, unit="dt"):
88
91
  """Create new ECR gate."""
89
92
  super().__init__("ecr", 2, [], label=label, duration=duration, unit=unit)
@@ -20,6 +20,7 @@ from qiskit.circuit.gate import Gate
20
20
  from qiskit.circuit.quantumregister import QuantumRegister
21
21
  from qiskit.circuit.quantumcircuit import QuantumCircuit
22
22
  from qiskit.circuit.parameterexpression import ParameterValueType
23
+ from qiskit._accelerate.circuit import StandardGate
23
24
 
24
25
 
25
26
  class GlobalPhaseGate(Gate):
@@ -36,6 +37,8 @@ class GlobalPhaseGate(Gate):
36
37
  \end{pmatrix}
37
38
  """
38
39
 
40
+ _standard_gate = StandardGate.GlobalPhaseGate
41
+
39
42
  def __init__(
40
43
  self, phase: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
41
44
  ):
@@ -11,12 +11,16 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Hadamard gate."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  from math import sqrt, pi
15
18
  from typing import Optional, Union
16
19
  import numpy
17
20
  from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
18
21
  from qiskit.circuit.quantumregister import QuantumRegister
19
22
  from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
23
+ from qiskit._accelerate.circuit import StandardGate
20
24
 
21
25
  _H_ARRAY = 1 / sqrt(2) * numpy.array([[1, 1], [1, -1]], dtype=numpy.complex128)
22
26
 
@@ -51,6 +55,8 @@ class HGate(SingletonGate):
51
55
  \end{pmatrix}
52
56
  """
53
57
 
58
+ _standard_gate = StandardGate.HGate
59
+
54
60
  def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
55
61
  """Create new H gate."""
56
62
  super().__init__("h", 1, [], label=label, duration=duration, unit=unit)
@@ -76,9 +82,9 @@ class HGate(SingletonGate):
76
82
  def control(
77
83
  self,
78
84
  num_ctrl_qubits: int = 1,
79
- label: Optional[str] = None,
80
- ctrl_state: Optional[Union[int, str]] = None,
81
- annotated: bool = False,
85
+ label: str | None = None,
86
+ ctrl_state: int | str | None = None,
87
+ annotated: bool | None = None,
82
88
  ):
83
89
  """Return a (multi-)controlled-H gate.
84
90
 
@@ -89,8 +95,8 @@ class HGate(SingletonGate):
89
95
  label: An optional label for the gate [Default: ``None``]
90
96
  ctrl_state: control state expressed as integer,
91
97
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
92
- annotated: indicates whether the controlled gate can be implemented
93
- as an annotated gate.
98
+ annotated: indicates whether the controlled gate should be implemented
99
+ as an annotated gate. If ``None``, this is handled as ``False``.
94
100
 
95
101
  Returns:
96
102
  ControlledGate: controlled version of this gate.
@@ -182,6 +188,8 @@ class CHGate(SingletonControlledGate):
182
188
  \end{pmatrix}
183
189
  """
184
190
 
191
+ _standard_gate = StandardGate.CHGate
192
+
185
193
  def __init__(
186
194
  self,
187
195
  label: Optional[str] = None,
@@ -15,6 +15,7 @@
15
15
  from typing import Optional
16
16
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
17
17
  from qiskit.circuit._utils import with_gate_array
18
+ from qiskit._accelerate.circuit import StandardGate
18
19
 
19
20
 
20
21
  @with_gate_array([[1, 0], [0, 1]])
@@ -45,6 +46,8 @@ class IGate(SingletonGate):
45
46
  └───┘
46
47
  """
47
48
 
49
+ _standard_gate = StandardGate.IGate
50
+
48
51
  def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
49
52
  """Create new Identity gate."""
50
53
  super().__init__("id", 1, [], label=label, duration=duration, unit=unit)
@@ -19,6 +19,7 @@ import numpy as np
19
19
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
20
20
  from qiskit.circuit.quantumregister import QuantumRegister
21
21
  from qiskit.circuit._utils import with_gate_array
22
+ from qiskit._accelerate.circuit import StandardGate
22
23
 
23
24
  from .xx_plus_yy import XXPlusYYGate
24
25
 
@@ -85,6 +86,8 @@ class iSwapGate(SingletonGate):
85
86
  \end{pmatrix}
86
87
  """
87
88
 
89
+ _standard_gate = StandardGate.ISwapGate
90
+
88
91
  def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
89
92
  """Create new iSwap gate."""
90
93
  super().__init__("iswap", 2, [], label=label, duration=duration, unit=unit)
@@ -18,7 +18,7 @@ import math
18
18
  from typing import Optional, Union, Tuple, List
19
19
  import numpy as np
20
20
 
21
- from qiskit.circuit import QuantumCircuit, QuantumRegister, Qubit
21
+ from qiskit.circuit import QuantumCircuit, QuantumRegister, Qubit, ParameterExpression
22
22
  from qiskit.circuit.library.standard_gates.x import MCXGate
23
23
  from qiskit.circuit.library.standard_gates.u3 import _generate_gray_code
24
24
  from qiskit.circuit.parameterexpression import ParameterValueType
@@ -227,8 +227,8 @@ def mcrx(
227
227
  """
228
228
  from .rx import RXGate
229
229
 
230
- control_qubits = self.qbit_argument_conversion(q_controls)
231
- target_qubit = self.qbit_argument_conversion(q_target)
230
+ control_qubits = self._qbit_argument_conversion(q_controls)
231
+ target_qubit = self._qbit_argument_conversion(q_target)
232
232
  if len(target_qubit) != 1:
233
233
  raise QiskitError("The mcrz gate needs a single qubit as target.")
234
234
  all_qubits = control_qubits + target_qubit
@@ -258,6 +258,9 @@ def mcrx(
258
258
  use_basis_gates=use_basis_gates,
259
259
  )
260
260
  else:
261
+ if isinstance(theta, ParameterExpression):
262
+ raise QiskitError(f"Cannot synthesize MCRX with unbound parameter: {theta}.")
263
+
261
264
  cgate = _mcsu2_real_diagonal(
262
265
  RXGate(theta).to_matrix(),
263
266
  num_controls=len(control_qubits),
@@ -272,8 +275,8 @@ def mcry(
272
275
  q_controls: Union[QuantumRegister, List[Qubit]],
273
276
  q_target: Qubit,
274
277
  q_ancillae: Optional[Union[QuantumRegister, Tuple[QuantumRegister, int]]] = None,
275
- mode: str = None,
276
- use_basis_gates=False,
278
+ mode: Optional[str] = None,
279
+ use_basis_gates: bool = False,
277
280
  ):
278
281
  """
279
282
  Apply Multiple-Controlled Y rotation gate
@@ -292,11 +295,11 @@ def mcry(
292
295
  """
293
296
  from .ry import RYGate
294
297
 
295
- control_qubits = self.qbit_argument_conversion(q_controls)
296
- target_qubit = self.qbit_argument_conversion(q_target)
298
+ control_qubits = self._qbit_argument_conversion(q_controls)
299
+ target_qubit = self._qbit_argument_conversion(q_target)
297
300
  if len(target_qubit) != 1:
298
301
  raise QiskitError("The mcrz gate needs a single qubit as target.")
299
- ancillary_qubits = [] if q_ancillae is None else self.qbit_argument_conversion(q_ancillae)
302
+ ancillary_qubits = [] if q_ancillae is None else self._qbit_argument_conversion(q_ancillae)
300
303
  all_qubits = control_qubits + target_qubit + ancillary_qubits
301
304
  target_qubit = target_qubit[0]
302
305
  self._check_dups(all_qubits)
@@ -333,6 +336,9 @@ def mcry(
333
336
  use_basis_gates=use_basis_gates,
334
337
  )
335
338
  else:
339
+ if isinstance(theta, ParameterExpression):
340
+ raise QiskitError(f"Cannot synthesize MCRY with unbound parameter: {theta}.")
341
+
336
342
  cgate = _mcsu2_real_diagonal(
337
343
  RYGate(theta).to_matrix(),
338
344
  num_controls=len(control_qubits),
@@ -365,8 +371,8 @@ def mcrz(
365
371
  """
366
372
  from .rz import CRZGate, RZGate
367
373
 
368
- control_qubits = self.qbit_argument_conversion(q_controls)
369
- target_qubit = self.qbit_argument_conversion(q_target)
374
+ control_qubits = self._qbit_argument_conversion(q_controls)
375
+ target_qubit = self._qbit_argument_conversion(q_target)
370
376
  if len(target_qubit) != 1:
371
377
  raise QiskitError("The mcrz gate needs a single qubit as target.")
372
378
  all_qubits = control_qubits + target_qubit
@@ -383,6 +389,9 @@ def mcrz(
383
389
  else:
384
390
  self.append(CRZGate(lam), control_qubits + [target_qubit])
385
391
  else:
392
+ if isinstance(lam, ParameterExpression):
393
+ raise QiskitError(f"Cannot synthesize MCRZ with unbound parameter: {lam}.")
394
+
386
395
  cgate = _mcsu2_real_diagonal(
387
396
  RZGate(lam).to_matrix(),
388
397
  num_controls=len(control_qubits),