qiskit 2.0.3__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.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 -0
- qiskit/__init__.py +141 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/circuit/__init__.py +1343 -0
- qiskit/circuit/_add_control.py +312 -0
- qiskit/circuit/_classical_resource_map.py +150 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +46 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +266 -0
- qiskit/circuit/classical/expr/constructors.py +764 -0
- qiskit/circuit/classical/expr/expr.py +498 -0
- qiskit/circuit/classical/expr/visitors.py +375 -0
- qiskit/circuit/classical/types/__init__.py +113 -0
- qiskit/circuit/classical/types/ordering.py +229 -0
- qiskit/circuit/classical/types/types.py +153 -0
- qiskit/circuit/commutation_checker.py +133 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +59 -0
- qiskit/circuit/controlflow/_builder_utils.py +211 -0
- qiskit/circuit/controlflow/box.py +163 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +791 -0
- qiskit/circuit/controlflow/continue_loop.py +56 -0
- qiskit/circuit/controlflow/control_flow.py +94 -0
- qiskit/circuit/controlflow/for_loop.py +218 -0
- qiskit/circuit/controlflow/if_else.py +498 -0
- qiskit/circuit/controlflow/switch_case.py +411 -0
- qiskit/circuit/controlflow/while_loop.py +166 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +157 -0
- qiskit/circuit/duration.py +80 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +564 -0
- qiskit/circuit/instructionset.py +132 -0
- qiskit/circuit/library/__init__.py +984 -0
- qiskit/circuit/library/arithmetic/__init__.py +40 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +502 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +409 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +316 -0
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +316 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
- qiskit/circuit/library/data_preparation/__init__.py +57 -0
- qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/fourier_checking.py +160 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
- qiskit/circuit/library/generalized_gates/gms.py +175 -0
- qiskit/circuit/library/generalized_gates/gr.py +219 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
- qiskit/circuit/library/generalized_gates/pauli.py +84 -0
- qiskit/circuit/library/generalized_gates/permutation.py +198 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -0
- qiskit/circuit/library/generalized_gates/uc.py +303 -0
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
- qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
- qiskit/circuit/library/generalized_gates/ucry.py +32 -0
- qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
- qiskit/circuit/library/generalized_gates/unitary.py +217 -0
- qiskit/circuit/library/graph_state.py +172 -0
- qiskit/circuit/library/grover_operator.py +583 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +163 -0
- qiskit/circuit/library/iqp.py +180 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +282 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +303 -0
- qiskit/circuit/library/n_local/n_local.py +1477 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +183 -0
- qiskit/circuit/library/pauli_evolution.py +201 -0
- qiskit/circuit/library/phase_estimation.py +177 -0
- qiskit/circuit/library/phase_oracle.py +239 -0
- qiskit/circuit/library/quantum_volume.py +180 -0
- qiskit/circuit/library/standard_gates/__init__.py +141 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +129 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +84 -0
- qiskit/circuit/library/standard_gates/h.py +253 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +133 -0
- qiskit/circuit/library/standard_gates/p.py +422 -0
- qiskit/circuit/library/standard_gates/r.py +114 -0
- qiskit/circuit/library/standard_gates/rx.py +293 -0
- qiskit/circuit/library/standard_gates/rxx.py +180 -0
- qiskit/circuit/library/standard_gates/ry.py +286 -0
- qiskit/circuit/library/standard_gates/ryy.py +180 -0
- qiskit/circuit/library/standard_gates/rz.py +307 -0
- qiskit/circuit/library/standard_gates/rzx.py +226 -0
- qiskit/circuit/library/standard_gates/rzz.py +193 -0
- qiskit/circuit/library/standard_gates/s.py +419 -0
- qiskit/circuit/library/standard_gates/swap.py +281 -0
- qiskit/circuit/library/standard_gates/sx.py +310 -0
- qiskit/circuit/library/standard_gates/t.py +178 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +490 -0
- qiskit/circuit/library/standard_gates/u2.py +145 -0
- qiskit/circuit/library/standard_gates/u3.py +428 -0
- qiskit/circuit/library/standard_gates/x.py +1481 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
- qiskit/circuit/library/standard_gates/y.py +257 -0
- qiskit/circuit/library/standard_gates/z.py +338 -0
- qiskit/circuit/library/templates/__init__.py +92 -0
- qiskit/circuit/library/templates/clifford/__init__.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
- qiskit/circuit/measure.py +53 -0
- qiskit/circuit/operation.py +68 -0
- qiskit/circuit/parameter.py +179 -0
- qiskit/circuit/parameterexpression.py +703 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +140 -0
- qiskit/circuit/quantumcircuit.py +7540 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +366 -0
- qiskit/circuit/reset.py +37 -0
- qiskit/circuit/singleton.py +600 -0
- qiskit/circuit/store.py +89 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +193 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +27 -0
- qiskit/compiler/transpiler.py +375 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +80 -0
- qiskit/converters/circuit_to_dagdependency.py +49 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +142 -0
- qiskit/converters/dag_to_circuit.py +79 -0
- qiskit/converters/dag_to_dagdependency.py +54 -0
- qiskit/converters/dag_to_dagdependency_v2.py +43 -0
- qiskit/converters/dagdependency_to_circuit.py +40 -0
- qiskit/converters/dagdependency_to_dag.py +48 -0
- qiskit/dagcircuit/__init__.py +55 -0
- qiskit/dagcircuit/collect_blocks.py +407 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +612 -0
- qiskit/dagcircuit/dagdependency_v2.py +566 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +188 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +258 -0
- qiskit/passmanager/base_tasks.py +230 -0
- qiskit/passmanager/compilation_status.py +74 -0
- qiskit/passmanager/exceptions.py +19 -0
- qiskit/passmanager/flow_controllers.py +116 -0
- qiskit/passmanager/passmanager.py +353 -0
- qiskit/primitives/__init__.py +490 -0
- qiskit/primitives/backend_estimator_v2.py +530 -0
- qiskit/primitives/backend_sampler_v2.py +339 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +247 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_primitive_v1.py +45 -0
- qiskit/primitives/base/base_result_v1.py +65 -0
- qiskit/primitives/base/base_sampler.py +196 -0
- qiskit/primitives/base/estimator_result_v1.py +46 -0
- qiskit/primitives/base/sampler_result_v1.py +45 -0
- qiskit/primitives/base/validation_v1.py +250 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +391 -0
- qiskit/primitives/containers/bit_array.py +764 -0
- qiskit/primitives/containers/data_bin.py +175 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +296 -0
- qiskit/primitives/containers/primitive_result.py +53 -0
- qiskit/primitives/containers/pub_result.py +51 -0
- qiskit/primitives/containers/sampler_pub.py +193 -0
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +129 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/statevector_estimator.py +175 -0
- qiskit/primitives/statevector_sampler.py +290 -0
- qiskit/primitives/utils.py +72 -0
- qiskit/providers/__init__.py +677 -0
- qiskit/providers/backend.py +364 -0
- qiskit/providers/basic_provider/__init__.py +47 -0
- qiskit/providers/basic_provider/basic_provider.py +121 -0
- qiskit/providers/basic_provider/basic_provider_job.py +65 -0
- qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
- qiskit/providers/basic_provider/basic_simulator.py +693 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +33 -0
- qiskit/providers/fake_provider/__init__.py +69 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +374 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/qasm/libs/dummy/stdgates.inc +75 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +82 -0
- qiskit/qasm2/__init__.py +669 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +364 -0
- qiskit/qasm2/parse.py +438 -0
- qiskit/qasm3/__init__.py +372 -0
- qiskit/qasm3/ast.py +782 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1340 -0
- qiskit/qasm3/printer.py +608 -0
- qiskit/qpy/__init__.py +1965 -0
- qiskit/qpy/binary_io/__init__.py +35 -0
- qiskit/qpy/binary_io/circuits.py +1455 -0
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +308 -0
- qiskit/qpy/binary_io/value.py +1165 -0
- qiskit/qpy/common.py +353 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +442 -0
- qiskit/qpy/interface.py +344 -0
- qiskit/qpy/type_keys.py +409 -0
- qiskit/quantum_info/__init__.py +162 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +104 -0
- qiskit/quantum_info/analysis/make_observable.py +44 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
- qiskit/quantum_info/operators/__init__.py +28 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +373 -0
- qiskit/quantum_info/operators/channel/transformations.py +490 -0
- qiskit/quantum_info/operators/custom_iterator.py +48 -0
- qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
- qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +64 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +418 -0
- qiskit/quantum_info/operators/mixins/__init__.py +52 -0
- qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
- qiskit/quantum_info/operators/mixins/group.py +171 -0
- qiskit/quantum_info/operators/mixins/linear.py +84 -0
- qiskit/quantum_info/operators/mixins/multiply.py +62 -0
- qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
- qiskit/quantum_info/operators/op_shape.py +525 -0
- qiskit/quantum_info/operators/operator.py +869 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +117 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
- qiskit/quantum_info/operators/utils/__init__.py +20 -0
- qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
- qiskit/quantum_info/operators/utils/commutator.py +36 -0
- qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
- qiskit/quantum_info/quaternion.py +156 -0
- qiskit/quantum_info/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +857 -0
- qiskit/quantum_info/states/measures.py +288 -0
- qiskit/quantum_info/states/quantum_state.py +503 -0
- qiskit/quantum_info/states/random.py +157 -0
- qiskit/quantum_info/states/stabilizerstate.py +805 -0
- qiskit/quantum_info/states/statevector.py +977 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +61 -0
- qiskit/result/counts.py +189 -0
- qiskit/result/distributions/__init__.py +17 -0
- qiskit/result/distributions/probability.py +100 -0
- qiskit/result/distributions/quasi.py +154 -0
- qiskit/result/exceptions.py +40 -0
- qiskit/result/models.py +241 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +385 -0
- qiskit/result/sampled_expval.py +74 -0
- qiskit/result/utils.py +294 -0
- qiskit/synthesis/__init__.py +240 -0
- qiskit/synthesis/arithmetic/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/synthesis/boolean/__init__.py +13 -0
- 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/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +265 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +120 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +313 -0
- qiskit/synthesis/evolution/qdrift.py +130 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +224 -0
- qiskit/synthesis/linear/__init__.py +26 -0
- qiskit/synthesis/linear/cnot_synth.py +69 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +61 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +61 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +25 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/__init__.py +15 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
- qiskit/synthesis/permutation/__init__.py +18 -0
- qiskit/synthesis/permutation/permutation_full.py +78 -0
- qiskit/synthesis/permutation/permutation_lnn.py +54 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
- qiskit/synthesis/permutation/permutation_utils.py +16 -0
- qiskit/synthesis/qft/__init__.py +16 -0
- qiskit/synthesis/qft/qft_decompose_full.py +97 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
- qiskit/synthesis/two_qubit/__init__.py +20 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -0
- qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
- qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
- qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
- qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
- qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
- qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
- qiskit/synthesis/unitary/__init__.py +13 -0
- qiskit/synthesis/unitary/aqc/__init__.py +177 -0
- qiskit/synthesis/unitary/aqc/approximate.py +116 -0
- qiskit/synthesis/unitary/aqc/aqc.py +175 -0
- qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
- qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/synthesis/unitary/qsd.py +288 -0
- qiskit/transpiler/__init__.py +1345 -0
- qiskit/transpiler/basepasses.py +190 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +740 -0
- qiskit/transpiler/passes/__init__.py +276 -0
- qiskit/transpiler/passes/analysis/__init__.py +23 -0
- qiskit/transpiler/passes/analysis/count_ops.py +30 -0
- qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
- qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
- qiskit/transpiler/passes/analysis/depth.py +33 -0
- qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
- qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
- qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
- qiskit/transpiler/passes/analysis/size.py +36 -0
- qiskit/transpiler/passes/analysis/width.py +27 -0
- qiskit/transpiler/passes/basis/__init__.py +19 -0
- qiskit/transpiler/passes/basis/basis_translator.py +138 -0
- qiskit/transpiler/passes/basis/decompose.py +137 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -0
- qiskit/transpiler/passes/layout/__init__.py +26 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +128 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +177 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +506 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
- qiskit/transpiler/passes/layout/set_layout.py +69 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +256 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +235 -0
- qiskit/transpiler/passes/optimization/__init__.py +42 -0
- qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
- qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
- qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +117 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +176 -0
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
- qiskit/transpiler/passes/optimization/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +250 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -0
- qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
- qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
- qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
- qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
- qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +639 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +21 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +166 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +463 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +408 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +21 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +1963 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +738 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +313 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
- qiskit/transpiler/passes/utils/__init__.py +32 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
- qiskit/transpiler/passes/utils/check_map.py +78 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +61 -0
- qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
- qiskit/transpiler/passes/utils/error.py +69 -0
- qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +93 -0
- qiskit/transpiler/passes/utils/gates_basis.py +51 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +503 -0
- qiskit/transpiler/passmanager_config.py +151 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
- qiskit/transpiler/preset_passmanagers/common.py +672 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -0
- qiskit/transpiler/preset_passmanagers/level0.py +104 -0
- qiskit/transpiler/preset_passmanagers/level1.py +108 -0
- qiskit/transpiler/preset_passmanagers/level2.py +109 -0
- qiskit/transpiler/preset_passmanagers/level3.py +110 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
- qiskit/transpiler/target.py +905 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +266 -0
- qiskit/utils/__init__.py +90 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +382 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/optionals.py +354 -0
- qiskit/utils/parallel.py +318 -0
- qiskit/utils/units.py +146 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +290 -0
- qiskit/visualization/array.py +207 -0
- qiskit/visualization/bloch.py +778 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +675 -0
- qiskit/visualization/circuit/circuit_visualization.py +735 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2019 -0
- qiskit/visualization/circuit/qcstyle.py +278 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1849 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +487 -0
- qiskit/visualization/dag_visualization.py +318 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1424 -0
- qiskit/visualization/library.py +40 -0
- qiskit/visualization/pass_manager_visualization.py +312 -0
- qiskit/visualization/state_visualization.py +1546 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +495 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +444 -0
- qiskit/visualization/timeline/layouts.py +115 -0
- qiskit/visualization/timeline/plotters/__init__.py +16 -0
- qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
- qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
- qiskit/visualization/timeline/stylesheet.py +301 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +369 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-2.0.3.dist-info/METADATA +220 -0
- qiskit-2.0.3.dist-info/RECORD +690 -0
- qiskit-2.0.3.dist-info/WHEEL +6 -0
- qiskit-2.0.3.dist-info/entry_points.txt +82 -0
- qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
- qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,364 @@
|
|
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
|
+
# pylint: disable=invalid-name
|
14
|
+
|
15
|
+
"""Backend abstract interface for providers."""
|
16
|
+
|
17
|
+
|
18
|
+
from abc import ABC
|
19
|
+
from abc import abstractmethod
|
20
|
+
import datetime
|
21
|
+
from typing import List, Union, Tuple
|
22
|
+
|
23
|
+
from qiskit.circuit.gate import Instruction
|
24
|
+
|
25
|
+
|
26
|
+
class Backend:
|
27
|
+
"""Base common type for all versioned Backend abstract classes.
|
28
|
+
|
29
|
+
Note this class should not be inherited from directly, it is intended
|
30
|
+
to be used for type checking. When implementing a provider you should use
|
31
|
+
the versioned abstract classes as the parent class and not this class
|
32
|
+
directly.
|
33
|
+
"""
|
34
|
+
|
35
|
+
version = 0
|
36
|
+
|
37
|
+
|
38
|
+
class QubitProperties:
|
39
|
+
"""A representation of the properties of a qubit on a backend.
|
40
|
+
|
41
|
+
This class provides the optional properties that a backend can provide for
|
42
|
+
a qubit. These represent the set of qubit properties that Qiskit can
|
43
|
+
currently work with if present. However if your backend provides additional
|
44
|
+
properties of qubits you should subclass this to add additional custom
|
45
|
+
attributes for those custom/additional properties provided by the backend.
|
46
|
+
"""
|
47
|
+
|
48
|
+
__slots__ = ("t1", "t2", "frequency")
|
49
|
+
|
50
|
+
def __init__(self, t1=None, t2=None, frequency=None):
|
51
|
+
"""Create a new :class:`QubitProperties` object.
|
52
|
+
|
53
|
+
Args:
|
54
|
+
t1: The T1 time for a qubit in seconds
|
55
|
+
t2: The T2 time for a qubit in seconds
|
56
|
+
frequency: The frequency of a qubit in Hz
|
57
|
+
"""
|
58
|
+
self.t1 = t1
|
59
|
+
self.t2 = t2
|
60
|
+
self.frequency = frequency
|
61
|
+
|
62
|
+
def __repr__(self):
|
63
|
+
return f"QubitProperties(t1={self.t1}, t2={self.t2}, " f"frequency={self.frequency})"
|
64
|
+
|
65
|
+
|
66
|
+
class BackendV2(Backend, ABC):
|
67
|
+
"""Abstract class for Backends
|
68
|
+
|
69
|
+
This abstract class is to be used for all Backend objects created by a
|
70
|
+
provider. This version differs from earlier abstract Backend classes in
|
71
|
+
that the configuration attribute no longer exists. Instead, attributes
|
72
|
+
exposing equivalent required immutable properties of the backend device
|
73
|
+
are added. For example ``backend.configuration().n_qubits`` is accessible
|
74
|
+
from ``backend.num_qubits`` now.
|
75
|
+
|
76
|
+
The ``options`` attribute of the backend is used to contain the dynamic
|
77
|
+
user configurable options of the backend. It should be used more for
|
78
|
+
runtime options that configure how the backend is used. For example,
|
79
|
+
something like a ``shots`` field for a backend that runs experiments which
|
80
|
+
would contain an int for how many shots to execute.
|
81
|
+
|
82
|
+
A backend object can optionally contain methods named
|
83
|
+
``get_translation_stage_plugin`` and ``get_scheduling_stage_plugin``. If these
|
84
|
+
methods are present on a backend object and this object is used for
|
85
|
+
:func:`~.transpile` or :func:`~.generate_preset_pass_manager` the
|
86
|
+
transpilation process will default to using the output from those methods
|
87
|
+
as the scheduling stage and the translation compilation stage. This
|
88
|
+
enables a backend which has custom requirements for compilation to specify a
|
89
|
+
stage plugin for these stages to enable custom transformation of
|
90
|
+
the circuit to ensure it is runnable on the backend. These hooks are enabled
|
91
|
+
by default and should only be used to enable extra compilation steps
|
92
|
+
if they are **required** to ensure a circuit is executable on the backend or
|
93
|
+
have the expected level of performance. These methods are passed no input
|
94
|
+
arguments and are expected to return a ``str`` representing the method name
|
95
|
+
which should be a stage plugin (see: :mod:`qiskit.transpiler.preset_passmanagers.plugin`
|
96
|
+
for more details on plugins). The typical expected use case is for a backend
|
97
|
+
provider to implement a stage plugin for ``translation`` or ``scheduling``
|
98
|
+
that contains the custom compilation passes and then for the hook methods on
|
99
|
+
the backend object to return the plugin name so that :func:`~.transpile` will
|
100
|
+
use it by default when targetting the backend.
|
101
|
+
|
102
|
+
Subclasses of this should override the public method :meth:`run` and the internal
|
103
|
+
:meth:`_default_options`:
|
104
|
+
|
105
|
+
.. automethod:: _default_options
|
106
|
+
"""
|
107
|
+
|
108
|
+
version = 2
|
109
|
+
|
110
|
+
def __init__(
|
111
|
+
self,
|
112
|
+
provider=None,
|
113
|
+
name: str = None,
|
114
|
+
description: str = None,
|
115
|
+
online_date: datetime.datetime = None,
|
116
|
+
backend_version: str = None,
|
117
|
+
**fields,
|
118
|
+
):
|
119
|
+
"""Initialize a BackendV2 based backend
|
120
|
+
|
121
|
+
Args:
|
122
|
+
provider: An optional backwards reference to the provider
|
123
|
+
object that the backend is from
|
124
|
+
name: An optional name for the backend
|
125
|
+
description: An optional description of the backend
|
126
|
+
online_date: An optional datetime the backend was brought online
|
127
|
+
backend_version: An optional backend version string. This differs
|
128
|
+
from the :attr:`~qiskit.providers.BackendV2.version` attribute
|
129
|
+
as :attr:`~qiskit.providers.BackendV2.version` is for the
|
130
|
+
abstract :attr:`~qiskit.providers.Backend` abstract interface
|
131
|
+
version of the object while ``backend_version`` is for
|
132
|
+
versioning the backend itself.
|
133
|
+
fields: kwargs for the values to use to override the default
|
134
|
+
options.
|
135
|
+
|
136
|
+
Raises:
|
137
|
+
AttributeError: If a field is specified that's outside the backend's
|
138
|
+
options
|
139
|
+
"""
|
140
|
+
|
141
|
+
self._options = self._default_options()
|
142
|
+
self._provider = provider
|
143
|
+
if fields:
|
144
|
+
for field in fields:
|
145
|
+
if field not in self._options:
|
146
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
147
|
+
self._options.update_options(**fields)
|
148
|
+
self.name = name
|
149
|
+
"""Name of the backend."""
|
150
|
+
self.description = description
|
151
|
+
"""Optional human-readable description."""
|
152
|
+
self.online_date = online_date
|
153
|
+
"""Date that the backend came online."""
|
154
|
+
self.backend_version = backend_version
|
155
|
+
"""Version of the backend being provided. This is not the same as
|
156
|
+
:attr:`.BackendV2.version`, which is the version of the :class:`~.providers.Backend`
|
157
|
+
abstract interface."""
|
158
|
+
self._coupling_map = None
|
159
|
+
|
160
|
+
@property
|
161
|
+
def instructions(self) -> List[Tuple[Instruction, Tuple[int]]]:
|
162
|
+
"""A list of Instruction tuples on the backend of the form ``(instruction, (qubits)``"""
|
163
|
+
return self.target.instructions
|
164
|
+
|
165
|
+
@property
|
166
|
+
def operations(self) -> List[Instruction]:
|
167
|
+
"""A list of :class:`~qiskit.circuit.Instruction` instances that the backend supports."""
|
168
|
+
return list(self.target.operations)
|
169
|
+
|
170
|
+
@property
|
171
|
+
def operation_names(self) -> List[str]:
|
172
|
+
"""A list of instruction names that the backend supports."""
|
173
|
+
return list(self.target.operation_names)
|
174
|
+
|
175
|
+
@property
|
176
|
+
@abstractmethod
|
177
|
+
def target(self):
|
178
|
+
"""A :class:`qiskit.transpiler.Target` object for the backend.
|
179
|
+
|
180
|
+
:rtype: Target
|
181
|
+
"""
|
182
|
+
pass
|
183
|
+
|
184
|
+
@property
|
185
|
+
def num_qubits(self) -> int:
|
186
|
+
"""Return the number of qubits the backend has."""
|
187
|
+
return self.target.num_qubits
|
188
|
+
|
189
|
+
@property
|
190
|
+
def coupling_map(self):
|
191
|
+
"""Return the :class:`~qiskit.transpiler.CouplingMap` object"""
|
192
|
+
if self._coupling_map is None:
|
193
|
+
self._coupling_map = self.target.build_coupling_map()
|
194
|
+
return self._coupling_map
|
195
|
+
|
196
|
+
@property
|
197
|
+
def instruction_durations(self):
|
198
|
+
"""Return the :class:`~qiskit.transpiler.InstructionDurations` object."""
|
199
|
+
return self.target.durations()
|
200
|
+
|
201
|
+
@property
|
202
|
+
@abstractmethod
|
203
|
+
def max_circuits(self):
|
204
|
+
"""The maximum number of circuits that can be
|
205
|
+
run in a single job.
|
206
|
+
|
207
|
+
If there is no limit this will return None
|
208
|
+
"""
|
209
|
+
pass
|
210
|
+
|
211
|
+
@classmethod
|
212
|
+
@abstractmethod
|
213
|
+
def _default_options(cls):
|
214
|
+
"""Return the default options
|
215
|
+
|
216
|
+
This method will return a :class:`qiskit.providers.Options`
|
217
|
+
subclass object that will be used for the default options. These
|
218
|
+
should be the default parameters to use for the options of the
|
219
|
+
backend.
|
220
|
+
|
221
|
+
Returns:
|
222
|
+
qiskit.providers.Options: A options object with
|
223
|
+
default values set
|
224
|
+
"""
|
225
|
+
pass
|
226
|
+
|
227
|
+
@property
|
228
|
+
def dt(self) -> Union[float, None]:
|
229
|
+
"""Return the system time resolution of input signals
|
230
|
+
|
231
|
+
This is required to be implemented if the backend supports Pulse
|
232
|
+
scheduling.
|
233
|
+
|
234
|
+
Returns:
|
235
|
+
The input signal timestep in seconds. If the backend doesn't define ``dt``, ``None`` will
|
236
|
+
be returned.
|
237
|
+
"""
|
238
|
+
return self.target.dt
|
239
|
+
|
240
|
+
@property
|
241
|
+
def dtm(self) -> float:
|
242
|
+
"""Return the system time resolution of output signals
|
243
|
+
|
244
|
+
Returns:
|
245
|
+
The output signal timestep in seconds.
|
246
|
+
|
247
|
+
Raises:
|
248
|
+
NotImplementedError: if the backend doesn't support querying the
|
249
|
+
output signal timestep
|
250
|
+
"""
|
251
|
+
raise NotImplementedError
|
252
|
+
|
253
|
+
@property
|
254
|
+
def meas_map(self) -> List[List[int]]:
|
255
|
+
"""Return the grouping of measurements which are multiplexed
|
256
|
+
|
257
|
+
This is required to be implemented if the backend supports Pulse
|
258
|
+
scheduling.
|
259
|
+
|
260
|
+
Returns:
|
261
|
+
The grouping of measurements which are multiplexed
|
262
|
+
|
263
|
+
Raises:
|
264
|
+
NotImplementedError: if the backend doesn't support querying the
|
265
|
+
measurement mapping
|
266
|
+
"""
|
267
|
+
raise NotImplementedError
|
268
|
+
|
269
|
+
def qubit_properties(
|
270
|
+
self, qubit: Union[int, List[int]]
|
271
|
+
) -> Union[QubitProperties, List[QubitProperties]]:
|
272
|
+
"""Return QubitProperties for a given qubit.
|
273
|
+
|
274
|
+
If there are no defined or the backend doesn't support querying these
|
275
|
+
details this method does not need to be implemented.
|
276
|
+
|
277
|
+
Args:
|
278
|
+
qubit: The qubit to get the
|
279
|
+
:class:`.QubitProperties` object for. This can
|
280
|
+
be a single integer for 1 qubit or a list of qubits and a list
|
281
|
+
of :class:`.QubitProperties` objects will be
|
282
|
+
returned in the same order
|
283
|
+
Returns:
|
284
|
+
The :class:`~.QubitProperties` object for the
|
285
|
+
specified qubit. If a list of qubits is provided a list will be
|
286
|
+
returned. If properties are missing for a qubit this can be
|
287
|
+
``None``.
|
288
|
+
|
289
|
+
Raises:
|
290
|
+
NotImplementedError: if the backend doesn't support querying the
|
291
|
+
qubit properties
|
292
|
+
"""
|
293
|
+
# Since the target didn't always have a qubit properties attribute
|
294
|
+
# to ensure the behavior here is backwards compatible with earlier
|
295
|
+
# BacekendV2 implementations where this would raise a NotImplemented
|
296
|
+
# error.
|
297
|
+
if self.target.qubit_properties is None:
|
298
|
+
raise NotImplementedError
|
299
|
+
if isinstance(qubit, int):
|
300
|
+
return self.target.qubit_properties[qubit]
|
301
|
+
return [self.target.qubit_properties[q] for q in qubit]
|
302
|
+
|
303
|
+
def set_options(self, **fields):
|
304
|
+
"""Set the options fields for the backend
|
305
|
+
|
306
|
+
This method is used to update the options of a backend. If
|
307
|
+
you need to change any of the options prior to running just
|
308
|
+
pass in the kwarg with the new value for the options.
|
309
|
+
|
310
|
+
Args:
|
311
|
+
fields: The fields to update the options
|
312
|
+
|
313
|
+
Raises:
|
314
|
+
AttributeError: If the field passed in is not part of the
|
315
|
+
options
|
316
|
+
"""
|
317
|
+
for field in fields:
|
318
|
+
if not hasattr(self._options, field):
|
319
|
+
raise AttributeError(f"Options field {field} is not valid for this backend")
|
320
|
+
self._options.update_options(**fields)
|
321
|
+
|
322
|
+
@property
|
323
|
+
def options(self):
|
324
|
+
"""Return the options for the backend
|
325
|
+
|
326
|
+
The options of a backend are the dynamic parameters defining
|
327
|
+
how the backend is used. These are used to control the :meth:`run`
|
328
|
+
method.
|
329
|
+
"""
|
330
|
+
return self._options
|
331
|
+
|
332
|
+
@property
|
333
|
+
def provider(self):
|
334
|
+
"""Return the backend provider.
|
335
|
+
|
336
|
+
Returns:
|
337
|
+
provider: the provider responsible for the backend.
|
338
|
+
"""
|
339
|
+
return self._provider
|
340
|
+
|
341
|
+
@abstractmethod
|
342
|
+
def run(self, run_input, **options):
|
343
|
+
"""Run on the backend.
|
344
|
+
|
345
|
+
This method returns a :class:`~qiskit.providers.Job` object
|
346
|
+
that runs circuits. Depending on the backend this may be either an async
|
347
|
+
or sync call. It is at the discretion of the provider to decide whether
|
348
|
+
running should block until the execution is finished or not: the Job
|
349
|
+
class can handle either situation.
|
350
|
+
|
351
|
+
Args:
|
352
|
+
run_input (QuantumCircuit or list): An
|
353
|
+
individual or a list of :class:`.QuantumCircuit` objects to
|
354
|
+
run on the backend.
|
355
|
+
options: Any kwarg options to pass to the backend for running the
|
356
|
+
config. If a key is also present in the options
|
357
|
+
attribute/object then the expectation is that the value
|
358
|
+
specified will be used instead of what's set in the options
|
359
|
+
object.
|
360
|
+
|
361
|
+
Returns:
|
362
|
+
Job: The job object for the run
|
363
|
+
"""
|
364
|
+
pass
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2023.
|
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
|
+
BasicProvider: Python-based Simulators (:mod:`qiskit.providers.basic_provider`)
|
16
|
+
================================================================================
|
17
|
+
|
18
|
+
.. currentmodule:: qiskit.providers.basic_provider
|
19
|
+
|
20
|
+
A module of Python-based quantum simulators. Simulators can be accessed
|
21
|
+
via the `BasicProvider` provider, e.g.:
|
22
|
+
|
23
|
+
.. plot::
|
24
|
+
:include-source:
|
25
|
+
:nofigs:
|
26
|
+
|
27
|
+
from qiskit.providers.basic_provider import BasicProvider
|
28
|
+
|
29
|
+
backend = BasicProvider().get_backend('basic_simulator')
|
30
|
+
|
31
|
+
|
32
|
+
Classes
|
33
|
+
=======
|
34
|
+
|
35
|
+
.. autosummary::
|
36
|
+
:toctree: ../stubs/
|
37
|
+
|
38
|
+
BasicSimulator
|
39
|
+
BasicProvider
|
40
|
+
BasicProviderJob
|
41
|
+
BasicProviderError
|
42
|
+
"""
|
43
|
+
|
44
|
+
from .basic_provider import BasicProvider
|
45
|
+
from .basic_provider_job import BasicProviderJob
|
46
|
+
from .basic_simulator import BasicSimulator
|
47
|
+
from .exceptions import BasicProviderError
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2023.
|
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
|
+
"""Provider for basic simulator backends, formerly known as `BasicAer`."""
|
15
|
+
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from collections.abc import Callable
|
19
|
+
from collections import OrderedDict
|
20
|
+
from typing import Type
|
21
|
+
|
22
|
+
import logging
|
23
|
+
|
24
|
+
from qiskit.exceptions import QiskitError
|
25
|
+
from qiskit.providers.backend import Backend
|
26
|
+
from qiskit.providers.exceptions import QiskitBackendNotFoundError
|
27
|
+
from qiskit.providers.providerutils import filter_backends
|
28
|
+
|
29
|
+
from .basic_simulator import BasicSimulator
|
30
|
+
|
31
|
+
|
32
|
+
logger = logging.getLogger(__name__)
|
33
|
+
|
34
|
+
SIMULATORS = [BasicSimulator]
|
35
|
+
|
36
|
+
|
37
|
+
class BasicProvider:
|
38
|
+
"""Provider for test simulators."""
|
39
|
+
|
40
|
+
def __init__(self) -> None:
|
41
|
+
super().__init__()
|
42
|
+
|
43
|
+
# Populate the list of test backends (simulators)
|
44
|
+
self._backends = self._verify_backends()
|
45
|
+
|
46
|
+
def get_backend(self, name=None, **kwargs):
|
47
|
+
"""Return a single backend matching the specified filtering.
|
48
|
+
Args:
|
49
|
+
name (str): name of the backend.
|
50
|
+
**kwargs: dict used for filtering.
|
51
|
+
Returns:
|
52
|
+
Backend: a backend matching the filtering.
|
53
|
+
Raises:
|
54
|
+
QiskitBackendNotFoundError: if no backend could be found or
|
55
|
+
more than one backend matches the filtering criteria.
|
56
|
+
"""
|
57
|
+
backends = self.backends(name, **kwargs)
|
58
|
+
if len(backends) > 1:
|
59
|
+
raise QiskitBackendNotFoundError("More than one backend matches the criteria")
|
60
|
+
if not backends:
|
61
|
+
raise QiskitBackendNotFoundError("No backend matches the criteria")
|
62
|
+
return backends[0]
|
63
|
+
|
64
|
+
def backends(self, name: str | None = None, filters: Callable | None = None) -> list[Backend]:
|
65
|
+
"""Return a list of backends matching the specified filtering.
|
66
|
+
Args:
|
67
|
+
name: name of the backend.
|
68
|
+
filters: callable for filtering.
|
69
|
+
Returns:
|
70
|
+
list[Backend]: a list of Backends that match the filtering
|
71
|
+
criteria.
|
72
|
+
"""
|
73
|
+
backends = self._backends.values()
|
74
|
+
if name:
|
75
|
+
available = [
|
76
|
+
backend.name() if backend.version == 1 else backend.name for backend in backends
|
77
|
+
]
|
78
|
+
if name not in available:
|
79
|
+
raise QiskitBackendNotFoundError(
|
80
|
+
f"The '{name}' backend is not installed in your system."
|
81
|
+
)
|
82
|
+
return filter_backends(backends, filters=filters)
|
83
|
+
|
84
|
+
def _verify_backends(self) -> OrderedDict[str, Backend]:
|
85
|
+
"""
|
86
|
+
Return the test backends in `BACKENDS` that are
|
87
|
+
effectively available (as some of them might depend on the presence
|
88
|
+
of an optional dependency or on the existence of a binary).
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
dict[str:Backend]: a dict of test backend instances for
|
92
|
+
the backends that could be instantiated, keyed by backend name.
|
93
|
+
"""
|
94
|
+
ret = OrderedDict()
|
95
|
+
for backend_cls in SIMULATORS:
|
96
|
+
backend_instance = self._get_backend_instance(backend_cls)
|
97
|
+
backend_name = backend_instance.name
|
98
|
+
ret[backend_name] = backend_instance
|
99
|
+
return ret
|
100
|
+
|
101
|
+
def _get_backend_instance(self, backend_cls: Type[Backend]) -> Backend:
|
102
|
+
"""
|
103
|
+
Return an instance of a backend from its class.
|
104
|
+
|
105
|
+
Args:
|
106
|
+
backend_cls (class): backend class.
|
107
|
+
Returns:
|
108
|
+
Backend: a backend instance.
|
109
|
+
Raises:
|
110
|
+
QiskitError: if the backend could not be instantiated.
|
111
|
+
"""
|
112
|
+
# Verify that the backend can be instantiated.
|
113
|
+
try:
|
114
|
+
backend_instance = backend_cls(provider=self)
|
115
|
+
except Exception as err:
|
116
|
+
raise QiskitError(f"Backend {backend_cls} could not be instantiated: {err}") from err
|
117
|
+
|
118
|
+
return backend_instance
|
119
|
+
|
120
|
+
def __str__(self) -> str:
|
121
|
+
return "BasicProvider"
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2023.
|
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
|
+
"""This module implements the job class used by Basic Aer Provider."""
|
15
|
+
|
16
|
+
import warnings
|
17
|
+
|
18
|
+
from qiskit.providers import JobStatus
|
19
|
+
from qiskit.providers.job import JobV1
|
20
|
+
|
21
|
+
|
22
|
+
class BasicProviderJob(JobV1):
|
23
|
+
"""BasicProviderJob class."""
|
24
|
+
|
25
|
+
_async = False
|
26
|
+
|
27
|
+
def __init__(self, backend, job_id, result):
|
28
|
+
super().__init__(backend, job_id)
|
29
|
+
self._result = result
|
30
|
+
|
31
|
+
def submit(self):
|
32
|
+
"""Submit the job to the backend for execution.
|
33
|
+
|
34
|
+
Raises:
|
35
|
+
JobError: if trying to re-submit the job.
|
36
|
+
"""
|
37
|
+
return
|
38
|
+
|
39
|
+
def result(self, timeout=None):
|
40
|
+
"""Get job result .
|
41
|
+
|
42
|
+
Returns:
|
43
|
+
qiskit.result.Result: Result object
|
44
|
+
"""
|
45
|
+
if timeout is not None:
|
46
|
+
warnings.warn(
|
47
|
+
"The timeout kwarg doesn't have any meaning with "
|
48
|
+
"BasicProvider because execution is synchronous and the "
|
49
|
+
"result already exists when run() returns.",
|
50
|
+
UserWarning,
|
51
|
+
)
|
52
|
+
|
53
|
+
return self._result
|
54
|
+
|
55
|
+
def status(self):
|
56
|
+
"""Gets the status of the job by querying the Python's future
|
57
|
+
|
58
|
+
Returns:
|
59
|
+
qiskit.providers.JobStatus: The current JobStatus
|
60
|
+
"""
|
61
|
+
return JobStatus.DONE
|
62
|
+
|
63
|
+
def backend(self):
|
64
|
+
"""Return the instance of the backend used for this job."""
|
65
|
+
return self._backend
|