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
qiskit/qobj/qasm_qobj.py
DELETED
@@ -1,708 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 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
|
-
"""Module providing definitions of OpenQASM 2 Qobj classes."""
|
14
|
-
|
15
|
-
import copy
|
16
|
-
import pprint
|
17
|
-
from types import SimpleNamespace
|
18
|
-
from qiskit.circuit.parameterexpression import ParameterExpression
|
19
|
-
from qiskit.qobj.pulse_qobj import PulseQobjInstruction, PulseLibraryItem
|
20
|
-
from qiskit.qobj.common import QobjDictField, QobjHeader
|
21
|
-
from qiskit.utils import deprecate_func
|
22
|
-
|
23
|
-
|
24
|
-
class QasmQobjInstruction:
|
25
|
-
"""A class representing a single instruction in an QasmQobj Experiment."""
|
26
|
-
|
27
|
-
@deprecate_func(
|
28
|
-
since="1.2",
|
29
|
-
removal_timeline="in the 2.0 release",
|
30
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
31
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
32
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
33
|
-
"should be updated to use `BackendV2`.",
|
34
|
-
)
|
35
|
-
def __init__(
|
36
|
-
self,
|
37
|
-
name,
|
38
|
-
params=None,
|
39
|
-
qubits=None,
|
40
|
-
register=None,
|
41
|
-
memory=None,
|
42
|
-
condition=None,
|
43
|
-
conditional=None,
|
44
|
-
label=None,
|
45
|
-
mask=None,
|
46
|
-
relation=None,
|
47
|
-
val=None,
|
48
|
-
snapshot_type=None,
|
49
|
-
):
|
50
|
-
"""Instantiate a new QasmQobjInstruction object.
|
51
|
-
|
52
|
-
Args:
|
53
|
-
name (str): The name of the instruction
|
54
|
-
params (list): The list of parameters for the gate
|
55
|
-
qubits (list): A list of ``int`` representing the qubits the
|
56
|
-
instruction operates on
|
57
|
-
register (list): If a ``measure`` instruction this is a list
|
58
|
-
of ``int`` containing the list of register slots in which to
|
59
|
-
store the measurement results (must be the same length as
|
60
|
-
qubits). If a ``bfunc`` instruction this is a single ``int``
|
61
|
-
of the register slot in which to store the result.
|
62
|
-
memory (list): If a ``measure`` instruction this is a list
|
63
|
-
of ``int`` containing the list of memory slots to store the
|
64
|
-
measurement results in (must be the same length as qubits).
|
65
|
-
If a ``bfunc`` instruction this is a single ``int`` of the
|
66
|
-
memory slot to store the boolean function result in.
|
67
|
-
condition (tuple): A tuple of the form ``(int, int)`` where the
|
68
|
-
first ``int`` is the control register and the second ``int`` is
|
69
|
-
the control value if the gate has a condition.
|
70
|
-
conditional (int): The register index of the condition
|
71
|
-
label (str): An optional label assigned to the instruction
|
72
|
-
mask (int): For a ``bfunc`` instruction the hex value which is
|
73
|
-
applied as an ``AND`` to the register bits.
|
74
|
-
relation (str): Relational operator for comparing the masked
|
75
|
-
register to the ``val`` kwarg. Can be either ``==`` (equals) or
|
76
|
-
``!=`` (not equals).
|
77
|
-
val (int): Value to which to compare the masked register. In other
|
78
|
-
words, the output of the function is ``(register AND mask)``
|
79
|
-
snapshot_type (str): For snapshot instructions the type of snapshot
|
80
|
-
to use
|
81
|
-
"""
|
82
|
-
self.name = name
|
83
|
-
if params is not None:
|
84
|
-
self.params = params
|
85
|
-
if qubits is not None:
|
86
|
-
self.qubits = qubits
|
87
|
-
if register is not None:
|
88
|
-
self.register = register
|
89
|
-
if memory is not None:
|
90
|
-
self.memory = memory
|
91
|
-
if condition is not None:
|
92
|
-
self._condition = condition
|
93
|
-
if conditional is not None:
|
94
|
-
self.conditional = conditional
|
95
|
-
if label is not None:
|
96
|
-
self.label = label
|
97
|
-
if mask is not None:
|
98
|
-
self.mask = mask
|
99
|
-
if relation is not None:
|
100
|
-
self.relation = relation
|
101
|
-
if val is not None:
|
102
|
-
self.val = val
|
103
|
-
if snapshot_type is not None:
|
104
|
-
self.snapshot_type = snapshot_type
|
105
|
-
|
106
|
-
def to_dict(self):
|
107
|
-
"""Return a dictionary format representation of the Instruction.
|
108
|
-
|
109
|
-
Returns:
|
110
|
-
dict: The dictionary form of the QasmQobjInstruction.
|
111
|
-
"""
|
112
|
-
out_dict = {"name": self.name}
|
113
|
-
for attr in [
|
114
|
-
"params",
|
115
|
-
"qubits",
|
116
|
-
"register",
|
117
|
-
"memory",
|
118
|
-
"_condition",
|
119
|
-
"conditional",
|
120
|
-
"label",
|
121
|
-
"mask",
|
122
|
-
"relation",
|
123
|
-
"val",
|
124
|
-
"snapshot_type",
|
125
|
-
]:
|
126
|
-
if hasattr(self, attr):
|
127
|
-
# TODO: Remove the param type conversion when Aer understands
|
128
|
-
# ParameterExpression type
|
129
|
-
if attr == "params":
|
130
|
-
params = []
|
131
|
-
for param in list(getattr(self, attr)):
|
132
|
-
if isinstance(param, ParameterExpression):
|
133
|
-
params.append(float(param))
|
134
|
-
else:
|
135
|
-
params.append(param)
|
136
|
-
out_dict[attr] = params
|
137
|
-
else:
|
138
|
-
out_dict[attr] = getattr(self, attr)
|
139
|
-
|
140
|
-
return out_dict
|
141
|
-
|
142
|
-
def __repr__(self):
|
143
|
-
out = f"QasmQobjInstruction(name='{self.name}'"
|
144
|
-
for attr in [
|
145
|
-
"params",
|
146
|
-
"qubits",
|
147
|
-
"register",
|
148
|
-
"memory",
|
149
|
-
"_condition",
|
150
|
-
"conditional",
|
151
|
-
"label",
|
152
|
-
"mask",
|
153
|
-
"relation",
|
154
|
-
"val",
|
155
|
-
"snapshot_type",
|
156
|
-
]:
|
157
|
-
attr_val = getattr(self, attr, None)
|
158
|
-
if attr_val is not None:
|
159
|
-
if isinstance(attr_val, str):
|
160
|
-
out += f', {attr}="{attr_val}"'
|
161
|
-
else:
|
162
|
-
out += f", {attr}={attr_val}"
|
163
|
-
out += ")"
|
164
|
-
return out
|
165
|
-
|
166
|
-
def __str__(self):
|
167
|
-
out = f"Instruction: {self.name}\n"
|
168
|
-
for attr in [
|
169
|
-
"params",
|
170
|
-
"qubits",
|
171
|
-
"register",
|
172
|
-
"memory",
|
173
|
-
"_condition",
|
174
|
-
"conditional",
|
175
|
-
"label",
|
176
|
-
"mask",
|
177
|
-
"relation",
|
178
|
-
"val",
|
179
|
-
"snapshot_type",
|
180
|
-
]:
|
181
|
-
if hasattr(self, attr):
|
182
|
-
out += f"\t\t{attr}: {getattr(self, attr)}\n"
|
183
|
-
return out
|
184
|
-
|
185
|
-
@classmethod
|
186
|
-
def from_dict(cls, data):
|
187
|
-
"""Create a new QasmQobjInstruction object from a dictionary.
|
188
|
-
|
189
|
-
Args:
|
190
|
-
data (dict): A dictionary for the experiment config
|
191
|
-
|
192
|
-
Returns:
|
193
|
-
QasmQobjInstruction: The object from the input dictionary.
|
194
|
-
"""
|
195
|
-
name = data.pop("name")
|
196
|
-
return cls(name, **data)
|
197
|
-
|
198
|
-
def __eq__(self, other):
|
199
|
-
if isinstance(other, QasmQobjInstruction):
|
200
|
-
if self.to_dict() == other.to_dict():
|
201
|
-
return True
|
202
|
-
return False
|
203
|
-
|
204
|
-
|
205
|
-
class QasmQobjExperiment:
|
206
|
-
"""An OpenQASM 2 Qobj Experiment.
|
207
|
-
|
208
|
-
Each instance of this class is used to represent an OpenQASM 2 experiment as
|
209
|
-
part of a larger OpenQASM 2 qobj.
|
210
|
-
"""
|
211
|
-
|
212
|
-
@deprecate_func(
|
213
|
-
since="1.2",
|
214
|
-
removal_timeline="in the 2.0 release",
|
215
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
216
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
217
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
218
|
-
"should be updated to use `BackendV2`.",
|
219
|
-
)
|
220
|
-
def __init__(self, config=None, header=None, instructions=None):
|
221
|
-
"""Instantiate a QasmQobjExperiment.
|
222
|
-
|
223
|
-
Args:
|
224
|
-
config (QasmQobjExperimentConfig): A config object for the experiment
|
225
|
-
header (QasmQobjExperimentHeader): A header object for the experiment
|
226
|
-
instructions (list): A list of :class:`QasmQobjInstruction` objects
|
227
|
-
"""
|
228
|
-
self.config = config or QasmQobjExperimentConfig()
|
229
|
-
self.header = header or QasmQobjExperimentHeader()
|
230
|
-
self.instructions = instructions or []
|
231
|
-
|
232
|
-
def __repr__(self):
|
233
|
-
instructions_str = [repr(x) for x in self.instructions]
|
234
|
-
instructions_repr = "[" + ", ".join(instructions_str) + "]"
|
235
|
-
return (
|
236
|
-
f"QasmQobjExperiment(config={repr(self.config)}, header={repr(self.header)},"
|
237
|
-
f" instructions={instructions_repr})"
|
238
|
-
)
|
239
|
-
|
240
|
-
def __str__(self):
|
241
|
-
out = "\nOpenQASM2 Experiment:\n"
|
242
|
-
config = pprint.pformat(self.config.to_dict())
|
243
|
-
header = pprint.pformat(self.header.to_dict())
|
244
|
-
out += f"Header:\n{header}\n"
|
245
|
-
out += f"Config:\n{config}\n\n"
|
246
|
-
for instruction in self.instructions:
|
247
|
-
out += f"\t{instruction}\n"
|
248
|
-
return out
|
249
|
-
|
250
|
-
def to_dict(self):
|
251
|
-
"""Return a dictionary format representation of the Experiment.
|
252
|
-
|
253
|
-
Returns:
|
254
|
-
dict: The dictionary form of the QasmQObjExperiment.
|
255
|
-
"""
|
256
|
-
out_dict = {
|
257
|
-
"config": self.config.to_dict(),
|
258
|
-
"header": self.header.to_dict(),
|
259
|
-
"instructions": [x.to_dict() for x in self.instructions],
|
260
|
-
}
|
261
|
-
return out_dict
|
262
|
-
|
263
|
-
@classmethod
|
264
|
-
def from_dict(cls, data):
|
265
|
-
"""Create a new QasmQobjExperiment object from a dictionary.
|
266
|
-
|
267
|
-
Args:
|
268
|
-
data (dict): A dictionary for the experiment config
|
269
|
-
|
270
|
-
Returns:
|
271
|
-
QasmQobjExperiment: The object from the input dictionary.
|
272
|
-
"""
|
273
|
-
config = None
|
274
|
-
if "config" in data:
|
275
|
-
config = QasmQobjExperimentConfig.from_dict(data.pop("config"))
|
276
|
-
header = None
|
277
|
-
if "header" in data:
|
278
|
-
header = QasmQobjExperimentHeader.from_dict(data.pop("header"))
|
279
|
-
instructions = None
|
280
|
-
if "instructions" in data:
|
281
|
-
instructions = [
|
282
|
-
QasmQobjInstruction.from_dict(inst) for inst in data.pop("instructions")
|
283
|
-
]
|
284
|
-
return cls(config, header, instructions)
|
285
|
-
|
286
|
-
def __eq__(self, other):
|
287
|
-
if isinstance(other, QasmQobjExperiment):
|
288
|
-
if self.to_dict() == other.to_dict():
|
289
|
-
return True
|
290
|
-
return False
|
291
|
-
|
292
|
-
|
293
|
-
class QasmQobjConfig(SimpleNamespace):
|
294
|
-
"""A configuration for an OpenQASM 2 Qobj."""
|
295
|
-
|
296
|
-
@deprecate_func(
|
297
|
-
since="1.2",
|
298
|
-
removal_timeline="in the 2.0 release",
|
299
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
300
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
301
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
302
|
-
"should be updated to use `BackendV2`.",
|
303
|
-
)
|
304
|
-
def __init__(
|
305
|
-
self,
|
306
|
-
shots=None,
|
307
|
-
seed_simulator=None,
|
308
|
-
memory=None,
|
309
|
-
parameter_binds=None,
|
310
|
-
meas_level=None,
|
311
|
-
meas_return=None,
|
312
|
-
memory_slots=None,
|
313
|
-
n_qubits=None,
|
314
|
-
pulse_library=None,
|
315
|
-
calibrations=None,
|
316
|
-
rep_delay=None,
|
317
|
-
qubit_lo_freq=None,
|
318
|
-
meas_lo_freq=None,
|
319
|
-
**kwargs,
|
320
|
-
):
|
321
|
-
"""Model for RunConfig.
|
322
|
-
|
323
|
-
Args:
|
324
|
-
shots (int): the number of shots.
|
325
|
-
seed_simulator (int): the seed to use in the simulator
|
326
|
-
memory (bool): whether to request memory from backend (per-shot readouts)
|
327
|
-
parameter_binds (list[dict]): List of parameter bindings
|
328
|
-
meas_level (int): Measurement level 0, 1, or 2
|
329
|
-
meas_return (str): For measurement level < 2, whether single or avg shots are returned
|
330
|
-
memory_slots (int): The number of memory slots on the device
|
331
|
-
n_qubits (int): The number of qubits on the device
|
332
|
-
pulse_library (list): List of :class:`PulseLibraryItem`.
|
333
|
-
calibrations (QasmExperimentCalibrations): Information required for Pulse gates.
|
334
|
-
rep_delay (float): Delay between programs in sec. Only supported on certain
|
335
|
-
backends (``backend.configuration().dynamic_reprate_enabled`` ). Must be from the
|
336
|
-
range supplied by the backend (``backend.configuration().rep_delay_range``). Default
|
337
|
-
is ``backend.configuration().default_rep_delay``.
|
338
|
-
qubit_lo_freq (list): List of frequencies (as floats) for the qubit driver LO's in GHz.
|
339
|
-
meas_lo_freq (list): List of frequencies (as floats) for the measurement driver LO's in
|
340
|
-
GHz.
|
341
|
-
kwargs: Additional free form key value fields to add to the
|
342
|
-
configuration.
|
343
|
-
"""
|
344
|
-
if shots is not None:
|
345
|
-
self.shots = int(shots)
|
346
|
-
|
347
|
-
if seed_simulator is not None:
|
348
|
-
self.seed_simulator = int(seed_simulator)
|
349
|
-
|
350
|
-
if memory is not None:
|
351
|
-
self.memory = bool(memory)
|
352
|
-
|
353
|
-
if parameter_binds is not None:
|
354
|
-
self.parameter_binds = parameter_binds
|
355
|
-
|
356
|
-
if meas_level is not None:
|
357
|
-
self.meas_level = meas_level
|
358
|
-
|
359
|
-
if meas_return is not None:
|
360
|
-
self.meas_return = meas_return
|
361
|
-
|
362
|
-
if memory_slots is not None:
|
363
|
-
self.memory_slots = memory_slots
|
364
|
-
|
365
|
-
if n_qubits is not None:
|
366
|
-
self.n_qubits = n_qubits
|
367
|
-
|
368
|
-
if pulse_library is not None:
|
369
|
-
self.pulse_library = pulse_library
|
370
|
-
|
371
|
-
if calibrations is not None:
|
372
|
-
self.calibrations = calibrations
|
373
|
-
|
374
|
-
if rep_delay is not None:
|
375
|
-
self.rep_delay = rep_delay
|
376
|
-
|
377
|
-
if qubit_lo_freq is not None:
|
378
|
-
self.qubit_lo_freq = qubit_lo_freq
|
379
|
-
|
380
|
-
if meas_lo_freq is not None:
|
381
|
-
self.meas_lo_freq = meas_lo_freq
|
382
|
-
|
383
|
-
if kwargs:
|
384
|
-
self.__dict__.update(kwargs)
|
385
|
-
|
386
|
-
def to_dict(self):
|
387
|
-
"""Return a dictionary format representation of the OpenQASM 2 Qobj config.
|
388
|
-
|
389
|
-
Returns:
|
390
|
-
dict: The dictionary form of the QasmQobjConfig.
|
391
|
-
"""
|
392
|
-
out_dict = copy.copy(self.__dict__)
|
393
|
-
if hasattr(self, "pulse_library"):
|
394
|
-
out_dict["pulse_library"] = [x.to_dict() for x in self.pulse_library]
|
395
|
-
|
396
|
-
if hasattr(self, "calibrations"):
|
397
|
-
out_dict["calibrations"] = self.calibrations.to_dict()
|
398
|
-
|
399
|
-
return out_dict
|
400
|
-
|
401
|
-
@classmethod
|
402
|
-
def from_dict(cls, data):
|
403
|
-
"""Create a new QasmQobjConfig object from a dictionary.
|
404
|
-
|
405
|
-
Args:
|
406
|
-
data (dict): A dictionary for the config
|
407
|
-
|
408
|
-
Returns:
|
409
|
-
QasmQobjConfig: The object from the input dictionary.
|
410
|
-
"""
|
411
|
-
if "pulse_library" in data:
|
412
|
-
pulse_lib = data.pop("pulse_library")
|
413
|
-
pulse_lib_obj = [PulseLibraryItem.from_dict(x) for x in pulse_lib]
|
414
|
-
data["pulse_library"] = pulse_lib_obj
|
415
|
-
|
416
|
-
if "calibrations" in data:
|
417
|
-
calibrations = data.pop("calibrations")
|
418
|
-
data["calibrations"] = QasmExperimentCalibrations.from_dict(calibrations)
|
419
|
-
|
420
|
-
return cls(**data)
|
421
|
-
|
422
|
-
def __eq__(self, other):
|
423
|
-
if isinstance(other, QasmQobjConfig):
|
424
|
-
if self.to_dict() == other.to_dict():
|
425
|
-
return True
|
426
|
-
return False
|
427
|
-
|
428
|
-
|
429
|
-
class QasmQobjExperimentHeader(QobjDictField):
|
430
|
-
"""A header for a single OpenQASM 2 experiment in the qobj."""
|
431
|
-
|
432
|
-
pass
|
433
|
-
|
434
|
-
|
435
|
-
class QasmQobjExperimentConfig(QobjDictField):
|
436
|
-
"""Configuration for a single OpenQASM 2 experiment in the qobj."""
|
437
|
-
|
438
|
-
@deprecate_func(
|
439
|
-
since="1.2",
|
440
|
-
removal_timeline="in the 2.0 release",
|
441
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
442
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
443
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
444
|
-
"should be updated to use `BackendV2`.",
|
445
|
-
)
|
446
|
-
def __init__(self, calibrations=None, qubit_lo_freq=None, meas_lo_freq=None, **kwargs):
|
447
|
-
"""
|
448
|
-
Args:
|
449
|
-
calibrations (QasmExperimentCalibrations): Information required for Pulse gates.
|
450
|
-
qubit_lo_freq (List[float]): List of qubit LO frequencies in GHz.
|
451
|
-
meas_lo_freq (List[float]): List of meas readout LO frequencies in GHz.
|
452
|
-
kwargs: Additional free form key value fields to add to the configuration
|
453
|
-
"""
|
454
|
-
if calibrations:
|
455
|
-
self.calibrations = calibrations
|
456
|
-
if qubit_lo_freq is not None:
|
457
|
-
self.qubit_lo_freq = qubit_lo_freq
|
458
|
-
if meas_lo_freq is not None:
|
459
|
-
self.meas_lo_freq = meas_lo_freq
|
460
|
-
|
461
|
-
super().__init__(**kwargs)
|
462
|
-
|
463
|
-
def to_dict(self):
|
464
|
-
out_dict = copy.copy(self.__dict__)
|
465
|
-
if hasattr(self, "calibrations"):
|
466
|
-
out_dict["calibrations"] = self.calibrations.to_dict()
|
467
|
-
return out_dict
|
468
|
-
|
469
|
-
@classmethod
|
470
|
-
def from_dict(cls, data):
|
471
|
-
if "calibrations" in data:
|
472
|
-
calibrations = data.pop("calibrations")
|
473
|
-
data["calibrations"] = QasmExperimentCalibrations.from_dict(calibrations)
|
474
|
-
return cls(**data)
|
475
|
-
|
476
|
-
|
477
|
-
class QasmExperimentCalibrations:
|
478
|
-
"""A container for any calibrations data. The gates attribute contains a list of
|
479
|
-
GateCalibrations.
|
480
|
-
"""
|
481
|
-
|
482
|
-
@deprecate_func(
|
483
|
-
since="1.2",
|
484
|
-
removal_timeline="in the 2.0 release",
|
485
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
486
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
487
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
488
|
-
"should be updated to use `BackendV2`.",
|
489
|
-
)
|
490
|
-
def __init__(self, gates):
|
491
|
-
"""
|
492
|
-
Initialize a container for calibrations.
|
493
|
-
|
494
|
-
Args:
|
495
|
-
gates (list(GateCalibration))
|
496
|
-
"""
|
497
|
-
self.gates = gates
|
498
|
-
|
499
|
-
def to_dict(self):
|
500
|
-
"""Return a dictionary format representation of the calibrations.
|
501
|
-
|
502
|
-
Returns:
|
503
|
-
dict: The dictionary form of the GateCalibration.
|
504
|
-
|
505
|
-
"""
|
506
|
-
out_dict = copy.copy(self.__dict__)
|
507
|
-
out_dict["gates"] = [x.to_dict() for x in self.gates]
|
508
|
-
return out_dict
|
509
|
-
|
510
|
-
@classmethod
|
511
|
-
def from_dict(cls, data):
|
512
|
-
"""Create a new GateCalibration object from a dictionary.
|
513
|
-
|
514
|
-
Args:
|
515
|
-
data (dict): A dictionary representing the QasmExperimentCalibrations to
|
516
|
-
create. It will be in the same format as output by :func:`to_dict`.
|
517
|
-
|
518
|
-
Returns:
|
519
|
-
QasmExperimentCalibrations: The QasmExperimentCalibrations from the input dictionary.
|
520
|
-
"""
|
521
|
-
gates = data.pop("gates")
|
522
|
-
data["gates"] = [GateCalibration.from_dict(x) for x in gates]
|
523
|
-
return cls(**data)
|
524
|
-
|
525
|
-
|
526
|
-
class GateCalibration:
|
527
|
-
"""Each calibration specifies a unique gate by name, qubits and params, and
|
528
|
-
contains the Pulse instructions to implement it."""
|
529
|
-
|
530
|
-
@deprecate_func(
|
531
|
-
since="1.2",
|
532
|
-
removal_timeline="in the 2.0 release",
|
533
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
534
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
535
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
536
|
-
"should be updated to use `BackendV2`.",
|
537
|
-
)
|
538
|
-
def __init__(self, name, qubits, params, instructions):
|
539
|
-
"""
|
540
|
-
Initialize a single gate calibration. Instructions may reference waveforms which should be
|
541
|
-
made available in the pulse_library.
|
542
|
-
|
543
|
-
Args:
|
544
|
-
name (str): Gate name.
|
545
|
-
qubits (list(int)): Qubits the gate applies to.
|
546
|
-
params (list(complex)): Gate parameter values, if any.
|
547
|
-
instructions (list(PulseQobjInstruction)): The gate implementation.
|
548
|
-
"""
|
549
|
-
self.name = name
|
550
|
-
self.qubits = qubits
|
551
|
-
self.params = params
|
552
|
-
self.instructions = instructions
|
553
|
-
|
554
|
-
def __hash__(self):
|
555
|
-
return hash(
|
556
|
-
(
|
557
|
-
self.name,
|
558
|
-
tuple(self.qubits),
|
559
|
-
tuple(self.params),
|
560
|
-
tuple(str(inst) for inst in self.instructions),
|
561
|
-
)
|
562
|
-
)
|
563
|
-
|
564
|
-
def to_dict(self):
|
565
|
-
"""Return a dictionary format representation of the Gate Calibration.
|
566
|
-
|
567
|
-
Returns:
|
568
|
-
dict: The dictionary form of the GateCalibration.
|
569
|
-
"""
|
570
|
-
out_dict = copy.copy(self.__dict__)
|
571
|
-
out_dict["instructions"] = [x.to_dict() for x in self.instructions]
|
572
|
-
return out_dict
|
573
|
-
|
574
|
-
@classmethod
|
575
|
-
def from_dict(cls, data):
|
576
|
-
"""Create a new GateCalibration object from a dictionary.
|
577
|
-
|
578
|
-
Args:
|
579
|
-
data (dict): A dictionary representing the GateCalibration to create. It
|
580
|
-
will be in the same format as output by :func:`to_dict`.
|
581
|
-
|
582
|
-
Returns:
|
583
|
-
GateCalibration: The GateCalibration from the input dictionary.
|
584
|
-
"""
|
585
|
-
instructions = data.pop("instructions")
|
586
|
-
data["instructions"] = [PulseQobjInstruction.from_dict(x) for x in instructions]
|
587
|
-
return cls(**data)
|
588
|
-
|
589
|
-
|
590
|
-
class QasmQobj:
|
591
|
-
"""An OpenQASM 2 Qobj."""
|
592
|
-
|
593
|
-
@deprecate_func(
|
594
|
-
since="1.2",
|
595
|
-
removal_timeline="in the 2.0 release",
|
596
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
597
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
598
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
599
|
-
"should be updated to use `BackendV2`.",
|
600
|
-
)
|
601
|
-
def __init__(self, qobj_id=None, config=None, experiments=None, header=None):
|
602
|
-
"""Instantiate a new OpenQASM 2 Qobj Object.
|
603
|
-
|
604
|
-
Each OpenQASM 2 Qobj object is used to represent a single payload that will
|
605
|
-
be passed to a Qiskit provider. It mirrors the Qobj the published
|
606
|
-
`Qobj specification <https://arxiv.org/abs/1809.03452>`_ for OpenQASM
|
607
|
-
experiments.
|
608
|
-
|
609
|
-
Args:
|
610
|
-
qobj_id (str): An identifier for the qobj
|
611
|
-
config (QasmQobjRunConfig): A config for the entire run
|
612
|
-
header (QobjHeader): A header for the entire run
|
613
|
-
experiments (list): A list of lists of :class:`QasmQobjExperiment`
|
614
|
-
objects representing an experiment
|
615
|
-
"""
|
616
|
-
self.header = header or QobjHeader()
|
617
|
-
self.config = config or QasmQobjConfig()
|
618
|
-
self.experiments = experiments or []
|
619
|
-
self.qobj_id = qobj_id
|
620
|
-
self.type = "QASM"
|
621
|
-
self.schema_version = "1.3.0"
|
622
|
-
|
623
|
-
def __repr__(self):
|
624
|
-
experiments_str = [repr(x) for x in self.experiments]
|
625
|
-
experiments_repr = "[" + ", ".join(experiments_str) + "]"
|
626
|
-
return (
|
627
|
-
f"QasmQobj(qobj_id='{self.qobj_id}', config={repr(self.config)},"
|
628
|
-
f" experiments={experiments_repr}, header={repr(self.header)})"
|
629
|
-
)
|
630
|
-
|
631
|
-
def __str__(self):
|
632
|
-
out = f"QASM Qobj: {self.qobj_id}:\n"
|
633
|
-
config = pprint.pformat(self.config.to_dict())
|
634
|
-
out += f"Config: {str(config)}\n"
|
635
|
-
header = pprint.pformat(self.header.to_dict())
|
636
|
-
out += f"Header: {str(header)}\n"
|
637
|
-
out += "Experiments:\n"
|
638
|
-
for experiment in self.experiments:
|
639
|
-
out += str(experiment)
|
640
|
-
return out
|
641
|
-
|
642
|
-
def to_dict(self):
|
643
|
-
"""Return a dictionary format representation of the OpenQASM 2 Qobj.
|
644
|
-
|
645
|
-
Note this dict is not in the json wire format expected by IBM and Qobj
|
646
|
-
specification because complex numbers are still of type complex. Also,
|
647
|
-
this may contain native numpy arrays. When serializing this output
|
648
|
-
for use with IBM systems, you can leverage a json encoder that converts these
|
649
|
-
as expected. For example:
|
650
|
-
|
651
|
-
.. code-block::
|
652
|
-
|
653
|
-
import json
|
654
|
-
import numpy
|
655
|
-
|
656
|
-
class QobjEncoder(json.JSONEncoder):
|
657
|
-
def default(self, obj):
|
658
|
-
if isinstance(obj, numpy.ndarray):
|
659
|
-
return obj.tolist()
|
660
|
-
if isinstance(obj, complex):
|
661
|
-
return (obj.real, obj.imag)
|
662
|
-
return json.JSONEncoder.default(self, obj)
|
663
|
-
|
664
|
-
json.dumps(qobj.to_dict(), cls=QobjEncoder)
|
665
|
-
|
666
|
-
Returns:
|
667
|
-
dict: A dictionary representation of the QasmQobj object
|
668
|
-
"""
|
669
|
-
out_dict = {
|
670
|
-
"qobj_id": self.qobj_id,
|
671
|
-
"header": self.header.to_dict(),
|
672
|
-
"config": self.config.to_dict(),
|
673
|
-
"schema_version": self.schema_version,
|
674
|
-
"type": "QASM",
|
675
|
-
"experiments": [x.to_dict() for x in self.experiments],
|
676
|
-
}
|
677
|
-
return out_dict
|
678
|
-
|
679
|
-
@classmethod
|
680
|
-
def from_dict(cls, data):
|
681
|
-
"""Create a new QASMQobj object from a dictionary.
|
682
|
-
|
683
|
-
Args:
|
684
|
-
data (dict): A dictionary representing the QasmQobj to create. It
|
685
|
-
will be in the same format as output by :func:`to_dict`.
|
686
|
-
|
687
|
-
Returns:
|
688
|
-
QasmQobj: The QasmQobj from the input dictionary.
|
689
|
-
"""
|
690
|
-
config = None
|
691
|
-
if "config" in data:
|
692
|
-
config = QasmQobjConfig.from_dict(data["config"])
|
693
|
-
experiments = None
|
694
|
-
if "experiments" in data:
|
695
|
-
experiments = [QasmQobjExperiment.from_dict(exp) for exp in data["experiments"]]
|
696
|
-
header = None
|
697
|
-
if "header" in data:
|
698
|
-
header = QobjHeader.from_dict(data["header"])
|
699
|
-
|
700
|
-
return cls(
|
701
|
-
qobj_id=data.get("qobj_id"), config=config, experiments=experiments, header=header
|
702
|
-
)
|
703
|
-
|
704
|
-
def __eq__(self, other):
|
705
|
-
if isinstance(other, QasmQobj):
|
706
|
-
if self.to_dict() == other.to_dict():
|
707
|
-
return True
|
708
|
-
return False
|