qiskit 1.4.0__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 +7 -140
- 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 +168 -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 +5 -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 +27 -12
- qiskit/visualization/timeline/interface.py +23 -18
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
- {qiskit-1.4.0.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.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -24,7 +24,6 @@ from .error import Error
|
|
24
24
|
from .remove_barriers import RemoveBarriers
|
25
25
|
from .contains_instruction import ContainsInstruction
|
26
26
|
from .gates_basis import GatesInBasis
|
27
|
-
from .convert_conditions_to_if_ops import ConvertConditionsToIfOps
|
28
27
|
from .unroll_forloops import UnrollForLoops
|
29
28
|
from .minimum_point import MinimumPoint
|
30
29
|
from .filter_op_nodes import FilterOpNodes
|
@@ -45,8 +45,16 @@ class CheckGateDirection(AnalysisPass):
|
|
45
45
|
Args:
|
46
46
|
dag (DAGCircuit): DAG to check.
|
47
47
|
"""
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
48
|
+
# Only use "check_gate_direction_target" if a target exists and target.operation_names
|
49
|
+
# is not empty, else use "check_gate_direction_coupling".
|
50
|
+
if self.target is None:
|
51
|
+
self.property_set["is_direction_mapped"] = check_gate_direction_coupling(
|
52
|
+
dag, set(self.coupling_map.get_edges())
|
53
|
+
)
|
54
|
+
elif len(self.target.operation_names) == 0:
|
55
|
+
# A _FakeTarget path, no basis gates, just use the coupling map
|
56
|
+
self.property_set["is_direction_mapped"] = check_gate_direction_coupling(
|
57
|
+
dag, set(self.target.build_coupling_map().get_edges())
|
58
|
+
)
|
59
|
+
else:
|
60
|
+
self.property_set["is_direction_mapped"] = check_gate_direction_target(dag, self.target)
|
@@ -54,12 +54,8 @@ def trivial_recurse(method):
|
|
54
54
|
def bound_wrapped_method(dag):
|
55
55
|
return out(self, dag)
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
for node in control_flow_nodes:
|
60
|
-
dag.substitute_node(
|
61
|
-
node, map_blocks(bound_wrapped_method, node.op), propagate_condition=False
|
62
|
-
)
|
57
|
+
for node in dag.control_flow_op_nodes():
|
58
|
+
dag.substitute_node(node, map_blocks(bound_wrapped_method, node.op))
|
63
59
|
return method(self, dag)
|
64
60
|
|
65
61
|
return out
|
@@ -81,6 +81,13 @@ class GateDirection(TransformationPass):
|
|
81
81
|
TranspilerError: If the circuit cannot be mapped just by flipping the
|
82
82
|
cx nodes.
|
83
83
|
"""
|
84
|
+
# Only use "fix_gate_direction_target" if a target exists and target.operation_names
|
85
|
+
# is not empty, else use "fix_gate_direction_coupling".
|
84
86
|
if self.target is None:
|
85
87
|
return fix_gate_direction_coupling(dag, set(self.coupling_map.get_edges()))
|
88
|
+
elif len(self.target.operation_names) == 0:
|
89
|
+
# A _FakeTarget path, no basis gates, just use the coupling map
|
90
|
+
return fix_gate_direction_coupling(
|
91
|
+
dag, set(self.target.build_coupling_map().get_edges())
|
92
|
+
)
|
86
93
|
return fix_gate_direction_target(dag, self.target)
|
@@ -13,7 +13,45 @@
|
|
13
13
|
"""Remove final measurements and barriers at the end of a circuit."""
|
14
14
|
|
15
15
|
from qiskit.transpiler.basepasses import TransformationPass
|
16
|
-
from qiskit.dagcircuit import DAGOpNode
|
16
|
+
from qiskit.dagcircuit import DAGCircuit, DAGOpNode
|
17
|
+
|
18
|
+
|
19
|
+
def calc_final_ops(dag: DAGCircuit, final_op_names: set[str]) -> list[DAGOpNode]:
|
20
|
+
"""Find the final operations of a circuit of a given type.
|
21
|
+
Args:
|
22
|
+
dag: the DAG circuit
|
23
|
+
final_op_names: names of the operations to find at the end of the circuit.
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
List of nodes corresponding the the relevant operations at the end of the circuit.
|
27
|
+
"""
|
28
|
+
final_ops = []
|
29
|
+
|
30
|
+
to_visit = [next(dag.predecessors(dag.output_map[qubit])) for qubit in dag.qubits]
|
31
|
+
barrier_encounters_remaining = {}
|
32
|
+
|
33
|
+
while to_visit:
|
34
|
+
node = to_visit.pop()
|
35
|
+
if not isinstance(node, DAGOpNode):
|
36
|
+
continue
|
37
|
+
|
38
|
+
if node.op.name == "barrier":
|
39
|
+
# Barrier is final if all children are final, so we track
|
40
|
+
# how many times we still need to encounter each barrier
|
41
|
+
# via a child node.
|
42
|
+
if node not in barrier_encounters_remaining:
|
43
|
+
barrier_encounters_remaining[node] = sum(1 for _ in dag.quantum_successors(node))
|
44
|
+
if barrier_encounters_remaining[node] - 1 > 0:
|
45
|
+
# We've encountered the barrier, but not (yet) via all children.
|
46
|
+
# Record the encounter, and bail!
|
47
|
+
barrier_encounters_remaining[node] -= 1
|
48
|
+
continue
|
49
|
+
if node.name in final_op_names:
|
50
|
+
# Current node is either a measure, or a barrier with all final op children.
|
51
|
+
final_ops.append(node)
|
52
|
+
to_visit.extend(dag.quantum_predecessors(node))
|
53
|
+
|
54
|
+
return final_ops
|
17
55
|
|
18
56
|
|
19
57
|
class RemoveFinalMeasurements(TransformationPass):
|
@@ -32,37 +70,6 @@ class RemoveFinalMeasurements(TransformationPass):
|
|
32
70
|
in a classical register that will remain.
|
33
71
|
"""
|
34
72
|
|
35
|
-
def _calc_final_ops(self, dag):
|
36
|
-
final_op_types = {"measure", "barrier"}
|
37
|
-
final_ops = []
|
38
|
-
|
39
|
-
to_visit = [next(dag.predecessors(dag.output_map[qubit])) for qubit in dag.qubits]
|
40
|
-
barrier_encounters_remaining = {}
|
41
|
-
|
42
|
-
while to_visit:
|
43
|
-
node = to_visit.pop()
|
44
|
-
if not isinstance(node, DAGOpNode):
|
45
|
-
continue
|
46
|
-
if node.op.name == "barrier":
|
47
|
-
# Barrier is final if all children are final, so we track
|
48
|
-
# how many times we still need to encounter each barrier
|
49
|
-
# via a child node.
|
50
|
-
if node not in barrier_encounters_remaining:
|
51
|
-
barrier_encounters_remaining[node] = sum(
|
52
|
-
1 for _ in dag.quantum_successors(node)
|
53
|
-
)
|
54
|
-
if barrier_encounters_remaining[node] - 1 > 0:
|
55
|
-
# We've encountered the barrier, but not (yet) via all children.
|
56
|
-
# Record the encounter, and bail!
|
57
|
-
barrier_encounters_remaining[node] -= 1
|
58
|
-
continue
|
59
|
-
if node.name in final_op_types:
|
60
|
-
# Current node is either a measure, or a barrier with all final op children.
|
61
|
-
final_ops.append(node)
|
62
|
-
to_visit.extend(dag.quantum_predecessors(node))
|
63
|
-
|
64
|
-
return final_ops
|
65
|
-
|
66
73
|
def run(self, dag):
|
67
74
|
"""Run the RemoveFinalMeasurements pass on `dag`.
|
68
75
|
|
@@ -72,7 +79,7 @@ class RemoveFinalMeasurements(TransformationPass):
|
|
72
79
|
Returns:
|
73
80
|
DAGCircuit: the optimized DAG.
|
74
81
|
"""
|
75
|
-
final_ops =
|
82
|
+
final_ops = calc_final_ops(dag, {"measure", "barrier"})
|
76
83
|
if not final_ops:
|
77
84
|
return dag
|
78
85
|
|
qiskit/transpiler/passmanager.py
CHANGED
@@ -174,6 +174,8 @@ class PassManager(BasePassManager):
|
|
174
174
|
output_name: str | None = None,
|
175
175
|
callback: Callable = None,
|
176
176
|
num_processes: int = None,
|
177
|
+
*,
|
178
|
+
property_set: dict[str, object] | None = None,
|
177
179
|
) -> _CircuitsT:
|
178
180
|
"""Run all the passes on the specified ``circuits``.
|
179
181
|
|
@@ -216,6 +218,11 @@ class PassManager(BasePassManager):
|
|
216
218
|
execution is enabled. This argument overrides ``num_processes`` in the user
|
217
219
|
configuration file, and the ``QISKIT_NUM_PROCS`` environment variable. If set
|
218
220
|
to ``None`` the system default or local user configuration will be used.
|
221
|
+
property_set: If given, the initial value to use as the :class:`.PropertySet` for the
|
222
|
+
pass manager pipeline. This can be used to persist analysis from one run to
|
223
|
+
another, in cases where you know the analysis is safe to share. Beware that some
|
224
|
+
analysis will be specific to the input circuit and the particular :class:`.Target`,
|
225
|
+
so you should take a lot of care when using this argument.
|
219
226
|
|
220
227
|
Returns:
|
221
228
|
The transformed circuit(s).
|
@@ -228,6 +235,7 @@ class PassManager(BasePassManager):
|
|
228
235
|
callback=callback,
|
229
236
|
output_name=output_name,
|
230
237
|
num_processes=num_processes,
|
238
|
+
property_set=property_set,
|
231
239
|
)
|
232
240
|
|
233
241
|
def draw(self, filename=None, style=None, raw=False):
|
@@ -436,6 +444,8 @@ class StagedPassManager(PassManager):
|
|
436
444
|
output_name: str | None = None,
|
437
445
|
callback: Callable | None = None,
|
438
446
|
num_processes: int = None,
|
447
|
+
*,
|
448
|
+
property_set: dict[str, object] | None = None,
|
439
449
|
) -> _CircuitsT:
|
440
450
|
self._update_passmanager()
|
441
451
|
return super().run(circuits, output_name, callback, num_processes=num_processes)
|
@@ -462,6 +472,9 @@ def _replace_error(meth):
|
|
462
472
|
def wrapper(*meth_args, **meth_kwargs):
|
463
473
|
try:
|
464
474
|
return meth(*meth_args, **meth_kwargs)
|
475
|
+
except TranspilerError:
|
476
|
+
# If it's already a `TranspilerError` subclass, don't erase the extra information.
|
477
|
+
raise
|
465
478
|
except PassManagerError as ex:
|
466
479
|
raise TranspilerError(ex.message) from ex
|
467
480
|
|
@@ -12,41 +12,20 @@
|
|
12
12
|
|
13
13
|
"""Pass Manager Configuration class."""
|
14
14
|
|
15
|
-
import pprint
|
16
|
-
import warnings
|
17
|
-
|
18
|
-
from qiskit.transpiler.coupling import CouplingMap
|
19
|
-
from qiskit.transpiler.instruction_durations import InstructionDurations
|
20
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
21
|
-
from qiskit.utils.deprecation import deprecate_arg
|
22
|
-
|
23
15
|
|
24
16
|
class PassManagerConfig:
|
25
17
|
"""Pass Manager Configuration."""
|
26
18
|
|
27
|
-
@deprecate_arg(
|
28
|
-
name="backend_properties",
|
29
|
-
since="1.4",
|
30
|
-
package_name="Qiskit",
|
31
|
-
removal_timeline="in Qiskit 2.0",
|
32
|
-
additional_msg="The BackendProperties data structure has been deprecated and will be "
|
33
|
-
"removed in Qiskit 2.0. The `target` input argument should be used instead. "
|
34
|
-
"You can use Target.from_configuration() to build the target from the properties "
|
35
|
-
"object, but in 2.0 you will need to generate a target directly.",
|
36
|
-
)
|
37
|
-
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
38
19
|
def __init__(
|
39
20
|
self,
|
40
21
|
initial_layout=None,
|
41
22
|
basis_gates=None,
|
42
|
-
inst_map=None,
|
43
23
|
coupling_map=None,
|
44
24
|
layout_method=None,
|
45
25
|
routing_method=None,
|
46
26
|
translation_method=None,
|
47
27
|
scheduling_method=None,
|
48
28
|
instruction_durations=None,
|
49
|
-
backend_properties=None,
|
50
29
|
approximation_degree=None,
|
51
30
|
seed_transpiler=None,
|
52
31
|
timing_constraints=None,
|
@@ -64,7 +43,6 @@ class PassManagerConfig:
|
|
64
43
|
initial_layout (Layout): Initial position of virtual qubits on
|
65
44
|
physical qubits.
|
66
45
|
basis_gates (list): List of basis gate names to unroll to.
|
67
|
-
inst_map (InstructionScheduleMap): Mapping object that maps gate to schedule.
|
68
46
|
coupling_map (CouplingMap): Directed graph represented a coupling
|
69
47
|
map.
|
70
48
|
layout_method (str): the pass to use for choosing initial qubit
|
@@ -80,9 +58,6 @@ class PassManagerConfig:
|
|
80
58
|
be a plugin name if an external scheduling stage plugin is being used.
|
81
59
|
instruction_durations (InstructionDurations): Dictionary of duration
|
82
60
|
(in dt) for each instruction.
|
83
|
-
backend_properties (BackendProperties): Properties returned by a
|
84
|
-
backend, including information on gate errors, readout errors,
|
85
|
-
qubit coherence times, etc.
|
86
61
|
approximation_degree (float): heuristic dial used for circuit approximation
|
87
62
|
(1.0=no approximation, 0.0=maximal approximation)
|
88
63
|
seed_transpiler (int): Sets random seed for the stochastic parts of
|
@@ -104,7 +79,6 @@ class PassManagerConfig:
|
|
104
79
|
"""
|
105
80
|
self.initial_layout = initial_layout
|
106
81
|
self.basis_gates = basis_gates
|
107
|
-
self.inst_map = inst_map
|
108
82
|
self.coupling_map = coupling_map
|
109
83
|
self.init_method = init_method
|
110
84
|
self.layout_method = layout_method
|
@@ -113,7 +87,6 @@ class PassManagerConfig:
|
|
113
87
|
self.optimization_method = optimization_method
|
114
88
|
self.scheduling_method = scheduling_method
|
115
89
|
self.instruction_durations = instruction_durations
|
116
|
-
self.backend_properties = backend_properties
|
117
90
|
self.approximation_degree = approximation_degree
|
118
91
|
self.seed_transpiler = seed_transpiler
|
119
92
|
self.timing_constraints = timing_constraints
|
@@ -130,14 +103,8 @@ class PassManagerConfig:
|
|
130
103
|
This method automatically generates a PassManagerConfig object based on the backend's
|
131
104
|
features. User options can be used to overwrite the configuration.
|
132
105
|
|
133
|
-
.. deprecated:: 1.3
|
134
|
-
The method ``PassManagerConfig.from_backend`` will stop supporting inputs of type
|
135
|
-
:class:`.BackendV1` in the `backend` parameter in a future release no
|
136
|
-
earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should move
|
137
|
-
to :class:`.BackendV2`.
|
138
|
-
|
139
106
|
Args:
|
140
|
-
backend (
|
107
|
+
backend (BackendV2): The backend that provides the configuration.
|
141
108
|
pass_manager_options: User-defined option-value pairs.
|
142
109
|
|
143
110
|
Returns:
|
@@ -146,51 +113,15 @@ class PassManagerConfig:
|
|
146
113
|
Raises:
|
147
114
|
AttributeError: If the backend does not support a `configuration()` method.
|
148
115
|
"""
|
149
|
-
backend_version = getattr(backend, "version", 0)
|
150
|
-
if backend_version == 1:
|
151
|
-
warnings.warn(
|
152
|
-
"The method PassManagerConfig.from_backend will stop supporting inputs of "
|
153
|
-
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
154
|
-
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
155
|
-
"should move to `BackendV2`.",
|
156
|
-
category=DeprecationWarning,
|
157
|
-
stacklevel=2,
|
158
|
-
)
|
159
|
-
if not isinstance(backend_version, int):
|
160
|
-
backend_version = 0
|
161
|
-
if backend_version < 2:
|
162
|
-
config = backend.configuration()
|
163
116
|
res = cls(**pass_manager_options)
|
164
117
|
if res.basis_gates is None:
|
165
|
-
|
166
|
-
res.basis_gates = getattr(config, "basis_gates", None)
|
167
|
-
else:
|
168
|
-
res.basis_gates = backend.operation_names
|
169
|
-
if res.inst_map is None:
|
170
|
-
if backend_version < 2:
|
171
|
-
if hasattr(backend, "defaults"):
|
172
|
-
defaults = backend.defaults()
|
173
|
-
if defaults is not None:
|
174
|
-
res.inst_map = defaults.instruction_schedule_map
|
175
|
-
else:
|
176
|
-
res.inst_map = backend._instruction_schedule_map
|
118
|
+
res.basis_gates = backend.operation_names
|
177
119
|
if res.coupling_map is None:
|
178
|
-
|
179
|
-
cmap_edge_list = getattr(config, "coupling_map", None)
|
180
|
-
if cmap_edge_list is not None:
|
181
|
-
res.coupling_map = CouplingMap(cmap_edge_list)
|
182
|
-
else:
|
183
|
-
res.coupling_map = backend.coupling_map
|
120
|
+
res.coupling_map = backend.coupling_map
|
184
121
|
if res.instruction_durations is None:
|
185
|
-
|
186
|
-
res.instruction_durations = InstructionDurations.from_backend(backend)
|
187
|
-
else:
|
188
|
-
res.instruction_durations = backend.instruction_durations
|
189
|
-
if res.backend_properties is None and backend_version < 2:
|
190
|
-
res.backend_properties = backend.properties()
|
122
|
+
res.instruction_durations = backend.instruction_durations
|
191
123
|
if res.target is None and not _skip_target:
|
192
|
-
|
193
|
-
res.target = backend.target
|
124
|
+
res.target = backend.target
|
194
125
|
if res.scheduling_method is None and hasattr(backend, "get_scheduling_stage_plugin"):
|
195
126
|
res.scheduling_method = backend.get_scheduling_stage_plugin()
|
196
127
|
if res.translation_method is None and hasattr(backend, "get_translation_stage_plugin"):
|
@@ -200,23 +131,16 @@ class PassManagerConfig:
|
|
200
131
|
def __str__(self):
|
201
132
|
newline = "\n"
|
202
133
|
newline_tab = "\n\t"
|
203
|
-
if self.backend_properties is not None:
|
204
|
-
backend_props = pprint.pformat(self.backend_properties.to_dict())
|
205
|
-
backend_props = backend_props.replace(newline, newline_tab)
|
206
|
-
else:
|
207
|
-
backend_props = str(None)
|
208
134
|
return (
|
209
135
|
"Pass Manager Config:\n"
|
210
136
|
f"\tinitial_layout: {self.initial_layout}\n"
|
211
137
|
f"\tbasis_gates: {self.basis_gates}\n"
|
212
|
-
f"\tinst_map: {str(self.inst_map).replace(newline, newline_tab)}\n"
|
213
138
|
f"\tcoupling_map: {self.coupling_map}\n"
|
214
139
|
f"\tlayout_method: {self.layout_method}\n"
|
215
140
|
f"\trouting_method: {self.routing_method}\n"
|
216
141
|
f"\ttranslation_method: {self.translation_method}\n"
|
217
142
|
f"\tscheduling_method: {self.scheduling_method}\n"
|
218
143
|
f"\tinstruction_durations: {str(self.instruction_durations).replace(newline, newline_tab)}\n"
|
219
|
-
f"\tbackend_properties: {backend_props}\n"
|
220
144
|
f"\tapproximation_degree: {self.approximation_degree}\n"
|
221
145
|
f"\tseed_transpiler: {self.seed_transpiler}\n"
|
222
146
|
f"\ttiming_constraints: {self.timing_constraints}\n"
|