qiskit 1.1.2__cp38-abi3-win32.whl → 1.2.0rc1__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 (341) 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 +1 -1
  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 +392 -384
  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 +41 -127
  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 +32 -24
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +154 -146
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +226 -217
  147. qiskit/providers/fake_provider/fake_qasm_backend.py +5 -1
  148. qiskit/providers/fake_provider/generic_backend_v2.py +80 -50
  149. qiskit/providers/models/__init__.py +11 -0
  150. qiskit/providers/models/backendconfiguration.py +50 -4
  151. qiskit/providers/models/backendproperties.py +13 -2
  152. qiskit/providers/models/pulsedefaults.py +10 -11
  153. qiskit/providers/options.py +13 -13
  154. qiskit/providers/providerutils.py +3 -1
  155. qiskit/pulse/configuration.py +8 -12
  156. qiskit/pulse/instruction_schedule_map.py +3 -5
  157. qiskit/pulse/instructions/acquire.py +7 -8
  158. qiskit/pulse/instructions/instruction.py +2 -3
  159. qiskit/pulse/library/samplers/decorators.py +5 -9
  160. qiskit/pulse/library/symbolic_pulses.py +4 -7
  161. qiskit/pulse/library/waveform.py +2 -5
  162. qiskit/pulse/macros.py +11 -6
  163. qiskit/pulse/parser.py +8 -10
  164. qiskit/pulse/schedule.py +9 -17
  165. qiskit/pulse/transforms/alignments.py +1 -3
  166. qiskit/pulse/utils.py +1 -2
  167. qiskit/qasm/libs/stdgates.inc +35 -28
  168. qiskit/qasm2/__init__.py +7 -7
  169. qiskit/qasm2/export.py +5 -9
  170. qiskit/qasm2/parse.py +1 -1
  171. qiskit/qasm3/ast.py +9 -25
  172. qiskit/qasm3/exporter.py +578 -481
  173. qiskit/qasm3/printer.py +7 -16
  174. qiskit/qobj/common.py +10 -0
  175. qiskit/qobj/converters/lo_config.py +9 -0
  176. qiskit/qobj/converters/pulse_instruction.py +13 -6
  177. qiskit/qobj/pulse_qobj.py +69 -15
  178. qiskit/qobj/qasm_qobj.py +72 -20
  179. qiskit/qobj/utils.py +9 -0
  180. qiskit/qpy/binary_io/circuits.py +8 -5
  181. qiskit/qpy/binary_io/schedules.py +1 -1
  182. qiskit/qpy/binary_io/value.py +3 -3
  183. qiskit/qpy/interface.py +3 -2
  184. qiskit/qpy/type_keys.py +2 -2
  185. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  186. qiskit/quantum_info/operators/channel/superop.py +2 -2
  187. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  188. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  189. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  190. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  191. qiskit/quantum_info/operators/measures.py +2 -2
  192. qiskit/quantum_info/operators/op_shape.py +12 -20
  193. qiskit/quantum_info/operators/operator.py +14 -21
  194. qiskit/quantum_info/operators/predicates.py +1 -0
  195. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  196. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  197. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  198. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  199. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  200. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +14 -16
  201. qiskit/quantum_info/quaternion.py +1 -1
  202. qiskit/quantum_info/states/densitymatrix.py +5 -8
  203. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  204. qiskit/quantum_info/states/statevector.py +4 -8
  205. qiskit/result/counts.py +2 -2
  206. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  207. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  208. qiskit/result/mitigation/utils.py +1 -3
  209. qiskit/result/models.py +17 -16
  210. qiskit/result/result.py +15 -20
  211. qiskit/scheduler/lowering.py +2 -2
  212. qiskit/synthesis/__init__.py +2 -1
  213. qiskit/synthesis/clifford/__init__.py +1 -1
  214. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  215. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  216. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  217. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  218. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  219. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  220. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  221. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  222. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  223. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  224. qiskit/synthesis/evolution/product_formula.py +111 -55
  225. qiskit/synthesis/evolution/qdrift.py +40 -10
  226. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  227. qiskit/synthesis/linear/__init__.py +1 -0
  228. qiskit/synthesis/linear/cnot_synth.py +22 -96
  229. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  230. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  231. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  232. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  233. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  234. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  235. qiskit/synthesis/permutation/permutation_full.py +5 -29
  236. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  237. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  238. qiskit/synthesis/qft/__init__.py +1 -0
  239. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  240. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  241. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  242. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  243. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  244. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  245. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  246. qiskit/synthesis/unitary/qsd.py +5 -3
  247. qiskit/transpiler/__init__.py +1 -0
  248. qiskit/transpiler/basepasses.py +1 -1
  249. qiskit/transpiler/coupling.py +3 -3
  250. qiskit/transpiler/instruction_durations.py +1 -2
  251. qiskit/transpiler/layout.py +3 -3
  252. qiskit/transpiler/passes/__init__.py +2 -0
  253. qiskit/transpiler/passes/basis/basis_translator.py +82 -63
  254. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  255. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  256. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  257. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  258. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  259. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  260. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  261. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  262. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  263. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  264. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  265. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  266. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  267. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  268. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  269. qiskit/transpiler/passes/optimization/consolidate_blocks.py +11 -8
  270. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  271. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  272. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  273. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  274. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  275. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  276. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  277. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  278. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  279. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  280. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  281. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  282. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  283. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  284. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  285. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  286. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
  287. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  288. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  289. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  290. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  291. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  292. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +11 -11
  293. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  294. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  295. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  296. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  297. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  298. qiskit/transpiler/passes/utils/__init__.py +0 -1
  299. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  300. qiskit/transpiler/passes/utils/check_map.py +3 -6
  301. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  302. qiskit/transpiler/passes/utils/error.py +2 -2
  303. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  304. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  305. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  306. qiskit/transpiler/passmanager.py +7 -6
  307. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  308. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +117 -18
  309. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  310. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  311. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  312. qiskit/transpiler/target.py +27 -8
  313. qiskit/user_config.py +29 -6
  314. qiskit/utils/classtools.py +3 -3
  315. qiskit/utils/deprecation.py +3 -2
  316. qiskit/utils/lazy_tester.py +2 -2
  317. qiskit/utils/optionals.py +8 -8
  318. qiskit/visualization/bloch.py +19 -67
  319. qiskit/visualization/circuit/_utils.py +34 -10
  320. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  321. qiskit/visualization/circuit/latex.py +29 -27
  322. qiskit/visualization/circuit/matplotlib.py +4 -2
  323. qiskit/visualization/circuit/qcstyle.py +2 -2
  324. qiskit/visualization/circuit/text.py +9 -15
  325. qiskit/visualization/dag_visualization.py +5 -12
  326. qiskit/visualization/pulse_v2/core.py +1 -1
  327. qiskit/visualization/pulse_v2/events.py +1 -1
  328. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  329. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  330. qiskit/visualization/pulse_v2/layouts.py +1 -5
  331. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  332. qiskit/visualization/state_visualization.py +5 -6
  333. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/transition_visualization.py +7 -2
  335. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +26 -26
  336. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +340 -338
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +3 -0
  339. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  340. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -19,6 +19,7 @@ from qiskit.circuit.controlledgate import ControlledGate
19
19
  from qiskit.circuit.gate import Gate
20
20
  from qiskit.circuit.quantumregister import QuantumRegister
21
21
  from qiskit.circuit.parameterexpression import ParameterValueType
22
+ from qiskit._accelerate.circuit import StandardGate
22
23
 
23
24
 
24
25
  class PhaseGate(Gate):
@@ -75,6 +76,8 @@ class PhaseGate(Gate):
75
76
  `1612.00858 <https://arxiv.org/abs/1612.00858>`_
76
77
  """
77
78
 
79
+ _standard_gate = StandardGate.PhaseGate
80
+
78
81
  def __init__(
79
82
  self, theta: ParameterValueType, label: str | None = None, *, duration=None, unit="dt"
80
83
  ):
@@ -96,7 +99,7 @@ class PhaseGate(Gate):
96
99
  num_ctrl_qubits: int = 1,
97
100
  label: str | None = None,
98
101
  ctrl_state: str | int | None = None,
99
- annotated: bool = False,
102
+ annotated: bool | None = None,
100
103
  ):
101
104
  """Return a (multi-)controlled-Phase gate.
102
105
 
@@ -105,8 +108,8 @@ class PhaseGate(Gate):
105
108
  label: An optional label for the gate [Default: ``None``]
106
109
  ctrl_state: control state expressed as integer,
107
110
  string (e.g. ``'110'``), or ``None``. If ``None``, use all 1s.
108
- annotated: indicates whether the controlled gate can be implemented
109
- as an annotated gate.
111
+ annotated: indicates whether the controlled gate should be implemented
112
+ as an annotated gate. If ``None``, this is handled as ``False``.
110
113
 
111
114
  Returns:
112
115
  ControlledGate: controlled version of this gate.
@@ -197,6 +200,8 @@ class CPhaseGate(ControlledGate):
197
200
  phase difference.
198
201
  """
199
202
 
203
+ _standard_gate = StandardGate.CPhaseGate
204
+
200
205
  def __init__(
201
206
  self,
202
207
  theta: ParameterValueType,
@@ -250,7 +255,7 @@ class CPhaseGate(ControlledGate):
250
255
  num_ctrl_qubits: int = 1,
251
256
  label: str | None = None,
252
257
  ctrl_state: str | int | None = None,
253
- annotated: bool = False,
258
+ annotated: bool | None = None,
254
259
  ):
255
260
  """Controlled version of this gate.
256
261
 
@@ -259,8 +264,8 @@ class CPhaseGate(ControlledGate):
259
264
  label: An optional label for the gate [Default: ``None``]
260
265
  ctrl_state: control state expressed as integer,
261
266
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
262
- annotated: indicates whether the controlled gate can be implemented
263
- as an annotated gate.
267
+ annotated: indicates whether the controlled gate should be implemented
268
+ as an annotated gate. If ``None``, this is handled as ``False``.
264
269
 
265
270
  Returns:
266
271
  ControlledGate: controlled version of this gate.
@@ -391,7 +396,7 @@ class MCPhaseGate(ControlledGate):
391
396
  num_ctrl_qubits: int = 1,
392
397
  label: str | None = None,
393
398
  ctrl_state: str | int | None = None,
394
- annotated: bool = False,
399
+ annotated: bool | None = None,
395
400
  ):
396
401
  """Controlled version of this gate.
397
402
 
@@ -400,8 +405,8 @@ class MCPhaseGate(ControlledGate):
400
405
  label: An optional label for the gate [Default: ``None``]
401
406
  ctrl_state: control state expressed as integer,
402
407
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
403
- annotated: indicates whether the controlled gate can be implemented
404
- as an annotated gate.
408
+ annotated: indicates whether the controlled gate should be implemented
409
+ as an annotated gate. If ``None``, this is handled as ``False``.
405
410
 
406
411
  Returns:
407
412
  ControlledGate: controlled version of this gate.
@@ -20,6 +20,7 @@ import numpy
20
20
  from qiskit.circuit.gate import Gate
21
21
  from qiskit.circuit.quantumregister import QuantumRegister
22
22
  from qiskit.circuit.parameterexpression import ParameterValueType
23
+ from qiskit._accelerate.circuit import StandardGate
23
24
 
24
25
 
25
26
  class RGate(Gate):
@@ -49,6 +50,8 @@ class RGate(Gate):
49
50
  \end{pmatrix}
50
51
  """
51
52
 
53
+ _standard_gate = StandardGate.RGate
54
+
52
55
  def __init__(
53
56
  self,
54
57
  theta: ParameterValueType,
@@ -12,6 +12,8 @@
12
12
 
13
13
  """Rotation around the X axis."""
14
14
 
15
+ from __future__ import annotations
16
+
15
17
  import math
16
18
  from math import pi
17
19
  from typing import Optional, Union
@@ -20,7 +22,8 @@ import numpy
20
22
  from qiskit.circuit.controlledgate import ControlledGate
21
23
  from qiskit.circuit.gate import Gate
22
24
  from qiskit.circuit.quantumregister import QuantumRegister
23
- from qiskit.circuit.parameterexpression import ParameterValueType
25
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
26
+ from qiskit._accelerate.circuit import StandardGate
24
27
 
25
28
 
26
29
  class RXGate(Gate):
@@ -50,6 +53,8 @@ class RXGate(Gate):
50
53
  \end{pmatrix}
51
54
  """
52
55
 
56
+ _standard_gate = StandardGate.RXGate
57
+
53
58
  def __init__(
54
59
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
55
60
  ):
@@ -75,9 +80,9 @@ class RXGate(Gate):
75
80
  def control(
76
81
  self,
77
82
  num_ctrl_qubits: int = 1,
78
- label: Optional[str] = None,
79
- ctrl_state: Optional[Union[str, int]] = None,
80
- annotated: bool = False,
83
+ label: str | None = None,
84
+ ctrl_state: str | int | None = None,
85
+ annotated: bool | None = None,
81
86
  ):
82
87
  """Return a (multi-)controlled-RX gate.
83
88
 
@@ -86,16 +91,24 @@ class RXGate(Gate):
86
91
  label: An optional label for the gate [Default: ``None``]
87
92
  ctrl_state: control state expressed as integer,
88
93
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
89
- annotated: indicates whether the controlled gate can be implemented
90
- as an annotated gate.
94
+ annotated: indicates whether the controlled gate should be implemented
95
+ as an annotated gate. If ``None``, this is set to ``True`` if
96
+ the gate contains free parameters and more than one control qubit, in which
97
+ case it cannot yet be synthesized. Otherwise it is set to ``False``.
91
98
 
92
99
  Returns:
93
100
  ControlledGate: controlled version of this gate.
94
101
  """
102
+ # deliberately capture annotated in [None, False] here
95
103
  if not annotated and num_ctrl_qubits == 1:
96
104
  gate = CRXGate(self.params[0], label=label, ctrl_state=ctrl_state)
97
105
  gate.base_gate.label = self.label
98
106
  else:
107
+ # If the gate parameters contain free parameters, we cannot eagerly synthesize
108
+ # the controlled gate decomposition. In this case, we annotate the gate per default.
109
+ if annotated is None:
110
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
111
+
99
112
  gate = super().control(
100
113
  num_ctrl_qubits=num_ctrl_qubits,
101
114
  label=label,
@@ -196,6 +209,8 @@ class CRXGate(ControlledGate):
196
209
  \end{pmatrix}
197
210
  """
198
211
 
212
+ _standard_gate = StandardGate.CRXGate
213
+
199
214
  def __init__(
200
215
  self,
201
216
  theta: ParameterValueType,
@@ -11,12 +11,16 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Two-qubit XX-rotation gate."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  import math
15
18
  from typing import Optional
16
19
  import numpy
17
20
  from qiskit.circuit.gate import Gate
18
21
  from qiskit.circuit.quantumregister import QuantumRegister
19
- from qiskit.circuit.parameterexpression import ParameterValueType
22
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
23
+ from qiskit._accelerate.circuit import StandardGate
20
24
 
21
25
 
22
26
  class RXXGate(Gate):
@@ -72,6 +76,8 @@ class RXXGate(Gate):
72
76
  \end{pmatrix}
73
77
  """
74
78
 
79
+ _standard_gate = StandardGate.RXXGate
80
+
75
81
  def __init__(
76
82
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
77
83
  ):
@@ -108,6 +114,39 @@ class RXXGate(Gate):
108
114
 
109
115
  self.definition = qc
110
116
 
117
+ def control(
118
+ self,
119
+ num_ctrl_qubits: int = 1,
120
+ label: str | None = None,
121
+ ctrl_state: str | int | None = None,
122
+ annotated: bool | None = None,
123
+ ):
124
+ """Return a (multi-)controlled-RXX gate.
125
+
126
+ Args:
127
+ num_ctrl_qubits: number of control qubits.
128
+ label: An optional label for the gate [Default: ``None``]
129
+ ctrl_state: control state expressed as integer,
130
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
131
+ annotated: indicates whether the controlled gate should be implemented
132
+ as an annotated gate. If ``None``, this is set to ``True`` if
133
+ the gate contains free parameters, in which case it cannot
134
+ yet be synthesized.
135
+
136
+ Returns:
137
+ ControlledGate: controlled version of this gate.
138
+ """
139
+ if annotated is None:
140
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
141
+
142
+ gate = super().control(
143
+ num_ctrl_qubits=num_ctrl_qubits,
144
+ label=label,
145
+ ctrl_state=ctrl_state,
146
+ annotated=annotated,
147
+ )
148
+ return gate
149
+
111
150
  def inverse(self, annotated: bool = False):
112
151
  """Return inverse RXX gate (i.e. with the negative rotation angle).
113
152
 
@@ -12,6 +12,8 @@
12
12
 
13
13
  """Rotation around the Y axis."""
14
14
 
15
+ from __future__ import annotations
16
+
15
17
  import math
16
18
  from math import pi
17
19
  from typing import Optional, Union
@@ -19,7 +21,8 @@ import numpy
19
21
  from qiskit.circuit.controlledgate import ControlledGate
20
22
  from qiskit.circuit.gate import Gate
21
23
  from qiskit.circuit.quantumregister import QuantumRegister
22
- from qiskit.circuit.parameterexpression import ParameterValueType
24
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
25
+ from qiskit._accelerate.circuit import StandardGate
23
26
 
24
27
 
25
28
  class RYGate(Gate):
@@ -49,6 +52,8 @@ class RYGate(Gate):
49
52
  \end{pmatrix}
50
53
  """
51
54
 
55
+ _standard_gate = StandardGate.RYGate
56
+
52
57
  def __init__(
53
58
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
54
59
  ):
@@ -74,9 +79,9 @@ class RYGate(Gate):
74
79
  def control(
75
80
  self,
76
81
  num_ctrl_qubits: int = 1,
77
- label: Optional[str] = None,
78
- ctrl_state: Optional[Union[str, int]] = None,
79
- annotated: bool = False,
82
+ label: str | None = None,
83
+ ctrl_state: str | int | None = None,
84
+ annotated: bool | None = None,
80
85
  ):
81
86
  """Return a (multi-)controlled-RY gate.
82
87
 
@@ -85,16 +90,24 @@ class RYGate(Gate):
85
90
  label: An optional label for the gate [Default: ``None``]
86
91
  ctrl_state: control state expressed as integer,
87
92
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
88
- annotated: indicates whether the controlled gate can be implemented
89
- as an annotated gate.
93
+ annotated: indicates whether the controlled gate should be implemented
94
+ as an annotated gate. If ``None``, this is set to ``True`` if
95
+ the gate contains free parameters and more than one control qubit, in which
96
+ case it cannot yet be synthesized. Otherwise it is set to ``False``.
90
97
 
91
98
  Returns:
92
99
  ControlledGate: controlled version of this gate.
93
100
  """
101
+ # deliberately capture annotated in [None, False] here
94
102
  if not annotated and num_ctrl_qubits == 1:
95
103
  gate = CRYGate(self.params[0], label=label, ctrl_state=ctrl_state)
96
104
  gate.base_gate.label = self.label
97
105
  else:
106
+ # If the gate parameters contain free parameters, we cannot eagerly synthesize
107
+ # the controlled gate decomposition. In this case, we annotate the gate per default.
108
+ if annotated is None:
109
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
110
+
98
111
  gate = super().control(
99
112
  num_ctrl_qubits=num_ctrl_qubits,
100
113
  label=label,
@@ -195,6 +208,8 @@ class CRYGate(ControlledGate):
195
208
  \end{pmatrix}
196
209
  """
197
210
 
211
+ _standard_gate = StandardGate.CRYGate
212
+
198
213
  def __init__(
199
214
  self,
200
215
  theta: ParameterValueType,
@@ -11,12 +11,16 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Two-qubit YY-rotation gate."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  import math
15
18
  from typing import Optional
16
19
  import numpy as np
17
20
  from qiskit.circuit.gate import Gate
18
21
  from qiskit.circuit.quantumregister import QuantumRegister
19
- from qiskit.circuit.parameterexpression import ParameterValueType
22
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
23
+ from qiskit._accelerate.circuit import StandardGate
20
24
 
21
25
 
22
26
  class RYYGate(Gate):
@@ -72,6 +76,8 @@ class RYYGate(Gate):
72
76
  \end{pmatrix}
73
77
  """
74
78
 
79
+ _standard_gate = StandardGate.RYYGate
80
+
75
81
  def __init__(
76
82
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
77
83
  ):
@@ -108,6 +114,39 @@ class RYYGate(Gate):
108
114
 
109
115
  self.definition = qc
110
116
 
117
+ def control(
118
+ self,
119
+ num_ctrl_qubits: int = 1,
120
+ label: str | None = None,
121
+ ctrl_state: str | int | None = None,
122
+ annotated: bool | None = None,
123
+ ):
124
+ """Return a (multi-)controlled-YY gate.
125
+
126
+ Args:
127
+ num_ctrl_qubits: number of control qubits.
128
+ label: An optional label for the gate [Default: ``None``]
129
+ ctrl_state: control state expressed as integer,
130
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
131
+ annotated: indicates whether the controlled gate should be implemented
132
+ as an annotated gate. If ``None``, this is set to ``True`` if
133
+ the gate contains free parameters, in which case it cannot
134
+ yet be synthesized.
135
+
136
+ Returns:
137
+ ControlledGate: controlled version of this gate.
138
+ """
139
+ if annotated is None:
140
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
141
+
142
+ gate = super().control(
143
+ num_ctrl_qubits=num_ctrl_qubits,
144
+ label=label,
145
+ ctrl_state=ctrl_state,
146
+ annotated=annotated,
147
+ )
148
+ return gate
149
+
111
150
  def inverse(self, annotated: bool = False):
112
151
  """Return inverse RYY gate (i.e. with the negative rotation angle).
113
152
 
@@ -11,12 +11,16 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Rotation around the Z axis."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  from cmath import exp
15
18
  from typing import Optional, Union
16
19
  from qiskit.circuit.gate import Gate
17
20
  from qiskit.circuit.controlledgate import ControlledGate
18
21
  from qiskit.circuit.quantumregister import QuantumRegister
19
- from qiskit.circuit.parameterexpression import ParameterValueType
22
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
23
+ from qiskit._accelerate.circuit import StandardGate
20
24
 
21
25
 
22
26
  class RZGate(Gate):
@@ -59,6 +63,8 @@ class RZGate(Gate):
59
63
  `1612.00858 <https://arxiv.org/abs/1612.00858>`_
60
64
  """
61
65
 
66
+ _standard_gate = StandardGate.RZGate
67
+
62
68
  def __init__(
63
69
  self, phi: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
64
70
  ):
@@ -85,9 +91,9 @@ class RZGate(Gate):
85
91
  def control(
86
92
  self,
87
93
  num_ctrl_qubits: int = 1,
88
- label: Optional[str] = None,
89
- ctrl_state: Optional[Union[str, int]] = None,
90
- annotated: bool = False,
94
+ label: str | None = None,
95
+ ctrl_state: str | int | None = None,
96
+ annotated: bool | None = None,
91
97
  ):
92
98
  """Return a (multi-)controlled-RZ gate.
93
99
 
@@ -96,16 +102,24 @@ class RZGate(Gate):
96
102
  label: An optional label for the gate [Default: ``None``]
97
103
  ctrl_state: control state expressed as integer,
98
104
  string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
99
- annotated: indicates whether the controlled gate can be implemented
100
- as an annotated gate.
105
+ annotated: indicates whether the controlled gate should be implemented
106
+ as an annotated gate. If ``None``, this is set to ``True`` if
107
+ the gate contains free parameters and more than one control qubit, in which
108
+ case it cannot yet be synthesized. Otherwise it is set to ``False``.
101
109
 
102
110
  Returns:
103
111
  ControlledGate: controlled version of this gate.
104
112
  """
113
+ # deliberately capture annotated in [None, False] here
105
114
  if not annotated and num_ctrl_qubits == 1:
106
115
  gate = CRZGate(self.params[0], label=label, ctrl_state=ctrl_state)
107
116
  gate.base_gate.label = self.label
108
117
  else:
118
+ # If the gate parameters contain free parameters, we cannot eagerly synthesize
119
+ # the controlled gate decomposition. In this case, we annotate the gate per default.
120
+ if annotated is None:
121
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
122
+
109
123
  gate = super().control(
110
124
  num_ctrl_qubits=num_ctrl_qubits,
111
125
  label=label,
@@ -213,6 +227,8 @@ class CRZGate(ControlledGate):
213
227
  phase difference.
214
228
  """
215
229
 
230
+ _standard_gate = StandardGate.CRZGate
231
+
216
232
  def __init__(
217
233
  self,
218
234
  theta: ParameterValueType,
@@ -11,11 +11,15 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Two-qubit ZX-rotation gate."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  import math
15
18
  from typing import Optional
16
19
  from qiskit.circuit.gate import Gate
17
20
  from qiskit.circuit.quantumregister import QuantumRegister
18
- from qiskit.circuit.parameterexpression import ParameterValueType
21
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
22
+ from qiskit._accelerate.circuit import StandardGate
19
23
 
20
24
 
21
25
  class RZXGate(Gate):
@@ -117,6 +121,8 @@ class RZXGate(Gate):
117
121
  \end{pmatrix}
118
122
  """
119
123
 
124
+ _standard_gate = StandardGate.RZXGate
125
+
120
126
  def __init__(
121
127
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
122
128
  ):
@@ -152,6 +158,39 @@ class RZXGate(Gate):
152
158
 
153
159
  self.definition = qc
154
160
 
161
+ def control(
162
+ self,
163
+ num_ctrl_qubits: int = 1,
164
+ label: str | None = None,
165
+ ctrl_state: str | int | None = None,
166
+ annotated: bool | None = None,
167
+ ):
168
+ """Return a (multi-)controlled-RZX gate.
169
+
170
+ Args:
171
+ num_ctrl_qubits: number of control qubits.
172
+ label: An optional label for the gate [Default: ``None``]
173
+ ctrl_state: control state expressed as integer,
174
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
175
+ annotated: indicates whether the controlled gate should be implemented
176
+ as an annotated gate. If ``None``, this is set to ``True`` if
177
+ the gate contains free parameters, in which case it cannot
178
+ yet be synthesized.
179
+
180
+ Returns:
181
+ ControlledGate: controlled version of this gate.
182
+ """
183
+ if annotated is None:
184
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
185
+
186
+ gate = super().control(
187
+ num_ctrl_qubits=num_ctrl_qubits,
188
+ label=label,
189
+ ctrl_state=ctrl_state,
190
+ annotated=annotated,
191
+ )
192
+ return gate
193
+
155
194
  def inverse(self, annotated: bool = False):
156
195
  """Return inverse RZX gate (i.e. with the negative rotation angle).
157
196
 
@@ -11,11 +11,15 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Two-qubit ZZ-rotation gate."""
14
+
15
+ from __future__ import annotations
16
+
14
17
  from cmath import exp
15
18
  from typing import Optional
16
19
  from qiskit.circuit.gate import Gate
17
20
  from qiskit.circuit.quantumregister import QuantumRegister
18
- from qiskit.circuit.parameterexpression import ParameterValueType
21
+ from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
22
+ from qiskit._accelerate.circuit import StandardGate
19
23
 
20
24
 
21
25
  class RZZGate(Gate):
@@ -71,7 +75,7 @@ class RZZGate(Gate):
71
75
 
72
76
  .. math::
73
77
 
74
- R_{ZZ}(\theta = \pi) = - Z \otimes Z
78
+ R_{ZZ}(\theta = \pi) = - i Z \otimes Z
75
79
 
76
80
  .. math::
77
81
 
@@ -84,6 +88,8 @@ class RZZGate(Gate):
84
88
  \end{pmatrix}
85
89
  """
86
90
 
91
+ _standard_gate = StandardGate.RZZGate
92
+
87
93
  def __init__(
88
94
  self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
89
95
  ):
@@ -116,6 +122,39 @@ class RZZGate(Gate):
116
122
 
117
123
  self.definition = qc
118
124
 
125
+ def control(
126
+ self,
127
+ num_ctrl_qubits: int = 1,
128
+ label: str | None = None,
129
+ ctrl_state: str | int | None = None,
130
+ annotated: bool | None = None,
131
+ ):
132
+ """Return a (multi-)controlled-RZZ gate.
133
+
134
+ Args:
135
+ num_ctrl_qubits: number of control qubits.
136
+ label: An optional label for the gate [Default: ``None``]
137
+ ctrl_state: control state expressed as integer,
138
+ string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
139
+ annotated: indicates whether the controlled gate should be implemented
140
+ as an annotated gate. If ``None``, this is set to ``True`` if
141
+ the gate contains free parameters, in which case it cannot
142
+ yet be synthesized.
143
+
144
+ Returns:
145
+ ControlledGate: controlled version of this gate.
146
+ """
147
+ if annotated is None:
148
+ annotated = any(isinstance(p, ParameterExpression) for p in self.params)
149
+
150
+ gate = super().control(
151
+ num_ctrl_qubits=num_ctrl_qubits,
152
+ label=label,
153
+ ctrl_state=ctrl_state,
154
+ annotated=annotated,
155
+ )
156
+ return gate
157
+
119
158
  def inverse(self, annotated: bool = False):
120
159
  """Return inverse RZZ gate (i.e. with the negative rotation angle).
121
160