qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__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 +1 -20
- qiskit/_accelerate.pyd +0 -0
- qiskit/assembler/assemble_schedules.py +0 -2
- qiskit/circuit/__init__.py +1 -44
- qiskit/circuit/_standard_gates_commutations.py +0 -585
- qiskit/circuit/barrier.py +0 -2
- qiskit/circuit/controlflow/builder.py +3 -3
- qiskit/circuit/controlflow/if_else.py +5 -13
- qiskit/circuit/controlflow/while_loop.py +2 -10
- qiskit/circuit/delay.py +3 -20
- qiskit/circuit/equivalence.py +214 -13
- qiskit/circuit/gate.py +1 -3
- qiskit/circuit/instruction.py +11 -32
- qiskit/circuit/instructionset.py +0 -2
- qiskit/circuit/library/__init__.py +14 -110
- qiskit/circuit/library/arithmetic/__init__.py +2 -9
- qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
- qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +38 -20
- qiskit/circuit/library/blueprintcircuit.py +0 -64
- qiskit/circuit/library/boolean_logic/__init__.py +4 -4
- qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
- qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
- qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
- qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
- qiskit/circuit/library/data_preparation/__init__.py +3 -6
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
- qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +11 -72
- qiskit/circuit/library/generalized_gates/__init__.py +1 -1
- qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
- qiskit/circuit/library/generalized_gates/gms.py +14 -67
- 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 +6 -12
- qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
- qiskit/circuit/library/generalized_gates/permutation.py +6 -8
- qiskit/circuit/library/generalized_gates/rv.py +9 -8
- qiskit/circuit/library/graph_state.py +10 -93
- qiskit/circuit/library/grover_operator.py +2 -270
- qiskit/circuit/library/hidden_linear_function.py +20 -83
- qiskit/circuit/library/iqp.py +20 -99
- qiskit/circuit/library/n_local/__init__.py +7 -19
- qiskit/circuit/library/n_local/efficient_su2.py +5 -118
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
- qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
- qiskit/circuit/library/n_local/n_local.py +5 -406
- qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
- qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
- qiskit/circuit/library/n_local/two_local.py +7 -14
- qiskit/circuit/library/overlap.py +26 -91
- qiskit/circuit/library/pauli_evolution.py +15 -17
- qiskit/circuit/library/phase_estimation.py +4 -80
- qiskit/circuit/library/quantum_volume.py +20 -72
- qiskit/circuit/library/standard_gates/__init__.py +1 -20
- qiskit/circuit/library/standard_gates/dcx.py +1 -2
- qiskit/circuit/library/standard_gates/ecr.py +2 -2
- qiskit/circuit/library/standard_gates/h.py +3 -4
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +2 -2
- qiskit/circuit/library/standard_gates/p.py +12 -20
- qiskit/circuit/library/standard_gates/r.py +1 -1
- qiskit/circuit/library/standard_gates/rx.py +3 -4
- qiskit/circuit/library/standard_gates/rxx.py +2 -2
- qiskit/circuit/library/standard_gates/ry.py +3 -4
- qiskit/circuit/library/standard_gates/ryy.py +2 -2
- qiskit/circuit/library/standard_gates/rz.py +12 -13
- 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 +3 -4
- qiskit/circuit/library/standard_gates/t.py +2 -2
- qiskit/circuit/library/standard_gates/u.py +3 -11
- qiskit/circuit/library/standard_gates/u1.py +15 -65
- qiskit/circuit/library/standard_gates/u2.py +1 -4
- qiskit/circuit/library/standard_gates/u3.py +3 -31
- qiskit/circuit/library/standard_gates/x.py +5 -7
- 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 +3 -4
- qiskit/circuit/library/standard_gates/z.py +3 -3
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
- qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
- qiskit/circuit/parameter.py +0 -4
- qiskit/circuit/parameterexpression.py +34 -167
- qiskit/circuit/quantumcircuit.py +126 -162
- qiskit/circuit/singleton.py +0 -2
- qiskit/circuit/store.py +0 -2
- qiskit/compiler/assembler.py +4 -17
- qiskit/compiler/scheduler.py +0 -2
- qiskit/compiler/sequencer.py +0 -2
- qiskit/compiler/transpiler.py +26 -81
- 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 +5 -7
- qiskit/converters/dag_to_dagdependency.py +1 -1
- qiskit/converters/dag_to_dagdependency_v2.py +1 -1
- qiskit/converters/dagdependency_to_circuit.py +1 -5
- qiskit/converters/dagdependency_to_dag.py +1 -6
- qiskit/dagcircuit/collect_blocks.py +3 -3
- qiskit/dagcircuit/dagdependency.py +5 -18
- qiskit/dagcircuit/dagdependency_v2.py +1 -1
- qiskit/dagcircuit/dagnode.py +2 -2
- qiskit/passmanager/__init__.py +2 -2
- qiskit/primitives/backend_estimator.py +2 -5
- qiskit/primitives/backend_sampler_v2.py +18 -61
- qiskit/primitives/base/base_estimator.py +2 -2
- qiskit/primitives/containers/data_bin.py +1 -9
- qiskit/primitives/statevector_sampler.py +1 -1
- qiskit/primitives/utils.py +1 -1
- qiskit/providers/__init__.py +3 -3
- qiskit/providers/backend.py +1 -12
- qiskit/providers/backend_compat.py +3 -23
- qiskit/providers/basic_provider/basic_simulator.py +2 -12
- qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
- qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
- qiskit/providers/models/pulsedefaults.py +0 -2
- qiskit/pulse/builder.py +18 -59
- qiskit/pulse/calibration_entries.py +1 -4
- qiskit/pulse/channels.py +0 -2
- qiskit/pulse/exceptions.py +0 -2
- qiskit/pulse/instruction_schedule_map.py +6 -21
- qiskit/pulse/instructions/acquire.py +0 -2
- qiskit/pulse/instructions/delay.py +0 -2
- qiskit/pulse/instructions/directives.py +0 -8
- qiskit/pulse/instructions/frequency.py +0 -3
- qiskit/pulse/instructions/instruction.py +0 -2
- qiskit/pulse/instructions/phase.py +0 -3
- qiskit/pulse/instructions/play.py +0 -2
- qiskit/pulse/instructions/reference.py +0 -2
- qiskit/pulse/instructions/snapshot.py +0 -2
- qiskit/pulse/library/pulse.py +0 -2
- qiskit/pulse/library/symbolic_pulses.py +0 -28
- qiskit/pulse/library/waveform.py +0 -2
- qiskit/pulse/macros.py +1 -1
- qiskit/pulse/schedule.py +13 -12
- qiskit/pulse/transforms/alignments.py +3 -5
- qiskit/pulse/transforms/dag.py +0 -7
- qiskit/qasm2/export.py +3 -5
- qiskit/qasm2/parse.py +2 -46
- qiskit/qasm3/__init__.py +0 -1
- qiskit/qasm3/ast.py +15 -123
- qiskit/qasm3/exporter.py +77 -103
- qiskit/qobj/converters/pulse_instruction.py +4 -6
- qiskit/qpy/__init__.py +0 -181
- qiskit/qpy/binary_io/circuits.py +5 -20
- qiskit/qpy/binary_io/schedules.py +4 -3
- qiskit/qpy/binary_io/value.py +13 -310
- qiskit/qpy/common.py +2 -46
- qiskit/qpy/formats.py +0 -7
- qiskit/qpy/interface.py +4 -40
- qiskit/quantum_info/__init__.py +0 -4
- qiskit/quantum_info/operators/channel/transformations.py +21 -28
- qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
- qiskit/quantum_info/operators/operator.py +8 -54
- qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
- 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 +0 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
- 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 +1 -9
- qiskit/result/mitigation/local_readout_mitigator.py +1 -9
- qiskit/result/mitigation/utils.py +0 -57
- qiskit/scheduler/config.py +0 -2
- qiskit/scheduler/methods/basic.py +0 -3
- qiskit/scheduler/schedule_circuit.py +0 -2
- qiskit/scheduler/sequence.py +0 -2
- qiskit/synthesis/__init__.py +0 -25
- qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
- qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
- qiskit/synthesis/evolution/__init__.py +0 -1
- qiskit/synthesis/evolution/lie_trotter.py +42 -16
- qiskit/synthesis/evolution/product_formula.py +238 -165
- qiskit/synthesis/evolution/qdrift.py +29 -36
- qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
- qiskit/synthesis/multi_controlled/__init__.py +0 -1
- qiskit/synthesis/qft/qft_decompose_full.py +1 -19
- qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/unitary/qsd.py +5 -5
- qiskit/transpiler/__init__.py +14 -21
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/passes/__init__.py +0 -2
- qiskit/transpiler/passes/basis/basis_translator.py +565 -9
- qiskit/transpiler/passes/basis/decompose.py +12 -45
- 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 +2 -4
- qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
- qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
- qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
- qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
- qiskit/transpiler/passes/optimization/__init__.py +0 -1
- qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
- 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 +131 -48
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
- qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
- 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/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 +3 -7
- 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 +0 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
- qiskit/transpiler/passes/scheduling/asap.py +1 -1
- qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
- qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
- qiskit/transpiler/passes/utils/gate_direction.py +275 -12
- qiskit/transpiler/passes/utils/gates_basis.py +30 -7
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
- qiskit/transpiler/passmanager_config.py +4 -22
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
- qiskit/transpiler/preset_passmanagers/common.py +3 -5
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
- qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
- qiskit/transpiler/target.py +16 -74
- qiskit/visualization/circuit/_utils.py +2 -2
- qiskit/visualization/circuit/circuit_visualization.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +1 -1
- qiskit/visualization/dag_visualization.py +1 -1
- qiskit/visualization/pass_manager_visualization.py +14 -3
- qiskit/visualization/pulse_v2/interface.py +1 -3
- qiskit/visualization/timeline/core.py +2 -25
- qiskit/visualization/timeline/interface.py +0 -12
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
- qiskit/circuit/twirling.py +0 -145
- qiskit/synthesis/arithmetic/__init__.py +0 -16
- qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
- qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
- qiskit/synthesis/evolution/pauli_network.py +0 -80
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
- qiskit/utils/deprecate_pulse.py +0 -119
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
qiskit/circuit/barrier.py
CHANGED
@@ -19,7 +19,6 @@ with the :meth:`~qiskit.circuit.QuantumCircuit.barrier` method.
|
|
19
19
|
from __future__ import annotations
|
20
20
|
|
21
21
|
from qiskit.exceptions import QiskitError
|
22
|
-
from qiskit.utils import deprecate_func
|
23
22
|
from .instruction import Instruction
|
24
23
|
|
25
24
|
|
@@ -45,6 +44,5 @@ class Barrier(Instruction):
|
|
45
44
|
"""Special case. Return self."""
|
46
45
|
return Barrier(self.num_qubits)
|
47
46
|
|
48
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
49
47
|
def c_if(self, classical, val):
|
50
48
|
raise QiskitError("Barriers are compiler directives and cannot be conditional.")
|
@@ -284,7 +284,7 @@ class InstructionPlaceholder(Instruction, abc.ABC):
|
|
284
284
|
The same instruction instance that was passed, but mutated to propagate the tracked
|
285
285
|
changes to this class.
|
286
286
|
"""
|
287
|
-
instruction.
|
287
|
+
instruction.condition = self.condition
|
288
288
|
return instruction
|
289
289
|
|
290
290
|
# Provide some better error messages, just in case something goes wrong during development and
|
@@ -639,8 +639,8 @@ class ControlFlowBuilderBlock(CircuitScopeInterface):
|
|
639
639
|
# a register is already present, so we use our own tracking.
|
640
640
|
self.add_register(register)
|
641
641
|
out.add_register(register)
|
642
|
-
if getattr(op, "
|
643
|
-
for register in condition_resources(op.
|
642
|
+
if getattr(op, "condition", None) is not None:
|
643
|
+
for register in condition_resources(op.condition).cregs:
|
644
644
|
if register not in self.registers:
|
645
645
|
self.add_register(register)
|
646
646
|
out.add_register(register)
|
@@ -87,20 +87,12 @@ class IfElseOp(ControlFlowOp):
|
|
87
87
|
|
88
88
|
super().__init__("if_else", num_qubits, num_clbits, [true_body, false_body], label=label)
|
89
89
|
|
90
|
-
self.
|
90
|
+
self.condition = validate_condition(condition)
|
91
91
|
|
92
92
|
@property
|
93
93
|
def params(self):
|
94
94
|
return self._params
|
95
95
|
|
96
|
-
@property
|
97
|
-
def condition(self):
|
98
|
-
return self._condition
|
99
|
-
|
100
|
-
@condition.setter
|
101
|
-
def condition(self, value):
|
102
|
-
self._condition = value
|
103
|
-
|
104
96
|
@params.setter
|
105
97
|
def params(self, parameters):
|
106
98
|
# pylint: disable=cyclic-import
|
@@ -160,7 +152,7 @@ class IfElseOp(ControlFlowOp):
|
|
160
152
|
true_body, false_body = (
|
161
153
|
ablock for ablock, _ in itertools.zip_longest(blocks, range(2), fillvalue=None)
|
162
154
|
)
|
163
|
-
return IfElseOp(self.
|
155
|
+
return IfElseOp(self.condition, true_body, false_body=false_body, label=self.label)
|
164
156
|
|
165
157
|
def c_if(self, classical, val):
|
166
158
|
raise NotImplementedError(
|
@@ -208,7 +200,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
|
|
208
200
|
"if_else", len(self.__resources.qubits), len(self.__resources.clbits), [], label=label
|
209
201
|
)
|
210
202
|
# Set the condition after super().__init__() has initialized it to None.
|
211
|
-
self.
|
203
|
+
self.condition = validate_condition(condition)
|
212
204
|
|
213
205
|
def with_false_block(self, false_block: ControlFlowBuilderBlock) -> "IfElsePlaceholder":
|
214
206
|
"""Return a new placeholder instruction, with the false block set to the given value,
|
@@ -233,7 +225,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
|
|
233
225
|
false_bits = false_block.qubits() | false_block.clbits()
|
234
226
|
true_block.add_bits(false_bits - true_bits)
|
235
227
|
false_block.add_bits(true_bits - false_bits)
|
236
|
-
return type(self)(self.
|
228
|
+
return type(self)(self.condition, true_block, false_block, label=self.label)
|
237
229
|
|
238
230
|
def registers(self):
|
239
231
|
"""Get the registers used by the interior blocks."""
|
@@ -296,7 +288,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
|
|
296
288
|
)
|
297
289
|
return (
|
298
290
|
self._copy_mutable_properties(
|
299
|
-
IfElseOp(self.
|
291
|
+
IfElseOp(self.condition, true_body, false_body, label=self.label)
|
300
292
|
),
|
301
293
|
InstructionResources(
|
302
294
|
qubits=tuple(true_body.qubits),
|
@@ -53,20 +53,12 @@ class WhileLoopOp(ControlFlowOp):
|
|
53
53
|
num_clbits = body.num_clbits
|
54
54
|
|
55
55
|
super().__init__("while_loop", num_qubits, num_clbits, [body], label=label)
|
56
|
-
self.
|
56
|
+
self.condition = validate_condition(condition)
|
57
57
|
|
58
58
|
@property
|
59
59
|
def params(self):
|
60
60
|
return self._params
|
61
61
|
|
62
|
-
@property
|
63
|
-
def condition(self):
|
64
|
-
return self._condition
|
65
|
-
|
66
|
-
@condition.setter
|
67
|
-
def condition(self, value):
|
68
|
-
self._condition = value
|
69
|
-
|
70
62
|
@params.setter
|
71
63
|
def params(self, parameters):
|
72
64
|
# pylint: disable=cyclic-import
|
@@ -96,7 +88,7 @@ class WhileLoopOp(ControlFlowOp):
|
|
96
88
|
|
97
89
|
def replace_blocks(self, blocks):
|
98
90
|
(body,) = blocks
|
99
|
-
return WhileLoopOp(self.
|
91
|
+
return WhileLoopOp(self.condition, body, label=self.label)
|
100
92
|
|
101
93
|
def c_if(self, classical, val):
|
102
94
|
raise NotImplementedError(
|
qiskit/circuit/delay.py
CHANGED
@@ -19,7 +19,6 @@ from qiskit.circuit.instruction import Instruction
|
|
19
19
|
from qiskit.circuit.gate import Gate
|
20
20
|
from qiskit.circuit import _utils
|
21
21
|
from qiskit.circuit.parameterexpression import ParameterExpression
|
22
|
-
from qiskit.utils import deprecate_func
|
23
22
|
|
24
23
|
|
25
24
|
@_utils.with_gate_array(np.eye(2, dtype=complex))
|
@@ -34,12 +33,8 @@ class Delay(Instruction):
|
|
34
33
|
"""
|
35
34
|
if unit not in {"s", "ms", "us", "ns", "ps", "dt"}:
|
36
35
|
raise CircuitError(f"Unknown unit {unit} is specified.")
|
37
|
-
|
38
|
-
|
39
|
-
# remove `unit` and `duration` from the standard instruction model
|
40
|
-
# as it only will exist in `Delay` after that point.
|
41
|
-
self.__unit = unit
|
42
|
-
super().__init__("delay", 1, 0, params=[duration])
|
36
|
+
|
37
|
+
super().__init__("delay", 1, 0, params=[duration], unit=unit)
|
43
38
|
|
44
39
|
broadcast_arguments = Gate.broadcast_arguments
|
45
40
|
|
@@ -47,21 +42,9 @@ class Delay(Instruction):
|
|
47
42
|
"""Special case. Return self."""
|
48
43
|
return self
|
49
44
|
|
50
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
51
45
|
def c_if(self, classical, val):
|
52
46
|
raise CircuitError("Conditional Delay is not yet implemented.")
|
53
47
|
|
54
|
-
@property
|
55
|
-
def unit(self):
|
56
|
-
|
57
|
-
return self.__unit
|
58
|
-
|
59
|
-
@unit.setter
|
60
|
-
def unit(self, value):
|
61
|
-
if value not in {"s", "ms", "us", "ns", "ps", "dt"}:
|
62
|
-
raise CircuitError(f"Unknown unit {value} is specified.")
|
63
|
-
self.__unit = value
|
64
|
-
|
65
48
|
@property
|
66
49
|
def duration(self):
|
67
50
|
"""Get the duration of this delay."""
|
@@ -98,7 +81,7 @@ class Delay(Instruction):
|
|
98
81
|
raise CircuitError(
|
99
82
|
f"Duration for Delay instruction must be positive. Found {parameter}"
|
100
83
|
)
|
101
|
-
if self.
|
84
|
+
if self.unit == "dt":
|
102
85
|
parameter_int = int(parameter)
|
103
86
|
if parameter != parameter_int:
|
104
87
|
raise CircuitError("Integer duration is expected for 'dt' unit.")
|
qiskit/circuit/equivalence.py
CHANGED
@@ -12,24 +12,190 @@
|
|
12
12
|
|
13
13
|
"""Gate equivalence library."""
|
14
14
|
|
15
|
+
import copy
|
16
|
+
from collections import namedtuple
|
17
|
+
|
15
18
|
from rustworkx.visualization import graphviz_draw
|
16
19
|
import rustworkx as rx
|
17
20
|
|
18
|
-
|
19
21
|
from qiskit.exceptions import InvalidFileError
|
20
|
-
from
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
)
|
22
|
+
from .exceptions import CircuitError
|
23
|
+
from .parameter import Parameter
|
24
|
+
from .parameterexpression import ParameterExpression
|
25
|
+
|
26
|
+
Key = namedtuple("Key", ["name", "num_qubits"])
|
27
|
+
Equivalence = namedtuple("Equivalence", ["params", "circuit"]) # Ordered to match Gate.params
|
28
|
+
NodeData = namedtuple("NodeData", ["key", "equivs"])
|
29
|
+
EdgeData = namedtuple("EdgeData", ["index", "num_gates", "rule", "source"])
|
27
30
|
|
28
31
|
|
29
|
-
class EquivalenceLibrary
|
32
|
+
class EquivalenceLibrary:
|
30
33
|
"""A library providing a one-way mapping of Gates to their equivalent
|
31
34
|
implementations as QuantumCircuits."""
|
32
35
|
|
36
|
+
def __init__(self, *, base=None):
|
37
|
+
"""Create a new equivalence library.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
base (Optional[EquivalenceLibrary]): Base equivalence library to
|
41
|
+
be referenced if an entry is not found in this library.
|
42
|
+
"""
|
43
|
+
self._base = base
|
44
|
+
|
45
|
+
if base is None:
|
46
|
+
self._graph = rx.PyDiGraph()
|
47
|
+
self._key_to_node_index = {}
|
48
|
+
# Some unique identifier for rules.
|
49
|
+
self._rule_id = 0
|
50
|
+
else:
|
51
|
+
self._graph = base._graph.copy()
|
52
|
+
self._key_to_node_index = copy.deepcopy(base._key_to_node_index)
|
53
|
+
self._rule_id = base._rule_id
|
54
|
+
|
55
|
+
@property
|
56
|
+
def graph(self) -> rx.PyDiGraph:
|
57
|
+
"""Return graph representing the equivalence library data.
|
58
|
+
|
59
|
+
This property should be treated as read-only as it provides
|
60
|
+
a reference to the internal state of the :class:`~.EquivalenceLibrary` object.
|
61
|
+
If the graph returned by this property is mutated it could corrupt the
|
62
|
+
the contents of the object. If you need to modify the output ``PyDiGraph``
|
63
|
+
be sure to make a copy prior to any modification.
|
64
|
+
|
65
|
+
Returns:
|
66
|
+
PyDiGraph: A graph object with equivalence data in each node.
|
67
|
+
"""
|
68
|
+
return self._graph
|
69
|
+
|
70
|
+
def _set_default_node(self, key):
|
71
|
+
"""Create a new node if key not found"""
|
72
|
+
if key not in self._key_to_node_index:
|
73
|
+
self._key_to_node_index[key] = self._graph.add_node(NodeData(key=key, equivs=[]))
|
74
|
+
return self._key_to_node_index[key]
|
75
|
+
|
76
|
+
def add_equivalence(self, gate, equivalent_circuit):
|
77
|
+
"""Add a new equivalence to the library. Future queries for the Gate
|
78
|
+
will include the given circuit, in addition to all existing equivalences
|
79
|
+
(including those from base).
|
80
|
+
|
81
|
+
Parameterized Gates (those including `qiskit.circuit.Parameters` in their
|
82
|
+
`Gate.params`) can be marked equivalent to parameterized circuits,
|
83
|
+
provided the parameters match.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
gate (Gate): A Gate instance.
|
87
|
+
equivalent_circuit (QuantumCircuit): A circuit equivalently
|
88
|
+
implementing the given Gate.
|
89
|
+
"""
|
90
|
+
|
91
|
+
_raise_if_shape_mismatch(gate, equivalent_circuit)
|
92
|
+
_raise_if_param_mismatch(gate.params, equivalent_circuit.parameters)
|
93
|
+
|
94
|
+
key = Key(name=gate.name, num_qubits=gate.num_qubits)
|
95
|
+
equiv = Equivalence(params=gate.params.copy(), circuit=equivalent_circuit.copy())
|
96
|
+
|
97
|
+
target = self._set_default_node(key)
|
98
|
+
self._graph[target].equivs.append(equiv)
|
99
|
+
|
100
|
+
sources = {
|
101
|
+
Key(name=instruction.operation.name, num_qubits=len(instruction.qubits))
|
102
|
+
for instruction in equivalent_circuit
|
103
|
+
}
|
104
|
+
edges = [
|
105
|
+
(
|
106
|
+
self._set_default_node(source),
|
107
|
+
target,
|
108
|
+
EdgeData(index=self._rule_id, num_gates=len(sources), rule=equiv, source=source),
|
109
|
+
)
|
110
|
+
for source in sources
|
111
|
+
]
|
112
|
+
self._graph.add_edges_from(edges)
|
113
|
+
self._rule_id += 1
|
114
|
+
|
115
|
+
def has_entry(self, gate):
|
116
|
+
"""Check if a library contains any decompositions for gate.
|
117
|
+
|
118
|
+
Args:
|
119
|
+
gate (Gate): A Gate instance.
|
120
|
+
|
121
|
+
Returns:
|
122
|
+
Bool: True if gate has a known decomposition in the library.
|
123
|
+
False otherwise.
|
124
|
+
"""
|
125
|
+
key = Key(name=gate.name, num_qubits=gate.num_qubits)
|
126
|
+
|
127
|
+
return key in self._key_to_node_index
|
128
|
+
|
129
|
+
def set_entry(self, gate, entry):
|
130
|
+
"""Set the equivalence record for a Gate. Future queries for the Gate
|
131
|
+
will return only the circuits provided.
|
132
|
+
|
133
|
+
Parameterized Gates (those including `qiskit.circuit.Parameters` in their
|
134
|
+
`Gate.params`) can be marked equivalent to parameterized circuits,
|
135
|
+
provided the parameters match.
|
136
|
+
|
137
|
+
Args:
|
138
|
+
gate (Gate): A Gate instance.
|
139
|
+
entry (List['QuantumCircuit']) : A list of QuantumCircuits, each
|
140
|
+
equivalently implementing the given Gate.
|
141
|
+
"""
|
142
|
+
for equiv in entry:
|
143
|
+
_raise_if_shape_mismatch(gate, equiv)
|
144
|
+
_raise_if_param_mismatch(gate.params, equiv.parameters)
|
145
|
+
|
146
|
+
node_index = self._set_default_node(Key(name=gate.name, num_qubits=gate.num_qubits))
|
147
|
+
# Remove previous equivalences of this node, leaving in place any later equivalences that
|
148
|
+
# were added that use `gate`.
|
149
|
+
self._graph[node_index].equivs.clear()
|
150
|
+
for parent, child, _ in self._graph.in_edges(node_index):
|
151
|
+
# `child` should always be ourselves, but there might be parallel edges.
|
152
|
+
self._graph.remove_edge(parent, child)
|
153
|
+
for equivalence in entry:
|
154
|
+
self.add_equivalence(gate, equivalence)
|
155
|
+
|
156
|
+
def get_entry(self, gate):
|
157
|
+
"""Gets the set of QuantumCircuits circuits from the library which
|
158
|
+
equivalently implement the given Gate.
|
159
|
+
|
160
|
+
Parameterized circuits will have their parameters replaced with the
|
161
|
+
corresponding entries from Gate.params.
|
162
|
+
|
163
|
+
Args:
|
164
|
+
gate (Gate) - Gate: A Gate instance.
|
165
|
+
|
166
|
+
Returns:
|
167
|
+
List[QuantumCircuit]: A list of equivalent QuantumCircuits. If empty,
|
168
|
+
library contains no known decompositions of Gate.
|
169
|
+
|
170
|
+
Returned circuits will be ordered according to their insertion in
|
171
|
+
the library, from earliest to latest, from top to base. The
|
172
|
+
ordering of the StandardEquivalenceLibrary will not generally be
|
173
|
+
consistent across Qiskit versions.
|
174
|
+
"""
|
175
|
+
key = Key(name=gate.name, num_qubits=gate.num_qubits)
|
176
|
+
query_params = gate.params
|
177
|
+
|
178
|
+
return [_rebind_equiv(equiv, query_params) for equiv in self._get_equivalences(key)]
|
179
|
+
|
180
|
+
def keys(self):
|
181
|
+
"""Return list of keys to key to node index map.
|
182
|
+
|
183
|
+
Returns:
|
184
|
+
List: Keys to the key to node index map.
|
185
|
+
"""
|
186
|
+
return self._key_to_node_index.keys()
|
187
|
+
|
188
|
+
def node_index(self, key):
|
189
|
+
"""Return node index for a given key.
|
190
|
+
|
191
|
+
Args:
|
192
|
+
key (Key): Key to an equivalence.
|
193
|
+
|
194
|
+
Returns:
|
195
|
+
Int: Index to the node in the graph for the given key.
|
196
|
+
"""
|
197
|
+
return self._key_to_node_index[key]
|
198
|
+
|
33
199
|
def draw(self, filename=None):
|
34
200
|
"""Draws the equivalence relations available in the library.
|
35
201
|
|
@@ -61,13 +227,12 @@ class EquivalenceLibrary(BaseEquivalenceLibrary):
|
|
61
227
|
graph = rx.PyDiGraph()
|
62
228
|
|
63
229
|
node_map = {}
|
64
|
-
for key in
|
65
|
-
name, num_qubits = key
|
230
|
+
for key in self._key_to_node_index:
|
231
|
+
name, num_qubits = key
|
66
232
|
equivalences = self._get_equivalences(key)
|
67
233
|
|
68
234
|
basis = frozenset([f"{name}/{num_qubits}"])
|
69
|
-
for
|
70
|
-
params, decomp = equivalence.params, equivalence.circuit
|
235
|
+
for params, decomp in equivalences:
|
71
236
|
decomp_basis = frozenset(
|
72
237
|
f"{name}/{num_qubits}"
|
73
238
|
for name, num_qubits in {
|
@@ -92,3 +257,39 @@ class EquivalenceLibrary(BaseEquivalenceLibrary):
|
|
92
257
|
)
|
93
258
|
|
94
259
|
return graph
|
260
|
+
|
261
|
+
def _get_equivalences(self, key):
|
262
|
+
"""Get all the equivalences for the given key"""
|
263
|
+
return (
|
264
|
+
self._graph[self._key_to_node_index[key]].equivs
|
265
|
+
if key in self._key_to_node_index
|
266
|
+
else []
|
267
|
+
)
|
268
|
+
|
269
|
+
|
270
|
+
def _raise_if_param_mismatch(gate_params, circuit_parameters):
|
271
|
+
gate_parameters = [p for p in gate_params if isinstance(p, ParameterExpression)]
|
272
|
+
|
273
|
+
if set(gate_parameters) != circuit_parameters:
|
274
|
+
raise CircuitError(
|
275
|
+
"Cannot add equivalence between circuit and gate "
|
276
|
+
f"of different parameters. Gate params: {gate_parameters}. "
|
277
|
+
f"Circuit params: {circuit_parameters}."
|
278
|
+
)
|
279
|
+
|
280
|
+
|
281
|
+
def _raise_if_shape_mismatch(gate, circuit):
|
282
|
+
if gate.num_qubits != circuit.num_qubits or gate.num_clbits != circuit.num_clbits:
|
283
|
+
raise CircuitError(
|
284
|
+
"Cannot add equivalence between circuit and gate "
|
285
|
+
f"of different shapes. Gate: {gate.num_qubits} qubits and {gate.num_clbits} clbits. "
|
286
|
+
f"Circuit: {circuit.num_qubits} qubits and {circuit.num_clbits} clbits."
|
287
|
+
)
|
288
|
+
|
289
|
+
|
290
|
+
def _rebind_equiv(equiv, query_params):
|
291
|
+
equiv_params, equiv_circuit = equiv
|
292
|
+
param_map = {x: y for x, y in zip(equiv_params, query_params) if isinstance(x, Parameter)}
|
293
|
+
equiv = equiv_circuit.assign_parameters(param_map, inplace=False, flat_input=True)
|
294
|
+
|
295
|
+
return equiv
|
qiskit/circuit/gate.py
CHANGED
@@ -89,9 +89,7 @@ class Gate(Instruction):
|
|
89
89
|
from qiskit.circuit.library.generalized_gates.unitary import UnitaryGate
|
90
90
|
|
91
91
|
if not annotated:
|
92
|
-
return UnitaryGate(
|
93
|
-
Operator(self).power(exponent, assume_unitary=True), label=f"{self.name}^{exponent}"
|
94
|
-
)
|
92
|
+
return UnitaryGate(Operator(self).power(exponent), label=f"{self.name}^{exponent}")
|
95
93
|
else:
|
96
94
|
return AnnotatedOperation(self, PowerModifier(exponent))
|
97
95
|
|
qiskit/circuit/instruction.py
CHANGED
@@ -103,23 +103,7 @@ class Instruction(Operation):
|
|
103
103
|
# list of instructions (and their contexts) that this instruction is composed of
|
104
104
|
# empty definition means opaque or fundamental instruction
|
105
105
|
self._definition = None
|
106
|
-
if duration is not None:
|
107
|
-
warnings.warn(
|
108
|
-
"Setting a custom duration per instruction is deprecated as of Qiskit "
|
109
|
-
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
110
|
-
"is defined in a backend's Target object.",
|
111
|
-
DeprecationWarning,
|
112
|
-
stacklevel=2,
|
113
|
-
)
|
114
106
|
self._duration = duration
|
115
|
-
if unit is not None and unit != "dt":
|
116
|
-
warnings.warn(
|
117
|
-
"Setting a custom unit for duration per instruction is deprecated as of Qiskit "
|
118
|
-
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
119
|
-
"is defined in a backend's Target object which has a fixed unit in seconds.",
|
120
|
-
DeprecationWarning,
|
121
|
-
stacklevel=2,
|
122
|
-
)
|
123
107
|
self._unit = unit
|
124
108
|
|
125
109
|
self.params = params # must be at last (other properties may be required for validation)
|
@@ -176,7 +160,6 @@ class Instruction(Operation):
|
|
176
160
|
return self.copy()
|
177
161
|
|
178
162
|
@property
|
179
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
180
163
|
def condition(self):
|
181
164
|
"""The classical condition on the instruction."""
|
182
165
|
return self._condition
|
@@ -358,26 +341,24 @@ class Instruction(Operation):
|
|
358
341
|
sel.add_equivalence(self, decomposition)
|
359
342
|
|
360
343
|
@property
|
361
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
362
344
|
def duration(self):
|
363
345
|
"""Get the duration."""
|
364
346
|
return self._duration
|
365
347
|
|
366
348
|
@duration.setter
|
367
|
-
def duration(self,
|
349
|
+
def duration(self, duration):
|
368
350
|
"""Set the duration."""
|
369
|
-
self._duration =
|
351
|
+
self._duration = duration
|
370
352
|
|
371
353
|
@property
|
372
|
-
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
373
354
|
def unit(self):
|
374
355
|
"""Get the time unit of duration."""
|
375
356
|
return self._unit
|
376
357
|
|
377
358
|
@unit.setter
|
378
|
-
def unit(self,
|
359
|
+
def unit(self, unit):
|
379
360
|
"""Set the time unit of duration."""
|
380
|
-
self._unit =
|
361
|
+
self._unit = unit
|
381
362
|
|
382
363
|
@deprecate_func(
|
383
364
|
since="1.2",
|
@@ -411,8 +392,8 @@ class Instruction(Operation):
|
|
411
392
|
# Add condition parameters for assembler. This is needed to convert
|
412
393
|
# to a qobj conditional instruction at assemble time and after
|
413
394
|
# conversion will be deleted by the assembler.
|
414
|
-
if self.
|
415
|
-
instruction._condition = self.
|
395
|
+
if self.condition:
|
396
|
+
instruction._condition = self.condition
|
416
397
|
return instruction
|
417
398
|
|
418
399
|
@property
|
@@ -518,7 +499,6 @@ class Instruction(Operation):
|
|
518
499
|
inverse_gate.definition = inverse_definition
|
519
500
|
return inverse_gate
|
520
501
|
|
521
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
522
502
|
def c_if(self, classical, val):
|
523
503
|
"""Set a classical equality condition on this instruction between the register or cbit
|
524
504
|
``classical`` and value ``val``.
|
@@ -634,7 +614,7 @@ class Instruction(Operation):
|
|
634
614
|
qargs = tuple(qc.qubits)
|
635
615
|
cargs = tuple(qc.clbits)
|
636
616
|
base = self.copy()
|
637
|
-
if self.
|
617
|
+
if self.condition:
|
638
618
|
# Condition is handled on the outer instruction.
|
639
619
|
base = base.to_mutable()
|
640
620
|
base.condition = None
|
@@ -642,19 +622,18 @@ class Instruction(Operation):
|
|
642
622
|
qc._append(CircuitInstruction(base, qargs, cargs))
|
643
623
|
|
644
624
|
instruction.definition = qc
|
645
|
-
if self.
|
646
|
-
instruction = instruction.c_if(*self.
|
625
|
+
if self.condition:
|
626
|
+
instruction = instruction.c_if(*self.condition)
|
647
627
|
return instruction
|
648
628
|
|
649
629
|
@property
|
650
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
651
630
|
def condition_bits(self) -> List[Clbit]:
|
652
631
|
"""Get Clbits in condition."""
|
653
632
|
from qiskit.circuit.controlflow import condition_resources # pylint: disable=cyclic-import
|
654
633
|
|
655
|
-
if self.
|
634
|
+
if self.condition is None:
|
656
635
|
return []
|
657
|
-
return list(condition_resources(self.
|
636
|
+
return list(condition_resources(self.condition).clbits)
|
658
637
|
|
659
638
|
@property
|
660
639
|
def name(self):
|
qiskit/circuit/instructionset.py
CHANGED
@@ -20,7 +20,6 @@ from collections.abc import MutableSequence
|
|
20
20
|
from typing import Callable
|
21
21
|
|
22
22
|
from qiskit.circuit.exceptions import CircuitError
|
23
|
-
from qiskit.utils import deprecate_func
|
24
23
|
from .classicalregister import Clbit, ClassicalRegister
|
25
24
|
from .operation import Operation
|
26
25
|
from .quantumcircuitdata import CircuitInstruction
|
@@ -106,7 +105,6 @@ class InstructionSet:
|
|
106
105
|
)
|
107
106
|
return self
|
108
107
|
|
109
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
110
108
|
def c_if(self, classical: Clbit | ClassicalRegister | int, val: int) -> "InstructionSet":
|
111
109
|
"""Set a classical equality condition on all the instructions in this set between the
|
112
110
|
:obj:`.ClassicalRegister` or :obj:`.Clbit` ``classical`` and value ``val``.
|