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/pulse/utils.py
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2020.
|
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 for common pulse programming utilities."""
|
14
|
-
from typing import List, Dict, Union, Sequence
|
15
|
-
import warnings
|
16
|
-
|
17
|
-
import numpy as np
|
18
|
-
|
19
|
-
from qiskit.circuit import ParameterVector, Parameter
|
20
|
-
from qiskit.circuit.parameterexpression import ParameterExpression
|
21
|
-
from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError, PulseError
|
22
|
-
|
23
|
-
|
24
|
-
def format_meas_map(meas_map: List[List[int]]) -> Dict[int, List[int]]:
|
25
|
-
"""
|
26
|
-
Return a mapping from qubit label to measurement group given the nested list meas_map returned
|
27
|
-
by a backend configuration. (Qubits can not always be measured independently.) Sorts the
|
28
|
-
measurement group for consistency.
|
29
|
-
|
30
|
-
Args:
|
31
|
-
meas_map: Groups of qubits that get measured together, for example: [[0, 1], [2, 3, 4]]
|
32
|
-
Returns:
|
33
|
-
Measure map in map format
|
34
|
-
"""
|
35
|
-
qubit_mapping = {}
|
36
|
-
for sublist in meas_map:
|
37
|
-
sublist.sort()
|
38
|
-
for q in sublist:
|
39
|
-
qubit_mapping[q] = sublist
|
40
|
-
return qubit_mapping
|
41
|
-
|
42
|
-
|
43
|
-
def format_parameter_value(
|
44
|
-
operand: ParameterExpression,
|
45
|
-
decimal: int = 10,
|
46
|
-
) -> Union[ParameterExpression, complex]:
|
47
|
-
"""Convert ParameterExpression into the most suitable data type.
|
48
|
-
|
49
|
-
Args:
|
50
|
-
operand: Operand value in arbitrary data type including ParameterExpression.
|
51
|
-
decimal: Number of digit to round returned value.
|
52
|
-
|
53
|
-
Returns:
|
54
|
-
Value cast to non-parameter data type, when possible.
|
55
|
-
"""
|
56
|
-
if isinstance(operand, ParameterExpression):
|
57
|
-
try:
|
58
|
-
operand = operand.numeric()
|
59
|
-
except TypeError:
|
60
|
-
# Unassigned expression
|
61
|
-
return operand
|
62
|
-
|
63
|
-
# Return integer before calling the numpy round function.
|
64
|
-
# The input value is multiplied by 10**decimals, rounds to an integer
|
65
|
-
# and divided by 10**decimals. For a large enough integer,
|
66
|
-
# this operation may introduce a rounding error in the float operations
|
67
|
-
# and accidentally returns a float number.
|
68
|
-
if isinstance(operand, int):
|
69
|
-
return operand
|
70
|
-
|
71
|
-
# Remove truncation error and convert the result into Python builtin type.
|
72
|
-
# Value could originally contain a rounding error, e.g. 1.00000000001
|
73
|
-
# which may occur during the parameter expression evaluation.
|
74
|
-
evaluated = np.round(operand, decimals=decimal).item()
|
75
|
-
|
76
|
-
if isinstance(evaluated, complex):
|
77
|
-
if np.isclose(evaluated.imag, 0.0):
|
78
|
-
evaluated = evaluated.real
|
79
|
-
else:
|
80
|
-
warnings.warn(
|
81
|
-
"Assignment of complex values to ParameterExpression in Qiskit Pulse objects is "
|
82
|
-
"now pending deprecation. This will align the Pulse module with other modules "
|
83
|
-
"where such assignment wasn't possible to begin with. The typical use case for complex "
|
84
|
-
"parameters in the module was the SymbolicPulse library. As of Qiskit-Terra "
|
85
|
-
"0.23.0 all library pulses were converted from complex amplitude representation"
|
86
|
-
" to real representation using two floats (amp,angle), as used in the "
|
87
|
-
"ScalableSymbolicPulse class. This eliminated the need for complex parameters. "
|
88
|
-
"Any use of complex parameters (and particularly custom-built pulses) should be "
|
89
|
-
"converted in a similar fashion to avoid the use of complex parameters.",
|
90
|
-
PendingDeprecationWarning,
|
91
|
-
)
|
92
|
-
return evaluated
|
93
|
-
# Type cast integer-like float into Python builtin integer, after rounding.
|
94
|
-
if evaluated.is_integer():
|
95
|
-
return int(evaluated)
|
96
|
-
return evaluated
|
97
|
-
|
98
|
-
|
99
|
-
def instruction_duration_validation(duration: int):
|
100
|
-
"""Validate instruction duration.
|
101
|
-
|
102
|
-
Args:
|
103
|
-
duration: Instruction duration value to validate.
|
104
|
-
|
105
|
-
Raises:
|
106
|
-
UnassignedDurationError: When duration is unassigned.
|
107
|
-
QiskitError: When invalid duration is assigned.
|
108
|
-
"""
|
109
|
-
if isinstance(duration, ParameterExpression):
|
110
|
-
raise UnassignedDurationError(
|
111
|
-
f"Instruction duration {repr(duration)} is not assigned. "
|
112
|
-
"Please bind all durations to an integer value before playing in the Schedule, "
|
113
|
-
"or use ScheduleBlock to align instructions with unassigned duration."
|
114
|
-
)
|
115
|
-
|
116
|
-
if not isinstance(duration, (int, np.integer)) or duration < 0:
|
117
|
-
raise QiskitError(
|
118
|
-
f"Instruction duration must be a non-negative integer, got {duration} instead."
|
119
|
-
)
|
120
|
-
|
121
|
-
|
122
|
-
def _validate_parameter_vector(parameter: ParameterVector, value):
|
123
|
-
"""Validate parameter vector and its value."""
|
124
|
-
if not isinstance(value, Sequence):
|
125
|
-
raise PulseError(
|
126
|
-
f"Parameter vector '{parameter.name}' has length {len(parameter)},"
|
127
|
-
f" but was assigned to {value}."
|
128
|
-
)
|
129
|
-
if len(parameter) != len(value):
|
130
|
-
raise PulseError(
|
131
|
-
f"Parameter vector '{parameter.name}' has length {len(parameter)},"
|
132
|
-
f" but was assigned to {len(value)} values."
|
133
|
-
)
|
134
|
-
|
135
|
-
|
136
|
-
def _validate_single_parameter(parameter: Parameter, value):
|
137
|
-
"""Validate single parameter and its value."""
|
138
|
-
if not isinstance(value, (int, float, complex, ParameterExpression)):
|
139
|
-
raise PulseError(f"Parameter '{parameter.name}' is not assignable to {value}.")
|
140
|
-
|
141
|
-
|
142
|
-
def _validate_parameter_value(parameter, value):
|
143
|
-
"""Validate parameter and its value."""
|
144
|
-
if isinstance(parameter, ParameterVector):
|
145
|
-
_validate_parameter_vector(parameter, value)
|
146
|
-
return True
|
147
|
-
else:
|
148
|
-
_validate_single_parameter(parameter, value)
|
149
|
-
return False
|
qiskit/qobj/__init__.py
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2017, 2018.
|
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
|
-
Qobj (:mod:`qiskit.qobj`)
|
16
|
-
=========================
|
17
|
-
|
18
|
-
.. currentmodule:: qiskit.qobj
|
19
|
-
|
20
|
-
Base
|
21
|
-
====
|
22
|
-
|
23
|
-
.. autosummary::
|
24
|
-
:toctree: ../stubs/
|
25
|
-
|
26
|
-
QobjExperimentHeader
|
27
|
-
QobjHeader
|
28
|
-
|
29
|
-
Qasm
|
30
|
-
====
|
31
|
-
|
32
|
-
.. autosummary::
|
33
|
-
:toctree: ../stubs/
|
34
|
-
|
35
|
-
QasmQobj
|
36
|
-
QasmQobjInstruction
|
37
|
-
QasmQobjExperimentConfig
|
38
|
-
QasmQobjExperiment
|
39
|
-
QasmQobjConfig
|
40
|
-
QasmExperimentCalibrations
|
41
|
-
GateCalibration
|
42
|
-
|
43
|
-
Pulse
|
44
|
-
=====
|
45
|
-
|
46
|
-
.. autosummary::
|
47
|
-
:toctree: ../stubs/
|
48
|
-
|
49
|
-
PulseQobj
|
50
|
-
PulseQobjInstruction
|
51
|
-
PulseQobjExperimentConfig
|
52
|
-
PulseQobjExperiment
|
53
|
-
PulseQobjConfig
|
54
|
-
QobjMeasurementOption
|
55
|
-
PulseLibraryItem
|
56
|
-
"""
|
57
|
-
|
58
|
-
from qiskit.qobj.common import QobjExperimentHeader
|
59
|
-
from qiskit.qobj.common import QobjHeader
|
60
|
-
|
61
|
-
from qiskit.qobj.pulse_qobj import PulseQobj
|
62
|
-
from qiskit.qobj.pulse_qobj import PulseQobjInstruction
|
63
|
-
from qiskit.qobj.pulse_qobj import PulseQobjExperimentConfig
|
64
|
-
from qiskit.qobj.pulse_qobj import PulseQobjExperiment
|
65
|
-
from qiskit.qobj.pulse_qobj import PulseQobjConfig
|
66
|
-
from qiskit.qobj.pulse_qobj import QobjMeasurementOption
|
67
|
-
from qiskit.qobj.pulse_qobj import PulseLibraryItem
|
68
|
-
|
69
|
-
from qiskit.qobj.qasm_qobj import GateCalibration
|
70
|
-
from qiskit.qobj.qasm_qobj import QasmExperimentCalibrations
|
71
|
-
from qiskit.qobj.qasm_qobj import QasmQobj
|
72
|
-
from qiskit.qobj.qasm_qobj import QasmQobjInstruction
|
73
|
-
from qiskit.qobj.qasm_qobj import QasmQobjExperiment
|
74
|
-
from qiskit.qobj.qasm_qobj import QasmQobjConfig
|
75
|
-
from qiskit.qobj.qasm_qobj import QasmQobjExperimentConfig
|
qiskit/qobj/common.py
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2020.
|
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 common Qobj classes."""
|
14
|
-
from types import SimpleNamespace
|
15
|
-
|
16
|
-
from qiskit.utils import deprecate_func
|
17
|
-
|
18
|
-
|
19
|
-
class QobjDictField(SimpleNamespace):
|
20
|
-
"""A class used to represent a dictionary field in Qobj
|
21
|
-
|
22
|
-
Exists as a backwards compatibility shim around a dictionary for Qobjs
|
23
|
-
previously constructed using marshmallow.
|
24
|
-
"""
|
25
|
-
|
26
|
-
@deprecate_func(
|
27
|
-
since="1.2",
|
28
|
-
removal_timeline="in the 2.0 release",
|
29
|
-
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
30
|
-
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
31
|
-
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
32
|
-
"should be updated to use `BackendV2`.",
|
33
|
-
)
|
34
|
-
def __init__(self, **kwargs):
|
35
|
-
"""Instantiate a new Qobj dict field object.
|
36
|
-
|
37
|
-
Args:
|
38
|
-
kwargs: arbitrary keyword arguments that can be accessed as
|
39
|
-
attributes of the object.
|
40
|
-
"""
|
41
|
-
self.__dict__.update(kwargs)
|
42
|
-
|
43
|
-
def to_dict(self):
|
44
|
-
"""Return a dictionary format representation of the OpenQASM 2 Qobj.
|
45
|
-
|
46
|
-
Returns:
|
47
|
-
dict: The dictionary form of the QobjHeader.
|
48
|
-
"""
|
49
|
-
return self.__dict__
|
50
|
-
|
51
|
-
@classmethod
|
52
|
-
def from_dict(cls, data):
|
53
|
-
"""Create a new QobjHeader object from a dictionary.
|
54
|
-
|
55
|
-
Args:
|
56
|
-
data (dict): A dictionary representing the QobjHeader to create. It
|
57
|
-
will be in the same format as output by :func:`to_dict`.
|
58
|
-
|
59
|
-
Returns:
|
60
|
-
QobjDictFieldr: The QobjDictField from the input dictionary.
|
61
|
-
"""
|
62
|
-
|
63
|
-
return cls(**data)
|
64
|
-
|
65
|
-
def __eq__(self, other):
|
66
|
-
if isinstance(other, self.__class__):
|
67
|
-
if self.__dict__ == other.__dict__:
|
68
|
-
return True
|
69
|
-
return False
|
70
|
-
|
71
|
-
|
72
|
-
class QobjHeader(QobjDictField):
|
73
|
-
"""A class used to represent a dictionary header in Qobj objects."""
|
74
|
-
|
75
|
-
pass
|
76
|
-
|
77
|
-
|
78
|
-
class QobjExperimentHeader(QobjHeader):
|
79
|
-
"""A class representing a header dictionary for a Qobj Experiment."""
|
80
|
-
|
81
|
-
pass
|
@@ -1,18 +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
|
-
Helper modules to convert qiskit frontend object to proper qobj model.
|
15
|
-
"""
|
16
|
-
|
17
|
-
from .pulse_instruction import InstructionToQobjConverter, QobjToInstructionConverter
|
18
|
-
from .lo_config import LoConfigConverter
|
@@ -1,177 +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
|
-
"""Helper class used to convert a user LO configuration into a list of frequencies."""
|
14
|
-
|
15
|
-
from qiskit.pulse.channels import DriveChannel, MeasureChannel
|
16
|
-
from qiskit.pulse.configuration import LoConfig
|
17
|
-
from qiskit.exceptions import QiskitError
|
18
|
-
from qiskit.utils import deprecate_func
|
19
|
-
|
20
|
-
|
21
|
-
class LoConfigConverter:
|
22
|
-
"""This class supports to convert LoConfig into ~`lo_freq` attribute of configs.
|
23
|
-
The format of LO frequency setup can be easily modified by replacing
|
24
|
-
``get_qubit_los`` and ``get_meas_los`` to align with your backend.
|
25
|
-
"""
|
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
|
-
qobj_model,
|
38
|
-
qubit_lo_freq=None,
|
39
|
-
meas_lo_freq=None,
|
40
|
-
qubit_lo_range=None,
|
41
|
-
meas_lo_range=None,
|
42
|
-
**run_config,
|
43
|
-
):
|
44
|
-
"""Create new converter.
|
45
|
-
|
46
|
-
Args:
|
47
|
-
qobj_model (Union[PulseQobjExperimentConfig, QasmQobjExperimentConfig): qobj model for
|
48
|
-
experiment config.
|
49
|
-
qubit_lo_freq (Optional[List[float]]): List of default qubit LO frequencies in Hz.
|
50
|
-
meas_lo_freq (Optional[List[float]]): List of default meas LO frequencies in Hz.
|
51
|
-
qubit_lo_range (Optional[List[List[float]]]): List of qubit LO ranges,
|
52
|
-
each of form ``[range_min, range_max]`` in Hz.
|
53
|
-
meas_lo_range (Optional[List[List[float]]]): List of measurement LO ranges,
|
54
|
-
each of form ``[range_min, range_max]`` in Hz.
|
55
|
-
n_qubits (int): Number of qubits in the system.
|
56
|
-
run_config (dict): experimental configuration.
|
57
|
-
"""
|
58
|
-
self.qobj_model = qobj_model
|
59
|
-
self.qubit_lo_freq = qubit_lo_freq
|
60
|
-
self.meas_lo_freq = meas_lo_freq
|
61
|
-
self.run_config = run_config
|
62
|
-
self.n_qubits = self.run_config.get("n_qubits", None)
|
63
|
-
|
64
|
-
self.default_lo_config = LoConfig()
|
65
|
-
|
66
|
-
if qubit_lo_range:
|
67
|
-
for i, lo_range in enumerate(qubit_lo_range):
|
68
|
-
self.default_lo_config.add_lo_range(DriveChannel(i), lo_range)
|
69
|
-
|
70
|
-
if meas_lo_range:
|
71
|
-
for i, lo_range in enumerate(meas_lo_range):
|
72
|
-
self.default_lo_config.add_lo_range(MeasureChannel(i), lo_range)
|
73
|
-
|
74
|
-
def __call__(self, user_lo_config):
|
75
|
-
"""Return experiment config w/ LO values property configured.
|
76
|
-
|
77
|
-
Args:
|
78
|
-
user_lo_config (LoConfig): A dictionary of LOs to format.
|
79
|
-
|
80
|
-
Returns:
|
81
|
-
Union[PulseQobjExperimentConfig, QasmQobjExperimentConfig]: Qobj experiment config.
|
82
|
-
"""
|
83
|
-
lo_config = {}
|
84
|
-
|
85
|
-
q_los = self.get_qubit_los(user_lo_config)
|
86
|
-
if q_los:
|
87
|
-
lo_config["qubit_lo_freq"] = [freq / 1e9 for freq in q_los]
|
88
|
-
|
89
|
-
m_los = self.get_meas_los(user_lo_config)
|
90
|
-
if m_los:
|
91
|
-
lo_config["meas_lo_freq"] = [freq / 1e9 for freq in m_los]
|
92
|
-
|
93
|
-
return self.qobj_model(**lo_config)
|
94
|
-
|
95
|
-
def get_qubit_los(self, user_lo_config):
|
96
|
-
"""Set experiment level qubit LO frequencies. Use default values from job level if
|
97
|
-
experiment level values not supplied. If experiment level and job level values not supplied,
|
98
|
-
raise an error. If configured LO frequency is the same as default, this method returns
|
99
|
-
``None``.
|
100
|
-
|
101
|
-
Args:
|
102
|
-
user_lo_config (LoConfig): A dictionary of LOs to format.
|
103
|
-
|
104
|
-
Returns:
|
105
|
-
List[float]: A list of qubit LOs.
|
106
|
-
|
107
|
-
Raises:
|
108
|
-
QiskitError: When LO frequencies are missing and no default is set at job level.
|
109
|
-
"""
|
110
|
-
_q_los = None
|
111
|
-
|
112
|
-
# try to use job level default values
|
113
|
-
if self.qubit_lo_freq:
|
114
|
-
_q_los = self.qubit_lo_freq.copy()
|
115
|
-
# otherwise initialize list with ``None`` entries
|
116
|
-
elif self.n_qubits:
|
117
|
-
_q_los = [None] * self.n_qubits
|
118
|
-
|
119
|
-
# fill experiment level LO's
|
120
|
-
if _q_los:
|
121
|
-
for channel, lo_freq in user_lo_config.qubit_los.items():
|
122
|
-
self.default_lo_config.check_lo(channel, lo_freq)
|
123
|
-
_q_los[channel.index] = lo_freq
|
124
|
-
|
125
|
-
if _q_los == self.qubit_lo_freq:
|
126
|
-
return None
|
127
|
-
|
128
|
-
# if ``None`` remains in LO's, indicates default not provided and user value is missing
|
129
|
-
# raise error
|
130
|
-
if None in _q_los:
|
131
|
-
raise QiskitError(
|
132
|
-
"Invalid experiment level qubit LO's. Must either pass values "
|
133
|
-
"for all drive channels or pass 'default_qubit_los'."
|
134
|
-
)
|
135
|
-
|
136
|
-
return _q_los
|
137
|
-
|
138
|
-
def get_meas_los(self, user_lo_config):
|
139
|
-
"""Set experiment level meas LO frequencies. Use default values from job level if experiment
|
140
|
-
level values not supplied. If experiment level and job level values not supplied, raise an
|
141
|
-
error. If configured LO frequency is the same as default, this method returns ``None``.
|
142
|
-
|
143
|
-
Args:
|
144
|
-
user_lo_config (LoConfig): A dictionary of LOs to format.
|
145
|
-
|
146
|
-
Returns:
|
147
|
-
List[float]: A list of measurement LOs.
|
148
|
-
|
149
|
-
Raises:
|
150
|
-
QiskitError: When LO frequencies are missing and no default is set at job level.
|
151
|
-
"""
|
152
|
-
_m_los = None
|
153
|
-
# try to use job level default values
|
154
|
-
if self.meas_lo_freq:
|
155
|
-
_m_los = self.meas_lo_freq.copy()
|
156
|
-
# otherwise initialize list with ``None`` entries
|
157
|
-
elif self.n_qubits:
|
158
|
-
_m_los = [None] * self.n_qubits
|
159
|
-
|
160
|
-
# fill experiment level LO's
|
161
|
-
if _m_los:
|
162
|
-
for channel, lo_freq in user_lo_config.meas_los.items():
|
163
|
-
self.default_lo_config.check_lo(channel, lo_freq)
|
164
|
-
_m_los[channel.index] = lo_freq
|
165
|
-
|
166
|
-
if _m_los == self.meas_lo_freq:
|
167
|
-
return None
|
168
|
-
|
169
|
-
# if ``None`` remains in LO's, indicates default not provided and user value is missing
|
170
|
-
# raise error
|
171
|
-
if None in _m_los:
|
172
|
-
raise QiskitError(
|
173
|
-
"Invalid experiment level measurement LO's. Must either pass "
|
174
|
-
"values for all measurement channels or pass 'default_meas_los'."
|
175
|
-
)
|
176
|
-
|
177
|
-
return _m_los
|