qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__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.
- qiskit/VERSION.txt +1 -1
- qiskit/__init__.py +20 -1
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +2 -0
- qiskit/circuit/__init__.py +44 -1
- qiskit/circuit/_standard_gates_commutations.py +585 -0
- qiskit/circuit/barrier.py +2 -0
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +13 -5
- qiskit/circuit/controlflow/while_loop.py +10 -2
- qiskit/circuit/delay.py +20 -3
- qiskit/circuit/equivalence.py +13 -214
- qiskit/circuit/gate.py +3 -1
- qiskit/circuit/instruction.py +32 -11
- qiskit/circuit/instructionset.py +2 -0
- qiskit/circuit/library/__init__.py +110 -14
- qiskit/circuit/library/arithmetic/__init__.py +9 -2
- qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +20 -38
- qiskit/circuit/library/blueprintcircuit.py +64 -0
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
- qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
- qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
- qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
- qiskit/circuit/library/data_preparation/__init__.py +6 -3
- qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
- qiskit/circuit/library/fourier_checking.py +72 -11
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
- qiskit/circuit/library/generalized_gates/gms.py +67 -14
- qiskit/circuit/library/generalized_gates/gr.py +4 -4
- qiskit/circuit/library/generalized_gates/isometry.py +2 -2
- qiskit/circuit/library/generalized_gates/linear_function.py +12 -6
- qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
- qiskit/circuit/library/generalized_gates/permutation.py +8 -6
- qiskit/circuit/library/generalized_gates/rv.py +8 -9
- qiskit/circuit/library/graph_state.py +93 -10
- qiskit/circuit/library/grover_operator.py +270 -2
- qiskit/circuit/library/hidden_linear_function.py +83 -20
- qiskit/circuit/library/iqp.py +99 -20
- qiskit/circuit/library/n_local/__init__.py +19 -7
- qiskit/circuit/library/n_local/efficient_su2.py +118 -5
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
- qiskit/circuit/library/n_local/n_local.py +406 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
- qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
- qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
- qiskit/circuit/library/n_local/two_local.py +14 -7
- qiskit/circuit/library/overlap.py +91 -26
- qiskit/circuit/library/pauli_evolution.py +17 -15
- qiskit/circuit/library/phase_estimation.py +80 -4
- qiskit/circuit/library/quantum_volume.py +72 -20
- qiskit/circuit/library/standard_gates/__init__.py +20 -1
- qiskit/circuit/library/standard_gates/dcx.py +2 -1
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +4 -3
- qiskit/circuit/library/standard_gates/i.py +2 -1
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +20 -12
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +4 -3
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +4 -3
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +13 -12
- qiskit/circuit/library/standard_gates/rzx.py +6 -6
- qiskit/circuit/library/standard_gates/rzz.py +1 -1
- qiskit/circuit/library/standard_gates/s.py +4 -4
- qiskit/circuit/library/standard_gates/swap.py +3 -3
- qiskit/circuit/library/standard_gates/sx.py +4 -3
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +11 -3
- qiskit/circuit/library/standard_gates/u1.py +65 -15
- qiskit/circuit/library/standard_gates/u2.py +4 -1
- qiskit/circuit/library/standard_gates/u3.py +31 -3
- qiskit/circuit/library/standard_gates/x.py +7 -5
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
- qiskit/circuit/library/standard_gates/y.py +4 -3
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
- qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
- qiskit/circuit/parameter.py +4 -0
- qiskit/circuit/parameterexpression.py +167 -34
- qiskit/circuit/quantumcircuit.py +162 -126
- qiskit/circuit/singleton.py +2 -0
- qiskit/circuit/store.py +2 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/assembler.py +17 -4
- qiskit/compiler/scheduler.py +2 -0
- qiskit/compiler/sequencer.py +2 -0
- qiskit/compiler/transpiler.py +81 -26
- qiskit/converters/circuit_to_dag.py +2 -2
- qiskit/converters/circuit_to_dagdependency.py +1 -1
- qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
- qiskit/converters/circuit_to_instruction.py +1 -1
- qiskit/converters/dag_to_circuit.py +7 -5
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +5 -1
- qiskit/converters/dagdependency_to_dag.py +6 -1
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +18 -5
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +5 -2
- qiskit/primitives/backend_sampler_v2.py +61 -18
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +9 -1
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +12 -1
- qiskit/providers/backend_compat.py +23 -3
- qiskit/providers/basic_provider/basic_simulator.py +12 -2
- qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
- qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
- qiskit/providers/models/pulsedefaults.py +2 -0
- qiskit/pulse/builder.py +59 -18
- qiskit/pulse/calibration_entries.py +4 -1
- qiskit/pulse/channels.py +2 -0
- qiskit/pulse/exceptions.py +2 -0
- qiskit/pulse/instruction_schedule_map.py +21 -6
- qiskit/pulse/instructions/acquire.py +2 -0
- qiskit/pulse/instructions/delay.py +2 -0
- qiskit/pulse/instructions/directives.py +8 -0
- qiskit/pulse/instructions/frequency.py +3 -0
- qiskit/pulse/instructions/instruction.py +2 -0
- qiskit/pulse/instructions/phase.py +3 -0
- qiskit/pulse/instructions/play.py +2 -0
- qiskit/pulse/instructions/reference.py +2 -0
- qiskit/pulse/instructions/snapshot.py +2 -0
- qiskit/pulse/library/pulse.py +2 -0
- qiskit/pulse/library/symbolic_pulses.py +28 -0
- qiskit/pulse/library/waveform.py +2 -0
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +12 -13
- qiskit/pulse/transforms/alignments.py +5 -3
- qiskit/pulse/transforms/dag.py +7 -0
- qiskit/qasm2/export.py +5 -3
- qiskit/qasm2/parse.py +46 -2
- qiskit/qasm3/__init__.py +1 -0
- qiskit/qasm3/ast.py +123 -15
- qiskit/qasm3/exporter.py +103 -77
- qiskit/qobj/converters/pulse_instruction.py +6 -4
- qiskit/qpy/__init__.py +181 -0
- qiskit/qpy/binary_io/circuits.py +20 -5
- qiskit/qpy/binary_io/schedules.py +3 -4
- qiskit/qpy/binary_io/value.py +310 -13
- qiskit/qpy/common.py +46 -2
- qiskit/qpy/formats.py +7 -0
- qiskit/qpy/interface.py +40 -4
- qiskit/quantum_info/__init__.py +4 -0
- qiskit/quantum_info/operators/channel/transformations.py +28 -21
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +54 -8
- qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
- qiskit/quantum_info/states/densitymatrix.py +5 -5
- qiskit/quantum_info/states/stabilizerstate.py +1 -1
- qiskit/quantum_info/states/statevector.py +6 -6
- qiskit/result/mitigation/base_readout_mitigator.py +1 -1
- qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
- qiskit/result/mitigation/local_readout_mitigator.py +9 -1
- qiskit/result/mitigation/utils.py +57 -0
- qiskit/scheduler/config.py +2 -0
- qiskit/scheduler/methods/basic.py +3 -0
- qiskit/scheduler/schedule_circuit.py +2 -0
- qiskit/scheduler/sequence.py +2 -0
- qiskit/synthesis/__init__.py +25 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
- qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
- qiskit/synthesis/evolution/__init__.py +1 -0
- qiskit/synthesis/evolution/lie_trotter.py +16 -42
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +165 -238
- qiskit/synthesis/evolution/qdrift.py +36 -29
- qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/qft/qft_decompose_full.py +19 -1
- qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +21 -14
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +9 -565
- qiskit/transpiler/passes/basis/decompose.py +45 -12
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
- qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
- qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
- qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
- qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
- qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
- qiskit/transpiler/passes/scheduling/alap.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
- qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
- qiskit/transpiler/passes/utils/gate_direction.py +12 -275
- qiskit/transpiler/passes/utils/gates_basis.py +7 -30
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
- qiskit/transpiler/passmanager_config.py +22 -4
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
- qiskit/transpiler/preset_passmanagers/common.py +5 -3
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +74 -16
- qiskit/utils/deprecate_pulse.py +119 -0
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +3 -2
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +3 -14
- qiskit/visualization/pulse_v2/interface.py +3 -1
- qiskit/visualization/timeline/core.py +25 -2
- qiskit/visualization/timeline/interface.py +12 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
- qiskit/synthesis/two_qubit/weyl.py +0 -97
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
qiskit/qasm3/ast.py
CHANGED
@@ -15,12 +15,14 @@
|
|
15
15
|
"""QASM3 AST Nodes"""
|
16
16
|
|
17
17
|
import enum
|
18
|
-
from typing import Optional, List, Union, Iterable, Tuple
|
18
|
+
from typing import Optional, List, Union, Iterable, Tuple, Sequence
|
19
19
|
|
20
20
|
|
21
21
|
class ASTNode:
|
22
22
|
"""Base abstract class for AST nodes"""
|
23
23
|
|
24
|
+
__slots__ = ()
|
25
|
+
|
24
26
|
|
25
27
|
class Statement(ASTNode):
|
26
28
|
"""
|
@@ -35,6 +37,8 @@ class Statement(ASTNode):
|
|
35
37
|
| quantumStatement
|
36
38
|
"""
|
37
39
|
|
40
|
+
__slots__ = ()
|
41
|
+
|
38
42
|
|
39
43
|
class Pragma(ASTNode):
|
40
44
|
"""
|
@@ -42,6 +46,8 @@ class Pragma(ASTNode):
|
|
42
46
|
: '#pragma' LBRACE statement* RBRACE // match any valid openqasm statement
|
43
47
|
"""
|
44
48
|
|
49
|
+
__slots__ = ("content",)
|
50
|
+
|
45
51
|
def __init__(self, content):
|
46
52
|
self.content = content
|
47
53
|
|
@@ -52,6 +58,8 @@ class CalibrationGrammarDeclaration(Statement):
|
|
52
58
|
: 'defcalgrammar' calibrationGrammar SEMICOLON
|
53
59
|
"""
|
54
60
|
|
61
|
+
__slots__ = ("name",)
|
62
|
+
|
55
63
|
def __init__(self, name):
|
56
64
|
self.name = name
|
57
65
|
|
@@ -62,9 +70,11 @@ class Program(ASTNode):
|
|
62
70
|
: header (globalStatement | statement)*
|
63
71
|
"""
|
64
72
|
|
65
|
-
|
73
|
+
__slots__ = ("header", "statements")
|
74
|
+
|
75
|
+
def __init__(self, header, statements=()):
|
66
76
|
self.header = header
|
67
|
-
self.statements = statements
|
77
|
+
self.statements = statements
|
68
78
|
|
69
79
|
|
70
80
|
class Header(ASTNode):
|
@@ -73,6 +83,8 @@ class Header(ASTNode):
|
|
73
83
|
: version? include*
|
74
84
|
"""
|
75
85
|
|
86
|
+
__slots__ = ("version", "includes")
|
87
|
+
|
76
88
|
def __init__(self, version, includes):
|
77
89
|
self.version = version
|
78
90
|
self.includes = includes
|
@@ -84,6 +96,8 @@ class Include(ASTNode):
|
|
84
96
|
: 'include' StringLiteral SEMICOLON
|
85
97
|
"""
|
86
98
|
|
99
|
+
__slots__ = ("filename",)
|
100
|
+
|
87
101
|
def __init__(self, filename):
|
88
102
|
self.filename = filename
|
89
103
|
|
@@ -94,6 +108,8 @@ class Version(ASTNode):
|
|
94
108
|
: 'OPENQASM'(Integer | RealNumber) SEMICOLON
|
95
109
|
"""
|
96
110
|
|
111
|
+
__slots__ = ("version_number",)
|
112
|
+
|
97
113
|
def __init__(self, version_number):
|
98
114
|
self.version_number = version_number
|
99
115
|
|
@@ -108,10 +124,14 @@ class QuantumInstruction(ASTNode):
|
|
108
124
|
| quantumBarrier
|
109
125
|
"""
|
110
126
|
|
127
|
+
__slots__ = ()
|
128
|
+
|
111
129
|
|
112
130
|
class ClassicalType(ASTNode):
|
113
131
|
"""Information about a classical type. This is just an abstract base for inheritance tests."""
|
114
132
|
|
133
|
+
__slots__ = ()
|
134
|
+
|
115
135
|
|
116
136
|
class FloatType(ClassicalType, enum.Enum):
|
117
137
|
"""Allowed values for the width of floating-point types."""
|
@@ -126,10 +146,14 @@ class FloatType(ClassicalType, enum.Enum):
|
|
126
146
|
class BoolType(ClassicalType):
|
127
147
|
"""Type information for a Boolean."""
|
128
148
|
|
149
|
+
__slots__ = ()
|
150
|
+
|
129
151
|
|
130
152
|
class IntType(ClassicalType):
|
131
153
|
"""Type information for a signed integer."""
|
132
154
|
|
155
|
+
__slots__ = ("size",)
|
156
|
+
|
133
157
|
def __init__(self, size: Optional[int] = None):
|
134
158
|
self.size = size
|
135
159
|
|
@@ -137,6 +161,8 @@ class IntType(ClassicalType):
|
|
137
161
|
class UintType(ClassicalType):
|
138
162
|
"""Type information for an unsigned integer."""
|
139
163
|
|
164
|
+
__slots__ = ("size",)
|
165
|
+
|
140
166
|
def __init__(self, size: Optional[int] = None):
|
141
167
|
self.size = size
|
142
168
|
|
@@ -144,19 +170,25 @@ class UintType(ClassicalType):
|
|
144
170
|
class BitType(ClassicalType):
|
145
171
|
"""Type information for a single bit."""
|
146
172
|
|
173
|
+
__slots__ = ()
|
174
|
+
|
147
175
|
|
148
176
|
class BitArrayType(ClassicalType):
|
149
177
|
"""Type information for a sized number of classical bits."""
|
150
178
|
|
179
|
+
__slots__ = ("size",)
|
180
|
+
|
151
181
|
def __init__(self, size: int):
|
152
182
|
self.size = size
|
153
183
|
|
154
184
|
|
155
185
|
class Expression(ASTNode):
|
156
|
-
|
186
|
+
__slots__ = ()
|
157
187
|
|
158
188
|
|
159
189
|
class StringifyAndPray(Expression):
|
190
|
+
__slots__ = ("obj",)
|
191
|
+
|
160
192
|
# This is not a real AST node, yet is somehow very common. It's used when there are
|
161
193
|
# `ParameterExpression` instances; instead of actually visiting the Sympy expression tree into
|
162
194
|
# an OQ3 AST, we just convert it to a string, cross our fingers, and hope.
|
@@ -165,6 +197,8 @@ class StringifyAndPray(Expression):
|
|
165
197
|
|
166
198
|
|
167
199
|
class Range(Expression):
|
200
|
+
__slots__ = ("start", "step", "end")
|
201
|
+
|
168
202
|
def __init__(
|
169
203
|
self,
|
170
204
|
start: Optional[Expression] = None,
|
@@ -177,6 +211,8 @@ class Range(Expression):
|
|
177
211
|
|
178
212
|
|
179
213
|
class Identifier(Expression):
|
214
|
+
__slots__ = ("string",)
|
215
|
+
|
180
216
|
def __init__(self, string):
|
181
217
|
self.string = string
|
182
218
|
|
@@ -184,6 +220,8 @@ class Identifier(Expression):
|
|
184
220
|
class SubscriptedIdentifier(Identifier):
|
185
221
|
"""An identifier with subscripted access."""
|
186
222
|
|
223
|
+
__slots__ = ("subscript",)
|
224
|
+
|
187
225
|
def __init__(self, string: str, subscript: Union[Range, Expression]):
|
188
226
|
super().__init__(string)
|
189
227
|
self.subscript = subscript
|
@@ -198,16 +236,22 @@ class Constant(Expression, enum.Enum):
|
|
198
236
|
|
199
237
|
|
200
238
|
class IntegerLiteral(Expression):
|
239
|
+
__slots__ = ("value",)
|
240
|
+
|
201
241
|
def __init__(self, value):
|
202
242
|
self.value = value
|
203
243
|
|
204
244
|
|
205
245
|
class BooleanLiteral(Expression):
|
246
|
+
__slots__ = ("value",)
|
247
|
+
|
206
248
|
def __init__(self, value):
|
207
249
|
self.value = value
|
208
250
|
|
209
251
|
|
210
252
|
class BitstringLiteral(Expression):
|
253
|
+
__slots__ = ("value", "width")
|
254
|
+
|
211
255
|
def __init__(self, value, width):
|
212
256
|
self.value = value
|
213
257
|
self.width = width
|
@@ -224,12 +268,16 @@ class DurationUnit(enum.Enum):
|
|
224
268
|
|
225
269
|
|
226
270
|
class DurationLiteral(Expression):
|
271
|
+
__slots__ = ("value", "unit")
|
272
|
+
|
227
273
|
def __init__(self, value: float, unit: DurationUnit):
|
228
274
|
self.value = value
|
229
275
|
self.unit = unit
|
230
276
|
|
231
277
|
|
232
278
|
class Unary(Expression):
|
279
|
+
__slots__ = ("op", "operand")
|
280
|
+
|
233
281
|
class Op(enum.Enum):
|
234
282
|
LOGIC_NOT = "!"
|
235
283
|
BIT_NOT = "~"
|
@@ -240,6 +288,8 @@ class Unary(Expression):
|
|
240
288
|
|
241
289
|
|
242
290
|
class Binary(Expression):
|
291
|
+
__slots__ = ("op", "left", "right")
|
292
|
+
|
243
293
|
class Op(enum.Enum):
|
244
294
|
BIT_AND = "&"
|
245
295
|
BIT_OR = "|"
|
@@ -262,12 +312,16 @@ class Binary(Expression):
|
|
262
312
|
|
263
313
|
|
264
314
|
class Cast(Expression):
|
315
|
+
__slots__ = ("type", "operand")
|
316
|
+
|
265
317
|
def __init__(self, type: ClassicalType, operand: Expression):
|
266
318
|
self.type = type
|
267
319
|
self.operand = operand
|
268
320
|
|
269
321
|
|
270
322
|
class Index(Expression):
|
323
|
+
__slots__ = ("target", "index")
|
324
|
+
|
271
325
|
def __init__(self, target: Expression, index: Expression):
|
272
326
|
self.target = target
|
273
327
|
self.index = index
|
@@ -280,6 +334,8 @@ class IndexSet(ASTNode):
|
|
280
334
|
{ Expression (, Expression)* }
|
281
335
|
"""
|
282
336
|
|
337
|
+
__slots__ = ("values",)
|
338
|
+
|
283
339
|
def __init__(self, values: List[Expression]):
|
284
340
|
self.values = values
|
285
341
|
|
@@ -290,6 +346,8 @@ class QuantumMeasurement(ASTNode):
|
|
290
346
|
: 'measure' indexIdentifierList
|
291
347
|
"""
|
292
348
|
|
349
|
+
__slots__ = ("identifierList",)
|
350
|
+
|
293
351
|
def __init__(self, identifierList: List[Identifier]):
|
294
352
|
self.identifierList = identifierList
|
295
353
|
|
@@ -301,6 +359,8 @@ class QuantumMeasurementAssignment(Statement):
|
|
301
359
|
| indexIdentifier EQUALS quantumMeasurement # eg: bits = measure qubits;
|
302
360
|
"""
|
303
361
|
|
362
|
+
__slots__ = ("identifier", "quantumMeasurement")
|
363
|
+
|
304
364
|
def __init__(self, identifier: Identifier, quantumMeasurement: QuantumMeasurement):
|
305
365
|
self.identifier = identifier
|
306
366
|
self.quantumMeasurement = quantumMeasurement
|
@@ -312,6 +372,8 @@ class Designator(ASTNode):
|
|
312
372
|
: LBRACKET expression RBRACKET
|
313
373
|
"""
|
314
374
|
|
375
|
+
__slots__ = ("expression",)
|
376
|
+
|
315
377
|
def __init__(self, expression: Expression):
|
316
378
|
self.expression = expression
|
317
379
|
|
@@ -319,6 +381,8 @@ class Designator(ASTNode):
|
|
319
381
|
class ClassicalDeclaration(Statement):
|
320
382
|
"""Declaration of a classical type, optionally initializing it to a value."""
|
321
383
|
|
384
|
+
__slots__ = ("type", "identifier", "initializer")
|
385
|
+
|
322
386
|
def __init__(self, type_: ClassicalType, identifier: Identifier, initializer=None):
|
323
387
|
self.type = type_
|
324
388
|
self.identifier = identifier
|
@@ -328,6 +392,8 @@ class ClassicalDeclaration(Statement):
|
|
328
392
|
class AssignmentStatement(Statement):
|
329
393
|
"""Assignment of an expression to an l-value."""
|
330
394
|
|
395
|
+
__slots__ = ("lvalue", "rvalue")
|
396
|
+
|
331
397
|
def __init__(self, lvalue: SubscriptedIdentifier, rvalue: Expression):
|
332
398
|
self.lvalue = lvalue
|
333
399
|
self.rvalue = rvalue
|
@@ -340,6 +406,8 @@ class QuantumDeclaration(ASTNode):
|
|
340
406
|
'qubit' designator? Identifier
|
341
407
|
"""
|
342
408
|
|
409
|
+
__slots__ = ("identifier", "designator")
|
410
|
+
|
343
411
|
def __init__(self, identifier: Identifier, designator=None):
|
344
412
|
self.identifier = identifier
|
345
413
|
self.designator = designator
|
@@ -351,6 +419,8 @@ class AliasStatement(ASTNode):
|
|
351
419
|
: 'let' Identifier EQUALS indexIdentifier SEMICOLON
|
352
420
|
"""
|
353
421
|
|
422
|
+
__slots__ = ("identifier", "value")
|
423
|
+
|
354
424
|
def __init__(self, identifier: Identifier, value: Expression):
|
355
425
|
self.identifier = identifier
|
356
426
|
self.value = value
|
@@ -368,6 +438,8 @@ class QuantumGateModifierName(enum.Enum):
|
|
368
438
|
class QuantumGateModifier(ASTNode):
|
369
439
|
"""A modifier of a gate. For example, in ``ctrl @ x $0``, the ``ctrl @`` is the modifier."""
|
370
440
|
|
441
|
+
__slots__ = ("modifier", "argument")
|
442
|
+
|
371
443
|
def __init__(self, modifier: QuantumGateModifierName, argument: Optional[Expression] = None):
|
372
444
|
self.modifier = modifier
|
373
445
|
self.argument = argument
|
@@ -379,17 +451,19 @@ class QuantumGateCall(QuantumInstruction):
|
|
379
451
|
: quantumGateModifier* quantumGateName ( LPAREN expressionList? RPAREN )? indexIdentifierList
|
380
452
|
"""
|
381
453
|
|
454
|
+
__slots__ = ("quantumGateName", "indexIdentifierList", "parameters", "modifiers")
|
455
|
+
|
382
456
|
def __init__(
|
383
457
|
self,
|
384
458
|
quantumGateName: Identifier,
|
385
459
|
indexIdentifierList: List[Identifier],
|
386
|
-
parameters:
|
387
|
-
modifiers:
|
460
|
+
parameters: Sequence[Expression] = (),
|
461
|
+
modifiers: Sequence[QuantumGateModifier] = (),
|
388
462
|
):
|
389
463
|
self.quantumGateName = quantumGateName
|
390
464
|
self.indexIdentifierList = indexIdentifierList
|
391
|
-
self.parameters = parameters
|
392
|
-
self.modifiers = modifiers
|
465
|
+
self.parameters = parameters
|
466
|
+
self.modifiers = modifiers
|
393
467
|
|
394
468
|
|
395
469
|
class QuantumBarrier(QuantumInstruction):
|
@@ -398,6 +472,8 @@ class QuantumBarrier(QuantumInstruction):
|
|
398
472
|
: 'barrier' indexIdentifierList
|
399
473
|
"""
|
400
474
|
|
475
|
+
__slots__ = ("indexIdentifierList",)
|
476
|
+
|
401
477
|
def __init__(self, indexIdentifierList: List[Identifier]):
|
402
478
|
self.indexIdentifierList = indexIdentifierList
|
403
479
|
|
@@ -405,6 +481,8 @@ class QuantumBarrier(QuantumInstruction):
|
|
405
481
|
class QuantumReset(QuantumInstruction):
|
406
482
|
"""A built-in ``reset q0;`` statement."""
|
407
483
|
|
484
|
+
__slots__ = ("identifier",)
|
485
|
+
|
408
486
|
def __init__(self, identifier: Identifier):
|
409
487
|
self.identifier = identifier
|
410
488
|
|
@@ -412,6 +490,8 @@ class QuantumReset(QuantumInstruction):
|
|
412
490
|
class QuantumDelay(QuantumInstruction):
|
413
491
|
"""A built-in ``delay[duration] q0;`` statement."""
|
414
492
|
|
493
|
+
__slots__ = ("duration", "qubits")
|
494
|
+
|
415
495
|
def __init__(self, duration: Expression, qubits: List[Identifier]):
|
416
496
|
self.duration = duration
|
417
497
|
self.qubits = qubits
|
@@ -424,6 +504,8 @@ class ProgramBlock(ASTNode):
|
|
424
504
|
| LBRACE(statement | controlDirective) * RBRACE
|
425
505
|
"""
|
426
506
|
|
507
|
+
__slots__ = ("statements",)
|
508
|
+
|
427
509
|
def __init__(self, statements: List[Statement]):
|
428
510
|
self.statements = statements
|
429
511
|
|
@@ -434,6 +516,8 @@ class ReturnStatement(ASTNode): # TODO probably should be a subclass of Control
|
|
434
516
|
: 'return' ( expression | quantumMeasurement )? SEMICOLON;
|
435
517
|
"""
|
436
518
|
|
519
|
+
__slots__ = ("expression",)
|
520
|
+
|
437
521
|
def __init__(self, expression=None):
|
438
522
|
self.expression = expression
|
439
523
|
|
@@ -444,7 +528,7 @@ class QuantumBlock(ProgramBlock):
|
|
444
528
|
: LBRACE ( quantumStatement | quantumLoop )* RBRACE
|
445
529
|
"""
|
446
530
|
|
447
|
-
|
531
|
+
__slots__ = ()
|
448
532
|
|
449
533
|
|
450
534
|
class SubroutineBlock(ProgramBlock):
|
@@ -453,7 +537,7 @@ class SubroutineBlock(ProgramBlock):
|
|
453
537
|
: LBRACE statement* returnStatement? RBRACE
|
454
538
|
"""
|
455
539
|
|
456
|
-
|
540
|
+
__slots__ = ()
|
457
541
|
|
458
542
|
|
459
543
|
class QuantumGateDefinition(Statement):
|
@@ -462,6 +546,8 @@ class QuantumGateDefinition(Statement):
|
|
462
546
|
: 'gate' quantumGateSignature quantumBlock
|
463
547
|
"""
|
464
548
|
|
549
|
+
__slots__ = ("name", "params", "qubits", "body")
|
550
|
+
|
465
551
|
def __init__(
|
466
552
|
self,
|
467
553
|
name: Identifier,
|
@@ -482,14 +568,16 @@ class SubroutineDefinition(Statement):
|
|
482
568
|
returnSignature? subroutineBlock
|
483
569
|
"""
|
484
570
|
|
571
|
+
__slots__ = ("identifier", "arguments", "subroutineBlock")
|
572
|
+
|
485
573
|
def __init__(
|
486
574
|
self,
|
487
575
|
identifier: Identifier,
|
488
576
|
subroutineBlock: SubroutineBlock,
|
489
|
-
arguments=
|
577
|
+
arguments=(), # [ClassicalArgument]
|
490
578
|
):
|
491
579
|
self.identifier = identifier
|
492
|
-
self.arguments = arguments
|
580
|
+
self.arguments = arguments
|
493
581
|
self.subroutineBlock = subroutineBlock
|
494
582
|
|
495
583
|
|
@@ -499,7 +587,7 @@ class CalibrationArgument(ASTNode):
|
|
499
587
|
: classicalArgumentList | expressionList
|
500
588
|
"""
|
501
589
|
|
502
|
-
|
590
|
+
__slots__ = ()
|
503
591
|
|
504
592
|
|
505
593
|
class CalibrationDefinition(Statement):
|
@@ -511,15 +599,17 @@ class CalibrationDefinition(Statement):
|
|
511
599
|
;
|
512
600
|
"""
|
513
601
|
|
602
|
+
__slots__ = ("name", "identifierList", "calibrationArgumentList")
|
603
|
+
|
514
604
|
def __init__(
|
515
605
|
self,
|
516
606
|
name: Identifier,
|
517
607
|
identifierList: List[Identifier],
|
518
|
-
calibrationArgumentList:
|
608
|
+
calibrationArgumentList: Sequence[CalibrationArgument] = (),
|
519
609
|
):
|
520
610
|
self.name = name
|
521
611
|
self.identifierList = identifierList
|
522
|
-
self.calibrationArgumentList = calibrationArgumentList
|
612
|
+
self.calibrationArgumentList = calibrationArgumentList
|
523
613
|
|
524
614
|
|
525
615
|
class BranchingStatement(Statement):
|
@@ -528,6 +618,8 @@ class BranchingStatement(Statement):
|
|
528
618
|
: 'if' LPAREN booleanExpression RPAREN programBlock ( 'else' programBlock )?
|
529
619
|
"""
|
530
620
|
|
621
|
+
__slots__ = ("condition", "true_body", "false_body")
|
622
|
+
|
531
623
|
def __init__(self, condition: Expression, true_body: ProgramBlock, false_body=None):
|
532
624
|
self.condition = condition
|
533
625
|
self.true_body = true_body
|
@@ -547,6 +639,8 @@ class ForLoopStatement(Statement):
|
|
547
639
|
| "[" Range "]"
|
548
640
|
"""
|
549
641
|
|
642
|
+
__slots__ = ("indexset", "parameter", "body")
|
643
|
+
|
550
644
|
def __init__(
|
551
645
|
self,
|
552
646
|
indexset: Union[Identifier, IndexSet, Range],
|
@@ -567,6 +661,8 @@ class WhileLoopStatement(Statement):
|
|
567
661
|
WhileLoop: "while" "(" Expression ")" ProgramBlock
|
568
662
|
"""
|
569
663
|
|
664
|
+
__slots__ = ("condition", "body")
|
665
|
+
|
570
666
|
def __init__(self, condition: Expression, body: ProgramBlock):
|
571
667
|
self.condition = condition
|
572
668
|
self.body = body
|
@@ -575,10 +671,14 @@ class WhileLoopStatement(Statement):
|
|
575
671
|
class BreakStatement(Statement):
|
576
672
|
"""AST node for ``break`` statements. Has no associated information."""
|
577
673
|
|
674
|
+
__slots__ = ()
|
675
|
+
|
578
676
|
|
579
677
|
class ContinueStatement(Statement):
|
580
678
|
"""AST node for ``continue`` statements. Has no associated information."""
|
581
679
|
|
680
|
+
__slots__ = ()
|
681
|
+
|
582
682
|
|
583
683
|
class IOModifier(enum.Enum):
|
584
684
|
"""IO Modifier object"""
|
@@ -590,6 +690,8 @@ class IOModifier(enum.Enum):
|
|
590
690
|
class IODeclaration(ClassicalDeclaration):
|
591
691
|
"""A declaration of an IO variable."""
|
592
692
|
|
693
|
+
__slots__ = ("modifier",)
|
694
|
+
|
593
695
|
def __init__(self, modifier: IOModifier, type_: ClassicalType, identifier: Identifier):
|
594
696
|
super().__init__(type_, identifier)
|
595
697
|
self.modifier = modifier
|
@@ -598,6 +700,8 @@ class IODeclaration(ClassicalDeclaration):
|
|
598
700
|
class DefaultCase(Expression):
|
599
701
|
"""An object representing the `default` special label in switch statements."""
|
600
702
|
|
703
|
+
__slots__ = ()
|
704
|
+
|
601
705
|
|
602
706
|
class SwitchStatementPreview(Statement):
|
603
707
|
"""AST node for the proposed 'switch-case' extension to OpenQASM 3, before the syntax was
|
@@ -605,6 +709,8 @@ class SwitchStatementPreview(Statement):
|
|
605
709
|
|
606
710
|
The stabilized form of the syntax instead uses :class:`.SwitchStatement`."""
|
607
711
|
|
712
|
+
__slots__ = ("target", "cases")
|
713
|
+
|
608
714
|
def __init__(
|
609
715
|
self, target: Expression, cases: Iterable[Tuple[Iterable[Expression], ProgramBlock]]
|
610
716
|
):
|
@@ -619,6 +725,8 @@ class SwitchStatement(Statement):
|
|
619
725
|
cannot be joined with other cases (even though that's meaningless, the V1 syntax permitted it).
|
620
726
|
"""
|
621
727
|
|
728
|
+
__slots__ = ("target", "cases", "default")
|
729
|
+
|
622
730
|
def __init__(
|
623
731
|
self,
|
624
732
|
target: Expression,
|