qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__cp39-abi3-win_amd64.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.pyd +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 +11 -0
- 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/circuit/tools/pi_check.py +3 -0
- 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 +96 -116
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +159 -33
- 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 -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/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 +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 +3 -2
- 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.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
- {qiskit-1.4.1.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.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -6,6 +6,9 @@ HalfAdder.default = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynt
|
|
6
6
|
HalfAdder.qft_d00 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisD00
|
7
7
|
HalfAdder.ripple_c04 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisC04
|
8
8
|
HalfAdder.ripple_v95 = qiskit.transpiler.passes.synthesis.hls_plugins:HalfAdderSynthesisV95
|
9
|
+
IntComp.default = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesisDefault
|
10
|
+
IntComp.noaux = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesisNoAux
|
11
|
+
IntComp.twos = qiskit.transpiler.passes.synthesis.hls_plugins:IntComparatorSynthesis2s
|
9
12
|
ModularAdder.default = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisDefault
|
10
13
|
ModularAdder.qft_d00 = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisD00
|
11
14
|
ModularAdder.ripple_c04 = qiskit.transpiler.passes.synthesis.hls_plugins:ModularAdderSynthesisC04
|
@@ -15,6 +18,8 @@ Multiplier.default = qiskit.transpiler.passes.synthesis.hls_plugins:MultiplierSy
|
|
15
18
|
Multiplier.qft_r17 = qiskit.transpiler.passes.synthesis.hls_plugins:MultiplierSynthesisR17
|
16
19
|
PauliEvolution.default = qiskit.transpiler.passes.synthesis.hls_plugins:PauliEvolutionSynthesisDefault
|
17
20
|
PauliEvolution.rustiq = qiskit.transpiler.passes.synthesis.hls_plugins:PauliEvolutionSynthesisRustiq
|
21
|
+
WeightedSum.default = qiskit.transpiler.passes.synthesis.hls_plugins:WeightedSumSynthesisDefault
|
22
|
+
annotated.default = qiskit.transpiler.passes.synthesis.hls_plugins:AnnotatedSynthesisDefault
|
18
23
|
clifford.ag = qiskit.transpiler.passes.synthesis.hls_plugins:AGSynthesisClifford
|
19
24
|
clifford.bm = qiskit.transpiler.passes.synthesis.hls_plugins:BMSynthesisClifford
|
20
25
|
clifford.default = qiskit.transpiler.passes.synthesis.hls_plugins:DefaultSynthesisClifford
|
@@ -56,10 +61,10 @@ default = qiskit.transpiler.preset_passmanagers.builtin_plugins:OptimizationPass
|
|
56
61
|
|
57
62
|
[qiskit.transpiler.routing]
|
58
63
|
basic = qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager
|
64
|
+
default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultRoutingPassManager
|
59
65
|
lookahead = qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager
|
60
66
|
none = qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager
|
61
67
|
sabre = qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager
|
62
|
-
stochastic = qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager
|
63
68
|
|
64
69
|
[qiskit.transpiler.scheduling]
|
65
70
|
alap = qiskit.transpiler.preset_passmanagers.builtin_plugins:AlapSchedulingPassManager
|
@@ -67,10 +72,11 @@ asap = qiskit.transpiler.preset_passmanagers.builtin_plugins:AsapSchedulingPassM
|
|
67
72
|
default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultSchedulingPassManager
|
68
73
|
|
69
74
|
[qiskit.transpiler.translation]
|
75
|
+
default = qiskit.transpiler.preset_passmanagers.builtin_plugins:DefaultTranslationPassManager
|
70
76
|
synthesis = qiskit.transpiler.preset_passmanagers.builtin_plugins:UnitarySynthesisPassManager
|
71
77
|
translator = qiskit.transpiler.preset_passmanagers.builtin_plugins:BasisTranslatorPassManager
|
72
78
|
|
73
79
|
[qiskit.unitary_synthesis]
|
74
80
|
aqc = qiskit.transpiler.passes.synthesis.aqc_plugin:AQCSynthesisPlugin
|
75
|
-
default = qiskit.transpiler.passes.synthesis.
|
81
|
+
default = qiskit.transpiler.passes.synthesis.default_unitary_synth_plugin:DefaultUnitarySynthesis
|
76
82
|
sk = qiskit.transpiler.passes.synthesis.solovay_kitaev_synthesis:SolovayKitaevSynthesis
|
qiskit/assembler/__init__.py
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2017, 2019.
|
4
|
-
#
|
5
|
-
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
-
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
-
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
-
#
|
9
|
-
# Any modifications or derivative works of this code must retain this
|
10
|
-
# copyright notice, and modified files need to carry a notice indicating
|
11
|
-
# that they have been altered from the originals.
|
12
|
-
|
13
|
-
"""
|
14
|
-
========================================================
|
15
|
-
Circuit and Schedule Assembler (:mod:`qiskit.assembler`)
|
16
|
-
========================================================
|
17
|
-
|
18
|
-
.. currentmodule:: qiskit.assembler
|
19
|
-
|
20
|
-
Functions
|
21
|
-
=========
|
22
|
-
|
23
|
-
|
24
|
-
.. autofunction:: assemble_circuits
|
25
|
-
|
26
|
-
.. autofunction:: assemble_schedules
|
27
|
-
|
28
|
-
.. autofunction:: disassemble
|
29
|
-
|
30
|
-
Classes
|
31
|
-
=======
|
32
|
-
|
33
|
-
.. autosummary::
|
34
|
-
:toctree: ../stubs/
|
35
|
-
|
36
|
-
RunConfig
|
37
|
-
"""
|
38
|
-
|
39
|
-
from qiskit.assembler.assemble_circuits import assemble_circuits
|
40
|
-
from qiskit.assembler.assemble_schedules import assemble_schedules
|
41
|
-
from qiskit.assembler.disassemble import disassemble
|
42
|
-
from qiskit.assembler.run_config import RunConfig
|
@@ -1,451 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2017, 2019.
|
4
|
-
#
|
5
|
-
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
-
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
-
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
-
#
|
9
|
-
# Any modifications or derivative works of this code must retain this
|
10
|
-
# copyright notice, and modified files need to carry a notice indicating
|
11
|
-
# that they have been altered from the originals.
|
12
|
-
|
13
|
-
"""Assemble function for converting a list of circuits into a qobj."""
|
14
|
-
import copy
|
15
|
-
import warnings
|
16
|
-
from collections import defaultdict
|
17
|
-
from typing import Dict, List, Optional, Tuple
|
18
|
-
|
19
|
-
from qiskit.assembler.run_config import RunConfig
|
20
|
-
from qiskit.assembler.assemble_schedules import _assemble_instructions as _assemble_schedule
|
21
|
-
from qiskit.circuit import QuantumCircuit
|
22
|
-
from qiskit.circuit.classicalregister import Clbit
|
23
|
-
from qiskit.exceptions import QiskitError
|
24
|
-
from qiskit.qobj import (
|
25
|
-
QasmQobj,
|
26
|
-
QobjExperimentHeader,
|
27
|
-
QasmQobjInstruction,
|
28
|
-
QasmQobjExperimentConfig,
|
29
|
-
QasmQobjExperiment,
|
30
|
-
QasmQobjConfig,
|
31
|
-
QasmExperimentCalibrations,
|
32
|
-
GateCalibration,
|
33
|
-
PulseQobjInstruction,
|
34
|
-
PulseLibraryItem,
|
35
|
-
converters,
|
36
|
-
QobjHeader,
|
37
|
-
)
|
38
|
-
from qiskit.utils.parallel import parallel_map
|
39
|
-
from qiskit.utils import deprecate_func
|
40
|
-
|
41
|
-
|
42
|
-
PulseLibrary = Dict[str, List[complex]]
|
43
|
-
|
44
|
-
|
45
|
-
def _assemble_circuit(
|
46
|
-
circuit: QuantumCircuit, run_config: RunConfig
|
47
|
-
) -> Tuple[QasmQobjExperiment, Optional[PulseLibrary]]:
|
48
|
-
"""Assemble one circuit.
|
49
|
-
|
50
|
-
Args:
|
51
|
-
circuit: circuit to assemble
|
52
|
-
run_config: configuration of the runtime environment
|
53
|
-
|
54
|
-
Returns:
|
55
|
-
One experiment for the QasmQobj, and pulse library for pulse gates (which could be None)
|
56
|
-
|
57
|
-
Raises:
|
58
|
-
QiskitError: when the circuit has unit other than 'dt'.
|
59
|
-
"""
|
60
|
-
if circuit.unit != "dt":
|
61
|
-
raise QiskitError(
|
62
|
-
f"Unable to assemble circuit with unit '{circuit.unit}', which must be 'dt'."
|
63
|
-
)
|
64
|
-
|
65
|
-
# header data
|
66
|
-
num_qubits = 0
|
67
|
-
memory_slots = 0
|
68
|
-
qubit_labels = []
|
69
|
-
clbit_labels = []
|
70
|
-
|
71
|
-
qreg_sizes = []
|
72
|
-
creg_sizes = []
|
73
|
-
for qreg in circuit.qregs:
|
74
|
-
qreg_sizes.append([qreg.name, qreg.size])
|
75
|
-
for j in range(qreg.size):
|
76
|
-
qubit_labels.append([qreg.name, j])
|
77
|
-
num_qubits += qreg.size
|
78
|
-
for creg in circuit.cregs:
|
79
|
-
creg_sizes.append([creg.name, creg.size])
|
80
|
-
for j in range(creg.size):
|
81
|
-
clbit_labels.append([creg.name, j])
|
82
|
-
memory_slots += creg.size
|
83
|
-
|
84
|
-
qubit_indices = {qubit: idx for idx, qubit in enumerate(circuit.qubits)}
|
85
|
-
clbit_indices = {clbit: idx for idx, clbit in enumerate(circuit.clbits)}
|
86
|
-
|
87
|
-
# TODO: why do we need creq_sizes and qreg_sizes in header
|
88
|
-
# TODO: we need to rethink memory_slots as they are tied to classical bit
|
89
|
-
metadata = circuit.metadata
|
90
|
-
if metadata is None:
|
91
|
-
metadata = {}
|
92
|
-
with warnings.catch_warnings():
|
93
|
-
# The class QobjExperimentHeader is deprecated
|
94
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
95
|
-
header = QobjExperimentHeader(
|
96
|
-
qubit_labels=qubit_labels,
|
97
|
-
n_qubits=num_qubits,
|
98
|
-
qreg_sizes=qreg_sizes,
|
99
|
-
clbit_labels=clbit_labels,
|
100
|
-
memory_slots=memory_slots,
|
101
|
-
creg_sizes=creg_sizes,
|
102
|
-
name=circuit.name,
|
103
|
-
global_phase=float(circuit.global_phase),
|
104
|
-
metadata=metadata,
|
105
|
-
)
|
106
|
-
|
107
|
-
# TODO: why do we need n_qubits and memory_slots in both the header and the config
|
108
|
-
with warnings.catch_warnings():
|
109
|
-
# The class QasmQobjExperimentConfig is deprecated
|
110
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
111
|
-
config = QasmQobjExperimentConfig(n_qubits=num_qubits, memory_slots=memory_slots)
|
112
|
-
calibrations, pulse_library = _assemble_pulse_gates(circuit, run_config)
|
113
|
-
if calibrations:
|
114
|
-
config.calibrations = calibrations
|
115
|
-
|
116
|
-
# Convert conditionals from OpenQASM-2-style (creg ?= int) to qobj-style
|
117
|
-
# (register_bit ?= 1), by assuming device has unlimited register slots
|
118
|
-
# (supported only for simulators). Map all measures to a register matching
|
119
|
-
# their clbit_index, create a new register slot for every conditional gate
|
120
|
-
# and add a bfunc to map the creg=val mask onto the gating register bit.
|
121
|
-
|
122
|
-
is_conditional_experiment = any(
|
123
|
-
getattr(instruction.operation, "condition", None) for instruction in circuit.data
|
124
|
-
)
|
125
|
-
max_conditional_idx = 0
|
126
|
-
|
127
|
-
instructions = []
|
128
|
-
for op_context in circuit.data:
|
129
|
-
instruction = op_context.operation._assemble()
|
130
|
-
|
131
|
-
# Add register attributes to the instruction
|
132
|
-
qargs = op_context.qubits
|
133
|
-
cargs = op_context.clbits
|
134
|
-
if qargs:
|
135
|
-
instruction.qubits = [qubit_indices[qubit] for qubit in qargs]
|
136
|
-
if cargs:
|
137
|
-
instruction.memory = [clbit_indices[clbit] for clbit in cargs]
|
138
|
-
# If the experiment has conditional instructions, assume every
|
139
|
-
# measurement result may be needed for a conditional gate.
|
140
|
-
if instruction.name == "measure" and is_conditional_experiment:
|
141
|
-
instruction.register = [clbit_indices[clbit] for clbit in cargs]
|
142
|
-
|
143
|
-
# To convert to a qobj-style conditional, insert a bfunc prior
|
144
|
-
# to the conditional instruction to map the creg ?= val condition
|
145
|
-
# onto a gating register bit.
|
146
|
-
if hasattr(instruction, "_condition"):
|
147
|
-
ctrl_reg, ctrl_val = instruction._condition
|
148
|
-
mask = 0
|
149
|
-
val = 0
|
150
|
-
if isinstance(ctrl_reg, Clbit):
|
151
|
-
mask = 1 << clbit_indices[ctrl_reg]
|
152
|
-
val = (ctrl_val & 1) << clbit_indices[ctrl_reg]
|
153
|
-
else:
|
154
|
-
for clbit in clbit_indices:
|
155
|
-
if clbit in ctrl_reg:
|
156
|
-
mask |= 1 << clbit_indices[clbit]
|
157
|
-
val |= ((ctrl_val >> list(ctrl_reg).index(clbit)) & 1) << clbit_indices[
|
158
|
-
clbit
|
159
|
-
]
|
160
|
-
|
161
|
-
conditional_reg_idx = memory_slots + max_conditional_idx
|
162
|
-
with warnings.catch_warnings():
|
163
|
-
# The class QasmQobjInstruction is deprecated
|
164
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
165
|
-
conversion_bfunc = QasmQobjInstruction(
|
166
|
-
name="bfunc",
|
167
|
-
mask="0x%X" % mask, # pylint: disable=consider-using-f-string
|
168
|
-
relation="==",
|
169
|
-
val="0x%X" % val, # pylint: disable=consider-using-f-string
|
170
|
-
register=conditional_reg_idx,
|
171
|
-
)
|
172
|
-
instructions.append(conversion_bfunc)
|
173
|
-
instruction.conditional = conditional_reg_idx
|
174
|
-
max_conditional_idx += 1
|
175
|
-
# Delete condition attribute now that we have replaced it with
|
176
|
-
# the conditional and bfunc
|
177
|
-
del instruction._condition
|
178
|
-
|
179
|
-
instructions.append(instruction)
|
180
|
-
with warnings.catch_warnings():
|
181
|
-
# The class QasmQobjExperiment is deprecated
|
182
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
183
|
-
return (
|
184
|
-
QasmQobjExperiment(instructions=instructions, header=header, config=config),
|
185
|
-
pulse_library,
|
186
|
-
)
|
187
|
-
|
188
|
-
|
189
|
-
def _assemble_pulse_gates(
|
190
|
-
circuit: QuantumCircuit, run_config: RunConfig
|
191
|
-
) -> Tuple[Optional[QasmExperimentCalibrations], Optional[PulseLibrary]]:
|
192
|
-
"""Assemble and return the circuit calibrations and associated pulse library, if there are any.
|
193
|
-
The calibrations themselves may reference the pulse library which is returned as a dict.
|
194
|
-
|
195
|
-
Args:
|
196
|
-
circuit: circuit which may have pulse calibrations
|
197
|
-
run_config: configuration of the runtime environment
|
198
|
-
|
199
|
-
Returns:
|
200
|
-
The calibrations and pulse library, if there are any
|
201
|
-
"""
|
202
|
-
if not circuit.calibrations:
|
203
|
-
return None, None
|
204
|
-
if not hasattr(run_config, "parametric_pulses"):
|
205
|
-
run_config.parametric_pulses = []
|
206
|
-
calibrations = []
|
207
|
-
pulse_library = {}
|
208
|
-
for gate, cals in circuit.calibrations.items():
|
209
|
-
for (qubits, params), schedule in cals.items():
|
210
|
-
qobj_instructions, _ = _assemble_schedule(
|
211
|
-
schedule,
|
212
|
-
converters.InstructionToQobjConverter(PulseQobjInstruction),
|
213
|
-
run_config,
|
214
|
-
pulse_library,
|
215
|
-
)
|
216
|
-
calibrations.append(
|
217
|
-
GateCalibration(str(gate), list(qubits), list(params), qobj_instructions)
|
218
|
-
)
|
219
|
-
return QasmExperimentCalibrations(gates=calibrations), pulse_library
|
220
|
-
|
221
|
-
|
222
|
-
def _extract_common_calibrations(
|
223
|
-
experiments: List[QasmQobjExperiment],
|
224
|
-
) -> Tuple[List[QasmQobjExperiment], Optional[QasmExperimentCalibrations]]:
|
225
|
-
"""Given a list of ``QasmQobjExperiment``s, each of which may have calibrations in their
|
226
|
-
``config``, collect common calibrations into a global ``QasmExperimentCalibrations``
|
227
|
-
and delete them from their local experiments.
|
228
|
-
|
229
|
-
Args:
|
230
|
-
experiments: The list of OpenQASM experiments that are being assembled into one qobj
|
231
|
-
|
232
|
-
Returns:
|
233
|
-
The input experiments with modified calibrations, and common calibrations, if there
|
234
|
-
are any
|
235
|
-
"""
|
236
|
-
|
237
|
-
def index_calibrations() -> Dict[int, List[Tuple[int, GateCalibration]]]:
|
238
|
-
"""Map each calibration to all experiments that contain it."""
|
239
|
-
exp_indices = defaultdict(list)
|
240
|
-
for exp_idx, exp in enumerate(experiments):
|
241
|
-
for gate_cal in exp.config.calibrations.gates:
|
242
|
-
# They must be keyed on the hash or identical cals will be indexed separately
|
243
|
-
exp_indices[hash(gate_cal)].append((exp_idx, gate_cal))
|
244
|
-
return exp_indices
|
245
|
-
|
246
|
-
def collect_common_calibrations() -> List[GateCalibration]:
|
247
|
-
"""If a gate calibration appears in all experiments, collect it."""
|
248
|
-
common_calibrations = []
|
249
|
-
for _, exps_w_cal in exp_indices.items():
|
250
|
-
if len(exps_w_cal) == len(experiments):
|
251
|
-
_, gate_cal = exps_w_cal[0]
|
252
|
-
common_calibrations.append(gate_cal)
|
253
|
-
return common_calibrations
|
254
|
-
|
255
|
-
def remove_common_gate_calibrations(exps: List[QasmQobjExperiment]) -> None:
|
256
|
-
"""For calibrations that appear in all experiments, remove them from the individual
|
257
|
-
experiment's ``config.calibrations``."""
|
258
|
-
for _, exps_w_cal in exp_indices.items():
|
259
|
-
if len(exps_w_cal) == len(exps):
|
260
|
-
for exp_idx, gate_cal in exps_w_cal:
|
261
|
-
exps[exp_idx].config.calibrations.gates.remove(gate_cal)
|
262
|
-
|
263
|
-
if not (experiments and all(hasattr(exp.config, "calibrations") for exp in experiments)):
|
264
|
-
# No common calibrations
|
265
|
-
return experiments, None
|
266
|
-
|
267
|
-
exp_indices = index_calibrations()
|
268
|
-
common_calibrations = collect_common_calibrations()
|
269
|
-
remove_common_gate_calibrations(experiments)
|
270
|
-
|
271
|
-
# Remove the ``calibrations`` attribute if it's now empty
|
272
|
-
for exp in experiments:
|
273
|
-
if not exp.config.calibrations.gates:
|
274
|
-
del exp.config.calibrations
|
275
|
-
|
276
|
-
return experiments, QasmExperimentCalibrations(gates=common_calibrations)
|
277
|
-
|
278
|
-
|
279
|
-
def _configure_experiment_los(
|
280
|
-
experiments: List[QasmQobjExperiment],
|
281
|
-
lo_converter: converters.LoConfigConverter,
|
282
|
-
run_config: RunConfig,
|
283
|
-
):
|
284
|
-
# get per experiment los
|
285
|
-
freq_configs = [lo_converter(lo_dict) for lo_dict in getattr(run_config, "schedule_los", [])]
|
286
|
-
|
287
|
-
if len(experiments) > 1 and len(freq_configs) not in [0, 1, len(experiments)]:
|
288
|
-
raise QiskitError(
|
289
|
-
"Invalid 'schedule_los' setting specified. If specified, it should be "
|
290
|
-
"either have a single entry to apply the same LOs for each experiment or "
|
291
|
-
"have length equal to the number of experiments."
|
292
|
-
)
|
293
|
-
|
294
|
-
if len(freq_configs) > 1:
|
295
|
-
if len(experiments) > 1:
|
296
|
-
for idx, expt in enumerate(experiments):
|
297
|
-
freq_config = freq_configs[idx]
|
298
|
-
expt.config.qubit_lo_freq = freq_config.qubit_lo_freq
|
299
|
-
expt.config.meas_lo_freq = freq_config.meas_lo_freq
|
300
|
-
elif len(experiments) == 1:
|
301
|
-
expt = experiments[0]
|
302
|
-
experiments = []
|
303
|
-
for freq_config in freq_configs:
|
304
|
-
expt_config = copy.deepcopy(expt.config)
|
305
|
-
expt_config.qubit_lo_freq = freq_config.qubit_lo_freq
|
306
|
-
expt_config.meas_lo_freq = freq_config.meas_lo_freq
|
307
|
-
experiments.append(
|
308
|
-
QasmQobjExperiment(
|
309
|
-
header=expt.header, instructions=expt.instructions, config=expt_config
|
310
|
-
)
|
311
|
-
)
|
312
|
-
|
313
|
-
return experiments
|
314
|
-
|
315
|
-
|
316
|
-
def _assemble_circuits(
|
317
|
-
circuits: List[QuantumCircuit], run_config: RunConfig, qobj_id: int, qobj_header: QobjHeader
|
318
|
-
) -> QasmQobj:
|
319
|
-
with warnings.catch_warnings():
|
320
|
-
# Still constructs Qobj, that is deprecated. The message is hard to trace to a module,
|
321
|
-
# because concurrency is hard.
|
322
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
323
|
-
experiments_and_pulse_libs = parallel_map(_assemble_circuit, circuits, [run_config])
|
324
|
-
experiments = []
|
325
|
-
pulse_library = {}
|
326
|
-
for exp, lib in experiments_and_pulse_libs:
|
327
|
-
experiments.append(exp)
|
328
|
-
if lib:
|
329
|
-
pulse_library.update(lib)
|
330
|
-
|
331
|
-
# extract common calibrations
|
332
|
-
experiments, calibrations = _extract_common_calibrations(experiments)
|
333
|
-
|
334
|
-
# configure LO freqs per circuit
|
335
|
-
with warnings.catch_warnings():
|
336
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
337
|
-
lo_converter = converters.LoConfigConverter(
|
338
|
-
QasmQobjExperimentConfig, **run_config.to_dict()
|
339
|
-
)
|
340
|
-
experiments = _configure_experiment_los(experiments, lo_converter, run_config)
|
341
|
-
|
342
|
-
with warnings.catch_warnings():
|
343
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
344
|
-
qobj_config = QasmQobjConfig()
|
345
|
-
if run_config:
|
346
|
-
qobj_config_dict = run_config.to_dict()
|
347
|
-
|
348
|
-
# remove LO ranges, not needed in qobj
|
349
|
-
qobj_config_dict.pop("qubit_lo_range", None)
|
350
|
-
qobj_config_dict.pop("meas_lo_range", None)
|
351
|
-
|
352
|
-
# convert LO frequencies to GHz, if they exist
|
353
|
-
if "qubit_lo_freq" in qobj_config_dict:
|
354
|
-
qobj_config_dict["qubit_lo_freq"] = [
|
355
|
-
freq / 1e9 for freq in qobj_config_dict["qubit_lo_freq"]
|
356
|
-
]
|
357
|
-
if "meas_lo_freq" in qobj_config_dict:
|
358
|
-
qobj_config_dict["meas_lo_freq"] = [
|
359
|
-
freq / 1e9 for freq in qobj_config_dict["meas_lo_freq"]
|
360
|
-
]
|
361
|
-
|
362
|
-
# override default los if single ``schedule_los`` entry set
|
363
|
-
schedule_los = qobj_config_dict.pop("schedule_los", [])
|
364
|
-
if len(schedule_los) == 1:
|
365
|
-
lo_dict = schedule_los[0]
|
366
|
-
q_los = lo_converter.get_qubit_los(lo_dict)
|
367
|
-
# Hz -> GHz
|
368
|
-
if q_los:
|
369
|
-
qobj_config_dict["qubit_lo_freq"] = [freq / 1e9 for freq in q_los]
|
370
|
-
m_los = lo_converter.get_meas_los(lo_dict)
|
371
|
-
if m_los:
|
372
|
-
qobj_config_dict["meas_lo_freq"] = [freq / 1e9 for freq in m_los]
|
373
|
-
|
374
|
-
with warnings.catch_warnings():
|
375
|
-
# The class QasmQobjConfig is deprecated
|
376
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
377
|
-
qobj_config = QasmQobjConfig(**qobj_config_dict)
|
378
|
-
|
379
|
-
qubit_sizes = []
|
380
|
-
memory_slot_sizes = []
|
381
|
-
for circ in circuits:
|
382
|
-
num_qubits = 0
|
383
|
-
memory_slots = 0
|
384
|
-
for qreg in circ.qregs:
|
385
|
-
num_qubits += qreg.size
|
386
|
-
for creg in circ.cregs:
|
387
|
-
memory_slots += creg.size
|
388
|
-
qubit_sizes.append(num_qubits)
|
389
|
-
memory_slot_sizes.append(memory_slots)
|
390
|
-
qobj_config.memory_slots = max(memory_slot_sizes)
|
391
|
-
qobj_config.n_qubits = max(qubit_sizes)
|
392
|
-
|
393
|
-
if pulse_library:
|
394
|
-
qobj_config.pulse_library = [
|
395
|
-
PulseLibraryItem(name=name, samples=samples) for name, samples in pulse_library.items()
|
396
|
-
]
|
397
|
-
|
398
|
-
if calibrations and calibrations.gates:
|
399
|
-
qobj_config.calibrations = calibrations
|
400
|
-
with warnings.catch_warnings():
|
401
|
-
# The class QasmQobj is deprecated
|
402
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
403
|
-
return QasmQobj(
|
404
|
-
qobj_id=qobj_id, config=qobj_config, experiments=experiments, header=qobj_header
|
405
|
-
)
|
406
|
-
|
407
|
-
|
408
|
-
@deprecate_func(
|
409
|
-
since="1.2",
|
410
|
-
removal_timeline="in the 2.0 release",
|
411
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated `BackendV1` "
|
412
|
-
"workflow, and no longer necessary for `BackendV2`. If a user workflow requires "
|
413
|
-
"`Qobj` it likely relies on deprecated functionality and should be updated to "
|
414
|
-
"use `BackendV2`.",
|
415
|
-
)
|
416
|
-
def assemble_circuits(
|
417
|
-
circuits: List[QuantumCircuit], run_config: RunConfig, qobj_id: int, qobj_header: QobjHeader
|
418
|
-
) -> QasmQobj:
|
419
|
-
"""Assembles a list of circuits into a qobj that can be run on the backend.
|
420
|
-
|
421
|
-
Args:
|
422
|
-
circuits: circuit(s) to assemble
|
423
|
-
run_config: configuration of the runtime environment
|
424
|
-
qobj_id: identifier for the generated qobj
|
425
|
-
qobj_header: header to pass to the results
|
426
|
-
|
427
|
-
Returns:
|
428
|
-
The qobj to be run on the backends
|
429
|
-
|
430
|
-
Examples:
|
431
|
-
|
432
|
-
.. code-block:: python
|
433
|
-
|
434
|
-
from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit
|
435
|
-
from qiskit.assembler import assemble_circuits
|
436
|
-
from qiskit.assembler.run_config import RunConfig
|
437
|
-
# Build a circuit to convert into a Qobj
|
438
|
-
q = QuantumRegister(2)
|
439
|
-
c = ClassicalRegister(2)
|
440
|
-
qc = QuantumCircuit(q, c)
|
441
|
-
qc.h(q[0])
|
442
|
-
qc.cx(q[0], q[1])
|
443
|
-
qc.measure(q, c)
|
444
|
-
# Assemble a Qobj from the input circuit
|
445
|
-
qobj = assemble_circuits(circuits=[qc],
|
446
|
-
qobj_id="custom-id",
|
447
|
-
qobj_header=[],
|
448
|
-
run_config=RunConfig(shots=2000, memory=True, init_qubits=True))
|
449
|
-
"""
|
450
|
-
# assemble the circuit experiments
|
451
|
-
return _assemble_circuits(circuits, run_config, qobj_id, qobj_header)
|