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
@@ -13,14 +13,17 @@
|
|
13
13
|
"""Pass Manager Configuration class."""
|
14
14
|
|
15
15
|
import pprint
|
16
|
+
import warnings
|
16
17
|
|
17
18
|
from qiskit.transpiler.coupling import CouplingMap
|
18
19
|
from qiskit.transpiler.instruction_durations import InstructionDurations
|
20
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
19
21
|
|
20
22
|
|
21
23
|
class PassManagerConfig:
|
22
24
|
"""Pass Manager Configuration."""
|
23
25
|
|
26
|
+
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
24
27
|
def __init__(
|
25
28
|
self,
|
26
29
|
initial_layout=None,
|
@@ -113,11 +116,17 @@ class PassManagerConfig:
|
|
113
116
|
def from_backend(cls, backend, _skip_target=False, **pass_manager_options):
|
114
117
|
"""Construct a configuration based on a backend and user input.
|
115
118
|
|
116
|
-
This method automatically
|
119
|
+
This method automatically generates a PassManagerConfig object based on the backend's
|
117
120
|
features. User options can be used to overwrite the configuration.
|
118
121
|
|
122
|
+
.. deprecated:: 1.3
|
123
|
+
The method ``PassManagerConfig.from_backend`` will stop supporting inputs of type
|
124
|
+
:class:`.BackendV1` in the `backend` parameter in a future release no
|
125
|
+
earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should move
|
126
|
+
to :class:`.BackendV2`.
|
127
|
+
|
119
128
|
Args:
|
120
|
-
backend (BackendV1): The backend that provides the configuration.
|
129
|
+
backend (BackendV1 or BackendV2): The backend that provides the configuration.
|
121
130
|
pass_manager_options: User-defined option-value pairs.
|
122
131
|
|
123
132
|
Returns:
|
@@ -126,12 +135,21 @@ class PassManagerConfig:
|
|
126
135
|
Raises:
|
127
136
|
AttributeError: If the backend does not support a `configuration()` method.
|
128
137
|
"""
|
129
|
-
res = cls(**pass_manager_options)
|
130
138
|
backend_version = getattr(backend, "version", 0)
|
139
|
+
if backend_version == 1:
|
140
|
+
warnings.warn(
|
141
|
+
"The method PassManagerConfig.from_backend will stop supporting inputs of "
|
142
|
+
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
143
|
+
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
144
|
+
"should move to `BackendV2`.",
|
145
|
+
category=DeprecationWarning,
|
146
|
+
stacklevel=2,
|
147
|
+
)
|
131
148
|
if not isinstance(backend_version, int):
|
132
149
|
backend_version = 0
|
133
150
|
if backend_version < 2:
|
134
151
|
config = backend.configuration()
|
152
|
+
res = cls(**pass_manager_options)
|
135
153
|
if res.basis_gates is None:
|
136
154
|
if backend_version < 2:
|
137
155
|
res.basis_gates = getattr(config, "basis_gates", None)
|
@@ -144,7 +162,7 @@ class PassManagerConfig:
|
|
144
162
|
if defaults is not None:
|
145
163
|
res.inst_map = defaults.instruction_schedule_map
|
146
164
|
else:
|
147
|
-
res.inst_map = backend.
|
165
|
+
res.inst_map = backend._instruction_schedule_map
|
148
166
|
if res.coupling_map is None:
|
149
167
|
if backend_version < 2:
|
150
168
|
cmap_edge_list = getattr(config, "coupling_map", None)
|
@@ -13,6 +13,7 @@
|
|
13
13
|
"""Built-in transpiler stage plugins for preset pass managers."""
|
14
14
|
|
15
15
|
import os
|
16
|
+
import warnings
|
16
17
|
|
17
18
|
from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
|
18
19
|
from qiskit.transpiler.passmanager import PassManager
|
@@ -39,9 +40,9 @@ from qiskit.transpiler.preset_passmanagers.plugin import (
|
|
39
40
|
from qiskit.transpiler.passes.optimization import (
|
40
41
|
Optimize1qGatesDecomposition,
|
41
42
|
CommutativeCancellation,
|
42
|
-
Collect2qBlocks,
|
43
43
|
ConsolidateBlocks,
|
44
44
|
InverseCancellation,
|
45
|
+
RemoveIdentityEquivalent,
|
45
46
|
)
|
46
47
|
from qiskit.transpiler.passes import Depth, Size, FixedPoint, MinimumPoint
|
47
48
|
from qiskit.transpiler.passes.utils.gates_basis import GatesInBasis
|
@@ -153,8 +154,16 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
153
154
|
pass_manager_config.hls_config,
|
154
155
|
pass_manager_config.qubits_initially_zero,
|
155
156
|
)
|
156
|
-
|
157
|
+
if pass_manager_config.routing_method != "none":
|
158
|
+
init.append(ElidePermutations())
|
157
159
|
init.append(RemoveDiagonalGatesBeforeMeasure())
|
160
|
+
# Target not set on RemoveIdentityEquivalent because we haven't applied a Layout
|
161
|
+
# yet so doing anything relative to an error rate in the target is not valid.
|
162
|
+
init.append(
|
163
|
+
RemoveIdentityEquivalent(
|
164
|
+
approximation_degree=pass_manager_config.approximation_degree
|
165
|
+
)
|
166
|
+
)
|
158
167
|
init.append(
|
159
168
|
InverseCancellation(
|
160
169
|
[
|
@@ -174,7 +183,6 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
174
183
|
)
|
175
184
|
)
|
176
185
|
init.append(CommutativeCancellation())
|
177
|
-
init.append(Collect2qBlocks())
|
178
186
|
init.append(ConsolidateBlocks())
|
179
187
|
# If approximation degree is None that indicates a request to approximate up to the
|
180
188
|
# error rates in the target. However, in the init stage we don't yet know the target
|
@@ -580,6 +588,10 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
580
588
|
|
581
589
|
elif optimization_level == 2:
|
582
590
|
_opt = [
|
591
|
+
RemoveIdentityEquivalent(
|
592
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
593
|
+
target=pass_manager_config.target,
|
594
|
+
),
|
583
595
|
Optimize1qGatesDecomposition(
|
584
596
|
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
585
597
|
),
|
@@ -588,7 +600,6 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
588
600
|
elif optimization_level == 3:
|
589
601
|
# Steps for optimization level 3
|
590
602
|
_opt = [
|
591
|
-
Collect2qBlocks(),
|
592
603
|
ConsolidateBlocks(
|
593
604
|
basis_gates=pass_manager_config.basis_gates,
|
594
605
|
target=pass_manager_config.target,
|
@@ -603,6 +614,10 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
603
614
|
plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
604
615
|
target=pass_manager_config.target,
|
605
616
|
),
|
617
|
+
RemoveIdentityEquivalent(
|
618
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
619
|
+
target=pass_manager_config.target,
|
620
|
+
),
|
606
621
|
Optimize1qGatesDecomposition(
|
607
622
|
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
608
623
|
),
|
@@ -632,7 +647,6 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
632
647
|
elif optimization_level == 2:
|
633
648
|
optimization.append(
|
634
649
|
[
|
635
|
-
Collect2qBlocks(),
|
636
650
|
ConsolidateBlocks(
|
637
651
|
basis_gates=pass_manager_config.basis_gates,
|
638
652
|
target=pass_manager_config.target,
|
@@ -675,9 +689,13 @@ class AlapSchedulingPassManager(PassManagerStagePlugin):
|
|
675
689
|
inst_map = pass_manager_config.inst_map
|
676
690
|
target = pass_manager_config.target
|
677
691
|
|
678
|
-
|
679
|
-
|
680
|
-
|
692
|
+
with warnings.catch_warnings():
|
693
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
694
|
+
# Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
|
695
|
+
# so filtering these warning when building pass managers
|
696
|
+
return common.generate_scheduling(
|
697
|
+
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
698
|
+
)
|
681
699
|
|
682
700
|
|
683
701
|
class AsapSchedulingPassManager(PassManagerStagePlugin):
|
@@ -692,9 +710,13 @@ class AsapSchedulingPassManager(PassManagerStagePlugin):
|
|
692
710
|
inst_map = pass_manager_config.inst_map
|
693
711
|
target = pass_manager_config.target
|
694
712
|
|
695
|
-
|
696
|
-
|
697
|
-
|
713
|
+
with warnings.catch_warnings():
|
714
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
715
|
+
# Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
|
716
|
+
# so filtering these warning when building pass managers
|
717
|
+
return common.generate_scheduling(
|
718
|
+
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
719
|
+
)
|
698
720
|
|
699
721
|
|
700
722
|
class DefaultSchedulingPassManager(PassManagerStagePlugin):
|
@@ -709,9 +731,13 @@ class DefaultSchedulingPassManager(PassManagerStagePlugin):
|
|
709
731
|
inst_map = pass_manager_config.inst_map
|
710
732
|
target = pass_manager_config.target
|
711
733
|
|
712
|
-
|
713
|
-
|
714
|
-
|
734
|
+
with warnings.catch_warnings():
|
735
|
+
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
736
|
+
# Passing `inst_map` to `generate_scheduling` is deprecated in Qiskit 1.3
|
737
|
+
# so filtering these warning when building pass managers
|
738
|
+
return common.generate_scheduling(
|
739
|
+
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
740
|
+
)
|
715
741
|
|
716
742
|
|
717
743
|
class DefaultLayoutPassManager(PassManagerStagePlugin):
|
@@ -24,9 +24,9 @@ from qiskit.transpiler.passmanager import PassManager
|
|
24
24
|
from qiskit.transpiler.passes import Error
|
25
25
|
from qiskit.transpiler.passes import BasisTranslator
|
26
26
|
from qiskit.transpiler.passes import Unroll3qOrMore
|
27
|
-
from qiskit.transpiler.passes import Collect2qBlocks
|
28
|
-
from qiskit.transpiler.passes import Collect1qRuns
|
29
27
|
from qiskit.transpiler.passes import ConsolidateBlocks
|
28
|
+
from qiskit.transpiler.passes import Collect1qRuns
|
29
|
+
from qiskit.transpiler.passes import Collect2qBlocks
|
30
30
|
from qiskit.transpiler.passes import UnitarySynthesis
|
31
31
|
from qiskit.transpiler.passes import HighLevelSynthesis
|
32
32
|
from qiskit.transpiler.passes import CheckMap
|
@@ -52,6 +52,7 @@ from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
|
|
52
52
|
from qiskit.transpiler.passes.layout.vf2_post_layout import VF2PostLayoutStopReason
|
53
53
|
from qiskit.transpiler.exceptions import TranspilerError
|
54
54
|
from qiskit.transpiler.layout import Layout
|
55
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
55
56
|
|
56
57
|
|
57
58
|
_ControlFlowState = collections.namedtuple("_ControlFlowState", ("working", "not_working"))
|
@@ -529,6 +530,7 @@ def generate_translation_passmanager(
|
|
529
530
|
return PassManager(unroll)
|
530
531
|
|
531
532
|
|
533
|
+
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
532
534
|
def generate_scheduling(
|
533
535
|
instruction_durations, scheduling_method, timing_constraints, inst_map, target=None
|
534
536
|
):
|
@@ -540,7 +542,7 @@ def generate_scheduling(
|
|
540
542
|
``'asap'``/``'as_soon_as_possible'`` or
|
541
543
|
``'alap'``/``'as_late_as_possible'``
|
542
544
|
timing_constraints (TimingConstraints): Hardware time alignment restrictions.
|
543
|
-
inst_map (InstructionScheduleMap): Mapping object that maps gate to schedule.
|
545
|
+
inst_map (InstructionScheduleMap): DEPRECATED. Mapping object that maps gate to schedule.
|
544
546
|
target (Target): The :class:`~.Target` object representing the backend
|
545
547
|
|
546
548
|
Returns:
|
@@ -17,7 +17,13 @@ Preset pass manager generation function
|
|
17
17
|
import copy
|
18
18
|
import warnings
|
19
19
|
|
20
|
-
from qiskit.circuit.controlflow import
|
20
|
+
from qiskit.circuit.controlflow import (
|
21
|
+
CONTROL_FLOW_OP_NAMES,
|
22
|
+
IfElseOp,
|
23
|
+
WhileLoopOp,
|
24
|
+
ForLoopOp,
|
25
|
+
SwitchCaseOp,
|
26
|
+
)
|
21
27
|
from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
|
22
28
|
from qiskit.circuit.quantumregister import Qubit
|
23
29
|
from qiskit.providers.backend import Backend
|
@@ -29,6 +35,8 @@ from qiskit.transpiler.layout import Layout
|
|
29
35
|
from qiskit.transpiler.passmanager_config import PassManagerConfig
|
30
36
|
from qiskit.transpiler.target import Target, target_to_backend_properties
|
31
37
|
from qiskit.transpiler.timing_constraints import TimingConstraints
|
38
|
+
from qiskit.utils import deprecate_arg
|
39
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
32
40
|
|
33
41
|
from .level0 import level_0_pass_manager
|
34
42
|
from .level1 import level_1_pass_manager
|
@@ -36,6 +44,33 @@ from .level2 import level_2_pass_manager
|
|
36
44
|
from .level3 import level_3_pass_manager
|
37
45
|
|
38
46
|
|
47
|
+
@deprecate_arg(
|
48
|
+
name="instruction_durations",
|
49
|
+
since="1.3",
|
50
|
+
package_name="Qiskit",
|
51
|
+
removal_timeline="in Qiskit 2.0",
|
52
|
+
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
53
|
+
"with defined instruction durations with "
|
54
|
+
"`Target.from_configuration(..., instruction_durations=...)`",
|
55
|
+
)
|
56
|
+
@deprecate_arg(
|
57
|
+
name="timing_constraints",
|
58
|
+
since="1.3",
|
59
|
+
package_name="Qiskit",
|
60
|
+
removal_timeline="in Qiskit 2.0",
|
61
|
+
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
62
|
+
"with defined timing constraints with "
|
63
|
+
"`Target.from_configuration(..., timing_constraints=...)`",
|
64
|
+
)
|
65
|
+
@deprecate_arg(
|
66
|
+
name="backend_properties",
|
67
|
+
since="1.3",
|
68
|
+
package_name="Qiskit",
|
69
|
+
removal_timeline="in Qiskit 2.0",
|
70
|
+
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
71
|
+
"with defined properties with Target.from_configuration(..., backend_properties=...)",
|
72
|
+
)
|
73
|
+
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
39
74
|
def generate_preset_pass_manager(
|
40
75
|
optimization_level=2,
|
41
76
|
backend=None,
|
@@ -122,7 +157,7 @@ def generate_preset_pass_manager(
|
|
122
157
|
and ``backend_properties``.
|
123
158
|
basis_gates (list): List of basis gate names to unroll to
|
124
159
|
(e.g: ``['u1', 'u2', 'u3', 'cx']``).
|
125
|
-
inst_map (InstructionScheduleMap): Mapping object that maps gates to schedules.
|
160
|
+
inst_map (InstructionScheduleMap): DEPRECATED. Mapping object that maps gates to schedules.
|
126
161
|
If any user defined calibration is found in the map and this is used in a
|
127
162
|
circuit, transpiler attaches the custom gate definition to the circuit.
|
128
163
|
This enables one to flexibly override the low-level instruction
|
@@ -283,6 +318,7 @@ def generate_preset_pass_manager(
|
|
283
318
|
_skip_target = (
|
284
319
|
target is None
|
285
320
|
and backend is None
|
321
|
+
# Note: instruction_durations is deprecated and will be removed in 2.0 (no need for alternative)
|
286
322
|
and (basis_gates is None or coupling_map is None or instruction_durations is not None)
|
287
323
|
)
|
288
324
|
|
@@ -307,23 +343,31 @@ def generate_preset_pass_manager(
|
|
307
343
|
# Only parse backend properties when the target isn't skipped to
|
308
344
|
# preserve the former behavior of transpile.
|
309
345
|
backend_properties = _parse_backend_properties(backend_properties, backend)
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
backend.
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
346
|
+
with warnings.catch_warnings():
|
347
|
+
# TODO: inst_map will be removed in 2.0
|
348
|
+
warnings.filterwarnings(
|
349
|
+
"ignore",
|
350
|
+
category=DeprecationWarning,
|
351
|
+
message=".*``inst_map`` is deprecated as of Qiskit 1.3.*",
|
352
|
+
module="qiskit",
|
353
|
+
)
|
354
|
+
# Build target from constraints.
|
355
|
+
target = Target.from_configuration(
|
356
|
+
basis_gates=basis_gates,
|
357
|
+
num_qubits=backend.num_qubits if backend is not None else None,
|
358
|
+
coupling_map=coupling_map,
|
359
|
+
# If the instruction map has custom gates, do not give as config, the information
|
360
|
+
# will be added to the target with update_from_instruction_schedule_map
|
361
|
+
inst_map=inst_map if inst_map and not inst_map.has_custom_gate() else None,
|
362
|
+
backend_properties=backend_properties,
|
363
|
+
instruction_durations=instruction_durations,
|
364
|
+
concurrent_measurements=(
|
365
|
+
backend.target.concurrent_measurements if backend is not None else None
|
366
|
+
),
|
367
|
+
dt=dt,
|
368
|
+
timing_constraints=timing_constraints,
|
369
|
+
custom_name_mapping=name_mapping,
|
370
|
+
)
|
327
371
|
|
328
372
|
# Update target with custom gate information. Note that this is an exception to the priority
|
329
373
|
# order (target > loose constraints), added to handle custom gates for scheduling passes.
|
@@ -339,7 +383,7 @@ def generate_preset_pass_manager(
|
|
339
383
|
if instruction_durations is None:
|
340
384
|
instruction_durations = target.durations()
|
341
385
|
if inst_map is None:
|
342
|
-
inst_map = target.
|
386
|
+
inst_map = target._get_instruction_schedule_map()
|
343
387
|
if timing_constraints is None:
|
344
388
|
timing_constraints = target.timing_constraints()
|
345
389
|
if backend_properties is None:
|
@@ -383,30 +427,41 @@ def generate_preset_pass_manager(
|
|
383
427
|
"qubits_initially_zero": qubits_initially_zero,
|
384
428
|
}
|
385
429
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
430
|
+
with warnings.catch_warnings():
|
431
|
+
# inst_map is deprecated in the PassManagerConfig initializer
|
432
|
+
warnings.filterwarnings(
|
433
|
+
"ignore",
|
434
|
+
category=DeprecationWarning,
|
435
|
+
message=".*argument ``inst_map`` is deprecated as of Qiskit 1.3",
|
436
|
+
)
|
437
|
+
if backend is not None:
|
438
|
+
pm_options["_skip_target"] = _skip_target
|
439
|
+
pm_config = PassManagerConfig.from_backend(backend, **pm_options)
|
440
|
+
else:
|
441
|
+
pm_config = PassManagerConfig(**pm_options)
|
442
|
+
if optimization_level == 0:
|
443
|
+
pm = level_0_pass_manager(pm_config)
|
444
|
+
elif optimization_level == 1:
|
445
|
+
pm = level_1_pass_manager(pm_config)
|
446
|
+
elif optimization_level == 2:
|
447
|
+
pm = level_2_pass_manager(pm_config)
|
448
|
+
elif optimization_level == 3:
|
449
|
+
pm = level_3_pass_manager(pm_config)
|
450
|
+
else:
|
451
|
+
raise ValueError(f"Invalid optimization level {optimization_level}")
|
401
452
|
return pm
|
402
453
|
|
403
454
|
|
404
455
|
def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
|
405
|
-
name_mapping = {}
|
406
456
|
standard_gates = get_standard_gate_name_mapping()
|
407
|
-
# Add control flow gates by default to basis set
|
457
|
+
# Add control flow gates by default to basis set and name mapping
|
408
458
|
default_gates = {"measure", "delay", "reset"}.union(CONTROL_FLOW_OP_NAMES)
|
409
|
-
|
459
|
+
name_mapping = {
|
460
|
+
"if_else": IfElseOp,
|
461
|
+
"while_loop": WhileLoopOp,
|
462
|
+
"for_loop": ForLoopOp,
|
463
|
+
"switch_case": SwitchCaseOp,
|
464
|
+
}
|
410
465
|
try:
|
411
466
|
instructions = set(basis_gates)
|
412
467
|
for name in default_gates:
|
@@ -421,7 +476,16 @@ def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
|
|
421
476
|
return None, name_mapping, skip_target
|
422
477
|
|
423
478
|
for inst in instructions:
|
424
|
-
if inst not in standard_gates
|
479
|
+
if inst not in standard_gates and inst not in default_gates:
|
480
|
+
warnings.warn(
|
481
|
+
category=DeprecationWarning,
|
482
|
+
message=f"Providing non-standard gates ({inst}) through the ``basis_gates`` "
|
483
|
+
"argument is deprecated for both ``transpile`` and ``generate_preset_pass_manager`` "
|
484
|
+
"as of Qiskit 1.3.0. "
|
485
|
+
"It will be removed in Qiskit 2.0. The ``target`` parameter should be used instead. "
|
486
|
+
"You can build a target instance using ``Target.from_configuration()`` and provide "
|
487
|
+
"custom gate definitions with the ``custom_name_mapping`` argument.",
|
488
|
+
)
|
425
489
|
skip_target = True
|
426
490
|
break
|
427
491
|
|
@@ -434,7 +498,18 @@ def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
|
|
434
498
|
|
435
499
|
# Check for custom instructions before removing calibrations
|
436
500
|
for inst in instructions:
|
437
|
-
if inst not in standard_gates
|
501
|
+
if inst not in standard_gates and inst not in default_gates:
|
502
|
+
if inst not in backend.operation_names:
|
503
|
+
# do not raise warning when the custom instruction comes from the backend
|
504
|
+
# (common case with BasicSimulator)
|
505
|
+
warnings.warn(
|
506
|
+
category=DeprecationWarning,
|
507
|
+
message="Providing custom gates through the ``basis_gates`` argument is deprecated "
|
508
|
+
"for both ``transpile`` and ``generate_preset_pass_manager`` as of Qiskit 1.3.0. "
|
509
|
+
"It will be removed in Qiskit 2.0. The ``target`` parameter should be used instead. "
|
510
|
+
"You can build a target instance using ``Target.from_configuration()`` and provide"
|
511
|
+
"custom gate definitions with the ``custom_name_mapping`` argument.",
|
512
|
+
)
|
438
513
|
skip_target = True
|
439
514
|
break
|
440
515
|
|
@@ -452,14 +527,22 @@ def _parse_basis_gates(basis_gates, backend, inst_map, skip_target):
|
|
452
527
|
def _parse_inst_map(inst_map, backend):
|
453
528
|
# try getting inst_map from user, else backend
|
454
529
|
if inst_map is None and backend is not None:
|
455
|
-
inst_map = backend.target.
|
530
|
+
inst_map = backend.target._get_instruction_schedule_map()
|
456
531
|
return inst_map
|
457
532
|
|
458
533
|
|
459
534
|
def _parse_backend_properties(backend_properties, backend):
|
460
535
|
# try getting backend_props from user, else backend
|
461
536
|
if backend_properties is None and backend is not None:
|
462
|
-
|
537
|
+
with warnings.catch_warnings():
|
538
|
+
# filter target_to_backend_properties warning
|
539
|
+
warnings.filterwarnings(
|
540
|
+
"ignore",
|
541
|
+
category=DeprecationWarning,
|
542
|
+
message=".*``qiskit.transpiler.target.target_to_backend_properties\\(\\)``.*",
|
543
|
+
module="qiskit",
|
544
|
+
)
|
545
|
+
backend_properties = target_to_backend_properties(backend.target)
|
463
546
|
return backend_properties
|
464
547
|
|
465
548
|
|
@@ -145,7 +145,7 @@ subclass as a setuptools entry point in the package metadata. This can be done
|
|
145
145
|
an ``entry-points`` table in ``pyproject.toml`` for the plugin package with the necessary entry
|
146
146
|
points under the appropriate namespace for the stage your plugin is for. You can see the list of
|
147
147
|
stages, entry points, and expectations from the stage in :ref:`stage_table`. For example,
|
148
|
-
continuing from the example plugin above
|
148
|
+
continuing from the example plugin above:
|
149
149
|
|
150
150
|
.. code-block:: toml
|
151
151
|
|