qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0__cp38-abi3-macosx_10_9_universal2.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 +27 -24
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +1 -1
- qiskit/assembler/assemble_circuits.py +107 -64
- qiskit/assembler/assemble_schedules.py +5 -12
- qiskit/assembler/disassemble.py +10 -1
- qiskit/circuit/__init__.py +6 -3
- qiskit/circuit/_classical_resource_map.py +5 -5
- qiskit/circuit/_utils.py +0 -13
- qiskit/circuit/add_control.py +1 -1
- qiskit/circuit/annotated_operation.py +23 -1
- qiskit/circuit/classical/expr/expr.py +4 -4
- qiskit/circuit/classical/expr/visitors.py +1 -1
- qiskit/circuit/classical/types/__init__.py +1 -1
- qiskit/circuit/classical/types/types.py +2 -2
- qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
- qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
- qiskit/circuit/classicalfunction/utils.py +1 -1
- qiskit/circuit/classicalregister.py +1 -1
- qiskit/circuit/commutation_checker.py +83 -35
- qiskit/circuit/controlflow/_builder_utils.py +1 -1
- qiskit/circuit/controlflow/builder.py +10 -6
- qiskit/circuit/controlflow/if_else.py +2 -2
- qiskit/circuit/controlflow/switch_case.py +1 -1
- qiskit/circuit/delay.py +1 -1
- qiskit/circuit/duration.py +2 -2
- qiskit/circuit/equivalence.py +5 -7
- qiskit/circuit/gate.py +11 -8
- qiskit/circuit/instruction.py +31 -13
- qiskit/circuit/instructionset.py +2 -5
- qiskit/circuit/library/__init__.py +2 -1
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
- qiskit/circuit/library/basis_change/__init__.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +40 -6
- qiskit/circuit/library/blueprintcircuit.py +3 -5
- qiskit/circuit/library/data_preparation/__init__.py +9 -2
- qiskit/circuit/library/data_preparation/initializer.py +8 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
- qiskit/circuit/library/generalized_gates/isometry.py +8 -8
- qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
- qiskit/circuit/library/generalized_gates/permutation.py +8 -9
- qiskit/circuit/library/generalized_gates/uc.py +3 -3
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
- qiskit/circuit/library/generalized_gates/unitary.py +13 -11
- qiskit/circuit/library/graph_state.py +1 -1
- qiskit/circuit/library/hamiltonian_gate.py +1 -2
- qiskit/circuit/library/hidden_linear_function.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
- qiskit/circuit/library/n_local/n_local.py +4 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
- qiskit/circuit/library/n_local/two_local.py +1 -1
- qiskit/circuit/library/overlap.py +11 -5
- qiskit/circuit/library/pauli_evolution.py +7 -3
- qiskit/circuit/library/standard_gates/dcx.py +3 -0
- qiskit/circuit/library/standard_gates/ecr.py +3 -0
- qiskit/circuit/library/standard_gates/global_phase.py +3 -0
- qiskit/circuit/library/standard_gates/h.py +13 -5
- qiskit/circuit/library/standard_gates/i.py +3 -0
- qiskit/circuit/library/standard_gates/iswap.py +3 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
- qiskit/circuit/library/standard_gates/p.py +14 -9
- qiskit/circuit/library/standard_gates/r.py +3 -0
- qiskit/circuit/library/standard_gates/rx.py +21 -6
- qiskit/circuit/library/standard_gates/rxx.py +40 -1
- qiskit/circuit/library/standard_gates/ry.py +21 -6
- qiskit/circuit/library/standard_gates/ryy.py +40 -1
- qiskit/circuit/library/standard_gates/rz.py +22 -6
- qiskit/circuit/library/standard_gates/rzx.py +40 -1
- qiskit/circuit/library/standard_gates/rzz.py +41 -2
- qiskit/circuit/library/standard_gates/s.py +77 -0
- qiskit/circuit/library/standard_gates/swap.py +12 -5
- qiskit/circuit/library/standard_gates/sx.py +14 -5
- qiskit/circuit/library/standard_gates/t.py +5 -0
- qiskit/circuit/library/standard_gates/u.py +22 -7
- qiskit/circuit/library/standard_gates/u1.py +8 -3
- qiskit/circuit/library/standard_gates/u2.py +3 -0
- qiskit/circuit/library/standard_gates/u3.py +22 -7
- qiskit/circuit/library/standard_gates/x.py +156 -92
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
- qiskit/circuit/library/standard_gates/y.py +6 -1
- qiskit/circuit/library/standard_gates/z.py +8 -1
- qiskit/circuit/operation.py +1 -1
- qiskit/circuit/parameter.py +9 -10
- qiskit/circuit/parameterexpression.py +16 -13
- qiskit/circuit/parametertable.py +1 -190
- qiskit/circuit/parametervector.py +1 -1
- qiskit/circuit/quantumcircuit.py +395 -387
- qiskit/circuit/quantumcircuitdata.py +3 -5
- qiskit/circuit/quantumregister.py +1 -1
- qiskit/circuit/random/__init__.py +1 -1
- qiskit/circuit/random/utils.py +175 -26
- qiskit/circuit/register.py +5 -7
- qiskit/circuit/singleton.py +3 -3
- qiskit/circuit/tools/pi_check.py +4 -4
- qiskit/compiler/assembler.py +95 -24
- qiskit/compiler/scheduler.py +2 -2
- qiskit/compiler/transpiler.py +42 -128
- qiskit/converters/circuit_to_dag.py +4 -6
- qiskit/converters/circuit_to_gate.py +4 -8
- qiskit/converters/circuit_to_instruction.py +5 -17
- qiskit/converters/dag_to_circuit.py +2 -6
- qiskit/dagcircuit/collect_blocks.py +2 -2
- qiskit/dagcircuit/dagcircuit.py +190 -187
- qiskit/dagcircuit/dagdependency.py +4 -4
- qiskit/dagcircuit/dagdependency_v2.py +4 -4
- qiskit/dagcircuit/dagdepnode.py +1 -1
- qiskit/dagcircuit/dagnode.py +66 -157
- qiskit/passmanager/flow_controllers.py +1 -1
- qiskit/passmanager/passmanager.py +3 -3
- qiskit/primitives/__init__.py +1 -5
- qiskit/primitives/backend_estimator.py +25 -15
- qiskit/primitives/backend_estimator_v2.py +31 -7
- qiskit/primitives/backend_sampler.py +21 -12
- qiskit/primitives/backend_sampler_v2.py +12 -3
- qiskit/primitives/base/base_estimator.py +31 -4
- qiskit/primitives/base/base_primitive.py +2 -2
- qiskit/primitives/base/base_result.py +2 -2
- qiskit/primitives/base/base_sampler.py +26 -2
- qiskit/primitives/base/estimator_result.py +2 -2
- qiskit/primitives/base/sampler_result.py +2 -2
- qiskit/primitives/containers/__init__.py +0 -1
- qiskit/primitives/containers/bindings_array.py +2 -2
- qiskit/primitives/containers/bit_array.py +108 -10
- qiskit/primitives/containers/shape.py +3 -3
- qiskit/primitives/estimator.py +9 -2
- qiskit/primitives/primitive_job.py +1 -1
- qiskit/primitives/sampler.py +10 -3
- qiskit/primitives/statevector_estimator.py +5 -3
- qiskit/primitives/statevector_sampler.py +11 -5
- qiskit/primitives/utils.py +16 -0
- qiskit/providers/backend.py +15 -6
- qiskit/providers/backend_compat.py +7 -4
- qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
- qiskit/providers/basic_provider/basic_simulator.py +33 -25
- qiskit/providers/fake_provider/fake_backend.py +10 -3
- qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
- qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
- qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
- qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
- qiskit/providers/fake_provider/generic_backend_v2.py +514 -68
- qiskit/providers/models/__init__.py +48 -11
- qiskit/providers/models/backendconfiguration.py +50 -4
- qiskit/providers/models/backendproperties.py +13 -2
- qiskit/providers/models/pulsedefaults.py +10 -11
- qiskit/providers/options.py +13 -13
- qiskit/providers/providerutils.py +3 -1
- qiskit/pulse/configuration.py +8 -12
- qiskit/pulse/instruction_schedule_map.py +3 -5
- qiskit/pulse/instructions/acquire.py +7 -8
- qiskit/pulse/instructions/instruction.py +2 -3
- qiskit/pulse/library/samplers/decorators.py +5 -9
- qiskit/pulse/library/symbolic_pulses.py +4 -7
- qiskit/pulse/library/waveform.py +2 -5
- qiskit/pulse/macros.py +11 -6
- qiskit/pulse/parser.py +8 -10
- qiskit/pulse/schedule.py +9 -17
- qiskit/pulse/transforms/alignments.py +1 -3
- qiskit/pulse/utils.py +1 -2
- qiskit/qasm/libs/stdgates.inc +35 -28
- qiskit/qasm2/__init__.py +7 -7
- qiskit/qasm2/export.py +5 -9
- qiskit/qasm2/parse.py +1 -1
- qiskit/qasm3/ast.py +9 -25
- qiskit/qasm3/exporter.py +582 -479
- qiskit/qasm3/printer.py +7 -16
- qiskit/qobj/common.py +10 -0
- qiskit/qobj/converters/lo_config.py +9 -0
- qiskit/qobj/converters/pulse_instruction.py +13 -6
- qiskit/qobj/pulse_qobj.py +69 -15
- qiskit/qobj/qasm_qobj.py +72 -20
- qiskit/qobj/utils.py +9 -0
- qiskit/qpy/__init__.py +1 -1
- qiskit/qpy/binary_io/circuits.py +8 -5
- qiskit/qpy/binary_io/schedules.py +1 -1
- qiskit/qpy/binary_io/value.py +3 -3
- qiskit/qpy/interface.py +3 -2
- qiskit/qpy/type_keys.py +2 -2
- qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
- qiskit/quantum_info/operators/channel/superop.py +2 -2
- qiskit/quantum_info/operators/channel/transformations.py +1 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
- qiskit/quantum_info/operators/dihedral/random.py +6 -3
- qiskit/quantum_info/operators/measures.py +2 -2
- qiskit/quantum_info/operators/op_shape.py +12 -20
- qiskit/quantum_info/operators/operator.py +14 -21
- qiskit/quantum_info/operators/predicates.py +1 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
- qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
- qiskit/quantum_info/operators/symplectic/random.py +1 -1
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
- qiskit/quantum_info/quaternion.py +1 -1
- qiskit/quantum_info/states/densitymatrix.py +5 -8
- qiskit/quantum_info/states/stabilizerstate.py +128 -37
- qiskit/quantum_info/states/statevector.py +4 -8
- qiskit/result/counts.py +2 -2
- qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
- qiskit/result/mitigation/local_readout_mitigator.py +2 -2
- qiskit/result/mitigation/utils.py +1 -3
- qiskit/result/models.py +17 -16
- qiskit/result/result.py +15 -20
- qiskit/scheduler/lowering.py +2 -2
- qiskit/synthesis/__init__.py +2 -1
- qiskit/synthesis/clifford/__init__.py +1 -1
- qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
- qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
- qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
- qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
- qiskit/synthesis/evolution/lie_trotter.py +46 -19
- qiskit/synthesis/evolution/product_formula.py +111 -55
- qiskit/synthesis/evolution/qdrift.py +40 -10
- qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
- qiskit/synthesis/linear/__init__.py +1 -0
- qiskit/synthesis/linear/cnot_synth.py +22 -96
- qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
- qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
- qiskit/synthesis/permutation/permutation_full.py +5 -29
- qiskit/synthesis/permutation/permutation_lnn.py +2 -24
- qiskit/synthesis/permutation/permutation_utils.py +2 -59
- qiskit/synthesis/qft/__init__.py +1 -0
- qiskit/synthesis/qft/qft_decompose_full.py +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
- qiskit/synthesis/two_qubit/local_invariance.py +8 -38
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
- qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
- qiskit/synthesis/unitary/qsd.py +5 -3
- qiskit/transpiler/__init__.py +1 -0
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/coupling.py +3 -3
- qiskit/transpiler/instruction_durations.py +1 -2
- qiskit/transpiler/layout.py +3 -3
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +84 -64
- qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
- qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
- qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
- qiskit/transpiler/passes/layout/apply_layout.py +13 -3
- qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
- qiskit/transpiler/passes/layout/set_layout.py +2 -2
- qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
- qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
- qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
- qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
- qiskit/transpiler/passes/scheduling/alap.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
- qiskit/transpiler/passes/scheduling/asap.py +1 -2
- qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
- qiskit/transpiler/passes/synthesis/plugin.py +2 -2
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
- qiskit/transpiler/passes/utils/check_map.py +3 -6
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
- qiskit/transpiler/passes/utils/error.py +2 -2
- qiskit/transpiler/passes/utils/fixed_point.py +3 -3
- qiskit/transpiler/passes/utils/gate_direction.py +1 -1
- qiskit/transpiler/passes/utils/gates_basis.py +1 -2
- qiskit/transpiler/passmanager.py +7 -6
- qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
- qiskit/transpiler/preset_passmanagers/common.py +3 -6
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
- qiskit/transpiler/preset_passmanagers/level0.py +1 -1
- qiskit/transpiler/target.py +27 -8
- qiskit/user_config.py +29 -6
- qiskit/utils/classtools.py +3 -3
- qiskit/utils/deprecation.py +3 -2
- qiskit/utils/lazy_tester.py +2 -2
- qiskit/utils/optionals.py +8 -8
- qiskit/visualization/bloch.py +18 -23
- qiskit/visualization/circuit/_utils.py +34 -10
- qiskit/visualization/circuit/circuit_visualization.py +23 -16
- qiskit/visualization/circuit/latex.py +29 -27
- qiskit/visualization/circuit/matplotlib.py +4 -2
- qiskit/visualization/circuit/qcstyle.py +2 -2
- qiskit/visualization/circuit/text.py +9 -15
- qiskit/visualization/dag_visualization.py +2 -2
- qiskit/visualization/pulse_v2/core.py +1 -1
- qiskit/visualization/pulse_v2/events.py +1 -1
- qiskit/visualization/pulse_v2/generators/frame.py +3 -4
- qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
- qiskit/visualization/pulse_v2/layouts.py +1 -5
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
- qiskit/visualization/state_visualization.py +5 -6
- qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
- qiskit/visualization/transition_visualization.py +7 -2
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/METADATA +12 -12
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/RECORD +342 -340
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
- qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/WHEEL +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
qiskit/providers/backend.py
CHANGED
@@ -23,6 +23,7 @@ from typing import List, Union, Iterable, Tuple
|
|
23
23
|
from qiskit.providers.provider import Provider
|
24
24
|
from qiskit.providers.models.backendstatus import BackendStatus
|
25
25
|
from qiskit.circuit.gate import Instruction
|
26
|
+
from qiskit.utils import deprecate_func
|
26
27
|
|
27
28
|
|
28
29
|
class Backend:
|
@@ -43,7 +44,7 @@ class BackendV1(Backend, ABC):
|
|
43
44
|
This abstract class is to be used for Backend objects.
|
44
45
|
There are several classes of information contained in a Backend.
|
45
46
|
The first are the attributes of the class itself. These should be used to
|
46
|
-
|
47
|
+
define the immutable characteristics of the backend. The ``options``
|
47
48
|
attribute of the backend is used to contain the dynamic user configurable
|
48
49
|
options of the backend. It should be used more for runtime options
|
49
50
|
that configure how the backend is used. For example, something like a
|
@@ -71,6 +72,14 @@ class BackendV1(Backend, ABC):
|
|
71
72
|
|
72
73
|
version = 1
|
73
74
|
|
75
|
+
@deprecate_func(
|
76
|
+
since="1.2",
|
77
|
+
removal_timeline="in the 2.0 release",
|
78
|
+
additional_msg="If the backend only encapsulates a hardware description, "
|
79
|
+
"consider constructing a Target directly. If it is part of a provider "
|
80
|
+
"that gives access to execution, consider using Primitives instead. "
|
81
|
+
"Alternatively, consider moving to BackendV2 (see https://qisk.it/backendV1-to-V2).",
|
82
|
+
)
|
74
83
|
def __init__(self, configuration, provider=None, **fields):
|
75
84
|
"""Initialize a backend class
|
76
85
|
|
@@ -86,7 +95,7 @@ class BackendV1(Backend, ABC):
|
|
86
95
|
|
87
96
|
..
|
88
97
|
This next bit is necessary just because autosummary generally won't summarise private
|
89
|
-
methods; changing that
|
98
|
+
methods; changing that behavior would have annoying knock-on effects through all the
|
90
99
|
rest of the documentation, so instead we just hard-code the automethod directive.
|
91
100
|
"""
|
92
101
|
self._configuration = configuration
|
@@ -95,7 +104,7 @@ class BackendV1(Backend, ABC):
|
|
95
104
|
if fields:
|
96
105
|
for field in fields:
|
97
106
|
if field not in self._options.data:
|
98
|
-
raise AttributeError("Options field
|
107
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
99
108
|
self._options.update_config(**fields)
|
100
109
|
|
101
110
|
@classmethod
|
@@ -129,7 +138,7 @@ class BackendV1(Backend, ABC):
|
|
129
138
|
"""
|
130
139
|
for field in fields:
|
131
140
|
if not hasattr(self._options, field):
|
132
|
-
raise AttributeError("Options field
|
141
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
133
142
|
self._options.update_options(**fields)
|
134
143
|
|
135
144
|
def configuration(self):
|
@@ -352,7 +361,7 @@ class BackendV2(Backend, ABC):
|
|
352
361
|
if fields:
|
353
362
|
for field in fields:
|
354
363
|
if field not in self._options.data:
|
355
|
-
raise AttributeError("Options field
|
364
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
356
365
|
self._options.update_config(**fields)
|
357
366
|
self.name = name
|
358
367
|
"""Name of the backend."""
|
@@ -598,7 +607,7 @@ class BackendV2(Backend, ABC):
|
|
598
607
|
"""
|
599
608
|
for field in fields:
|
600
609
|
if not hasattr(self._options, field):
|
601
|
-
raise AttributeError("Options field
|
610
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
602
611
|
self._options.update_options(**fields)
|
603
612
|
|
604
613
|
@property
|
@@ -390,10 +390,13 @@ class BackendV2Converter(BackendV2):
|
|
390
390
|
self._properties = None
|
391
391
|
self._defaults = None
|
392
392
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
393
|
+
with warnings.catch_warnings():
|
394
|
+
# The class QobjExperimentHeader is deprecated
|
395
|
+
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
396
|
+
if hasattr(self._backend, "properties"):
|
397
|
+
self._properties = self._backend.properties()
|
398
|
+
if hasattr(self._backend, "defaults"):
|
399
|
+
self._defaults = self._backend.defaults()
|
397
400
|
|
398
401
|
self._target = None
|
399
402
|
self._name_mapping = name_mapping
|
@@ -66,7 +66,7 @@ def single_gate_matrix(gate: str, params: list[float] | None = None) -> np.ndarr
|
|
66
66
|
if gate in SINGLE_QUBIT_GATES:
|
67
67
|
gc = SINGLE_QUBIT_GATES[gate]
|
68
68
|
else:
|
69
|
-
raise QiskitError("Gate is not a valid basis gate for this simulator:
|
69
|
+
raise QiskitError(f"Gate is not a valid basis gate for this simulator: {gate}")
|
70
70
|
|
71
71
|
return gc(*params).to_matrix()
|
72
72
|
|
@@ -43,7 +43,7 @@ from qiskit.circuit.library import UnitaryGate
|
|
43
43
|
from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping, GlobalPhaseGate
|
44
44
|
from qiskit.providers import Provider
|
45
45
|
from qiskit.providers.backend import BackendV2
|
46
|
-
from qiskit.providers.models import BackendConfiguration
|
46
|
+
from qiskit.providers.models.backendconfiguration import BackendConfiguration
|
47
47
|
from qiskit.providers.options import Options
|
48
48
|
from qiskit.qobj import QasmQobj, QasmQobjConfig, QasmQobjExperiment
|
49
49
|
from qiskit.result import Result
|
@@ -208,7 +208,7 @@ class BasicSimulator(BackendV2):
|
|
208
208
|
target.add_instruction(UnitaryGate, name="unitary")
|
209
209
|
else:
|
210
210
|
raise BasicProviderError(
|
211
|
-
"Gate is not a valid basis gate for this simulator:
|
211
|
+
f"Gate is not a valid basis gate for this simulator: {name}"
|
212
212
|
)
|
213
213
|
return target
|
214
214
|
|
@@ -236,24 +236,32 @@ class BasicSimulator(BackendV2):
|
|
236
236
|
for name in self.target.operation_names
|
237
237
|
]
|
238
238
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
239
|
+
with warnings.catch_warnings():
|
240
|
+
# TODO Provider models are deprecated
|
241
|
+
# https://github.com/Qiskit/qiskit/issues/12843
|
242
|
+
warnings.filterwarnings(
|
243
|
+
"ignore",
|
244
|
+
category=DeprecationWarning,
|
245
|
+
message=r".+qiskit\.providers\.models\.backendconfiguration\..+",
|
246
|
+
)
|
247
|
+
self._configuration = BackendConfiguration(
|
248
|
+
backend_name=self.name,
|
249
|
+
backend_version=self.backend_version,
|
250
|
+
n_qubits=self.num_qubits,
|
251
|
+
basis_gates=self.target.operation_names,
|
252
|
+
gates=gates,
|
253
|
+
local=True,
|
254
|
+
simulator=True,
|
255
|
+
conditional=True,
|
256
|
+
open_pulse=False,
|
257
|
+
memory=True,
|
258
|
+
# This max_shots is used by the assembler, setting it to 0
|
259
|
+
# to maintain the behavior from the previous implementation.
|
260
|
+
# Not related to the actual shots set in the backend options
|
261
|
+
max_shots=0,
|
262
|
+
coupling_map=None,
|
263
|
+
description="A python simulator for quantum experiments",
|
264
|
+
)
|
257
265
|
return self._configuration
|
258
266
|
|
259
267
|
@classmethod
|
@@ -525,17 +533,17 @@ class BasicSimulator(BackendV2):
|
|
525
533
|
}
|
526
534
|
"""
|
527
535
|
# TODO: replace assemble with new run flow
|
528
|
-
from qiskit.compiler import
|
536
|
+
from qiskit.compiler.assembler import _assemble
|
529
537
|
|
530
538
|
out_options = {}
|
531
|
-
for key in backend_options:
|
539
|
+
for key, value in backend_options.items():
|
532
540
|
if not hasattr(self.options, key):
|
533
541
|
warnings.warn(
|
534
|
-
"Option
|
542
|
+
f"Option {key} is not used by this backend", UserWarning, stacklevel=2
|
535
543
|
)
|
536
544
|
else:
|
537
|
-
out_options[key] =
|
538
|
-
qobj =
|
545
|
+
out_options[key] = value
|
546
|
+
qobj = _assemble(run_input, self, **out_options)
|
539
547
|
qobj_options = qobj.config
|
540
548
|
self._set_options(qobj_config=qobj_options, backend_options=backend_options)
|
541
549
|
job_id = str(uuid.uuid4())
|
@@ -23,7 +23,7 @@ from qiskit.providers.models import BackendProperties
|
|
23
23
|
from qiskit.providers import BackendV1
|
24
24
|
from qiskit import pulse
|
25
25
|
from qiskit.exceptions import QiskitError
|
26
|
-
from qiskit.utils import optionals as _optionals
|
26
|
+
from qiskit.utils import optionals as _optionals, deprecate_func
|
27
27
|
from qiskit.providers import basic_provider
|
28
28
|
|
29
29
|
|
@@ -39,6 +39,13 @@ class _Credentials:
|
|
39
39
|
class FakeBackend(BackendV1):
|
40
40
|
"""This is a dummy backend just for testing purposes."""
|
41
41
|
|
42
|
+
@deprecate_func(
|
43
|
+
since="1.2",
|
44
|
+
removal_timeline="in the 2.0 release",
|
45
|
+
additional_msg="Fake backends using BackendV1 are deprecated in favor of "
|
46
|
+
":class:`.GenericBackendV2`. You can convert BackendV1 to "
|
47
|
+
":class:`.BackendV2` with :class:`.BackendV2Converter`.",
|
48
|
+
)
|
42
49
|
def __init__(self, configuration, time_alive=10):
|
43
50
|
"""FakeBackend initializer.
|
44
51
|
|
@@ -143,8 +150,8 @@ class FakeBackend(BackendV1):
|
|
143
150
|
pulse_job = False
|
144
151
|
if pulse_job is None:
|
145
152
|
raise QiskitError(
|
146
|
-
"Invalid input object
|
147
|
-
"QuantumCircuit, Schedule, or a list of either"
|
153
|
+
f"Invalid input object {circuits}, must be either a "
|
154
|
+
"QuantumCircuit, Schedule, or a list of either"
|
148
155
|
)
|
149
156
|
if pulse_job:
|
150
157
|
raise QiskitError("Pulse simulation is currently not supported for fake backends.")
|
@@ -14,15 +14,16 @@
|
|
14
14
|
Fake backend supporting OpenPulse.
|
15
15
|
"""
|
16
16
|
import datetime
|
17
|
+
import warnings
|
17
18
|
|
18
|
-
from qiskit.providers.models import (
|
19
|
+
from qiskit.providers.models.backendconfiguration import (
|
19
20
|
GateConfig,
|
20
21
|
PulseBackendConfiguration,
|
21
|
-
PulseDefaults,
|
22
|
-
Command,
|
23
22
|
UchannelLO,
|
24
23
|
)
|
24
|
+
|
25
25
|
from qiskit.providers.models.backendproperties import Nduv, Gate, BackendProperties
|
26
|
+
from qiskit.providers.models.pulsedefaults import PulseDefaults, Command
|
26
27
|
from qiskit.qobj import PulseQobjInstruction
|
27
28
|
|
28
29
|
from .fake_backend import FakeBackend
|
@@ -126,152 +127,159 @@ class FakeOpenPulse2Q(FakeBackend):
|
|
126
127
|
description="A fake test backend with pulse defaults",
|
127
128
|
)
|
128
129
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
130
|
+
with warnings.catch_warnings():
|
131
|
+
# The class PulseQobjInstruction is deprecated
|
132
|
+
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
133
|
+
self._defaults = PulseDefaults.from_dict(
|
134
|
+
{
|
135
|
+
"qubit_freq_est": [4.9, 5.0],
|
136
|
+
"meas_freq_est": [6.5, 6.6],
|
137
|
+
"buffer": 10,
|
138
|
+
"pulse_library": [
|
139
|
+
{"name": "x90p_d0", "samples": 2 * [0.1 + 0j]},
|
140
|
+
{"name": "x90p_d1", "samples": 2 * [0.1 + 0j]},
|
141
|
+
{"name": "x90m_d0", "samples": 2 * [-0.1 + 0j]},
|
142
|
+
{"name": "x90m_d1", "samples": 2 * [-0.1 + 0j]},
|
143
|
+
{"name": "y90p_d0", "samples": 2 * [0.1j]},
|
144
|
+
{"name": "y90p_d1", "samples": 2 * [0.1j]},
|
145
|
+
{"name": "xp_d0", "samples": 2 * [0.2 + 0j]},
|
146
|
+
{"name": "ym_d0", "samples": 2 * [-0.2j]},
|
147
|
+
{"name": "cr90p_u0", "samples": 9 * [0.1 + 0j]},
|
148
|
+
{"name": "cr90m_u0", "samples": 9 * [-0.1 + 0j]},
|
149
|
+
{"name": "measure_m0", "samples": 10 * [0.1 + 0j]},
|
150
|
+
{"name": "measure_m1", "samples": 10 * [0.1 + 0j]},
|
151
|
+
],
|
152
|
+
"cmd_def": [
|
153
|
+
Command.from_dict(
|
154
|
+
{
|
155
|
+
"name": "u1",
|
156
|
+
"qubits": [0],
|
157
|
+
"sequence": [
|
158
|
+
PulseQobjInstruction(
|
159
|
+
name="fc", ch="d0", t0=0, phase="-P0"
|
160
|
+
).to_dict()
|
161
|
+
],
|
162
|
+
}
|
163
|
+
).to_dict(),
|
164
|
+
Command.from_dict(
|
165
|
+
{
|
166
|
+
"name": "u1",
|
167
|
+
"qubits": [1],
|
168
|
+
"sequence": [
|
169
|
+
PulseQobjInstruction(
|
170
|
+
name="fc", ch="d1", t0=0, phase="-P0"
|
171
|
+
).to_dict()
|
172
|
+
],
|
173
|
+
}
|
174
|
+
).to_dict(),
|
175
|
+
Command.from_dict(
|
176
|
+
{
|
177
|
+
"name": "u2",
|
178
|
+
"qubits": [0],
|
179
|
+
"sequence": [
|
180
|
+
PulseQobjInstruction(
|
181
|
+
name="fc", ch="d0", t0=0, phase="-P1"
|
182
|
+
).to_dict(),
|
183
|
+
PulseQobjInstruction(name="y90p_d0", ch="d0", t0=0).to_dict(),
|
184
|
+
PulseQobjInstruction(
|
185
|
+
name="fc", ch="d0", t0=2, phase="-P0"
|
186
|
+
).to_dict(),
|
187
|
+
],
|
188
|
+
}
|
189
|
+
).to_dict(),
|
190
|
+
Command.from_dict(
|
191
|
+
{
|
192
|
+
"name": "u2",
|
193
|
+
"qubits": [1],
|
194
|
+
"sequence": [
|
195
|
+
PulseQobjInstruction(
|
196
|
+
name="fc", ch="d1", t0=0, phase="-P1"
|
197
|
+
).to_dict(),
|
198
|
+
PulseQobjInstruction(name="y90p_d1", ch="d1", t0=0).to_dict(),
|
199
|
+
PulseQobjInstruction(
|
200
|
+
name="fc", ch="d1", t0=2, phase="-P0"
|
201
|
+
).to_dict(),
|
202
|
+
],
|
203
|
+
}
|
204
|
+
).to_dict(),
|
205
|
+
Command.from_dict(
|
206
|
+
{
|
207
|
+
"name": "u3",
|
208
|
+
"qubits": [0],
|
209
|
+
"sequence": [
|
210
|
+
PulseQobjInstruction(
|
211
|
+
name="fc", ch="d0", t0=0, phase="-P2"
|
212
|
+
).to_dict(),
|
213
|
+
PulseQobjInstruction(name="x90p_d0", ch="d0", t0=0).to_dict(),
|
214
|
+
PulseQobjInstruction(
|
215
|
+
name="fc", ch="d0", t0=2, phase="-P0"
|
216
|
+
).to_dict(),
|
217
|
+
PulseQobjInstruction(name="x90m_d0", ch="d0", t0=2).to_dict(),
|
218
|
+
PulseQobjInstruction(
|
219
|
+
name="fc", ch="d0", t0=4, phase="-P1"
|
220
|
+
).to_dict(),
|
221
|
+
],
|
222
|
+
}
|
223
|
+
).to_dict(),
|
224
|
+
Command.from_dict(
|
225
|
+
{
|
226
|
+
"name": "u3",
|
227
|
+
"qubits": [1],
|
228
|
+
"sequence": [
|
229
|
+
PulseQobjInstruction(
|
230
|
+
name="fc", ch="d1", t0=0, phase="-P2"
|
231
|
+
).to_dict(),
|
232
|
+
PulseQobjInstruction(name="x90p_d1", ch="d1", t0=0).to_dict(),
|
233
|
+
PulseQobjInstruction(
|
234
|
+
name="fc", ch="d1", t0=2, phase="-P0"
|
235
|
+
).to_dict(),
|
236
|
+
PulseQobjInstruction(name="x90m_d1", ch="d1", t0=2).to_dict(),
|
237
|
+
PulseQobjInstruction(
|
238
|
+
name="fc", ch="d1", t0=4, phase="-P1"
|
239
|
+
).to_dict(),
|
240
|
+
],
|
241
|
+
}
|
242
|
+
).to_dict(),
|
243
|
+
Command.from_dict(
|
244
|
+
{
|
245
|
+
"name": "cx",
|
246
|
+
"qubits": [0, 1],
|
247
|
+
"sequence": [
|
248
|
+
PulseQobjInstruction(
|
249
|
+
name="fc", ch="d0", t0=0, phase=1.57
|
250
|
+
).to_dict(),
|
251
|
+
PulseQobjInstruction(name="ym_d0", ch="d0", t0=0).to_dict(),
|
252
|
+
PulseQobjInstruction(name="xp_d0", ch="d0", t0=11).to_dict(),
|
253
|
+
PulseQobjInstruction(name="x90p_d1", ch="d1", t0=0).to_dict(),
|
254
|
+
PulseQobjInstruction(name="cr90p_u0", ch="u0", t0=2).to_dict(),
|
255
|
+
PulseQobjInstruction(name="cr90m_u0", ch="u0", t0=13).to_dict(),
|
256
|
+
],
|
257
|
+
}
|
258
|
+
).to_dict(),
|
259
|
+
Command.from_dict(
|
260
|
+
{
|
261
|
+
"name": "measure",
|
262
|
+
"qubits": [0, 1],
|
263
|
+
"sequence": [
|
264
|
+
PulseQobjInstruction(
|
265
|
+
name="measure_m0", ch="m0", t0=0
|
266
|
+
).to_dict(),
|
267
|
+
PulseQobjInstruction(
|
268
|
+
name="measure_m1", ch="m1", t0=0
|
269
|
+
).to_dict(),
|
270
|
+
PulseQobjInstruction(
|
271
|
+
name="acquire",
|
272
|
+
duration=10,
|
273
|
+
t0=0,
|
274
|
+
qubits=[0, 1],
|
275
|
+
memory_slot=[0, 1],
|
276
|
+
).to_dict(),
|
277
|
+
],
|
278
|
+
}
|
279
|
+
).to_dict(),
|
280
|
+
],
|
281
|
+
}
|
282
|
+
)
|
275
283
|
|
276
284
|
mock_time = datetime.datetime.now()
|
277
285
|
dt = 1.3333
|