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
@@ -1,340 +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
|
-
"""
|
14
|
-
Fake backend supporting OpenPulse.
|
15
|
-
"""
|
16
|
-
import warnings
|
17
|
-
|
18
|
-
from qiskit.providers.models.backendconfiguration import (
|
19
|
-
GateConfig,
|
20
|
-
PulseBackendConfiguration,
|
21
|
-
UchannelLO,
|
22
|
-
)
|
23
|
-
from qiskit.providers.models.pulsedefaults import PulseDefaults, Command
|
24
|
-
from qiskit.qobj import PulseQobjInstruction
|
25
|
-
|
26
|
-
from .fake_backend import FakeBackend
|
27
|
-
|
28
|
-
|
29
|
-
class FakeOpenPulse3Q(FakeBackend):
|
30
|
-
"""Trivial extension of the FakeOpenPulse2Q."""
|
31
|
-
|
32
|
-
def __init__(self):
|
33
|
-
configuration = PulseBackendConfiguration(
|
34
|
-
backend_name="fake_openpulse_3q",
|
35
|
-
backend_version="0.0.0",
|
36
|
-
n_qubits=3,
|
37
|
-
meas_levels=[0, 1, 2],
|
38
|
-
basis_gates=["u1", "u2", "u3", "cx", "id"],
|
39
|
-
simulator=False,
|
40
|
-
local=True,
|
41
|
-
conditional=True,
|
42
|
-
open_pulse=True,
|
43
|
-
memory=False,
|
44
|
-
max_shots=65536,
|
45
|
-
gates=[GateConfig(name="TODO", parameters=[], qasm_def="TODO")],
|
46
|
-
coupling_map=[[0, 1], [1, 2]],
|
47
|
-
n_registers=3,
|
48
|
-
n_uchannels=3,
|
49
|
-
u_channel_lo=[
|
50
|
-
[UchannelLO(q=0, scale=1.0 + 0.0j)],
|
51
|
-
[UchannelLO(q=0, scale=-1.0 + 0.0j), UchannelLO(q=1, scale=1.0 + 0.0j)],
|
52
|
-
[UchannelLO(q=0, scale=1.0 + 0.0j)],
|
53
|
-
],
|
54
|
-
qubit_lo_range=[[4.5, 5.5], [4.5, 5.5], [4.5, 5.5]],
|
55
|
-
meas_lo_range=[[6.0, 7.0], [6.0, 7.0], [6.0, 7.0]],
|
56
|
-
dt=1.3333,
|
57
|
-
dtm=10.5,
|
58
|
-
rep_times=[100, 250, 500, 1000],
|
59
|
-
meas_map=[[0, 1, 2]],
|
60
|
-
channel_bandwidth=[
|
61
|
-
[-0.2, 0.4],
|
62
|
-
[-0.3, 0.3],
|
63
|
-
[-0.3, 0.3],
|
64
|
-
[-0.02, 0.02],
|
65
|
-
[-0.02, 0.02],
|
66
|
-
[-0.02, 0.02],
|
67
|
-
[-0.2, 0.4],
|
68
|
-
[-0.3, 0.3],
|
69
|
-
[-0.3, 0.3],
|
70
|
-
],
|
71
|
-
meas_kernels=["kernel1"],
|
72
|
-
discriminators=["max_1Q_fidelity"],
|
73
|
-
acquisition_latency=[[100, 100], [100, 100], [100, 100]],
|
74
|
-
conditional_latency=[
|
75
|
-
[100, 1000],
|
76
|
-
[1000, 100],
|
77
|
-
[100, 1000],
|
78
|
-
[100, 1000],
|
79
|
-
[1000, 100],
|
80
|
-
[100, 1000],
|
81
|
-
[1000, 100],
|
82
|
-
[100, 1000],
|
83
|
-
[1000, 100],
|
84
|
-
],
|
85
|
-
channels={
|
86
|
-
"acquire0": {"type": "acquire", "purpose": "acquire", "operates": {"qubits": [0]}},
|
87
|
-
"acquire1": {"type": "acquire", "purpose": "acquire", "operates": {"qubits": [1]}},
|
88
|
-
"acquire2": {"type": "acquire", "purpose": "acquire", "operates": {"qubits": [2]}},
|
89
|
-
"d0": {"type": "drive", "purpose": "drive", "operates": {"qubits": [0]}},
|
90
|
-
"d1": {"type": "drive", "purpose": "drive", "operates": {"qubits": [1]}},
|
91
|
-
"d2": {"type": "drive", "purpose": "drive", "operates": {"qubits": [2]}},
|
92
|
-
"m0": {"type": "measure", "purpose": "measure", "operates": {"qubits": [0]}},
|
93
|
-
"m1": {"type": "measure", "purpose": "measure", "operates": {"qubits": [1]}},
|
94
|
-
"m2": {"type": "measure", "purpose": "measure", "operates": {"qubits": [2]}},
|
95
|
-
"u0": {
|
96
|
-
"type": "control",
|
97
|
-
"purpose": "cross-resonance",
|
98
|
-
"operates": {"qubits": [0, 1]},
|
99
|
-
},
|
100
|
-
"u1": {
|
101
|
-
"type": "control",
|
102
|
-
"purpose": "cross-resonance",
|
103
|
-
"operates": {"qubits": [1, 0]},
|
104
|
-
},
|
105
|
-
"u2": {
|
106
|
-
"type": "control",
|
107
|
-
"purpose": "cross-resonance",
|
108
|
-
"operates": {"qubits": [2, 1]},
|
109
|
-
},
|
110
|
-
},
|
111
|
-
)
|
112
|
-
with warnings.catch_warnings():
|
113
|
-
# The class PulseQobjInstruction is deprecated
|
114
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
115
|
-
self._defaults = PulseDefaults.from_dict(
|
116
|
-
{
|
117
|
-
"qubit_freq_est": [4.9, 5.0, 4.8],
|
118
|
-
"meas_freq_est": [6.5, 6.6, 6.4],
|
119
|
-
"buffer": 10,
|
120
|
-
"pulse_library": [
|
121
|
-
{"name": "x90p_d0", "samples": 2 * [0.1 + 0j]},
|
122
|
-
{"name": "x90p_d1", "samples": 2 * [0.1 + 0j]},
|
123
|
-
{"name": "x90p_d2", "samples": 2 * [0.1 + 0j]},
|
124
|
-
{"name": "x90m_d0", "samples": 2 * [-0.1 + 0j]},
|
125
|
-
{"name": "x90m_d1", "samples": 2 * [-0.1 + 0j]},
|
126
|
-
{"name": "x90m_d2", "samples": 2 * [-0.1 + 0j]},
|
127
|
-
{"name": "y90p_d0", "samples": 2 * [0.1j]},
|
128
|
-
{"name": "y90p_d1", "samples": 2 * [0.1j]},
|
129
|
-
{"name": "y90p_d2", "samples": 2 * [0.1j]},
|
130
|
-
{"name": "xp_d0", "samples": 2 * [0.2 + 0j]},
|
131
|
-
{"name": "ym_d0", "samples": 2 * [-0.2j]},
|
132
|
-
{"name": "xp_d1", "samples": 2 * [0.2 + 0j]},
|
133
|
-
{"name": "ym_d1", "samples": 2 * [-0.2j]},
|
134
|
-
{"name": "cr90p_u0", "samples": 9 * [0.1 + 0j]},
|
135
|
-
{"name": "cr90m_u0", "samples": 9 * [-0.1 + 0j]},
|
136
|
-
{"name": "cr90p_u1", "samples": 9 * [0.1 + 0j]},
|
137
|
-
{"name": "cr90m_u1", "samples": 9 * [-0.1 + 0j]},
|
138
|
-
{"name": "measure_m0", "samples": 10 * [0.1 + 0j]},
|
139
|
-
{"name": "measure_m1", "samples": 10 * [0.1 + 0j]},
|
140
|
-
{"name": "measure_m2", "samples": 10 * [0.1 + 0j]},
|
141
|
-
],
|
142
|
-
"cmd_def": [
|
143
|
-
Command.from_dict(
|
144
|
-
{
|
145
|
-
"name": "u1",
|
146
|
-
"qubits": [0],
|
147
|
-
"sequence": [
|
148
|
-
PulseQobjInstruction(
|
149
|
-
name="fc", ch="d0", t0=0, phase="-P0"
|
150
|
-
).to_dict()
|
151
|
-
],
|
152
|
-
}
|
153
|
-
).to_dict(),
|
154
|
-
Command.from_dict(
|
155
|
-
{
|
156
|
-
"name": "u1",
|
157
|
-
"qubits": [1],
|
158
|
-
"sequence": [
|
159
|
-
PulseQobjInstruction(
|
160
|
-
name="fc", ch="d1", t0=0, phase="-P0"
|
161
|
-
).to_dict()
|
162
|
-
],
|
163
|
-
}
|
164
|
-
).to_dict(),
|
165
|
-
Command.from_dict(
|
166
|
-
{
|
167
|
-
"name": "u1",
|
168
|
-
"qubits": [2],
|
169
|
-
"sequence": [
|
170
|
-
PulseQobjInstruction(
|
171
|
-
name="fc", ch="d2", t0=0, phase="-P0"
|
172
|
-
).to_dict()
|
173
|
-
],
|
174
|
-
}
|
175
|
-
).to_dict(),
|
176
|
-
Command.from_dict(
|
177
|
-
{
|
178
|
-
"name": "u2",
|
179
|
-
"qubits": [0],
|
180
|
-
"sequence": [
|
181
|
-
PulseQobjInstruction(
|
182
|
-
name="fc", ch="d0", t0=0, phase="-P1"
|
183
|
-
).to_dict(),
|
184
|
-
PulseQobjInstruction(name="y90p_d0", ch="d0", t0=0).to_dict(),
|
185
|
-
PulseQobjInstruction(
|
186
|
-
name="fc", ch="d0", t0=2, phase="-P0"
|
187
|
-
).to_dict(),
|
188
|
-
],
|
189
|
-
}
|
190
|
-
).to_dict(),
|
191
|
-
Command.from_dict(
|
192
|
-
{
|
193
|
-
"name": "u2",
|
194
|
-
"qubits": [1],
|
195
|
-
"sequence": [
|
196
|
-
PulseQobjInstruction(
|
197
|
-
name="fc", ch="d1", t0=0, phase="-P1"
|
198
|
-
).to_dict(),
|
199
|
-
PulseQobjInstruction(name="y90p_d1", ch="d1", t0=0).to_dict(),
|
200
|
-
PulseQobjInstruction(
|
201
|
-
name="fc", ch="d1", t0=2, phase="-P0"
|
202
|
-
).to_dict(),
|
203
|
-
],
|
204
|
-
}
|
205
|
-
).to_dict(),
|
206
|
-
Command.from_dict(
|
207
|
-
{
|
208
|
-
"name": "u2",
|
209
|
-
"qubits": [2],
|
210
|
-
"sequence": [
|
211
|
-
PulseQobjInstruction(
|
212
|
-
name="fc", ch="d2", t0=0, phase="-P1"
|
213
|
-
).to_dict(),
|
214
|
-
PulseQobjInstruction(name="y90p_d2", ch="d2", t0=0).to_dict(),
|
215
|
-
PulseQobjInstruction(
|
216
|
-
name="fc", ch="d2", t0=2, phase="-P0"
|
217
|
-
).to_dict(),
|
218
|
-
],
|
219
|
-
}
|
220
|
-
).to_dict(),
|
221
|
-
Command.from_dict(
|
222
|
-
{
|
223
|
-
"name": "u3",
|
224
|
-
"qubits": [0],
|
225
|
-
"sequence": [
|
226
|
-
PulseQobjInstruction(
|
227
|
-
name="fc", ch="d0", t0=0, phase="-P2"
|
228
|
-
).to_dict(),
|
229
|
-
PulseQobjInstruction(name="x90p_d0", ch="d0", t0=0).to_dict(),
|
230
|
-
PulseQobjInstruction(
|
231
|
-
name="fc", ch="d0", t0=2, phase="-P0"
|
232
|
-
).to_dict(),
|
233
|
-
PulseQobjInstruction(name="x90m_d0", ch="d0", t0=2).to_dict(),
|
234
|
-
PulseQobjInstruction(
|
235
|
-
name="fc", ch="d0", t0=4, phase="-P1"
|
236
|
-
).to_dict(),
|
237
|
-
],
|
238
|
-
}
|
239
|
-
).to_dict(),
|
240
|
-
Command.from_dict(
|
241
|
-
{
|
242
|
-
"name": "u3",
|
243
|
-
"qubits": [1],
|
244
|
-
"sequence": [
|
245
|
-
PulseQobjInstruction(
|
246
|
-
name="fc", ch="d1", t0=0, phase="-P2"
|
247
|
-
).to_dict(),
|
248
|
-
PulseQobjInstruction(name="x90p_d1", ch="d1", t0=0).to_dict(),
|
249
|
-
PulseQobjInstruction(
|
250
|
-
name="fc", ch="d1", t0=2, phase="-P0"
|
251
|
-
).to_dict(),
|
252
|
-
PulseQobjInstruction(name="x90m_d1", ch="d1", t0=2).to_dict(),
|
253
|
-
PulseQobjInstruction(
|
254
|
-
name="fc", ch="d1", t0=4, phase="-P1"
|
255
|
-
).to_dict(),
|
256
|
-
],
|
257
|
-
}
|
258
|
-
).to_dict(),
|
259
|
-
Command.from_dict(
|
260
|
-
{
|
261
|
-
"name": "u3",
|
262
|
-
"qubits": [2],
|
263
|
-
"sequence": [
|
264
|
-
PulseQobjInstruction(
|
265
|
-
name="fc", ch="d2", t0=0, phase="-P2"
|
266
|
-
).to_dict(),
|
267
|
-
PulseQobjInstruction(name="x90p_d2", ch="d2", t0=0).to_dict(),
|
268
|
-
PulseQobjInstruction(
|
269
|
-
name="fc", ch="d2", t0=2, phase="-P0"
|
270
|
-
).to_dict(),
|
271
|
-
PulseQobjInstruction(name="x90m_d2", ch="d2", t0=2).to_dict(),
|
272
|
-
PulseQobjInstruction(
|
273
|
-
name="fc", ch="d2", t0=4, phase="-P1"
|
274
|
-
).to_dict(),
|
275
|
-
],
|
276
|
-
}
|
277
|
-
).to_dict(),
|
278
|
-
Command.from_dict(
|
279
|
-
{
|
280
|
-
"name": "cx",
|
281
|
-
"qubits": [0, 1],
|
282
|
-
"sequence": [
|
283
|
-
PulseQobjInstruction(
|
284
|
-
name="fc", ch="d0", t0=0, phase=1.57
|
285
|
-
).to_dict(),
|
286
|
-
PulseQobjInstruction(name="ym_d0", ch="d0", t0=0).to_dict(),
|
287
|
-
PulseQobjInstruction(name="xp_d0", ch="d0", t0=11).to_dict(),
|
288
|
-
PulseQobjInstruction(name="x90p_d1", ch="d1", t0=0).to_dict(),
|
289
|
-
PulseQobjInstruction(name="cr90p_u0", ch="u0", t0=2).to_dict(),
|
290
|
-
PulseQobjInstruction(name="cr90m_u0", ch="u0", t0=13).to_dict(),
|
291
|
-
],
|
292
|
-
}
|
293
|
-
).to_dict(),
|
294
|
-
Command.from_dict(
|
295
|
-
{
|
296
|
-
"name": "cx",
|
297
|
-
"qubits": [1, 2],
|
298
|
-
"sequence": [
|
299
|
-
PulseQobjInstruction(
|
300
|
-
name="fc", ch="d1", t0=0, phase=1.57
|
301
|
-
).to_dict(),
|
302
|
-
PulseQobjInstruction(name="ym_d1", ch="d1", t0=0).to_dict(),
|
303
|
-
PulseQobjInstruction(name="xp_d1", ch="d1", t0=11).to_dict(),
|
304
|
-
PulseQobjInstruction(name="x90p_d2", ch="d2", t0=0).to_dict(),
|
305
|
-
PulseQobjInstruction(name="cr90p_u1", ch="u1", t0=2).to_dict(),
|
306
|
-
PulseQobjInstruction(name="cr90m_u1", ch="u1", t0=13).to_dict(),
|
307
|
-
],
|
308
|
-
}
|
309
|
-
).to_dict(),
|
310
|
-
Command.from_dict(
|
311
|
-
{
|
312
|
-
"name": "measure",
|
313
|
-
"qubits": [0, 1, 2],
|
314
|
-
"sequence": [
|
315
|
-
PulseQobjInstruction(
|
316
|
-
name="measure_m0", ch="m0", t0=0
|
317
|
-
).to_dict(),
|
318
|
-
PulseQobjInstruction(
|
319
|
-
name="measure_m1", ch="m1", t0=0
|
320
|
-
).to_dict(),
|
321
|
-
PulseQobjInstruction(
|
322
|
-
name="measure_m2", ch="m2", t0=0
|
323
|
-
).to_dict(),
|
324
|
-
PulseQobjInstruction(
|
325
|
-
name="acquire",
|
326
|
-
duration=10,
|
327
|
-
t0=0,
|
328
|
-
qubits=[0, 1, 2],
|
329
|
-
memory_slot=[0, 1, 2],
|
330
|
-
).to_dict(),
|
331
|
-
],
|
332
|
-
}
|
333
|
-
).to_dict(),
|
334
|
-
],
|
335
|
-
}
|
336
|
-
)
|
337
|
-
super().__init__(configuration)
|
338
|
-
|
339
|
-
def defaults(self): # pylint: disable=missing-function-docstring
|
340
|
-
return self._defaults
|
@@ -1,49 +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
|
-
"""
|
14
|
-
Fake backend abstract class for mock backends supporting OpenPulse.
|
15
|
-
"""
|
16
|
-
|
17
|
-
import warnings
|
18
|
-
|
19
|
-
from qiskit.exceptions import QiskitError
|
20
|
-
from qiskit.providers.models.backendconfiguration import PulseBackendConfiguration
|
21
|
-
from qiskit.providers.models.pulsedefaults import PulseDefaults
|
22
|
-
|
23
|
-
from .fake_qasm_backend import FakeQasmBackend
|
24
|
-
from .utils.json_decoder import decode_pulse_defaults
|
25
|
-
|
26
|
-
|
27
|
-
class FakePulseBackend(FakeQasmBackend):
|
28
|
-
"""A fake pulse backend."""
|
29
|
-
|
30
|
-
defs_filename = None
|
31
|
-
|
32
|
-
def defaults(self):
|
33
|
-
"""Returns a snapshot of device defaults"""
|
34
|
-
if not self._defaults:
|
35
|
-
with warnings.catch_warnings():
|
36
|
-
warnings.simplefilter(action="ignore", category=DeprecationWarning)
|
37
|
-
# Filter deprecation warnings emitted from Qiskit Pulse
|
38
|
-
self._set_defaults_from_json()
|
39
|
-
return self._defaults
|
40
|
-
|
41
|
-
def _set_defaults_from_json(self):
|
42
|
-
if not self.props_filename:
|
43
|
-
raise QiskitError("No properties file has been defined")
|
44
|
-
defs = self._load_json(self.defs_filename)
|
45
|
-
decode_pulse_defaults(defs)
|
46
|
-
self._defaults = PulseDefaults.from_dict(defs)
|
47
|
-
|
48
|
-
def _get_config_from_dict(self, conf):
|
49
|
-
return PulseBackendConfiguration.from_dict(conf)
|
@@ -1,77 +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
|
-
"""
|
14
|
-
Fake backend abstract class for mock backends.
|
15
|
-
"""
|
16
|
-
|
17
|
-
import json
|
18
|
-
import os
|
19
|
-
import warnings
|
20
|
-
|
21
|
-
from qiskit.exceptions import QiskitError
|
22
|
-
from qiskit.providers.models.backendproperties import BackendProperties
|
23
|
-
from qiskit.providers.models.backendconfiguration import QasmBackendConfiguration
|
24
|
-
|
25
|
-
from .utils.json_decoder import (
|
26
|
-
decode_backend_configuration,
|
27
|
-
decode_backend_properties,
|
28
|
-
)
|
29
|
-
from .fake_backend import FakeBackend
|
30
|
-
|
31
|
-
|
32
|
-
class FakeQasmBackend(FakeBackend):
|
33
|
-
"""A fake OpenQASM backend."""
|
34
|
-
|
35
|
-
dirname = None
|
36
|
-
conf_filename = None
|
37
|
-
props_filename = None
|
38
|
-
backend_name = None
|
39
|
-
|
40
|
-
def __init__(self):
|
41
|
-
configuration = self._get_conf_from_json()
|
42
|
-
self._defaults = None
|
43
|
-
self._properties = None
|
44
|
-
super().__init__(configuration)
|
45
|
-
|
46
|
-
def properties(self):
|
47
|
-
"""Returns a snapshot of device properties"""
|
48
|
-
if not self._properties:
|
49
|
-
self._set_props_from_json()
|
50
|
-
return self._properties
|
51
|
-
|
52
|
-
def _get_conf_from_json(self):
|
53
|
-
if not self.conf_filename:
|
54
|
-
raise QiskitError("No configuration file has been defined")
|
55
|
-
conf = self._load_json(self.conf_filename)
|
56
|
-
decode_backend_configuration(conf)
|
57
|
-
configuration = self._get_config_from_dict(conf)
|
58
|
-
configuration.backend_name = self.backend_name
|
59
|
-
return configuration
|
60
|
-
|
61
|
-
def _set_props_from_json(self):
|
62
|
-
if not self.props_filename:
|
63
|
-
raise QiskitError("No properties file has been defined")
|
64
|
-
props = self._load_json(self.props_filename)
|
65
|
-
decode_backend_properties(props)
|
66
|
-
with warnings.catch_warnings():
|
67
|
-
# This raises the BackendProperties deprecation warning internally
|
68
|
-
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
69
|
-
self._properties = BackendProperties.from_dict(props)
|
70
|
-
|
71
|
-
def _load_json(self, filename):
|
72
|
-
with open(os.path.join(self.dirname, filename)) as f_json:
|
73
|
-
the_json = json.load(f_json)
|
74
|
-
return the_json
|
75
|
-
|
76
|
-
def _get_config_from_dict(self, conf):
|
77
|
-
return QasmBackendConfiguration.from_dict(conf)
|
@@ -1,150 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2022.
|
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
|
-
Utilities for constructing Target object from configuration, properties and
|
15
|
-
pulse defaults json files
|
16
|
-
"""
|
17
|
-
|
18
|
-
from qiskit.transpiler.target import Target, InstructionProperties
|
19
|
-
from qiskit.providers.backend import QubitProperties
|
20
|
-
from qiskit.utils.units import apply_prefix
|
21
|
-
from qiskit.circuit.library.standard_gates import IGate, SXGate, XGate, CXGate, RZGate
|
22
|
-
from qiskit.circuit.parameter import Parameter
|
23
|
-
from qiskit.circuit.gate import Gate
|
24
|
-
from qiskit.circuit.delay import Delay
|
25
|
-
from qiskit.circuit.measure import Measure
|
26
|
-
from qiskit.circuit.reset import Reset
|
27
|
-
from qiskit.providers.models.pulsedefaults import PulseDefaults
|
28
|
-
|
29
|
-
|
30
|
-
def convert_to_target(conf_dict: dict, props_dict: dict = None, defs_dict: dict = None) -> Target:
|
31
|
-
"""Uses configuration, properties and pulse defaults dicts
|
32
|
-
to construct and return Target class.
|
33
|
-
"""
|
34
|
-
name_mapping = {
|
35
|
-
"id": IGate(),
|
36
|
-
"sx": SXGate(),
|
37
|
-
"x": XGate(),
|
38
|
-
"cx": CXGate(),
|
39
|
-
"rz": RZGate(Parameter("λ")),
|
40
|
-
"reset": Reset(),
|
41
|
-
}
|
42
|
-
custom_gates = {}
|
43
|
-
qubit_props = None
|
44
|
-
if props_dict:
|
45
|
-
qubit_props = qubit_props_from_props(props_dict)
|
46
|
-
target = Target(qubit_properties=qubit_props, concurrent_measurements=conf_dict.get("meas_map"))
|
47
|
-
# Parse from properties if it exsits
|
48
|
-
if props_dict is not None:
|
49
|
-
# Parse instructions
|
50
|
-
gates = {}
|
51
|
-
for gate in props_dict["gates"]:
|
52
|
-
name = gate["gate"]
|
53
|
-
if name in name_mapping:
|
54
|
-
if name not in gates:
|
55
|
-
gates[name] = {}
|
56
|
-
elif name not in custom_gates:
|
57
|
-
custom_gate = Gate(name, len(gate["qubits"]), [])
|
58
|
-
custom_gates[name] = custom_gate
|
59
|
-
gates[name] = {}
|
60
|
-
|
61
|
-
qubits = tuple(gate["qubits"])
|
62
|
-
gate_props = {}
|
63
|
-
for param in gate["parameters"]:
|
64
|
-
if param["name"] == "gate_error":
|
65
|
-
gate_props["error"] = param["value"]
|
66
|
-
if param["name"] == "gate_length":
|
67
|
-
gate_props["duration"] = apply_prefix(param["value"], param["unit"])
|
68
|
-
gates[name][qubits] = InstructionProperties(**gate_props)
|
69
|
-
for gate, props in gates.items():
|
70
|
-
if gate in name_mapping:
|
71
|
-
inst = name_mapping.get(gate)
|
72
|
-
else:
|
73
|
-
inst = custom_gates[gate]
|
74
|
-
target.add_instruction(inst, props)
|
75
|
-
# Create measurement instructions:
|
76
|
-
measure_props = {}
|
77
|
-
count = 0
|
78
|
-
for qubit in props_dict["qubits"]:
|
79
|
-
qubit_prop = {}
|
80
|
-
for prop in qubit:
|
81
|
-
if prop["name"] == "readout_length":
|
82
|
-
qubit_prop["duration"] = apply_prefix(prop["value"], prop["unit"])
|
83
|
-
if prop["name"] == "readout_error":
|
84
|
-
qubit_prop["error"] = prop["value"]
|
85
|
-
measure_props[(count,)] = InstructionProperties(**qubit_prop)
|
86
|
-
count += 1
|
87
|
-
target.add_instruction(Measure(), measure_props)
|
88
|
-
# Parse from configuration because properties doesn't exist
|
89
|
-
else:
|
90
|
-
for gate in conf_dict["gates"]:
|
91
|
-
name = gate["name"]
|
92
|
-
gate_props = {tuple(x): None for x in gate["coupling_map"]}
|
93
|
-
if name in name_mapping:
|
94
|
-
target.add_instruction(name_mapping[name], gate_props)
|
95
|
-
else:
|
96
|
-
custom_gate = Gate(name, len(gate["coupling_map"][0]), [])
|
97
|
-
target.add_instruction(custom_gate, gate_props)
|
98
|
-
measure_props = {(n,): None for n in range(conf_dict["n_qubits"])}
|
99
|
-
target.add_instruction(Measure(), measure_props)
|
100
|
-
# parse global configuration properties
|
101
|
-
dt = conf_dict.get("dt")
|
102
|
-
if dt:
|
103
|
-
target.dt = dt * 1e-9
|
104
|
-
if "timing_constraints" in conf_dict:
|
105
|
-
target.granularity = conf_dict["timing_constraints"].get("granularity")
|
106
|
-
target.min_length = conf_dict["timing_constraints"].get("min_length")
|
107
|
-
target.pulse_alignment = conf_dict["timing_constraints"].get("pulse_alignment")
|
108
|
-
target.acquire_alignment = conf_dict["timing_constraints"].get("acquire_alignment")
|
109
|
-
# If pulse defaults exists use that as the source of truth
|
110
|
-
if defs_dict is not None:
|
111
|
-
# TODO remove the usage of PulseDefaults as it will be deprecated in the future
|
112
|
-
pulse_defs = PulseDefaults.from_dict(defs_dict)
|
113
|
-
inst_map = pulse_defs.instruction_schedule_map
|
114
|
-
for inst in inst_map.instructions:
|
115
|
-
for qarg in inst_map.qubits_with_instruction(inst):
|
116
|
-
try:
|
117
|
-
qargs = tuple(qarg)
|
118
|
-
except TypeError:
|
119
|
-
qargs = (qarg,)
|
120
|
-
# Do NOT call .get method. This parses Qpbj immediately.
|
121
|
-
# This operation is computationally expensive and should be bypassed.
|
122
|
-
calibration_entry = inst_map._get_calibration_entry(inst, qargs)
|
123
|
-
if inst in target:
|
124
|
-
if inst == "measure":
|
125
|
-
for qubit in qargs:
|
126
|
-
target[inst][(qubit,)].calibration = calibration_entry
|
127
|
-
elif qargs in target[inst]:
|
128
|
-
target[inst][qargs].calibration = calibration_entry
|
129
|
-
target.add_instruction(
|
130
|
-
Delay(Parameter("t")), {(bit,): None for bit in range(target.num_qubits)}
|
131
|
-
)
|
132
|
-
return target
|
133
|
-
|
134
|
-
|
135
|
-
def qubit_props_from_props(properties: dict) -> list:
|
136
|
-
"""Returns a dictionary of `qiskit.providers.backend.QubitProperties` using
|
137
|
-
a backend properties dictionary created by loading props.json payload.
|
138
|
-
"""
|
139
|
-
qubit_props = []
|
140
|
-
for qubit in properties["qubits"]:
|
141
|
-
qubit_properties = {}
|
142
|
-
for prop_dict in qubit:
|
143
|
-
if prop_dict["name"] == "T1":
|
144
|
-
qubit_properties["t1"] = apply_prefix(prop_dict["value"], prop_dict["unit"])
|
145
|
-
elif prop_dict["name"] == "T2":
|
146
|
-
qubit_properties["t2"] = apply_prefix(prop_dict["value"], prop_dict["unit"])
|
147
|
-
elif prop_dict["name"] == "frequency":
|
148
|
-
qubit_properties["frequency"] = apply_prefix(prop_dict["value"], prop_dict["unit"])
|
149
|
-
qubit_props.append(QubitProperties(**qubit_properties))
|
150
|
-
return qubit_props
|