qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__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 +3 -9
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +35 -10
- 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 +236 -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 +469 -154
- 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/graph_state.py +1 -0
- 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 +7 -10
- 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 +14 -62
- 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 +7 -1
- qiskit/circuit/quantumcircuit.py +890 -564
- 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 +6 -4
- 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 +7 -8
- 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 +5 -82
- 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 +162 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +98 -130
- qiskit/qpy/binary_io/schedules.py +69 -439
- qiskit/qpy/binary_io/value.py +154 -31
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +34 -81
- 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 -11
- qiskit/result/result.py +38 -134
- 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/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 +4 -40
- qiskit/transpiler/passes/basis/basis_translator.py +5 -4
- 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 +3 -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 +2 -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 +32 -4
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
- 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 +134 -62
- 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 +107 -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 +78 -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/counts_visualization.py +4 -0
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/library.py +4 -1
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +19 -2
- qiskit/visualization/timeline/core.py +19 -13
- qiskit/visualization/timeline/interface.py +19 -18
- qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.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.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
- {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -14,7 +14,6 @@
|
|
14
14
|
"""Common preset passmanager generators."""
|
15
15
|
|
16
16
|
import collections
|
17
|
-
import warnings
|
18
17
|
from typing import Optional
|
19
18
|
|
20
19
|
from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
|
@@ -42,34 +41,34 @@ from qiskit.transpiler.passes import EnlargeWithAncilla
|
|
42
41
|
from qiskit.transpiler.passes import ApplyLayout
|
43
42
|
from qiskit.transpiler.passes import RemoveResetInZeroState
|
44
43
|
from qiskit.transpiler.passes import FilterOpNodes
|
45
|
-
from qiskit.transpiler.passes import ValidatePulseGates
|
46
44
|
from qiskit.transpiler.passes import PadDelay
|
47
45
|
from qiskit.transpiler.passes import InstructionDurationCheck
|
48
46
|
from qiskit.transpiler.passes import ConstrainedReschedule
|
49
|
-
from qiskit.transpiler.passes import PulseGates
|
50
47
|
from qiskit.transpiler.passes import ContainsInstruction
|
51
48
|
from qiskit.transpiler.passes import VF2PostLayout
|
52
49
|
from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
|
53
50
|
from qiskit.transpiler.passes.layout.vf2_post_layout import VF2PostLayoutStopReason
|
54
51
|
from qiskit.transpiler.exceptions import TranspilerError
|
55
52
|
from qiskit.transpiler.layout import Layout
|
56
|
-
from qiskit.utils
|
57
|
-
|
53
|
+
from qiskit.utils import deprecate_func
|
54
|
+
|
58
55
|
|
59
56
|
_ControlFlowState = collections.namedtuple("_ControlFlowState", ("working", "not_working"))
|
60
57
|
|
61
58
|
# Any method neither known good nor known bad (i.e. not a Terra-internal pass) is passed through
|
62
59
|
# without error, since it is being supplied by a plugin and we don't have any knowledge of these.
|
63
60
|
_CONTROL_FLOW_STATES = {
|
64
|
-
"layout_method": _ControlFlowState(
|
61
|
+
"layout_method": _ControlFlowState(
|
62
|
+
working={"default", "trivial", "dense", "sabre"}, not_working=set()
|
63
|
+
),
|
65
64
|
"routing_method": _ControlFlowState(
|
66
|
-
working={"none", "stochastic", "sabre"}, not_working={"lookahead", "basic"}
|
65
|
+
working={"default", "none", "stochastic", "sabre"}, not_working={"lookahead", "basic"}
|
67
66
|
),
|
68
67
|
"translation_method": _ControlFlowState(
|
69
|
-
working={"translator", "synthesis"},
|
68
|
+
working={"default", "translator", "synthesis"},
|
70
69
|
not_working=set(),
|
71
70
|
),
|
72
|
-
"optimization_method": _ControlFlowState(working=
|
71
|
+
"optimization_method": _ControlFlowState(working={"default"}, not_working=set()),
|
73
72
|
"scheduling_method": _ControlFlowState(working=set(), not_working={"alap", "asap"}),
|
74
73
|
}
|
75
74
|
|
@@ -86,9 +85,9 @@ class _InvalidControlFlowForBackend:
|
|
86
85
|
# Explicitly stateful closure to allow pickling.
|
87
86
|
|
88
87
|
def __init__(self, basis_gates=(), target=None):
|
89
|
-
if target is not None:
|
88
|
+
if target is not None and len(target.operation_names) > 0:
|
90
89
|
self.unsupported = [op for op in CONTROL_FLOW_OP_NAMES if op not in target]
|
91
|
-
elif basis_gates is not None:
|
90
|
+
elif basis_gates is not None and len(basis_gates) > 0:
|
92
91
|
basis_gates = set(basis_gates)
|
93
92
|
self.unsupported = [op for op in CONTROL_FLOW_OP_NAMES if op not in basis_gates]
|
94
93
|
else:
|
@@ -276,23 +275,12 @@ def _apply_post_layout_condition(property_set):
|
|
276
275
|
)
|
277
276
|
|
278
277
|
|
279
|
-
@deprecate_arg(
|
280
|
-
name="backend_properties",
|
281
|
-
since="1.4",
|
282
|
-
package_name="Qiskit",
|
283
|
-
removal_timeline="in Qiskit 2.0",
|
284
|
-
additional_msg="The BackendProperties data structure has been deprecated and will be "
|
285
|
-
"removed in Qiskit 2.0. The required `target` input argument should be used "
|
286
|
-
"instead. You can use Target.from_configuration() to build the target from the properties "
|
287
|
-
"object, but in 2.0 you will need to generate a target directly.",
|
288
|
-
)
|
289
278
|
def generate_routing_passmanager(
|
290
279
|
routing_pass,
|
291
280
|
target,
|
292
281
|
coupling_map=None,
|
293
282
|
vf2_call_limit=None,
|
294
|
-
|
295
|
-
seed_transpiler=None,
|
283
|
+
seed_transpiler=-1,
|
296
284
|
check_trivial=False,
|
297
285
|
use_barrier_before_measurement=True,
|
298
286
|
vf2_max_trials=None,
|
@@ -308,10 +296,11 @@ def generate_routing_passmanager(
|
|
308
296
|
vf2_call_limit (int): The internal call limit for the vf2 post layout
|
309
297
|
pass. If this is ``None`` or ``0`` the vf2 post layout will not be
|
310
298
|
run.
|
311
|
-
backend_properties (BackendProperties): Properties of a backend to
|
312
|
-
synthesize for (e.g. gate fidelities).
|
313
299
|
seed_transpiler (int): Sets random seed for the stochastic parts of
|
314
|
-
the transpiler.
|
300
|
+
the transpiler. This is currently only used for :class:`.VF2PostLayout` and the
|
301
|
+
default value of ``-1`` is strongly recommended (which is no randomization).
|
302
|
+
If a value of ``None`` is provided this will seed from system
|
303
|
+
entropy.
|
315
304
|
check_trivial (bool): If set to true this will condition running the
|
316
305
|
:class:`~.VF2PostLayout` pass after routing on whether a trivial
|
317
306
|
layout was tried and was found to not be perfect. This is only
|
@@ -362,34 +351,19 @@ def generate_routing_passmanager(
|
|
362
351
|
routing.append(ConditionalController(routing_pass, condition=_swap_condition))
|
363
352
|
|
364
353
|
is_vf2_fully_bounded = vf2_call_limit and vf2_max_trials
|
365
|
-
if
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
message=".*argument ``coupling_map`` is deprecated as of Qiskit 1.4",
|
377
|
-
module="qiskit",
|
378
|
-
)
|
379
|
-
routing.append(
|
380
|
-
ConditionalController(
|
381
|
-
VF2PostLayout(
|
382
|
-
target,
|
383
|
-
coupling_map,
|
384
|
-
backend_properties,
|
385
|
-
seed_transpiler,
|
386
|
-
call_limit=vf2_call_limit,
|
387
|
-
max_trials=vf2_max_trials,
|
388
|
-
strict_direction=False,
|
389
|
-
),
|
390
|
-
condition=_run_post_layout_condition,
|
391
|
-
)
|
354
|
+
if target is not None and is_vf2_fully_bounded:
|
355
|
+
routing.append(
|
356
|
+
ConditionalController(
|
357
|
+
VF2PostLayout(
|
358
|
+
target,
|
359
|
+
seed=seed_transpiler,
|
360
|
+
call_limit=vf2_call_limit,
|
361
|
+
max_trials=vf2_max_trials,
|
362
|
+
strict_direction=False,
|
363
|
+
),
|
364
|
+
condition=_run_post_layout_condition,
|
392
365
|
)
|
366
|
+
)
|
393
367
|
routing.append(ConditionalController(ApplyLayout(), condition=_apply_post_layout_condition))
|
394
368
|
|
395
369
|
def filter_fn(node):
|
@@ -400,11 +374,19 @@ def generate_routing_passmanager(
|
|
400
374
|
return routing
|
401
375
|
|
402
376
|
|
377
|
+
@deprecate_func(
|
378
|
+
since="2.0",
|
379
|
+
additional_msg=(
|
380
|
+
"Translation plugins are now required to respect ISA directionality,"
|
381
|
+
" so typically no replacement is necessary."
|
382
|
+
),
|
383
|
+
removal_timeline="in Qiskit 3.0",
|
384
|
+
)
|
403
385
|
def generate_pre_op_passmanager(target=None, coupling_map=None, remove_reset_in_zero=False):
|
404
386
|
"""Generate a pre-optimization loop :class:`~qiskit.transpiler.PassManager`
|
405
387
|
|
406
388
|
This pass manager will check to ensure that directionality from the coupling
|
407
|
-
map is respected
|
389
|
+
map is respected.
|
408
390
|
|
409
391
|
Args:
|
410
392
|
target (Target): the :class:`~.Target` object representing the backend
|
@@ -433,23 +415,12 @@ def generate_pre_op_passmanager(target=None, coupling_map=None, remove_reset_in_
|
|
433
415
|
return pre_opt
|
434
416
|
|
435
417
|
|
436
|
-
@deprecate_arg(
|
437
|
-
name="backend_properties",
|
438
|
-
since="1.4",
|
439
|
-
package_name="Qiskit",
|
440
|
-
removal_timeline="in Qiskit 2.0",
|
441
|
-
additional_msg="The BackendProperties data structure has been deprecated and will be "
|
442
|
-
"removed in Qiskit 2.0. The required `target` input argument should be used "
|
443
|
-
"instead. You can use Target.from_configuration() to build the target from the properties "
|
444
|
-
"object, but in 2.0 you will need to generate a target directly.",
|
445
|
-
)
|
446
418
|
def generate_translation_passmanager(
|
447
419
|
target,
|
448
420
|
basis_gates=None,
|
449
421
|
method="translator",
|
450
422
|
approximation_degree=None,
|
451
423
|
coupling_map=None,
|
452
|
-
backend_props=None,
|
453
424
|
unitary_synthesis_method="default",
|
454
425
|
unitary_synthesis_plugin_config=None,
|
455
426
|
hls_config=None,
|
@@ -472,8 +443,6 @@ def generate_translation_passmanager(
|
|
472
443
|
unitary_synthesis_plugin_config (dict): The optional dictionary plugin
|
473
444
|
configuration, this is plugin specific refer to the specified plugin's
|
474
445
|
documentation for how to use.
|
475
|
-
backend_props (BackendProperties): Properties of a backend to
|
476
|
-
synthesize for (e.g. gate fidelities).
|
477
446
|
unitary_synthesis_method (str): The unitary synthesis method to use. You can
|
478
447
|
see a list of installed plugins with :func:`.unitary_synthesis_plugin_names`.
|
479
448
|
hls_config (HLSConfig): An optional configuration class to use for
|
@@ -488,102 +457,116 @@ def generate_translation_passmanager(
|
|
488
457
|
Raises:
|
489
458
|
TranspilerError: If the ``method`` kwarg is not a valid value
|
490
459
|
"""
|
460
|
+
if basis_gates is None and target is None:
|
461
|
+
return PassManager([])
|
462
|
+
|
491
463
|
if method == "translator":
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
equivalence_library=sel,
|
517
|
-
basis_gates=basis_gates,
|
518
|
-
qubits_initially_zero=qubits_initially_zero,
|
519
|
-
),
|
520
|
-
BasisTranslator(sel, basis_gates, target),
|
521
|
-
]
|
464
|
+
translator = BasisTranslator(sel, basis_gates, target)
|
465
|
+
unroll = [
|
466
|
+
# Use unitary synthesis for basis aware decomposition of
|
467
|
+
# UnitaryGates before custom unrolling
|
468
|
+
UnitarySynthesis(
|
469
|
+
basis_gates,
|
470
|
+
approximation_degree=approximation_degree,
|
471
|
+
coupling_map=coupling_map,
|
472
|
+
plugin_config=unitary_synthesis_plugin_config,
|
473
|
+
method=unitary_synthesis_method,
|
474
|
+
target=target,
|
475
|
+
),
|
476
|
+
HighLevelSynthesis(
|
477
|
+
hls_config=hls_config,
|
478
|
+
coupling_map=coupling_map,
|
479
|
+
target=target,
|
480
|
+
use_qubit_indices=True,
|
481
|
+
equivalence_library=sel,
|
482
|
+
basis_gates=basis_gates,
|
483
|
+
qubits_initially_zero=qubits_initially_zero,
|
484
|
+
),
|
485
|
+
translator,
|
486
|
+
]
|
487
|
+
fix_1q = [translator]
|
522
488
|
elif method == "synthesis":
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
489
|
+
unroll = [
|
490
|
+
# # Use unitary synthesis for basis aware decomposition of
|
491
|
+
# UnitaryGates > 2q before collection
|
492
|
+
UnitarySynthesis(
|
493
|
+
basis_gates,
|
494
|
+
approximation_degree=approximation_degree,
|
495
|
+
coupling_map=coupling_map,
|
496
|
+
plugin_config=unitary_synthesis_plugin_config,
|
497
|
+
method=unitary_synthesis_method,
|
498
|
+
min_qubits=3,
|
499
|
+
target=target,
|
500
|
+
),
|
501
|
+
HighLevelSynthesis(
|
502
|
+
hls_config=hls_config,
|
503
|
+
coupling_map=coupling_map,
|
504
|
+
target=target,
|
505
|
+
use_qubit_indices=True,
|
506
|
+
basis_gates=basis_gates,
|
507
|
+
min_qubits=3,
|
508
|
+
qubits_initially_zero=qubits_initially_zero,
|
509
|
+
),
|
510
|
+
Unroll3qOrMore(target=target, basis_gates=basis_gates),
|
511
|
+
Collect2qBlocks(),
|
512
|
+
Collect1qRuns(),
|
513
|
+
ConsolidateBlocks(
|
514
|
+
basis_gates=basis_gates, target=target, approximation_degree=approximation_degree
|
515
|
+
),
|
516
|
+
UnitarySynthesis(
|
517
|
+
basis_gates=basis_gates,
|
518
|
+
approximation_degree=approximation_degree,
|
519
|
+
coupling_map=coupling_map,
|
520
|
+
plugin_config=unitary_synthesis_plugin_config,
|
521
|
+
method=unitary_synthesis_method,
|
522
|
+
target=target,
|
523
|
+
),
|
524
|
+
HighLevelSynthesis(
|
525
|
+
hls_config=hls_config,
|
526
|
+
coupling_map=coupling_map,
|
527
|
+
target=target,
|
528
|
+
use_qubit_indices=True,
|
529
|
+
basis_gates=basis_gates,
|
530
|
+
qubits_initially_zero=qubits_initially_zero,
|
531
|
+
),
|
532
|
+
]
|
533
|
+
fix_1q = [
|
534
|
+
Collect1qRuns(),
|
535
|
+
ConsolidateBlocks(
|
536
|
+
basis_gates=basis_gates, target=target, approximation_degree=approximation_degree
|
537
|
+
),
|
538
|
+
UnitarySynthesis(
|
539
|
+
basis_gates=basis_gates,
|
540
|
+
approximation_degree=approximation_degree,
|
541
|
+
coupling_map=coupling_map,
|
542
|
+
plugin_config=unitary_synthesis_plugin_config,
|
543
|
+
method=unitary_synthesis_method,
|
544
|
+
target=target,
|
545
|
+
),
|
546
|
+
]
|
578
547
|
else:
|
579
548
|
raise TranspilerError(f"Invalid translation method {method}.")
|
549
|
+
# Our built-ins don't 100% guarantee that 2q gate direction is respected, so we might need to
|
550
|
+
# run a little bit of fix up on them. `GateDirection` doesn't guarantee that 1q gates are
|
551
|
+
# ISA safe after it runs, so we need another run too.
|
552
|
+
if (coupling_map and not coupling_map.is_symmetric) or (
|
553
|
+
target is not None and target.get_non_global_operation_names(strict_direction=True)
|
554
|
+
):
|
555
|
+
unroll.append(CheckGateDirection(coupling_map, target=target))
|
556
|
+
|
557
|
+
def _direction_condition(property_set):
|
558
|
+
return not property_set["is_direction_mapped"]
|
559
|
+
|
560
|
+
unroll.append(
|
561
|
+
ConditionalController(
|
562
|
+
[GateDirection(coupling_map, target=target)] + fix_1q,
|
563
|
+
condition=_direction_condition,
|
564
|
+
)
|
565
|
+
)
|
580
566
|
return PassManager(unroll)
|
581
567
|
|
582
568
|
|
583
|
-
|
584
|
-
def generate_scheduling(
|
585
|
-
instruction_durations, scheduling_method, timing_constraints, inst_map, target=None
|
586
|
-
):
|
569
|
+
def generate_scheduling(instruction_durations, scheduling_method, timing_constraints, target=None):
|
587
570
|
"""Generate a post optimization scheduling :class:`~qiskit.transpiler.PassManager`
|
588
571
|
|
589
572
|
Args:
|
@@ -592,7 +575,6 @@ def generate_scheduling(
|
|
592
575
|
``'asap'``/``'as_soon_as_possible'`` or
|
593
576
|
``'alap'``/``'as_late_as_possible'``
|
594
577
|
timing_constraints (TimingConstraints): Hardware time alignment restrictions.
|
595
|
-
inst_map (InstructionScheduleMap): DEPRECATED. Mapping object that maps gate to schedule.
|
596
578
|
target (Target): The :class:`~.Target` object representing the backend
|
597
579
|
|
598
580
|
Returns:
|
@@ -602,8 +584,6 @@ def generate_scheduling(
|
|
602
584
|
TranspilerError: If the ``scheduling_method`` kwarg is not a valid value
|
603
585
|
"""
|
604
586
|
scheduling = PassManager()
|
605
|
-
if inst_map and inst_map.has_custom_gate():
|
606
|
-
scheduling.append(PulseGates(inst_map=inst_map, target=target))
|
607
587
|
if scheduling_method:
|
608
588
|
# Do scheduling after unit conversion.
|
609
589
|
scheduler = {
|
@@ -656,16 +636,9 @@ def generate_scheduling(
|
|
656
636
|
condition=_require_alignment,
|
657
637
|
)
|
658
638
|
)
|
659
|
-
scheduling.append(
|
660
|
-
ValidatePulseGates(
|
661
|
-
granularity=timing_constraints.granularity,
|
662
|
-
min_length=timing_constraints.min_length,
|
663
|
-
target=target,
|
664
|
-
)
|
665
|
-
)
|
666
639
|
if scheduling_method:
|
667
640
|
# Call padding pass if circuit is scheduled
|
668
|
-
scheduling.append(PadDelay(target=target))
|
641
|
+
scheduling.append(PadDelay(target=target, durations=instruction_durations))
|
669
642
|
|
670
643
|
return scheduling
|
671
644
|
|