qiskit 1.4.1__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.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 +2 -5
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +24 -5
- qiskit/circuit/{add_control.py → _add_control.py} +32 -12
- qiskit/circuit/_classical_resource_map.py +5 -3
- qiskit/circuit/barrier.py +3 -7
- qiskit/circuit/classical/expr/__init__.py +31 -3
- qiskit/circuit/classical/expr/constructors.py +248 -28
- qiskit/circuit/classical/expr/expr.py +104 -3
- qiskit/circuit/classical/expr/visitors.py +75 -0
- qiskit/circuit/classical/types/__init__.py +12 -8
- qiskit/circuit/classical/types/ordering.py +14 -7
- qiskit/circuit/classical/types/types.py +36 -0
- qiskit/circuit/commutation_checker.py +34 -7
- qiskit/circuit/controlflow/__init__.py +32 -1
- qiskit/circuit/controlflow/_builder_utils.py +9 -5
- qiskit/circuit/controlflow/box.py +163 -0
- qiskit/circuit/controlflow/break_loop.py +1 -1
- qiskit/circuit/controlflow/builder.py +139 -39
- qiskit/circuit/controlflow/continue_loop.py +1 -3
- qiskit/circuit/controlflow/control_flow.py +10 -0
- qiskit/circuit/controlflow/for_loop.py +2 -1
- qiskit/circuit/controlflow/if_else.py +3 -16
- qiskit/circuit/controlflow/switch_case.py +2 -8
- qiskit/circuit/controlflow/while_loop.py +2 -7
- qiskit/circuit/controlledgate.py +2 -4
- qiskit/circuit/delay.py +40 -11
- qiskit/circuit/duration.py +0 -15
- qiskit/circuit/gate.py +2 -4
- qiskit/circuit/instruction.py +2 -141
- qiskit/circuit/instructionset.py +7 -54
- qiskit/circuit/library/__init__.py +34 -5
- qiskit/circuit/library/arithmetic/__init__.py +16 -10
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
- qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
- qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
- qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +52 -16
- qiskit/circuit/library/data_preparation/initializer.py +1 -1
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
- qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
- qiskit/circuit/library/generalized_gates/gms.py +1 -1
- qiskit/circuit/library/generalized_gates/isometry.py +1 -1
- qiskit/circuit/library/generalized_gates/pauli.py +1 -2
- qiskit/circuit/library/generalized_gates/uc.py +97 -7
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
- qiskit/circuit/library/generalized_gates/unitary.py +4 -2
- qiskit/circuit/library/hamiltonian_gate.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
- qiskit/circuit/library/n_local/n_local.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
- qiskit/circuit/library/overlap.py +2 -2
- qiskit/circuit/library/pauli_evolution.py +39 -24
- qiskit/circuit/library/phase_oracle.py +130 -51
- qiskit/circuit/library/standard_gates/__init__.py +0 -1
- qiskit/circuit/library/standard_gates/dcx.py +3 -4
- qiskit/circuit/library/standard_gates/ecr.py +3 -4
- qiskit/circuit/library/standard_gates/global_phase.py +5 -6
- qiskit/circuit/library/standard_gates/h.py +4 -9
- qiskit/circuit/library/standard_gates/i.py +2 -2
- qiskit/circuit/library/standard_gates/iswap.py +3 -4
- qiskit/circuit/library/standard_gates/p.py +15 -34
- qiskit/circuit/library/standard_gates/r.py +2 -6
- qiskit/circuit/library/standard_gates/rx.py +5 -15
- qiskit/circuit/library/standard_gates/rxx.py +3 -6
- qiskit/circuit/library/standard_gates/ry.py +5 -17
- qiskit/circuit/library/standard_gates/ryy.py +3 -6
- qiskit/circuit/library/standard_gates/rz.py +5 -17
- qiskit/circuit/library/standard_gates/rzx.py +3 -6
- qiskit/circuit/library/standard_gates/rzz.py +3 -6
- qiskit/circuit/library/standard_gates/s.py +6 -15
- qiskit/circuit/library/standard_gates/swap.py +4 -11
- qiskit/circuit/library/standard_gates/sx.py +7 -12
- qiskit/circuit/library/standard_gates/t.py +6 -7
- qiskit/circuit/library/standard_gates/u.py +2 -10
- qiskit/circuit/library/standard_gates/u1.py +5 -16
- qiskit/circuit/library/standard_gates/u2.py +2 -6
- qiskit/circuit/library/standard_gates/u3.py +3 -11
- qiskit/circuit/library/standard_gates/x.py +13 -60
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/y.py +4 -9
- qiskit/circuit/library/standard_gates/z.py +5 -15
- qiskit/circuit/measure.py +11 -2
- qiskit/circuit/parameterexpression.py +4 -0
- qiskit/circuit/quantumcircuit.py +881 -555
- qiskit/circuit/random/utils.py +12 -6
- qiskit/circuit/reset.py +5 -2
- qiskit/circuit/singleton.py +5 -11
- qiskit/circuit/store.py +0 -8
- qiskit/compiler/__init__.py +1 -7
- qiskit/compiler/transpiler.py +38 -196
- qiskit/converters/circuit_to_dag.py +4 -2
- qiskit/converters/circuit_to_dagdependency.py +0 -2
- qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
- qiskit/converters/circuit_to_gate.py +1 -1
- qiskit/converters/circuit_to_instruction.py +16 -29
- qiskit/converters/dag_to_circuit.py +5 -5
- qiskit/converters/dag_to_dagdependency.py +0 -1
- qiskit/converters/dag_to_dagdependency_v2.py +0 -1
- qiskit/converters/dagdependency_to_circuit.py +0 -6
- qiskit/converters/dagdependency_to_dag.py +0 -6
- qiskit/dagcircuit/collect_blocks.py +32 -20
- qiskit/dagcircuit/dagdependency.py +3 -37
- qiskit/dagcircuit/dagdependency_v2.py +2 -80
- qiskit/dagcircuit/dagnode.py +14 -2
- qiskit/passmanager/__init__.py +24 -6
- qiskit/passmanager/passmanager.py +26 -24
- qiskit/primitives/__init__.py +44 -35
- qiskit/primitives/backend_estimator_v2.py +102 -23
- qiskit/primitives/backend_sampler_v2.py +5 -20
- qiskit/primitives/base/__init__.py +4 -4
- qiskit/primitives/base/base_estimator.py +77 -82
- qiskit/primitives/base/base_primitive_job.py +2 -2
- qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
- qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
- qiskit/primitives/base/base_sampler.py +52 -60
- qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
- qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
- qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
- qiskit/primitives/containers/bindings_array.py +3 -1
- qiskit/primitives/containers/bit_array.py +23 -0
- qiskit/primitives/containers/data_bin.py +3 -1
- qiskit/primitives/containers/observables_array.py +19 -2
- qiskit/primitives/statevector_sampler.py +6 -8
- qiskit/primitives/utils.py +14 -189
- qiskit/providers/__init__.py +4 -130
- qiskit/providers/backend.py +11 -314
- qiskit/providers/basic_provider/__init__.py +3 -1
- qiskit/providers/basic_provider/basic_provider.py +29 -9
- qiskit/providers/basic_provider/basic_simulator.py +158 -298
- qiskit/providers/exceptions.py +0 -33
- qiskit/providers/fake_provider/__init__.py +0 -37
- qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
- qiskit/qasm2/__init__.py +21 -6
- qiskit/qasm2/export.py +2 -10
- qiskit/qasm2/parse.py +11 -25
- qiskit/qasm3/__init__.py +5 -1
- qiskit/qasm3/ast.py +44 -0
- qiskit/qasm3/exporter.py +65 -27
- qiskit/qasm3/printer.py +35 -4
- qiskit/qpy/__init__.py +141 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +91 -116
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +154 -28
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +29 -62
- qiskit/qpy/type_keys.py +58 -221
- qiskit/quantum_info/analysis/distance.py +3 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
- qiskit/quantum_info/operators/operator.py +6 -2
- qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
- qiskit/quantum_info/states/densitymatrix.py +16 -6
- qiskit/quantum_info/states/stabilizerstate.py +35 -4
- qiskit/quantum_info/states/statevector.py +16 -6
- qiskit/result/__init__.py +5 -17
- qiskit/result/models.py +18 -10
- qiskit/result/result.py +28 -126
- qiskit/result/sampled_expval.py +1 -2
- qiskit/result/utils.py +3 -4
- qiskit/synthesis/__init__.py +21 -1
- qiskit/synthesis/arithmetic/__init__.py +3 -1
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
- qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
- qiskit/synthesis/boolean/boolean_expression.py +231 -0
- qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
- qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
- qiskit/synthesis/evolution/lie_trotter.py +10 -7
- qiskit/synthesis/evolution/product_formula.py +44 -35
- qiskit/synthesis/evolution/qdrift.py +17 -24
- qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
- qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
- qiskit/synthesis/two_qubit/__init__.py +1 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
- qiskit/transpiler/__init__.py +32 -232
- qiskit/transpiler/basepasses.py +20 -51
- qiskit/transpiler/layout.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -40
- qiskit/transpiler/passes/basis/basis_translator.py +4 -3
- qiskit/transpiler/passes/basis/decompose.py +1 -15
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
- qiskit/transpiler/passes/layout/apply_layout.py +4 -0
- qiskit/transpiler/passes/layout/dense_layout.py +2 -39
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
- qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
- qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
- qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
- qiskit/transpiler/passes/optimization/__init__.py +1 -3
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
- qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
- qiskit/transpiler/passes/optimization/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
- qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
- qiskit/transpiler/passes/routing/__init__.py +0 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
- qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
- qiskit/transpiler/passes/scheduling/__init__.py +1 -7
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
- qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
- qiskit/transpiler/passes/synthesis/plugin.py +4 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
- qiskit/transpiler/passes/utils/control_flow.py +2 -6
- qiskit/transpiler/passes/utils/gate_direction.py +7 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
- qiskit/transpiler/passmanager.py +13 -0
- qiskit/transpiler/passmanager_config.py +5 -81
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
- qiskit/transpiler/preset_passmanagers/common.py +140 -167
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
- qiskit/transpiler/preset_passmanagers/level0.py +2 -11
- qiskit/transpiler/preset_passmanagers/level1.py +2 -14
- qiskit/transpiler/preset_passmanagers/level2.py +2 -12
- qiskit/transpiler/preset_passmanagers/level3.py +2 -11
- qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
- qiskit/transpiler/target.py +67 -524
- qiskit/user_config.py +8 -4
- qiskit/utils/__init__.py +13 -12
- qiskit/utils/deprecation.py +4 -112
- qiskit/utils/optionals.py +11 -4
- qiskit/utils/parallel.py +214 -87
- qiskit/utils/units.py +4 -1
- qiskit/visualization/__init__.py +3 -7
- qiskit/visualization/array.py +4 -1
- qiskit/visualization/bloch.py +1 -1
- qiskit/visualization/circuit/_utils.py +19 -19
- qiskit/visualization/circuit/circuit_visualization.py +11 -4
- qiskit/visualization/circuit/matplotlib.py +13 -23
- qiskit/visualization/circuit/text.py +7 -3
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +6 -0
- qiskit/visualization/timeline/core.py +18 -12
- qiskit/visualization/timeline/interface.py +19 -18
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
- qiskit/assembler/__init__.py +0 -42
- qiskit/assembler/assemble_circuits.py +0 -451
- qiskit/assembler/assemble_schedules.py +0 -367
- qiskit/assembler/disassemble.py +0 -310
- qiskit/assembler/run_config.py +0 -77
- qiskit/circuit/bit.py +0 -106
- qiskit/circuit/classicalfunction/__init__.py +0 -152
- qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
- qiskit/circuit/classicalfunction/classical_element.py +0 -54
- qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
- qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
- qiskit/circuit/classicalfunction/exceptions.py +0 -41
- qiskit/circuit/classicalfunction/types.py +0 -18
- qiskit/circuit/classicalfunction/utils.py +0 -91
- qiskit/circuit/classicalregister.py +0 -57
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
- qiskit/circuit/quantumregister.py +0 -75
- qiskit/circuit/register.py +0 -246
- qiskit/compiler/assembler.py +0 -689
- qiskit/compiler/scheduler.py +0 -109
- qiskit/compiler/sequencer.py +0 -71
- qiskit/primitives/backend_estimator.py +0 -486
- qiskit/primitives/backend_sampler.py +0 -222
- qiskit/primitives/estimator.py +0 -172
- qiskit/primitives/sampler.py +0 -162
- qiskit/providers/backend_compat.py +0 -507
- qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
- qiskit/providers/fake_provider/fake_1q.py +0 -91
- qiskit/providers/fake_provider/fake_backend.py +0 -165
- qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
- qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
- qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
- qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
- qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
- qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
- qiskit/providers/models/__init__.py +0 -89
- qiskit/providers/models/backendconfiguration.py +0 -1040
- qiskit/providers/models/backendproperties.py +0 -535
- qiskit/providers/models/backendstatus.py +0 -104
- qiskit/providers/models/jobstatus.py +0 -77
- qiskit/providers/models/pulsedefaults.py +0 -305
- qiskit/providers/provider.py +0 -95
- qiskit/pulse/__init__.py +0 -158
- qiskit/pulse/builder.py +0 -2262
- qiskit/pulse/calibration_entries.py +0 -381
- qiskit/pulse/channels.py +0 -227
- qiskit/pulse/configuration.py +0 -245
- qiskit/pulse/exceptions.py +0 -45
- qiskit/pulse/filters.py +0 -309
- qiskit/pulse/instruction_schedule_map.py +0 -424
- qiskit/pulse/instructions/__init__.py +0 -67
- qiskit/pulse/instructions/acquire.py +0 -150
- qiskit/pulse/instructions/delay.py +0 -71
- qiskit/pulse/instructions/directives.py +0 -154
- qiskit/pulse/instructions/frequency.py +0 -135
- qiskit/pulse/instructions/instruction.py +0 -270
- qiskit/pulse/instructions/phase.py +0 -152
- qiskit/pulse/instructions/play.py +0 -99
- qiskit/pulse/instructions/reference.py +0 -100
- qiskit/pulse/instructions/snapshot.py +0 -82
- qiskit/pulse/library/__init__.py +0 -97
- qiskit/pulse/library/continuous.py +0 -430
- qiskit/pulse/library/pulse.py +0 -148
- qiskit/pulse/library/samplers/__init__.py +0 -15
- qiskit/pulse/library/samplers/decorators.py +0 -295
- qiskit/pulse/library/samplers/strategies.py +0 -71
- qiskit/pulse/library/symbolic_pulses.py +0 -1989
- qiskit/pulse/library/waveform.py +0 -136
- qiskit/pulse/macros.py +0 -262
- qiskit/pulse/parameter_manager.py +0 -445
- qiskit/pulse/parser.py +0 -314
- qiskit/pulse/reference_manager.py +0 -58
- qiskit/pulse/schedule.py +0 -1854
- qiskit/pulse/transforms/__init__.py +0 -106
- qiskit/pulse/transforms/alignments.py +0 -406
- qiskit/pulse/transforms/base_transforms.py +0 -71
- qiskit/pulse/transforms/canonicalization.py +0 -498
- qiskit/pulse/transforms/dag.py +0 -122
- qiskit/pulse/utils.py +0 -149
- qiskit/qobj/__init__.py +0 -75
- qiskit/qobj/common.py +0 -81
- qiskit/qobj/converters/__init__.py +0 -18
- qiskit/qobj/converters/lo_config.py +0 -177
- qiskit/qobj/converters/pulse_instruction.py +0 -897
- qiskit/qobj/pulse_qobj.py +0 -709
- qiskit/qobj/qasm_qobj.py +0 -708
- qiskit/qobj/utils.py +0 -46
- qiskit/result/mitigation/base_readout_mitigator.py +0 -79
- qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
- qiskit/result/mitigation/local_readout_mitigator.py +0 -328
- qiskit/result/mitigation/utils.py +0 -217
- qiskit/scheduler/__init__.py +0 -40
- qiskit/scheduler/config.py +0 -37
- qiskit/scheduler/lowering.py +0 -187
- qiskit/scheduler/methods/__init__.py +0 -15
- qiskit/scheduler/methods/basic.py +0 -140
- qiskit/scheduler/schedule_circuit.py +0 -69
- qiskit/scheduler/sequence.py +0 -104
- qiskit/transpiler/passes/calibration/__init__.py +0 -17
- qiskit/transpiler/passes/calibration/base_builder.py +0 -79
- qiskit/transpiler/passes/calibration/builders.py +0 -20
- qiskit/transpiler/passes/calibration/exceptions.py +0 -22
- qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
- qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
- qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
- qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
- qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
- qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
- qiskit/transpiler/passes/scheduling/alap.py +0 -153
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
- qiskit/transpiler/passes/scheduling/asap.py +0 -175
- qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
- qiskit/utils/deprecate_pulse.py +0 -119
- qiskit/utils/multiprocessing.py +0 -56
- qiskit/visualization/pulse_v2/__init__.py +0 -21
- qiskit/visualization/pulse_v2/core.py +0 -901
- qiskit/visualization/pulse_v2/device_info.py +0 -173
- qiskit/visualization/pulse_v2/drawings.py +0 -253
- qiskit/visualization/pulse_v2/events.py +0 -254
- qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
- qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
- qiskit/visualization/pulse_v2/generators/chart.py +0 -208
- qiskit/visualization/pulse_v2/generators/frame.py +0 -436
- qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
- qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
- qiskit/visualization/pulse_v2/interface.py +0 -459
- qiskit/visualization/pulse_v2/layouts.py +0 -387
- qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
- qiskit/visualization/pulse_v2/stylesheet.py +0 -312
- qiskit/visualization/pulse_v2/types.py +0 -242
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -13,14 +13,12 @@
|
|
13
13
|
"""Built-in transpiler stage plugins for preset pass managers."""
|
14
14
|
|
15
15
|
import os
|
16
|
-
import warnings
|
17
16
|
|
18
17
|
from qiskit.transpiler.passes.optimization.split_2q_unitaries import Split2QUnitaries
|
19
18
|
from qiskit.transpiler.passmanager import PassManager
|
20
19
|
from qiskit.transpiler.exceptions import TranspilerError
|
21
20
|
from qiskit.transpiler.passes import BasicSwap
|
22
21
|
from qiskit.transpiler.passes import LookaheadSwap
|
23
|
-
from qiskit.transpiler.passes import StochasticSwap
|
24
22
|
from qiskit.transpiler.passes import SabreSwap
|
25
23
|
from qiskit.transpiler.passes import Error
|
26
24
|
from qiskit.transpiler.passes import SetLayout
|
@@ -43,6 +41,7 @@ from qiskit.transpiler.passes.optimization import (
|
|
43
41
|
ConsolidateBlocks,
|
44
42
|
InverseCancellation,
|
45
43
|
RemoveIdentityEquivalent,
|
44
|
+
ContractIdleWiresInControlFlow,
|
46
45
|
)
|
47
46
|
from qiskit.transpiler.passes import Depth, Size, FixedPoint, MinimumPoint
|
48
47
|
from qiskit.transpiler.passes.utils.gates_basis import GatesInBasis
|
@@ -67,7 +66,7 @@ from qiskit.circuit.library.standard_gates import (
|
|
67
66
|
SXGate,
|
68
67
|
SXdgGate,
|
69
68
|
)
|
70
|
-
from qiskit.utils
|
69
|
+
from qiskit.utils import default_num_processes
|
71
70
|
from qiskit import user_config
|
72
71
|
|
73
72
|
CONFIG = user_config.get_config()
|
@@ -126,22 +125,25 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
126
125
|
pass_manager_config.qubits_initially_zero,
|
127
126
|
)
|
128
127
|
init.append(
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
128
|
+
[
|
129
|
+
InverseCancellation(
|
130
|
+
[
|
131
|
+
CXGate(),
|
132
|
+
ECRGate(),
|
133
|
+
CZGate(),
|
134
|
+
CYGate(),
|
135
|
+
XGate(),
|
136
|
+
YGate(),
|
137
|
+
ZGate(),
|
138
|
+
HGate(),
|
139
|
+
SwapGate(),
|
140
|
+
(TGate(), TdgGate()),
|
141
|
+
(SGate(), SdgGate()),
|
142
|
+
(SXGate(), SXdgGate()),
|
143
|
+
]
|
144
|
+
),
|
145
|
+
ContractIdleWiresInControlFlow(),
|
146
|
+
]
|
145
147
|
)
|
146
148
|
|
147
149
|
elif optimization_level in {2, 3}:
|
@@ -156,31 +158,32 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
156
158
|
)
|
157
159
|
if pass_manager_config.routing_method != "none":
|
158
160
|
init.append(ElidePermutations())
|
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
|
-
)
|
167
161
|
init.append(
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
162
|
+
[
|
163
|
+
RemoveDiagonalGatesBeforeMeasure(),
|
164
|
+
# Target not set on RemoveIdentityEquivalent because we haven't applied a Layout
|
165
|
+
# yet so doing anything relative to an error rate in the target is not valid.
|
166
|
+
RemoveIdentityEquivalent(
|
167
|
+
approximation_degree=pass_manager_config.approximation_degree
|
168
|
+
),
|
169
|
+
InverseCancellation(
|
170
|
+
[
|
171
|
+
CXGate(),
|
172
|
+
ECRGate(),
|
173
|
+
CZGate(),
|
174
|
+
CYGate(),
|
175
|
+
XGate(),
|
176
|
+
YGate(),
|
177
|
+
ZGate(),
|
178
|
+
HGate(),
|
179
|
+
SwapGate(),
|
180
|
+
(TGate(), TdgGate()),
|
181
|
+
(SGate(), SdgGate()),
|
182
|
+
(SXGate(), SXdgGate()),
|
183
|
+
]
|
184
|
+
),
|
185
|
+
ContractIdleWiresInControlFlow(),
|
186
|
+
]
|
184
187
|
)
|
185
188
|
init.append(CommutativeCancellation())
|
186
189
|
init.append(ConsolidateBlocks())
|
@@ -188,42 +191,52 @@ class DefaultInitPassManager(PassManagerStagePlugin):
|
|
188
191
|
# error rates in the target. However, in the init stage we don't yet know the target
|
189
192
|
# qubits being used to figure out the fidelity so just use the default fidelity parameter
|
190
193
|
# in this case.
|
194
|
+
split_2q_unitaries_swap = False
|
195
|
+
if pass_manager_config.routing_method != "none":
|
196
|
+
split_2q_unitaries_swap = True
|
191
197
|
if pass_manager_config.approximation_degree is not None:
|
192
|
-
init.append(
|
198
|
+
init.append(
|
199
|
+
Split2QUnitaries(
|
200
|
+
pass_manager_config.approximation_degree, split_swap=split_2q_unitaries_swap
|
201
|
+
)
|
202
|
+
)
|
193
203
|
else:
|
194
|
-
init.append(Split2QUnitaries())
|
204
|
+
init.append(Split2QUnitaries(split_swap=split_2q_unitaries_swap))
|
195
205
|
else:
|
196
206
|
raise TranspilerError(f"Invalid optimization level {optimization_level}")
|
197
207
|
return init
|
198
208
|
|
199
209
|
|
210
|
+
class DefaultTranslationPassManager(PassManagerStagePlugin):
|
211
|
+
"""Plugin class for the default-method translation stage."""
|
212
|
+
|
213
|
+
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
214
|
+
# For now, this is just a wrapper around the `BasisTranslator`. It might expand in the
|
215
|
+
# future if we want to change the default method to do more context-aware switching, or to
|
216
|
+
# start transitioning the default method without breaking the semantics of the default
|
217
|
+
# string referring to the `BasisTranslator`.
|
218
|
+
return BasisTranslatorPassManager().pass_manager(pass_manager_config, optimization_level)
|
219
|
+
|
220
|
+
|
200
221
|
class BasisTranslatorPassManager(PassManagerStagePlugin):
|
201
222
|
"""Plugin class for translation stage with :class:`~.BasisTranslator`"""
|
202
223
|
|
203
224
|
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
approximation_degree=pass_manager_config.approximation_degree,
|
216
|
-
coupling_map=pass_manager_config.coupling_map,
|
217
|
-
backend_props=pass_manager_config.backend_properties,
|
218
|
-
unitary_synthesis_method=pass_manager_config.unitary_synthesis_method,
|
219
|
-
unitary_synthesis_plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
220
|
-
hls_config=pass_manager_config.hls_config,
|
221
|
-
qubits_initially_zero=pass_manager_config.qubits_initially_zero,
|
222
|
-
)
|
225
|
+
return common.generate_translation_passmanager(
|
226
|
+
pass_manager_config.target,
|
227
|
+
basis_gates=pass_manager_config.basis_gates,
|
228
|
+
method="translator",
|
229
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
230
|
+
coupling_map=pass_manager_config.coupling_map,
|
231
|
+
unitary_synthesis_method=pass_manager_config.unitary_synthesis_method,
|
232
|
+
unitary_synthesis_plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
233
|
+
hls_config=pass_manager_config.hls_config,
|
234
|
+
qubits_initially_zero=pass_manager_config.qubits_initially_zero,
|
235
|
+
)
|
223
236
|
|
224
237
|
|
225
238
|
class UnitarySynthesisPassManager(PassManagerStagePlugin):
|
226
|
-
"""Plugin class for translation stage with :class:`~.
|
239
|
+
"""Plugin class for translation stage with :class:`~.UnitarySynthesis`"""
|
227
240
|
|
228
241
|
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
229
242
|
return common.generate_translation_passmanager(
|
@@ -232,7 +245,6 @@ class UnitarySynthesisPassManager(PassManagerStagePlugin):
|
|
232
245
|
method="synthesis",
|
233
246
|
approximation_degree=pass_manager_config.approximation_degree,
|
234
247
|
coupling_map=pass_manager_config.coupling_map,
|
235
|
-
backend_props=pass_manager_config.backend_properties,
|
236
248
|
unitary_synthesis_method=pass_manager_config.unitary_synthesis_method,
|
237
249
|
unitary_synthesis_plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
238
250
|
hls_config=pass_manager_config.hls_config,
|
@@ -240,6 +252,17 @@ class UnitarySynthesisPassManager(PassManagerStagePlugin):
|
|
240
252
|
)
|
241
253
|
|
242
254
|
|
255
|
+
class DefaultRoutingPassManager(PassManagerStagePlugin):
|
256
|
+
"""Plugin class for the "default" routing stage implementation."""
|
257
|
+
|
258
|
+
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
259
|
+
# The Sabre-based PM is the default implementation currently, but semantically the "default"
|
260
|
+
# plugin has more scope to change its logic than one called "sabre". In practice, we don't
|
261
|
+
# run the actually `SabreSwap` logic from this pass most of the time, because we do that
|
262
|
+
# during default layout; we're looking for the VF2PostLayout stuff mostly.
|
263
|
+
return SabreSwapPassManager().pass_manager(pass_manager_config, optimization_level)
|
264
|
+
|
265
|
+
|
243
266
|
class BasicSwapPassManager(PassManagerStagePlugin):
|
244
267
|
"""Plugin class for routing stage with :class:`~.BasicSwap`"""
|
245
268
|
|
@@ -247,7 +270,6 @@ class BasicSwapPassManager(PassManagerStagePlugin):
|
|
247
270
|
"""Build routing stage PassManager."""
|
248
271
|
target = pass_manager_config.target
|
249
272
|
coupling_map = pass_manager_config.coupling_map
|
250
|
-
backend_properties = pass_manager_config.backend_properties
|
251
273
|
if target is None:
|
252
274
|
routing_pass = BasicSwap(coupling_map)
|
253
275
|
else:
|
@@ -273,7 +295,6 @@ class BasicSwapPassManager(PassManagerStagePlugin):
|
|
273
295
|
coupling_map,
|
274
296
|
vf2_call_limit=vf2_call_limit,
|
275
297
|
vf2_max_trials=vf2_max_trials,
|
276
|
-
backend_properties=backend_properties,
|
277
298
|
seed_transpiler=-1,
|
278
299
|
check_trivial=True,
|
279
300
|
use_barrier_before_measurement=True,
|
@@ -285,7 +306,6 @@ class BasicSwapPassManager(PassManagerStagePlugin):
|
|
285
306
|
coupling_map=coupling_map,
|
286
307
|
vf2_call_limit=vf2_call_limit,
|
287
308
|
vf2_max_trials=vf2_max_trials,
|
288
|
-
backend_properties=backend_properties,
|
289
309
|
seed_transpiler=-1,
|
290
310
|
use_barrier_before_measurement=True,
|
291
311
|
)
|
@@ -296,63 +316,6 @@ class BasicSwapPassManager(PassManagerStagePlugin):
|
|
296
316
|
coupling_map=coupling_map,
|
297
317
|
vf2_call_limit=vf2_call_limit,
|
298
318
|
vf2_max_trials=vf2_max_trials,
|
299
|
-
backend_properties=backend_properties,
|
300
|
-
seed_transpiler=-1,
|
301
|
-
use_barrier_before_measurement=True,
|
302
|
-
)
|
303
|
-
raise TranspilerError(f"Invalid optimization level specified: {optimization_level}")
|
304
|
-
|
305
|
-
|
306
|
-
class StochasticSwapPassManager(PassManagerStagePlugin):
|
307
|
-
"""Plugin class for routing stage with :class:`~.StochasticSwap`"""
|
308
|
-
|
309
|
-
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
310
|
-
"""Build routing stage PassManager."""
|
311
|
-
seed_transpiler = pass_manager_config.seed_transpiler
|
312
|
-
target = pass_manager_config.target
|
313
|
-
coupling_map = pass_manager_config.coupling_map
|
314
|
-
coupling_map_routing = target
|
315
|
-
if coupling_map_routing is None:
|
316
|
-
coupling_map_routing = coupling_map
|
317
|
-
backend_properties = pass_manager_config.backend_properties
|
318
|
-
vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
|
319
|
-
optimization_level,
|
320
|
-
pass_manager_config.layout_method,
|
321
|
-
pass_manager_config.initial_layout,
|
322
|
-
)
|
323
|
-
if optimization_level == 3:
|
324
|
-
routing_pass = StochasticSwap(coupling_map_routing, trials=200, seed=seed_transpiler)
|
325
|
-
else:
|
326
|
-
routing_pass = StochasticSwap(coupling_map_routing, trials=20, seed=seed_transpiler)
|
327
|
-
|
328
|
-
if optimization_level == 0:
|
329
|
-
return common.generate_routing_passmanager(
|
330
|
-
routing_pass,
|
331
|
-
target,
|
332
|
-
coupling_map=coupling_map,
|
333
|
-
seed_transpiler=-1,
|
334
|
-
use_barrier_before_measurement=True,
|
335
|
-
)
|
336
|
-
if optimization_level == 1:
|
337
|
-
return common.generate_routing_passmanager(
|
338
|
-
routing_pass,
|
339
|
-
target,
|
340
|
-
coupling_map,
|
341
|
-
vf2_call_limit=vf2_call_limit,
|
342
|
-
vf2_max_trials=vf2_max_trials,
|
343
|
-
backend_properties=backend_properties,
|
344
|
-
seed_transpiler=-1,
|
345
|
-
check_trivial=True,
|
346
|
-
use_barrier_before_measurement=True,
|
347
|
-
)
|
348
|
-
if optimization_level in {2, 3}:
|
349
|
-
return common.generate_routing_passmanager(
|
350
|
-
routing_pass,
|
351
|
-
target,
|
352
|
-
coupling_map=coupling_map,
|
353
|
-
vf2_call_limit=vf2_call_limit,
|
354
|
-
vf2_max_trials=vf2_max_trials,
|
355
|
-
backend_properties=backend_properties,
|
356
319
|
seed_transpiler=-1,
|
357
320
|
use_barrier_before_measurement=True,
|
358
321
|
)
|
@@ -369,7 +332,6 @@ class LookaheadSwapPassManager(PassManagerStagePlugin):
|
|
369
332
|
coupling_map_routing = target
|
370
333
|
if coupling_map_routing is None:
|
371
334
|
coupling_map_routing = coupling_map
|
372
|
-
backend_properties = pass_manager_config.backend_properties
|
373
335
|
vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
|
374
336
|
optimization_level,
|
375
337
|
pass_manager_config.layout_method,
|
@@ -392,7 +354,6 @@ class LookaheadSwapPassManager(PassManagerStagePlugin):
|
|
392
354
|
coupling_map,
|
393
355
|
vf2_call_limit=vf2_call_limit,
|
394
356
|
vf2_max_trials=vf2_max_trials,
|
395
|
-
backend_properties=backend_properties,
|
396
357
|
seed_transpiler=-1,
|
397
358
|
check_trivial=True,
|
398
359
|
use_barrier_before_measurement=True,
|
@@ -405,7 +366,6 @@ class LookaheadSwapPassManager(PassManagerStagePlugin):
|
|
405
366
|
coupling_map=coupling_map,
|
406
367
|
vf2_call_limit=vf2_call_limit,
|
407
368
|
vf2_max_trials=vf2_max_trials,
|
408
|
-
backend_properties=backend_properties,
|
409
369
|
seed_transpiler=-1,
|
410
370
|
use_barrier_before_measurement=True,
|
411
371
|
)
|
@@ -417,7 +377,6 @@ class LookaheadSwapPassManager(PassManagerStagePlugin):
|
|
417
377
|
coupling_map=coupling_map,
|
418
378
|
vf2_call_limit=vf2_call_limit,
|
419
379
|
vf2_max_trials=vf2_max_trials,
|
420
|
-
backend_properties=backend_properties,
|
421
380
|
seed_transpiler=-1,
|
422
381
|
use_barrier_before_measurement=True,
|
423
382
|
)
|
@@ -435,7 +394,6 @@ class SabreSwapPassManager(PassManagerStagePlugin):
|
|
435
394
|
coupling_map_routing = target
|
436
395
|
if coupling_map_routing is None:
|
437
396
|
coupling_map_routing = coupling_map
|
438
|
-
backend_properties = pass_manager_config.backend_properties
|
439
397
|
vf2_call_limit, vf2_max_trials = common.get_vf2_limits(
|
440
398
|
optimization_level,
|
441
399
|
pass_manager_config.layout_method,
|
@@ -464,24 +422,16 @@ class SabreSwapPassManager(PassManagerStagePlugin):
|
|
464
422
|
seed=seed_transpiler,
|
465
423
|
trials=trial_count,
|
466
424
|
)
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
coupling_map,
|
478
|
-
vf2_call_limit=vf2_call_limit,
|
479
|
-
vf2_max_trials=vf2_max_trials,
|
480
|
-
backend_properties=backend_properties,
|
481
|
-
seed_transpiler=-1,
|
482
|
-
check_trivial=True,
|
483
|
-
use_barrier_before_measurement=True,
|
484
|
-
)
|
425
|
+
return common.generate_routing_passmanager(
|
426
|
+
routing_pass,
|
427
|
+
target,
|
428
|
+
coupling_map,
|
429
|
+
vf2_call_limit=vf2_call_limit,
|
430
|
+
vf2_max_trials=vf2_max_trials,
|
431
|
+
seed_transpiler=-1,
|
432
|
+
check_trivial=True,
|
433
|
+
use_barrier_before_measurement=True,
|
434
|
+
)
|
485
435
|
if optimization_level == 2:
|
486
436
|
trial_count = _get_trial_count(20)
|
487
437
|
|
@@ -491,23 +441,15 @@ class SabreSwapPassManager(PassManagerStagePlugin):
|
|
491
441
|
seed=seed_transpiler,
|
492
442
|
trials=trial_count,
|
493
443
|
)
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
target,
|
504
|
-
coupling_map=coupling_map,
|
505
|
-
vf2_call_limit=vf2_call_limit,
|
506
|
-
vf2_max_trials=vf2_max_trials,
|
507
|
-
backend_properties=backend_properties,
|
508
|
-
seed_transpiler=-1,
|
509
|
-
use_barrier_before_measurement=True,
|
510
|
-
)
|
444
|
+
return common.generate_routing_passmanager(
|
445
|
+
routing_pass,
|
446
|
+
target,
|
447
|
+
coupling_map=coupling_map,
|
448
|
+
vf2_call_limit=vf2_call_limit,
|
449
|
+
vf2_max_trials=vf2_max_trials,
|
450
|
+
seed_transpiler=-1,
|
451
|
+
use_barrier_before_measurement=True,
|
452
|
+
)
|
511
453
|
if optimization_level == 3:
|
512
454
|
trial_count = _get_trial_count(20)
|
513
455
|
routing_pass = SabreSwap(
|
@@ -516,23 +458,15 @@ class SabreSwapPassManager(PassManagerStagePlugin):
|
|
516
458
|
seed=seed_transpiler,
|
517
459
|
trials=trial_count,
|
518
460
|
)
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
target,
|
529
|
-
coupling_map=coupling_map,
|
530
|
-
vf2_call_limit=vf2_call_limit,
|
531
|
-
vf2_max_trials=vf2_max_trials,
|
532
|
-
backend_properties=backend_properties,
|
533
|
-
seed_transpiler=-1,
|
534
|
-
use_barrier_before_measurement=True,
|
535
|
-
)
|
461
|
+
return common.generate_routing_passmanager(
|
462
|
+
routing_pass,
|
463
|
+
target,
|
464
|
+
coupling_map=coupling_map,
|
465
|
+
vf2_call_limit=vf2_call_limit,
|
466
|
+
vf2_max_trials=vf2_max_trials,
|
467
|
+
seed_transpiler=-1,
|
468
|
+
use_barrier_before_measurement=True,
|
469
|
+
)
|
536
470
|
raise TranspilerError(f"Invalid optimization level specified: {optimization_level}")
|
537
471
|
|
538
472
|
|
@@ -563,7 +497,7 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
563
497
|
def pass_manager(self, pass_manager_config, optimization_level=None) -> PassManager:
|
564
498
|
"""Build pass manager for optimization stage."""
|
565
499
|
# Obtain the translation method required for this pass to work
|
566
|
-
translation_method = pass_manager_config.translation_method or "
|
500
|
+
translation_method = pass_manager_config.translation_method or "default"
|
567
501
|
optimization = PassManager()
|
568
502
|
if optimization_level != 0:
|
569
503
|
plugin_manager = PassManagerStagePluginManager()
|
@@ -587,8 +521,12 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
587
521
|
pass_manager_config,
|
588
522
|
optimization_level=optimization_level,
|
589
523
|
)
|
524
|
+
|
525
|
+
# Basic steps for optimization level 1:
|
526
|
+
# 1. Optimize1qGatesDecomposition
|
527
|
+
# 2. InverseCancellation
|
590
528
|
if optimization_level == 1:
|
591
|
-
|
529
|
+
|
592
530
|
_opt = [
|
593
531
|
Optimize1qGatesDecomposition(
|
594
532
|
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
@@ -609,8 +547,13 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
609
547
|
(SXGate(), SXdgGate()),
|
610
548
|
]
|
611
549
|
),
|
550
|
+
ContractIdleWiresInControlFlow(),
|
612
551
|
]
|
613
552
|
|
553
|
+
# Basic steps for optimization level 2:
|
554
|
+
# 1. RemoveIdentityEquivalent
|
555
|
+
# 2. Optimize1qGatesDecomposition
|
556
|
+
# 3. CommutativeCancellation
|
614
557
|
elif optimization_level == 2:
|
615
558
|
_opt = [
|
616
559
|
RemoveIdentityEquivalent(
|
@@ -621,40 +564,40 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
621
564
|
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
622
565
|
),
|
623
566
|
CommutativeCancellation(target=pass_manager_config.target),
|
567
|
+
ContractIdleWiresInControlFlow(),
|
624
568
|
]
|
569
|
+
|
570
|
+
# Basic steps for optimization level 3:
|
571
|
+
# 1. ConsolidateBlocks
|
572
|
+
# 2. UnitarySynthesis
|
573
|
+
# 3. RemoveIdentityEquivalent
|
574
|
+
# 4. Optimize1qGatesDecomposition
|
575
|
+
# 5. CommutativeCancellation
|
625
576
|
elif optimization_level == 3:
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
approximation_degree=pass_manager_config.approximation_degree,
|
651
|
-
target=pass_manager_config.target,
|
652
|
-
),
|
653
|
-
Optimize1qGatesDecomposition(
|
654
|
-
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
655
|
-
),
|
656
|
-
CommutativeCancellation(target=pass_manager_config.target),
|
657
|
-
]
|
577
|
+
_opt = [
|
578
|
+
ConsolidateBlocks(
|
579
|
+
basis_gates=pass_manager_config.basis_gates,
|
580
|
+
target=pass_manager_config.target,
|
581
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
582
|
+
),
|
583
|
+
UnitarySynthesis(
|
584
|
+
pass_manager_config.basis_gates,
|
585
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
586
|
+
coupling_map=pass_manager_config.coupling_map,
|
587
|
+
method=pass_manager_config.unitary_synthesis_method,
|
588
|
+
plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
589
|
+
target=pass_manager_config.target,
|
590
|
+
),
|
591
|
+
RemoveIdentityEquivalent(
|
592
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
593
|
+
target=pass_manager_config.target,
|
594
|
+
),
|
595
|
+
Optimize1qGatesDecomposition(
|
596
|
+
basis=pass_manager_config.basis_gates, target=pass_manager_config.target
|
597
|
+
),
|
598
|
+
CommutativeCancellation(target=pass_manager_config.target),
|
599
|
+
ContractIdleWiresInControlFlow(),
|
600
|
+
]
|
658
601
|
|
659
602
|
def _opt_control(property_set):
|
660
603
|
return not property_set["optimization_loop_minimum_point"]
|
@@ -664,11 +607,11 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
664
607
|
|
665
608
|
unroll = translation.to_flow_controller()
|
666
609
|
|
667
|
-
# Build nested
|
610
|
+
# Build nested flow controllers
|
668
611
|
def _unroll_condition(property_set):
|
669
612
|
return not property_set["all_gates_in_basis"]
|
670
613
|
|
671
|
-
# Check if any gate is not in the basis, and if so, run unroll passes
|
614
|
+
# Check if any gate is not in the basis, and if so, run unroll/translation passes
|
672
615
|
_unroll_if_out_of_basis = [
|
673
616
|
GatesInBasis(pass_manager_config.basis_gates, target=pass_manager_config.target),
|
674
617
|
ConditionalController(unroll, condition=_unroll_condition),
|
@@ -677,31 +620,23 @@ class OptimizationPassManager(PassManagerStagePlugin):
|
|
677
620
|
if optimization_level == 3:
|
678
621
|
optimization.append(_minimum_point_check)
|
679
622
|
elif optimization_level == 2:
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
coupling_map=pass_manager_config.coupling_map,
|
698
|
-
backend_props=pass_manager_config.backend_properties,
|
699
|
-
method=pass_manager_config.unitary_synthesis_method,
|
700
|
-
plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
701
|
-
target=pass_manager_config.target,
|
702
|
-
),
|
703
|
-
]
|
704
|
-
)
|
623
|
+
optimization.append(
|
624
|
+
[
|
625
|
+
ConsolidateBlocks(
|
626
|
+
basis_gates=pass_manager_config.basis_gates,
|
627
|
+
target=pass_manager_config.target,
|
628
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
629
|
+
),
|
630
|
+
UnitarySynthesis(
|
631
|
+
pass_manager_config.basis_gates,
|
632
|
+
approximation_degree=pass_manager_config.approximation_degree,
|
633
|
+
coupling_map=pass_manager_config.coupling_map,
|
634
|
+
method=pass_manager_config.unitary_synthesis_method,
|
635
|
+
plugin_config=pass_manager_config.unitary_synthesis_plugin_config,
|
636
|
+
target=pass_manager_config.target,
|
637
|
+
),
|
638
|
+
]
|
639
|
+
)
|
705
640
|
optimization.append(_depth_check + _size_check)
|
706
641
|
else:
|
707
642
|
optimization.append(_depth_check + _size_check)
|
@@ -725,16 +660,11 @@ class AlapSchedulingPassManager(PassManagerStagePlugin):
|
|
725
660
|
instruction_durations = pass_manager_config.instruction_durations
|
726
661
|
scheduling_method = pass_manager_config.scheduling_method
|
727
662
|
timing_constraints = pass_manager_config.timing_constraints
|
728
|
-
inst_map = pass_manager_config.inst_map
|
729
663
|
target = pass_manager_config.target
|
730
664
|
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
# so filtering these warning when building pass managers
|
735
|
-
return common.generate_scheduling(
|
736
|
-
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
737
|
-
)
|
665
|
+
return common.generate_scheduling(
|
666
|
+
instruction_durations, scheduling_method, timing_constraints, target
|
667
|
+
)
|
738
668
|
|
739
669
|
|
740
670
|
class AsapSchedulingPassManager(PassManagerStagePlugin):
|
@@ -746,16 +676,11 @@ class AsapSchedulingPassManager(PassManagerStagePlugin):
|
|
746
676
|
instruction_durations = pass_manager_config.instruction_durations
|
747
677
|
scheduling_method = pass_manager_config.scheduling_method
|
748
678
|
timing_constraints = pass_manager_config.timing_constraints
|
749
|
-
inst_map = pass_manager_config.inst_map
|
750
679
|
target = pass_manager_config.target
|
751
680
|
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
# so filtering these warning when building pass managers
|
756
|
-
return common.generate_scheduling(
|
757
|
-
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
758
|
-
)
|
681
|
+
return common.generate_scheduling(
|
682
|
+
instruction_durations, scheduling_method, timing_constraints, target
|
683
|
+
)
|
759
684
|
|
760
685
|
|
761
686
|
class DefaultSchedulingPassManager(PassManagerStagePlugin):
|
@@ -767,16 +692,11 @@ class DefaultSchedulingPassManager(PassManagerStagePlugin):
|
|
767
692
|
instruction_durations = pass_manager_config.instruction_durations
|
768
693
|
scheduling_method = None
|
769
694
|
timing_constraints = pass_manager_config.timing_constraints or TimingConstraints()
|
770
|
-
inst_map = pass_manager_config.inst_map
|
771
695
|
target = pass_manager_config.target
|
772
696
|
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
# so filtering these warning when building pass managers
|
777
|
-
return common.generate_scheduling(
|
778
|
-
instruction_durations, scheduling_method, timing_constraints, inst_map, target
|
779
|
-
)
|
697
|
+
return common.generate_scheduling(
|
698
|
+
instruction_durations, scheduling_method, timing_constraints, target
|
699
|
+
)
|
780
700
|
|
781
701
|
|
782
702
|
class DefaultLayoutPassManager(PassManagerStagePlugin):
|
@@ -830,21 +750,13 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
830
750
|
condition=_choose_layout_condition,
|
831
751
|
)
|
832
752
|
)
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
choose_layout_1 = VF2Layout(
|
841
|
-
coupling_map=pass_manager_config.coupling_map,
|
842
|
-
seed=-1,
|
843
|
-
call_limit=int(5e4), # Set call limit to ~100ms with rustworkx 0.10.2
|
844
|
-
properties=pass_manager_config.backend_properties,
|
845
|
-
target=pass_manager_config.target,
|
846
|
-
max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
|
847
|
-
)
|
753
|
+
choose_layout_1 = VF2Layout(
|
754
|
+
coupling_map=pass_manager_config.coupling_map,
|
755
|
+
seed=-1,
|
756
|
+
call_limit=int(5e4), # Set call limit to ~100ms with rustworkx 0.10.2
|
757
|
+
target=pass_manager_config.target,
|
758
|
+
max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
|
759
|
+
)
|
848
760
|
layout.append(ConditionalController(choose_layout_1, condition=_layout_not_perfect))
|
849
761
|
|
850
762
|
trial_count = _get_trial_count(5)
|
@@ -855,8 +767,7 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
855
767
|
seed=pass_manager_config.seed_transpiler,
|
856
768
|
swap_trials=trial_count,
|
857
769
|
layout_trials=trial_count,
|
858
|
-
skip_routing=pass_manager_config.routing_method
|
859
|
-
and pass_manager_config.routing_method != "sabre",
|
770
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
860
771
|
)
|
861
772
|
layout.append(
|
862
773
|
ConditionalController(
|
@@ -870,21 +781,13 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
870
781
|
)
|
871
782
|
)
|
872
783
|
elif optimization_level == 2:
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
choose_layout_0 = VF2Layout(
|
881
|
-
coupling_map=pass_manager_config.coupling_map,
|
882
|
-
seed=-1,
|
883
|
-
call_limit=int(5e6), # Set call limit to ~10s with rustworkx 0.10.2
|
884
|
-
properties=pass_manager_config.backend_properties,
|
885
|
-
target=pass_manager_config.target,
|
886
|
-
max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
|
887
|
-
)
|
784
|
+
choose_layout_0 = VF2Layout(
|
785
|
+
coupling_map=pass_manager_config.coupling_map,
|
786
|
+
seed=-1,
|
787
|
+
call_limit=int(5e6), # Set call limit to ~10s with rustworkx 0.10.2
|
788
|
+
target=pass_manager_config.target,
|
789
|
+
max_trials=2500, # Limits layout scoring to < 600ms on ~400 qubit devices
|
790
|
+
)
|
888
791
|
layout.append(
|
889
792
|
ConditionalController(choose_layout_0, condition=_choose_layout_condition)
|
890
793
|
)
|
@@ -897,8 +800,7 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
897
800
|
seed=pass_manager_config.seed_transpiler,
|
898
801
|
swap_trials=trial_count,
|
899
802
|
layout_trials=trial_count,
|
900
|
-
skip_routing=pass_manager_config.routing_method
|
901
|
-
and pass_manager_config.routing_method != "sabre",
|
803
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
902
804
|
)
|
903
805
|
layout.append(
|
904
806
|
ConditionalController(
|
@@ -912,21 +814,13 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
912
814
|
)
|
913
815
|
)
|
914
816
|
elif optimization_level == 3:
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
choose_layout_0 = VF2Layout(
|
923
|
-
coupling_map=pass_manager_config.coupling_map,
|
924
|
-
seed=-1,
|
925
|
-
call_limit=int(3e7), # Set call limit to ~60s with rustworkx 0.10.2
|
926
|
-
properties=pass_manager_config.backend_properties,
|
927
|
-
target=pass_manager_config.target,
|
928
|
-
max_trials=250000, # Limits layout scoring to < 60s on ~400 qubit devices
|
929
|
-
)
|
817
|
+
choose_layout_0 = VF2Layout(
|
818
|
+
coupling_map=pass_manager_config.coupling_map,
|
819
|
+
seed=-1,
|
820
|
+
call_limit=int(3e7), # Set call limit to ~60s with rustworkx 0.10.2
|
821
|
+
target=pass_manager_config.target,
|
822
|
+
max_trials=250000, # Limits layout scoring to < 60s on ~400 qubit devices
|
823
|
+
)
|
930
824
|
layout.append(
|
931
825
|
ConditionalController(choose_layout_0, condition=_choose_layout_condition)
|
932
826
|
)
|
@@ -939,8 +833,7 @@ class DefaultLayoutPassManager(PassManagerStagePlugin):
|
|
939
833
|
seed=pass_manager_config.seed_transpiler,
|
940
834
|
swap_trials=trial_count,
|
941
835
|
layout_trials=trial_count,
|
942
|
-
skip_routing=pass_manager_config.routing_method
|
943
|
-
and pass_manager_config.routing_method != "sabre",
|
836
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
944
837
|
)
|
945
838
|
layout.append(
|
946
839
|
ConditionalController(
|
@@ -1000,23 +893,15 @@ class DenseLayoutPassManager(PassManagerStagePlugin):
|
|
1000
893
|
|
1001
894
|
layout = PassManager()
|
1002
895
|
layout.append(_given_layout)
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
layout.append(
|
1011
|
-
ConditionalController(
|
1012
|
-
DenseLayout(
|
1013
|
-
coupling_map=pass_manager_config.coupling_map,
|
1014
|
-
backend_prop=pass_manager_config.backend_properties,
|
1015
|
-
target=pass_manager_config.target,
|
1016
|
-
),
|
1017
|
-
condition=_choose_layout_condition,
|
1018
|
-
)
|
896
|
+
layout.append(
|
897
|
+
ConditionalController(
|
898
|
+
DenseLayout(
|
899
|
+
coupling_map=pass_manager_config.coupling_map,
|
900
|
+
target=pass_manager_config.target,
|
901
|
+
),
|
902
|
+
condition=_choose_layout_condition,
|
1019
903
|
)
|
904
|
+
)
|
1020
905
|
layout += common.generate_embed_passmanager(coupling_map)
|
1021
906
|
return layout
|
1022
907
|
|
@@ -1049,8 +934,7 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
|
|
1049
934
|
seed=pass_manager_config.seed_transpiler,
|
1050
935
|
swap_trials=trial_count,
|
1051
936
|
layout_trials=trial_count,
|
1052
|
-
skip_routing=pass_manager_config.routing_method
|
1053
|
-
and pass_manager_config.routing_method != "sabre",
|
937
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
1054
938
|
)
|
1055
939
|
elif optimization_level == 1:
|
1056
940
|
trial_count = _get_trial_count(5)
|
@@ -1061,8 +945,7 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
|
|
1061
945
|
seed=pass_manager_config.seed_transpiler,
|
1062
946
|
swap_trials=trial_count,
|
1063
947
|
layout_trials=trial_count,
|
1064
|
-
skip_routing=pass_manager_config.routing_method
|
1065
|
-
and pass_manager_config.routing_method != "sabre",
|
948
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
1066
949
|
)
|
1067
950
|
elif optimization_level == 2:
|
1068
951
|
trial_count = _get_trial_count(20)
|
@@ -1073,8 +956,7 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
|
|
1073
956
|
seed=pass_manager_config.seed_transpiler,
|
1074
957
|
swap_trials=trial_count,
|
1075
958
|
layout_trials=trial_count,
|
1076
|
-
skip_routing=pass_manager_config.routing_method
|
1077
|
-
and pass_manager_config.routing_method != "sabre",
|
959
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
1078
960
|
)
|
1079
961
|
elif optimization_level == 3:
|
1080
962
|
trial_count = _get_trial_count(20)
|
@@ -1085,8 +967,7 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
|
|
1085
967
|
seed=pass_manager_config.seed_transpiler,
|
1086
968
|
swap_trials=trial_count,
|
1087
969
|
layout_trials=trial_count,
|
1088
|
-
skip_routing=pass_manager_config.routing_method
|
1089
|
-
and pass_manager_config.routing_method != "sabre",
|
970
|
+
skip_routing=pass_manager_config.routing_method not in (None, "default", "sabre"),
|
1090
971
|
)
|
1091
972
|
else:
|
1092
973
|
raise TranspilerError(f"Invalid optimization level: {optimization_level}")
|
@@ -1108,5 +989,5 @@ class SabreLayoutPassManager(PassManagerStagePlugin):
|
|
1108
989
|
|
1109
990
|
def _get_trial_count(default_trials=5):
|
1110
991
|
if CONFIG.get("sabre_all_threads", None) or os.getenv("QISKIT_SABRE_ALL_THREADS"):
|
1111
|
-
return max(
|
992
|
+
return max(default_num_processes(), default_trials)
|
1112
993
|
return default_trials
|