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
qiskit/circuit/random/utils.py
CHANGED
@@ -54,9 +54,9 @@ def random_circuit(
|
|
54
54
|
reset (bool): if True, insert middle resets
|
55
55
|
seed (int): sets random seed (optional)
|
56
56
|
num_operand_distribution (dict): a distribution of gates that specifies the ratio
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
of 1-qubit, 2-qubit, 3-qubit, ..., n-qubit gates in the random circuit. Expect a
|
58
|
+
deviation from the specified ratios that depends on the size of the requested
|
59
|
+
random circuit. (optional)
|
60
60
|
|
61
61
|
Returns:
|
62
62
|
QuantumCircuit: constructed circuit
|
@@ -274,9 +274,15 @@ def random_circuit(
|
|
274
274
|
if is_cond:
|
275
275
|
qc.measure(qc.qubits, cr)
|
276
276
|
# The condition values are required to be bigints, not Numpy's fixed-width type.
|
277
|
-
|
278
|
-
|
279
|
-
|
277
|
+
with qc.if_test((cr, int(condition_values[c_ptr]))):
|
278
|
+
c_ptr += 1
|
279
|
+
qc._append(
|
280
|
+
CircuitInstruction(operation=operation, qubits=qubits[q_start:q_end])
|
281
|
+
)
|
282
|
+
else:
|
283
|
+
qc._append(
|
284
|
+
CircuitInstruction(operation=operation, qubits=qubits[q_start:q_end])
|
285
|
+
)
|
280
286
|
else:
|
281
287
|
for gate, q_start, q_end, p_start, p_end in zip(
|
282
288
|
gate_specs["class"], q_indices[:-1], q_indices[1:], p_indices[:-1], p_indices[1:]
|
qiskit/circuit/reset.py
CHANGED
@@ -15,17 +15,20 @@ Qubit reset to computational zero.
|
|
15
15
|
"""
|
16
16
|
|
17
17
|
from qiskit.circuit.singleton import SingletonInstruction, stdlib_singleton_key
|
18
|
+
from qiskit._accelerate.circuit import StandardInstructionType
|
18
19
|
|
19
20
|
|
20
21
|
class Reset(SingletonInstruction):
|
21
22
|
r"""Incoherently reset a qubit to the :math:`\lvert0\rangle` state."""
|
22
23
|
|
23
|
-
|
24
|
+
_standard_instruction_type = StandardInstructionType.Reset
|
25
|
+
|
26
|
+
def __init__(self, label=None):
|
24
27
|
"""
|
25
28
|
Args:
|
26
29
|
label: optional string label of this instruction.
|
27
30
|
"""
|
28
|
-
super().__init__("reset", 1, 0, [], label=label
|
31
|
+
super().__init__("reset", 1, 0, [], label=label)
|
29
32
|
|
30
33
|
_singleton_lookup_key = stdlib_singleton_key()
|
31
34
|
|
qiskit/circuit/singleton.py
CHANGED
@@ -251,7 +251,6 @@ from __future__ import annotations
|
|
251
251
|
|
252
252
|
import functools
|
253
253
|
|
254
|
-
from qiskit.utils import deprecate_func
|
255
254
|
from .instruction import Instruction
|
256
255
|
from .gate import Gate
|
257
256
|
from .controlledgate import ControlledGate, _ctrl_state_to_int
|
@@ -490,10 +489,6 @@ class _SingletonInstructionOverrides(Instruction):
|
|
490
489
|
instruction._params = _frozenlist(instruction._params)
|
491
490
|
return instruction
|
492
491
|
|
493
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
494
|
-
def c_if(self, classical, val):
|
495
|
-
return self.to_mutable().c_if(classical, val)
|
496
|
-
|
497
492
|
def copy(self, name=None):
|
498
493
|
if name is None:
|
499
494
|
return self
|
@@ -513,8 +508,7 @@ class SingletonInstruction(Instruction, _SingletonBase, overrides=_SingletonInst
|
|
513
508
|
memory footprint of multiple instructions.
|
514
509
|
|
515
510
|
The exception to be aware of with this class though are the :class:`~.circuit.Instruction`
|
516
|
-
|
517
|
-
:attr:`~.Instruction.duration`, and :attr:`~.Instruction.unit` which can be set differently for
|
511
|
+
attribute :attr:`~.Instruction.label` which can be set differently for
|
518
512
|
specific instances of gates. For :class:`SingletonInstruction` usage to be sound setting these
|
519
513
|
attributes is not available and they can only be set at creation time, or on an object that has
|
520
514
|
been specifically made mutable using :meth:`~.Instruction.to_mutable`. If any of these
|
@@ -589,8 +583,8 @@ def stdlib_singleton_key(*, num_ctrl_qubits: int = 0):
|
|
589
583
|
|
590
584
|
if num_ctrl_qubits:
|
591
585
|
|
592
|
-
def key(label=None, ctrl_state=None, *,
|
593
|
-
if label is None and
|
586
|
+
def key(label=None, ctrl_state=None, *, _base_label=None):
|
587
|
+
if label is None and _base_label is None:
|
594
588
|
# Normalisation; we want all types for the control state to key the same.
|
595
589
|
ctrl_state = _ctrl_state_to_int(ctrl_state, num_ctrl_qubits)
|
596
590
|
return (ctrl_state,)
|
@@ -598,8 +592,8 @@ def stdlib_singleton_key(*, num_ctrl_qubits: int = 0):
|
|
598
592
|
|
599
593
|
else:
|
600
594
|
|
601
|
-
def key(label=None
|
602
|
-
if label is None
|
595
|
+
def key(label=None):
|
596
|
+
if label is None:
|
603
597
|
return ()
|
604
598
|
return None
|
605
599
|
|
qiskit/circuit/store.py
CHANGED
@@ -16,7 +16,6 @@ from __future__ import annotations
|
|
16
16
|
|
17
17
|
import typing
|
18
18
|
|
19
|
-
from qiskit.utils import deprecate_func
|
20
19
|
from .exceptions import CircuitError
|
21
20
|
from .classical import expr, types
|
22
21
|
from .instruction import Instruction
|
@@ -88,10 +87,3 @@ class Store(Instruction):
|
|
88
87
|
def rvalue(self):
|
89
88
|
"""Get the r-value :class:`~.expr.Expr` node that is being written into the l-value."""
|
90
89
|
return self.params[1]
|
91
|
-
|
92
|
-
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
93
|
-
def c_if(self, classical, val):
|
94
|
-
""":meta hidden:"""
|
95
|
-
raise NotImplementedError(
|
96
|
-
"stores cannot be conditioned with `c_if`; use a full `if_test` context instead"
|
97
|
-
)
|
qiskit/compiler/__init__.py
CHANGED
@@ -17,17 +17,11 @@ Compilation Routines (:mod:`qiskit.compiler`)
|
|
17
17
|
|
18
18
|
.. currentmodule:: qiskit.compiler
|
19
19
|
|
20
|
-
Circuit
|
20
|
+
Circuit Compilation Functions
|
21
21
|
=======================================
|
22
22
|
|
23
|
-
.. autofunction:: assemble
|
24
|
-
.. autofunction:: schedule
|
25
23
|
.. autofunction:: transpile
|
26
|
-
.. autofunction:: sequence
|
27
24
|
|
28
25
|
"""
|
29
26
|
|
30
|
-
from .assembler import assemble
|
31
27
|
from .transpiler import transpile
|
32
|
-
from .scheduler import schedule
|
33
|
-
from .sequencer import sequence
|
qiskit/compiler/transpiler.py
CHANGED
@@ -16,73 +16,35 @@
|
|
16
16
|
import logging
|
17
17
|
from time import time
|
18
18
|
from typing import List, Union, Dict, Callable, Any, Optional, TypeVar
|
19
|
-
import warnings
|
20
19
|
|
21
20
|
from qiskit import user_config
|
22
21
|
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
23
22
|
from qiskit.dagcircuit import DAGCircuit
|
24
23
|
from qiskit.providers.backend import Backend
|
25
|
-
from qiskit.providers.backend_compat import BackendV2Converter
|
26
|
-
from qiskit.providers.models.backendproperties import BackendProperties
|
27
|
-
from qiskit.pulse import Schedule, InstructionScheduleMap
|
28
24
|
from qiskit.transpiler import Layout, CouplingMap, PropertySet
|
29
25
|
from qiskit.transpiler.basepasses import BasePass
|
30
26
|
from qiskit.transpiler.exceptions import TranspilerError, CircuitTooWideForTarget
|
31
|
-
from qiskit.transpiler.instruction_durations import InstructionDurationsType
|
32
27
|
from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
|
33
28
|
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
|
34
29
|
from qiskit.transpiler.target import Target
|
35
|
-
from qiskit.utils import deprecate_arg
|
36
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
|
37
30
|
|
38
31
|
logger = logging.getLogger(__name__)
|
39
32
|
|
40
33
|
_CircuitT = TypeVar("_CircuitT", bound=Union[QuantumCircuit, List[QuantumCircuit]])
|
41
34
|
|
42
35
|
|
43
|
-
@deprecate_arg(
|
44
|
-
name="instruction_durations",
|
45
|
-
since="1.3",
|
46
|
-
package_name="Qiskit",
|
47
|
-
removal_timeline="in Qiskit 2.0",
|
48
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
49
|
-
"with defined instruction durations with "
|
50
|
-
"`Target.from_configuration(..., instruction_durations=...)`",
|
51
|
-
)
|
52
|
-
@deprecate_arg(
|
53
|
-
name="timing_constraints",
|
54
|
-
since="1.3",
|
55
|
-
package_name="Qiskit",
|
56
|
-
removal_timeline="in Qiskit 2.0",
|
57
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
58
|
-
"with defined timing constraints with "
|
59
|
-
"`Target.from_configuration(..., timing_constraints=...)`",
|
60
|
-
)
|
61
|
-
@deprecate_arg(
|
62
|
-
name="backend_properties",
|
63
|
-
since="1.3",
|
64
|
-
package_name="Qiskit",
|
65
|
-
removal_timeline="in Qiskit 2.0",
|
66
|
-
additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
|
67
|
-
"with defined properties with Target.from_configuration(..., backend_properties=...)",
|
68
|
-
)
|
69
|
-
@deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
|
70
36
|
def transpile( # pylint: disable=too-many-return-statements
|
71
37
|
circuits: _CircuitT,
|
72
38
|
backend: Optional[Backend] = None,
|
73
39
|
basis_gates: Optional[List[str]] = None,
|
74
|
-
inst_map: Optional[List[InstructionScheduleMap]] = None,
|
75
40
|
coupling_map: Optional[Union[CouplingMap, List[List[int]]]] = None,
|
76
|
-
backend_properties: Optional[BackendProperties] = None,
|
77
41
|
initial_layout: Optional[Union[Layout, Dict, List]] = None,
|
78
42
|
layout_method: Optional[str] = None,
|
79
43
|
routing_method: Optional[str] = None,
|
80
44
|
translation_method: Optional[str] = None,
|
81
45
|
scheduling_method: Optional[str] = None,
|
82
|
-
instruction_durations: Optional[InstructionDurationsType] = None,
|
83
46
|
dt: Optional[float] = None,
|
84
47
|
approximation_degree: Optional[float] = 1.0,
|
85
|
-
timing_constraints: Optional[Dict[str, int]] = None,
|
86
48
|
seed_transpiler: Optional[int] = None,
|
87
49
|
optimization_level: Optional[int] = None,
|
88
50
|
callback: Optional[Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any]] = None,
|
@@ -105,26 +67,21 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
105
67
|
|
106
68
|
The prioritization of transpilation target constraints works as follows: if a ``target``
|
107
69
|
input is provided, it will take priority over any ``backend`` input or loose constraints
|
108
|
-
(``basis_gates``, ``
|
109
|
-
|
70
|
+
(``basis_gates``, ``coupling_map``, or ``dt``). If a ``backend`` is provided
|
71
|
+
together with any loose constraint
|
110
72
|
from the list above, the loose constraint will take priority over the corresponding backend
|
111
|
-
constraint. This behavior is
|
112
|
-
:class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
|
73
|
+
constraint. This behavior is summarized in the table below. The first column
|
113
74
|
in the table summarizes the potential user-provided constraints, and each cell shows whether
|
114
75
|
the priority is assigned to that specific constraint input or another input
|
115
|
-
(`target`/`backend(
|
116
|
-
|
117
|
-
============================ ========= ========================
|
118
|
-
User Provided target backend(
|
119
|
-
============================ ========= ========================
|
120
|
-
**basis_gates** target basis_gates
|
121
|
-
**coupling_map** target coupling_map
|
122
|
-
**
|
123
|
-
|
124
|
-
**dt** target dt dt
|
125
|
-
**timing_constraints** target timing_constraints timing_constraints
|
126
|
-
**backend_properties** target backend_properties backend_properties
|
127
|
-
============================ ========= ======================== =======================
|
76
|
+
(`target`/`backend(V2)`).
|
77
|
+
|
78
|
+
============================ ========= ========================
|
79
|
+
User Provided target backend(V2)
|
80
|
+
============================ ========= ========================
|
81
|
+
**basis_gates** target basis_gates
|
82
|
+
**coupling_map** target coupling_map
|
83
|
+
**dt** target dt
|
84
|
+
============================ ========= ========================
|
128
85
|
|
129
86
|
Args:
|
130
87
|
circuits: Circuit(s) to transpile
|
@@ -133,12 +90,6 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
133
90
|
will override the backend's.
|
134
91
|
basis_gates: List of basis gate names to unroll to
|
135
92
|
(e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
|
136
|
-
inst_map: DEPRECATED. Mapping of unrolled gates to pulse schedules. If this is not provided,
|
137
|
-
transpiler tries to get from the backend. If any user defined calibration
|
138
|
-
is found in the map and this is used in a circuit, transpiler attaches
|
139
|
-
the custom gate definition to the circuit. This enables one to flexibly
|
140
|
-
override the low-level instruction implementation. This feature is available
|
141
|
-
iff the backend supports the pulse gate experiment.
|
142
93
|
coupling_map: Directed coupling map (perhaps custom) to target in mapping. If
|
143
94
|
the coupling map is symmetric, both directions need to be specified.
|
144
95
|
|
@@ -148,10 +99,6 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
148
99
|
#. List, must be given as an adjacency matrix, where each entry
|
149
100
|
specifies all directed two-qubit interactions supported by backend,
|
150
101
|
e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``
|
151
|
-
|
152
|
-
backend_properties: properties returned by a backend, including information on gate
|
153
|
-
errors, readout errors, qubit coherence times, etc. Find a backend
|
154
|
-
that provides this information with: ``backend.properties()``
|
155
102
|
initial_layout: Initial position of virtual qubits on physical qubits.
|
156
103
|
If this layout makes the circuit compatible with the coupling_map
|
157
104
|
constraints, it will be used. The final layout is not guaranteed to be the same,
|
@@ -191,10 +138,10 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
191
138
|
This can also be the external plugin name to use for the ``routing`` stage.
|
192
139
|
You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
|
193
140
|
``"routing"`` for the ``stage_name`` argument.
|
194
|
-
translation_method: Name of translation pass (``"
|
195
|
-
This can also be the external plugin name to use for the
|
196
|
-
You can see a list of installed plugins by using
|
197
|
-
``"translation"`` for the ``stage_name`` argument.
|
141
|
+
translation_method: Name of translation pass (``"default"``, ``"translator"`` or
|
142
|
+
``"synthesis"``). This can also be the external plugin name to use for the
|
143
|
+
``translation`` stage. You can see a list of installed plugins by using
|
144
|
+
:func:`~.list_stage_plugins` with ``"translation"`` for the ``stage_name`` argument.
|
198
145
|
scheduling_method: Name of scheduling pass.
|
199
146
|
* ``'as_soon_as_possible'``: Schedule instructions greedily, as early as possible
|
200
147
|
on a qubit resource. (alias: ``'asap'``)
|
@@ -204,40 +151,10 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
204
151
|
to use for the ``scheduling`` stage. You can see a list of installed plugins by
|
205
152
|
using :func:`~.list_stage_plugins` with ``"scheduling"`` for the ``stage_name``
|
206
153
|
argument.
|
207
|
-
instruction_durations: Durations of instructions.
|
208
|
-
Applicable only if scheduling_method is specified.
|
209
|
-
The gate lengths defined in ``backend.properties`` are used as default.
|
210
|
-
They are overwritten if this ``instruction_durations`` is specified.
|
211
|
-
The format of ``instruction_durations`` must be as follows.
|
212
|
-
The `instruction_durations` must be given as a list of tuples
|
213
|
-
[(instruction_name, qubits, duration, unit), ...].
|
214
|
-
| [('cx', [0, 1], 12.3, 'ns'), ('u3', [0], 4.56, 'ns')]
|
215
|
-
| [('cx', [0, 1], 1000), ('u3', [0], 300)]
|
216
|
-
If unit is omitted, the default is 'dt', which is a sample time depending on backend.
|
217
|
-
If the time unit is 'dt', the duration must be an integer.
|
218
154
|
dt: Backend sample time (resolution) in seconds.
|
219
|
-
If ``None`` (default), ``backend.
|
155
|
+
If ``None`` (default), ``backend.dt`` is used.
|
220
156
|
approximation_degree (float): heuristic dial used for circuit approximation
|
221
157
|
(1.0=no approximation, 0.0=maximal approximation)
|
222
|
-
timing_constraints: An optional control hardware restriction on instruction time resolution.
|
223
|
-
A quantum computer backend may report a set of restrictions, namely:
|
224
|
-
|
225
|
-
- granularity: An integer value representing minimum pulse gate
|
226
|
-
resolution in units of ``dt``. A user-defined pulse gate should have
|
227
|
-
duration of a multiple of this granularity value.
|
228
|
-
- min_length: An integer value representing minimum pulse gate
|
229
|
-
length in units of ``dt``. A user-defined pulse gate should be longer
|
230
|
-
than this length.
|
231
|
-
- pulse_alignment: An integer value representing a time resolution of gate
|
232
|
-
instruction starting time. Gate instruction should start at time which
|
233
|
-
is a multiple of the alignment value.
|
234
|
-
- acquire_alignment: An integer value representing a time resolution of measure
|
235
|
-
instruction starting time. Measure instruction should start at time which
|
236
|
-
is a multiple of the alignment value.
|
237
|
-
|
238
|
-
This information will be provided by the backend configuration.
|
239
|
-
If the backend doesn't have any restriction on the instruction time allocation,
|
240
|
-
then ``timing_constraints`` is None and no adjustment will be performed.
|
241
158
|
seed_transpiler: Sets random seed for the stochastic parts of the transpiler
|
242
159
|
optimization_level: How much optimization to perform on the circuits.
|
243
160
|
Higher levels generate more optimized circuits,
|
@@ -329,58 +246,13 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
329
246
|
if not circuits:
|
330
247
|
return []
|
331
248
|
|
332
|
-
# transpiling schedules is not supported yet.
|
333
249
|
start_time = time()
|
334
|
-
if all(isinstance(c, Schedule) for c in circuits):
|
335
|
-
warnings.warn("Transpiling schedules is not supported yet.", UserWarning)
|
336
|
-
end_time = time()
|
337
|
-
_log_transpile_time(start_time, end_time)
|
338
|
-
if arg_circuits_list:
|
339
|
-
return circuits
|
340
|
-
else:
|
341
|
-
return circuits[0]
|
342
250
|
|
343
251
|
if optimization_level is None:
|
344
252
|
# Take optimization level from the configuration or 1 as default.
|
345
253
|
config = user_config.get_config()
|
346
254
|
optimization_level = config.get("transpile_optimization_level", 2)
|
347
255
|
|
348
|
-
if backend is not None and getattr(backend, "version", 0) <= 1:
|
349
|
-
warnings.warn(
|
350
|
-
"The `transpile` function will stop supporting inputs of "
|
351
|
-
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
352
|
-
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
353
|
-
"should move to `BackendV2`.",
|
354
|
-
category=DeprecationWarning,
|
355
|
-
stacklevel=2,
|
356
|
-
)
|
357
|
-
with warnings.catch_warnings():
|
358
|
-
# This is a temporary conversion step to allow for a smoother transition
|
359
|
-
# to a fully target-based transpiler pipeline while maintaining the behavior
|
360
|
-
# of `transpile` with BackendV1 inputs.
|
361
|
-
# TODO BackendV1 is deprecated and this path can be
|
362
|
-
# removed once it gets removed:
|
363
|
-
# https://github.com/Qiskit/qiskit/pull/12850
|
364
|
-
warnings.filterwarnings(
|
365
|
-
"ignore",
|
366
|
-
category=DeprecationWarning,
|
367
|
-
message=r".+qiskit\.providers\.backend_compat\.BackendV2Converter.+",
|
368
|
-
module="qiskit",
|
369
|
-
)
|
370
|
-
backend = BackendV2Converter(backend)
|
371
|
-
|
372
|
-
if (
|
373
|
-
scheduling_method is not None
|
374
|
-
and backend is None
|
375
|
-
and target is None
|
376
|
-
and not instruction_durations
|
377
|
-
):
|
378
|
-
warnings.warn(
|
379
|
-
"When scheduling circuits without backend,"
|
380
|
-
" 'instruction_durations' should be usually provided.",
|
381
|
-
UserWarning,
|
382
|
-
)
|
383
|
-
|
384
256
|
if not ignore_backend_supplied_default_methods:
|
385
257
|
if scheduling_method is None and hasattr(backend, "get_scheduling_stage_plugin"):
|
386
258
|
scheduling_method = backend.get_scheduling_stage_plugin()
|
@@ -394,57 +266,27 @@ def transpile( # pylint: disable=too-many-return-statements
|
|
394
266
|
# Edge cases require using the old model (loose constraints) instead of building a target,
|
395
267
|
# but we don't populate the passmanager config with loose constraints unless it's one of
|
396
268
|
# the known edge cases to control the execution path.
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
"ignore",
|
419
|
-
category=DeprecationWarning,
|
420
|
-
message=".*``backend_properties`` is deprecated as of Qiskit 1.3.*",
|
421
|
-
module="qiskit",
|
422
|
-
)
|
423
|
-
pm = generate_preset_pass_manager(
|
424
|
-
optimization_level,
|
425
|
-
target=target,
|
426
|
-
backend=backend,
|
427
|
-
basis_gates=basis_gates,
|
428
|
-
coupling_map=coupling_map,
|
429
|
-
instruction_durations=instruction_durations,
|
430
|
-
backend_properties=backend_properties,
|
431
|
-
timing_constraints=timing_constraints,
|
432
|
-
inst_map=inst_map,
|
433
|
-
initial_layout=initial_layout,
|
434
|
-
layout_method=layout_method,
|
435
|
-
routing_method=routing_method,
|
436
|
-
translation_method=translation_method,
|
437
|
-
scheduling_method=scheduling_method,
|
438
|
-
approximation_degree=approximation_degree,
|
439
|
-
seed_transpiler=seed_transpiler,
|
440
|
-
unitary_synthesis_method=unitary_synthesis_method,
|
441
|
-
unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
|
442
|
-
hls_config=hls_config,
|
443
|
-
init_method=init_method,
|
444
|
-
optimization_method=optimization_method,
|
445
|
-
dt=dt,
|
446
|
-
qubits_initially_zero=qubits_initially_zero,
|
447
|
-
)
|
269
|
+
pm = generate_preset_pass_manager(
|
270
|
+
optimization_level,
|
271
|
+
target=target,
|
272
|
+
backend=backend,
|
273
|
+
basis_gates=basis_gates,
|
274
|
+
coupling_map=coupling_map,
|
275
|
+
initial_layout=initial_layout,
|
276
|
+
layout_method=layout_method,
|
277
|
+
routing_method=routing_method,
|
278
|
+
translation_method=translation_method,
|
279
|
+
scheduling_method=scheduling_method,
|
280
|
+
approximation_degree=approximation_degree,
|
281
|
+
seed_transpiler=seed_transpiler,
|
282
|
+
unitary_synthesis_method=unitary_synthesis_method,
|
283
|
+
unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
|
284
|
+
hls_config=hls_config,
|
285
|
+
init_method=init_method,
|
286
|
+
optimization_method=optimization_method,
|
287
|
+
dt=dt,
|
288
|
+
qubits_initially_zero=qubits_initially_zero,
|
289
|
+
)
|
448
290
|
|
449
291
|
out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
|
450
292
|
|
@@ -41,7 +41,9 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
|
|
41
41
|
the circuit.
|
42
42
|
|
43
43
|
Example:
|
44
|
-
..
|
44
|
+
.. plot::
|
45
|
+
:include-source:
|
46
|
+
:nofigs:
|
45
47
|
|
46
48
|
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
|
47
49
|
from qiskit.dagcircuit import DAGCircuit
|
@@ -53,7 +55,7 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
|
|
53
55
|
circ.h(q[0])
|
54
56
|
circ.cx(q[0], q[1])
|
55
57
|
circ.measure(q[0], c[0])
|
56
|
-
circ.rz(0.5, q[1])
|
58
|
+
circ.rz(0.5, q[1])
|
57
59
|
dag = circuit_to_dag(circ)
|
58
60
|
"""
|
59
61
|
# If we have an instance of BluePrintCircuit, make sure it is built by calling ._build()
|
@@ -27,7 +27,6 @@ def _circuit_to_dagdependency_v2(circuit):
|
|
27
27
|
dagdependency = _DAGDependencyV2()
|
28
28
|
dagdependency.name = circuit.name
|
29
29
|
dagdependency.metadata = circuit.metadata
|
30
|
-
dagdependency._calibrations = circuit._calibrations_prop
|
31
30
|
dagdependency.global_phase = circuit.global_phase
|
32
31
|
|
33
32
|
dagdependency.add_qubits(circuit.qubits)
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""Helper function for converting a circuit to a gate"""
|
15
15
|
from qiskit.circuit.annotated_operation import AnnotatedOperation
|
16
16
|
from qiskit.circuit.gate import Gate
|
17
|
-
from qiskit.circuit
|
17
|
+
from qiskit.circuit import QuantumRegister
|
18
18
|
from qiskit.exceptions import QiskitError
|
19
19
|
|
20
20
|
|
@@ -11,10 +11,11 @@
|
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
13
|
"""Helper function for converting a circuit to an instruction."""
|
14
|
+
from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
|
14
15
|
from qiskit.exceptions import QiskitError
|
15
16
|
from qiskit.circuit.instruction import Instruction
|
16
|
-
from qiskit.circuit
|
17
|
-
from qiskit.circuit
|
17
|
+
from qiskit.circuit import QuantumRegister
|
18
|
+
from qiskit.circuit import ClassicalRegister
|
18
19
|
|
19
20
|
|
20
21
|
def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None, label=None):
|
@@ -43,7 +44,9 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
|
|
43
44
|
yield the components comprising the original circuit.
|
44
45
|
|
45
46
|
Example:
|
46
|
-
..
|
47
|
+
.. plot::
|
48
|
+
:include-source:
|
49
|
+
:nofigs:
|
47
50
|
|
48
51
|
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
|
49
52
|
from qiskit.converters import circuit_to_instruction
|
@@ -54,7 +57,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
|
|
54
57
|
circ.h(q[0])
|
55
58
|
circ.cx(q[0], q[1])
|
56
59
|
circ.measure(q[0], c[0])
|
57
|
-
circ.rz(0.5, q[1])
|
60
|
+
circ.rz(0.5, q[1])
|
58
61
|
circuit_to_instruction(circ)
|
59
62
|
"""
|
60
63
|
# pylint: disable=cyclic-import
|
@@ -81,6 +84,10 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
|
|
81
84
|
"Circuits with internal variables cannot yet be converted to instructions."
|
82
85
|
" You may be able to use `QuantumCircuit.compose` to inline this circuit into another."
|
83
86
|
)
|
87
|
+
if CONTROL_FLOW_OP_NAMES.intersection(circuit.count_ops()):
|
88
|
+
raise QiskitError(
|
89
|
+
"Circuits with control flow operations cannot be converted to an instruction."
|
90
|
+
)
|
84
91
|
|
85
92
|
if parameter_map is None:
|
86
93
|
parameter_dict = {p: p for p in circuit.parameters}
|
@@ -117,36 +124,16 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
|
|
117
124
|
creg = ClassicalRegister(out_instruction.num_clbits, "c")
|
118
125
|
regs.append(creg)
|
119
126
|
|
120
|
-
clbit_map = {bit: creg[idx] for idx, bit in enumerate(circuit.clbits)}
|
121
|
-
operation_map = {}
|
122
|
-
|
123
|
-
def fix_condition(op):
|
124
|
-
original_id = id(op)
|
125
|
-
if (out := operation_map.get(original_id)) is not None:
|
126
|
-
return out
|
127
|
-
|
128
|
-
condition = getattr(op, "_condition", None)
|
129
|
-
if condition:
|
130
|
-
reg, val = condition
|
131
|
-
if isinstance(reg, Clbit):
|
132
|
-
op = op.c_if(clbit_map[reg], val)
|
133
|
-
elif reg.size == creg.size:
|
134
|
-
op = op.c_if(creg, val)
|
135
|
-
else:
|
136
|
-
raise QiskitError(
|
137
|
-
"Cannot convert condition in circuit with "
|
138
|
-
"multiple classical registers to instruction"
|
139
|
-
)
|
140
|
-
operation_map[original_id] = op
|
141
|
-
return op
|
142
|
-
|
143
127
|
data = target._data.copy()
|
144
128
|
data.replace_bits(qubits=qreg, clbits=creg)
|
145
|
-
data.map_nonstandard_ops(fix_condition)
|
146
129
|
|
147
|
-
qc = QuantumCircuit(
|
130
|
+
qc = QuantumCircuit(name=out_instruction.name)
|
148
131
|
qc._data = data
|
149
132
|
|
133
|
+
# Re-add the registers.
|
134
|
+
for reg in regs:
|
135
|
+
qc.add_register(reg)
|
136
|
+
|
150
137
|
if circuit.global_phase:
|
151
138
|
qc.global_phase = circuit.global_phase
|
152
139
|
|
@@ -49,7 +49,7 @@ def dag_to_circuit(dag, copy_operations=True):
|
|
49
49
|
circ.h(q[0])
|
50
50
|
circ.cx(q[0], q[1])
|
51
51
|
circ.measure(q[0], c[0])
|
52
|
-
circ.rz(0.5, q[1])
|
52
|
+
circ.rz(0.5, q[1])
|
53
53
|
dag = circuit_to_dag(circ)
|
54
54
|
circuit = dag_to_circuit(dag)
|
55
55
|
circuit.draw('mpl')
|
@@ -66,13 +66,13 @@ def dag_to_circuit(dag, copy_operations=True):
|
|
66
66
|
name=name,
|
67
67
|
global_phase=dag.global_phase,
|
68
68
|
inputs=dag.iter_input_vars(),
|
69
|
-
captures=dag.
|
69
|
+
captures=dag.iter_captures(),
|
70
70
|
)
|
71
71
|
for var in dag.iter_declared_vars():
|
72
72
|
circuit.add_uninitialized_var(var)
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
for stretch in dag.iter_declared_stretches():
|
74
|
+
circuit.add_stretch(stretch)
|
75
|
+
circuit.metadata = dag.metadata or {}
|
76
76
|
circuit._data = circuit_data
|
77
77
|
|
78
78
|
circuit._duration = dag.duration
|
@@ -27,7 +27,6 @@ def _dag_to_dagdependency_v2(dag):
|
|
27
27
|
dagdependency.name = dag.name
|
28
28
|
dagdependency.metadata = dag.metadata
|
29
29
|
dagdependency.global_phase = dag.global_phase
|
30
|
-
dagdependency.calibrations = dag._calibrations_prop
|
31
30
|
|
32
31
|
dagdependency.add_qubits(dag.qubits)
|
33
32
|
dagdependency.add_clbits(dag.clbits)
|