qiskit 1.3.0__cp39-abi3-win32.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 +146 -0
- qiskit/_accelerate.pyd +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +42 -0
- qiskit/assembler/assemble_circuits.py +451 -0
- qiskit/assembler/assemble_schedules.py +367 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1313 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +50 -0
- qiskit/circuit/bit.py +94 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +238 -0
- qiskit/circuit/classical/expr/constructors.py +556 -0
- qiskit/circuit/classical/expr/expr.py +397 -0
- qiskit/circuit/classical/expr/visitors.py +300 -0
- qiskit/circuit/classical/types/__init__.py +109 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +140 -0
- qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
- qiskit/circuit/classicalfunction/classical_element.py +54 -0
- qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
- qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
- qiskit/circuit/classicalfunction/exceptions.py +35 -0
- qiskit/circuit/classicalfunction/types.py +18 -0
- qiskit/circuit/classicalfunction/utils.py +91 -0
- qiskit/circuit/classicalregister.py +57 -0
- qiskit/circuit/commutation_checker.py +106 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +28 -0
- qiskit/circuit/controlflow/_builder_utils.py +207 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +691 -0
- qiskit/circuit/controlflow/continue_loop.py +58 -0
- qiskit/circuit/controlflow/control_flow.py +84 -0
- qiskit/circuit/controlflow/for_loop.py +217 -0
- qiskit/circuit/controlflow/if_else.py +511 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +171 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +123 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +263 -0
- qiskit/circuit/instruction.py +697 -0
- qiskit/circuit/instructionset.py +179 -0
- qiskit/circuit/library/__init__.py +668 -0
- qiskit/circuit/library/arithmetic/__init__.py +34 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +210 -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 +88 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -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 +192 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +313 -0
- qiskit/circuit/library/blueprintcircuit.py +280 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +155 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +200 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +202 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +165 -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 +158 -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 +174 -0
- qiskit/circuit/library/generalized_gates/gr.py +215 -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 +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +194 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -0
- qiskit/circuit/library/generalized_gates/uc.py +213 -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 +215 -0
- qiskit/circuit/library/graph_state.py +169 -0
- qiskit/circuit/library/grover_operator.py +579 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +161 -0
- qiskit/circuit/library/iqp.py +175 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +277 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +515 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +297 -0
- qiskit/circuit/library/n_local/n_local.py +1472 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +243 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +366 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +306 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +182 -0
- qiskit/circuit/library/pauli_evolution.py +186 -0
- qiskit/circuit/library/phase_estimation.py +175 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +167 -0
- qiskit/circuit/library/standard_gates/__init__.py +142 -0
- qiskit/circuit/library/standard_gates/dcx.py +78 -0
- qiskit/circuit/library/standard_gates/ecr.py +130 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +85 -0
- qiskit/circuit/library/standard_gates/h.py +258 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +134 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
- qiskit/circuit/library/standard_gates/p.py +441 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +303 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +298 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +319 -0
- qiskit/circuit/library/standard_gates/rzx.py +229 -0
- qiskit/circuit/library/standard_gates/rzz.py +196 -0
- qiskit/circuit/library/standard_gates/s.py +428 -0
- qiskit/circuit/library/standard_gates/swap.py +288 -0
- qiskit/circuit/library/standard_gates/sx.py +315 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +403 -0
- qiskit/circuit/library/standard_gates/u1.py +501 -0
- qiskit/circuit/library/standard_gates/u2.py +149 -0
- qiskit/circuit/library/standard_gates/u3.py +436 -0
- qiskit/circuit/library/standard_gates/x.py +1529 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
- qiskit/circuit/library/standard_gates/y.py +262 -0
- qiskit/circuit/library/standard_gates/z.py +348 -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 +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +178 -0
- qiskit/circuit/parameterexpression.py +692 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6829 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/quantumregister.py +75 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +358 -0
- qiskit/circuit/register.py +233 -0
- qiskit/circuit/reset.py +34 -0
- qiskit/circuit/singleton.py +606 -0
- qiskit/circuit/store.py +97 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +681 -0
- qiskit/compiler/scheduler.py +109 -0
- qiskit/compiler/sequencer.py +71 -0
- qiskit/compiler/transpiler.py +533 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +78 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +155 -0
- qiskit/converters/dag_to_circuit.py +79 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +46 -0
- qiskit/converters/dagdependency_to_dag.py +54 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +646 -0
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +176 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +240 -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 +333 -0
- qiskit/primitives/__init__.py +481 -0
- qiskit/primitives/backend_estimator.py +486 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +339 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +252 -0
- qiskit/primitives/base/base_primitive.py +45 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_result.py +65 -0
- qiskit/primitives/base/base_sampler.py +204 -0
- qiskit/primitives/base/estimator_result.py +46 -0
- qiskit/primitives/base/sampler_result.py +45 -0
- qiskit/primitives/base/validation.py +231 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +389 -0
- qiskit/primitives/containers/bit_array.py +741 -0
- qiskit/primitives/containers/data_bin.py +173 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +279 -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/estimator.py +172 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/sampler.py +162 -0
- qiskit/primitives/statevector_estimator.py +174 -0
- qiskit/primitives/statevector_sampler.py +292 -0
- qiskit/primitives/utils.py +247 -0
- qiskit/providers/__init__.py +803 -0
- qiskit/providers/backend.py +667 -0
- qiskit/providers/backend_compat.py +472 -0
- qiskit/providers/basic_provider/__init__.py +45 -0
- qiskit/providers/basic_provider/basic_provider.py +101 -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 +821 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +105 -0
- qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +165 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +49 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1035 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +89 -0
- qiskit/providers/models/backendconfiguration.py +1040 -0
- qiskit/providers/models/backendproperties.py +517 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +305 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +95 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/pulse/__init__.py +158 -0
- qiskit/pulse/builder.py +2254 -0
- qiskit/pulse/calibration_entries.py +381 -0
- qiskit/pulse/channels.py +227 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +45 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +424 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +150 -0
- qiskit/pulse/instructions/delay.py +71 -0
- qiskit/pulse/instructions/directives.py +154 -0
- qiskit/pulse/instructions/frequency.py +135 -0
- qiskit/pulse/instructions/instruction.py +270 -0
- qiskit/pulse/instructions/phase.py +152 -0
- qiskit/pulse/instructions/play.py +99 -0
- qiskit/pulse/instructions/reference.py +100 -0
- qiskit/pulse/instructions/snapshot.py +82 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +148 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +295 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1988 -0
- qiskit/pulse/library/waveform.py +136 -0
- qiskit/pulse/macros.py +262 -0
- qiskit/pulse/parameter_manager.py +445 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +1854 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +406 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +498 -0
- qiskit/pulse/transforms/dag.py +122 -0
- qiskit/pulse/utils.py +149 -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 +654 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +372 -0
- qiskit/qasm2/parse.py +452 -0
- qiskit/qasm3/__init__.py +367 -0
- qiskit/qasm3/ast.py +738 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1299 -0
- qiskit/qasm3/printer.py +577 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +81 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +177 -0
- qiskit/qobj/converters/pulse_instruction.py +897 -0
- qiskit/qobj/pulse_qobj.py +709 -0
- qiskit/qobj/qasm_qobj.py +708 -0
- qiskit/qobj/utils.py +46 -0
- qiskit/qpy/__init__.py +1822 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1475 -0
- qiskit/qpy/binary_io/schedules.py +635 -0
- qiskit/qpy/binary_io/value.py +1025 -0
- qiskit/qpy/common.py +350 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +401 -0
- qiskit/qpy/interface.py +377 -0
- qiskit/qpy/type_keys.py +572 -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 +102 -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 +377 -0
- qiskit/quantum_info/operators/channel/transformations.py +475 -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 +509 -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 +865 -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 +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +753 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -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 +1196 -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 +845 -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 +773 -0
- qiskit/quantum_info/states/statevector.py +958 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +73 -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/mitigation/__init__.py +13 -0
- qiskit/result/mitigation/base_readout_mitigator.py +79 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +277 -0
- qiskit/result/mitigation/local_readout_mitigator.py +328 -0
- qiskit/result/mitigation/utils.py +217 -0
- qiskit/result/models.py +234 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +392 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +40 -0
- qiskit/scheduler/config.py +37 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +140 -0
- qiskit/scheduler/schedule_circuit.py +69 -0
- qiskit/scheduler/sequence.py +104 -0
- qiskit/synthesis/__init__.py +220 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -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/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -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 +241 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +117 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +311 -0
- qiskit/synthesis/evolution/qdrift.py +138 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +215 -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 +276 -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 +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +24 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -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 +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +700 -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 +1290 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +737 -0
- qiskit/transpiler/passes/__init__.py +312 -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 +137 -0
- qiskit/transpiler/passes/basis/decompose.py +131 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
- qiskit/transpiler/passes/calibration/__init__.py +17 -0
- qiskit/transpiler/passes/calibration/base_builder.py +79 -0
- qiskit/transpiler/passes/calibration/builders.py +20 -0
- qiskit/transpiler/passes/calibration/exceptions.py +22 -0
- qiskit/transpiler/passes/calibration/pulse_gate.py +100 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +164 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +411 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -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 +123 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +202 -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 +117 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +487 -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 +263 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
- qiskit/transpiler/passes/optimization/__init__.py +43 -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 +115 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +104 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -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 +149 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +162 -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/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +254 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -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 +69 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -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 +638 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +22 -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 +395 -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 +447 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +153 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +107 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
- qiskit/transpiler/passes/scheduling/asap.py +175 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +310 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +312 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +452 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +82 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +94 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +165 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +854 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +1559 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1076 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +52 -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 +65 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +93 -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 +65 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +86 -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 +49 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +490 -0
- qiskit/transpiler/passmanager_config.py +216 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1045 -0
- qiskit/transpiler/preset_passmanagers/common.py +649 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +626 -0
- qiskit/transpiler/preset_passmanagers/level0.py +113 -0
- qiskit/transpiler/preset_passmanagers/level1.py +120 -0
- qiskit/transpiler/preset_passmanagers/level2.py +119 -0
- qiskit/transpiler/preset_passmanagers/level3.py +119 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
- qiskit/transpiler/target.py +1319 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +262 -0
- qiskit/utils/__init__.py +89 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecate_pulse.py +119 -0
- qiskit/utils/deprecation.py +490 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/multiprocessing.py +56 -0
- qiskit/utils/optionals.py +347 -0
- qiskit/utils/parallel.py +191 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +288 -0
- qiskit/visualization/array.py +204 -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 +727 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2029 -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 +1844 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +481 -0
- qiskit/visualization/dag_visualization.py +316 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1485 -0
- qiskit/visualization/library.py +37 -0
- qiskit/visualization/pass_manager_visualization.py +308 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +901 -0
- qiskit/visualization/pulse_v2/device_info.py +173 -0
- qiskit/visualization/pulse_v2/drawings.py +253 -0
- qiskit/visualization/pulse_v2/events.py +254 -0
- qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
- qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
- qiskit/visualization/pulse_v2/generators/chart.py +208 -0
- qiskit/visualization/pulse_v2/generators/frame.py +436 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
- qiskit/visualization/pulse_v2/interface.py +458 -0
- qiskit/visualization/pulse_v2/layouts.py +387 -0
- qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
- qiskit/visualization/pulse_v2/stylesheet.py +312 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/state_visualization.py +1518 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +480 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +436 -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 +192 -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-1.3.0.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0.dist-info/METADATA +222 -0
- qiskit-1.3.0.dist-info/RECORD +836 -0
- qiskit-1.3.0.dist-info/WHEEL +5 -0
- qiskit-1.3.0.dist-info/entry_points.txt +76 -0
- qiskit-1.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,472 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020, 2024.
|
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
|
+
"""Backend abstract interface for providers."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import logging
|
17
|
+
import warnings
|
18
|
+
from typing import List, Iterable, Any, Dict, Optional
|
19
|
+
|
20
|
+
from qiskit.providers.backend import BackendV1, BackendV2
|
21
|
+
from qiskit.providers.backend import QubitProperties
|
22
|
+
from qiskit.providers.models.backendconfiguration import BackendConfiguration
|
23
|
+
from qiskit.providers.models.backendproperties import BackendProperties
|
24
|
+
from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
|
25
|
+
from qiskit.providers.models.pulsedefaults import PulseDefaults
|
26
|
+
from qiskit.providers.options import Options
|
27
|
+
from qiskit.providers.exceptions import BackendPropertyError
|
28
|
+
from qiskit.utils.deprecate_pulse import deprecate_pulse_arg, deprecate_pulse_dependency
|
29
|
+
|
30
|
+
|
31
|
+
logger = logging.getLogger(__name__)
|
32
|
+
|
33
|
+
|
34
|
+
@deprecate_pulse_arg("defaults")
|
35
|
+
def convert_to_target(
|
36
|
+
configuration: BackendConfiguration,
|
37
|
+
properties: BackendProperties = None,
|
38
|
+
defaults: PulseDefaults = None,
|
39
|
+
custom_name_mapping: Optional[Dict[str, Any]] = None,
|
40
|
+
add_delay: bool = True,
|
41
|
+
filter_faulty: bool = True,
|
42
|
+
):
|
43
|
+
"""Decode transpiler target from backend data set.
|
44
|
+
|
45
|
+
This function generates :class:`.Target`` instance from intermediate
|
46
|
+
legacy objects such as :class:`.BackendProperties` and :class:`.PulseDefaults`.
|
47
|
+
These objects are usually components of the legacy :class:`.BackendV1` model.
|
48
|
+
|
49
|
+
Args:
|
50
|
+
configuration: Backend configuration as ``BackendConfiguration``
|
51
|
+
properties: Backend property dictionary or ``BackendProperties``
|
52
|
+
defaults: DEPRECATED. Backend pulse defaults dictionary or ``PulseDefaults``
|
53
|
+
custom_name_mapping: A name mapping must be supplied for the operation
|
54
|
+
not included in Qiskit Standard Gate name mapping, otherwise the operation
|
55
|
+
will be dropped in the resulting ``Target`` object.
|
56
|
+
add_delay: If True, adds delay to the instruction set.
|
57
|
+
filter_faulty: If True, this filters the non-operational qubits.
|
58
|
+
|
59
|
+
Returns:
|
60
|
+
A ``Target`` instance.
|
61
|
+
"""
|
62
|
+
return _convert_to_target(
|
63
|
+
configuration, properties, defaults, custom_name_mapping, add_delay, filter_faulty
|
64
|
+
)
|
65
|
+
|
66
|
+
|
67
|
+
def _convert_to_target(
|
68
|
+
configuration: BackendConfiguration,
|
69
|
+
properties: BackendProperties = None,
|
70
|
+
defaults: PulseDefaults = None,
|
71
|
+
custom_name_mapping: Optional[Dict[str, Any]] = None,
|
72
|
+
add_delay: bool = True,
|
73
|
+
filter_faulty: bool = True,
|
74
|
+
):
|
75
|
+
"""An alternative private path to avoid pulse deprecations"""
|
76
|
+
# importing packages where they are needed, to avoid cyclic-import.
|
77
|
+
# pylint: disable=cyclic-import
|
78
|
+
from qiskit.transpiler.target import (
|
79
|
+
Target,
|
80
|
+
InstructionProperties,
|
81
|
+
)
|
82
|
+
from qiskit.circuit.controlflow import ForLoopOp, IfElseOp, SwitchCaseOp, WhileLoopOp
|
83
|
+
from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
|
84
|
+
from qiskit.circuit.parameter import Parameter
|
85
|
+
from qiskit.circuit.gate import Gate
|
86
|
+
|
87
|
+
required = ["measure", "delay"]
|
88
|
+
|
89
|
+
# Load Qiskit object representation
|
90
|
+
qiskit_inst_mapping = get_standard_gate_name_mapping()
|
91
|
+
if custom_name_mapping:
|
92
|
+
qiskit_inst_mapping.update(custom_name_mapping)
|
93
|
+
|
94
|
+
qiskit_control_flow_mapping = {
|
95
|
+
"if_else": IfElseOp,
|
96
|
+
"while_loop": WhileLoopOp,
|
97
|
+
"for_loop": ForLoopOp,
|
98
|
+
"switch_case": SwitchCaseOp,
|
99
|
+
}
|
100
|
+
|
101
|
+
in_data = {"num_qubits": configuration.num_qubits}
|
102
|
+
|
103
|
+
# Parse global configuration properties
|
104
|
+
if hasattr(configuration, "dt"):
|
105
|
+
in_data["dt"] = configuration.dt
|
106
|
+
if hasattr(configuration, "timing_constraints"):
|
107
|
+
in_data.update(configuration.timing_constraints)
|
108
|
+
|
109
|
+
# Create instruction property placeholder from backend configuration
|
110
|
+
basis_gates = set(getattr(configuration, "basis_gates", []))
|
111
|
+
supported_instructions = set(getattr(configuration, "supported_instructions", []))
|
112
|
+
gate_configs = {gate.name: gate for gate in configuration.gates}
|
113
|
+
all_instructions = set.union(
|
114
|
+
basis_gates, set(required), supported_instructions.intersection(CONTROL_FLOW_OP_NAMES)
|
115
|
+
)
|
116
|
+
inst_name_map = {} # type: Dict[str, Instruction]
|
117
|
+
|
118
|
+
faulty_ops = set()
|
119
|
+
faulty_qubits = set()
|
120
|
+
unsupported_instructions = []
|
121
|
+
|
122
|
+
# Create name to Qiskit instruction object repr mapping
|
123
|
+
for name in all_instructions:
|
124
|
+
if name in qiskit_control_flow_mapping:
|
125
|
+
continue
|
126
|
+
if name in qiskit_inst_mapping:
|
127
|
+
inst_name_map[name] = qiskit_inst_mapping[name]
|
128
|
+
elif name in gate_configs:
|
129
|
+
# GateConfig model is a translator of QASM opcode.
|
130
|
+
# This doesn't have quantum definition, so Qiskit transpiler doesn't perform
|
131
|
+
# any optimization in quantum domain.
|
132
|
+
# Usually GateConfig counterpart should exist in Qiskit namespace so this is rarely called.
|
133
|
+
this_config = gate_configs[name]
|
134
|
+
params = list(map(Parameter, getattr(this_config, "parameters", [])))
|
135
|
+
coupling_map = getattr(this_config, "coupling_map", [])
|
136
|
+
inst_name_map[name] = Gate(
|
137
|
+
name=name,
|
138
|
+
num_qubits=len(coupling_map[0]) if coupling_map else 0,
|
139
|
+
params=params,
|
140
|
+
)
|
141
|
+
else:
|
142
|
+
warnings.warn(
|
143
|
+
f"No gate definition for {name} can be found and is being excluded "
|
144
|
+
"from the generated target. You can use `custom_name_mapping` to provide "
|
145
|
+
"a definition for this operation.",
|
146
|
+
RuntimeWarning,
|
147
|
+
)
|
148
|
+
unsupported_instructions.append(name)
|
149
|
+
|
150
|
+
for name in unsupported_instructions:
|
151
|
+
all_instructions.remove(name)
|
152
|
+
|
153
|
+
# Create inst properties placeholder
|
154
|
+
# Without any assignment, properties value is None,
|
155
|
+
# which defines a global instruction that can be applied to any qubit(s).
|
156
|
+
# The None value behaves differently from an empty dictionary.
|
157
|
+
# See API doc of Target.add_instruction for details.
|
158
|
+
prop_name_map = dict.fromkeys(all_instructions)
|
159
|
+
for name in all_instructions:
|
160
|
+
if name in gate_configs:
|
161
|
+
if coupling_map := getattr(gate_configs[name], "coupling_map", None):
|
162
|
+
# Respect operational qubits that gate configuration defines
|
163
|
+
# This ties instruction to particular qubits even without properties information.
|
164
|
+
# Note that each instruction is considered to be ideal unless
|
165
|
+
# its spec (e.g. error, duration) is bound by the properties object.
|
166
|
+
prop_name_map[name] = dict.fromkeys(map(tuple, coupling_map))
|
167
|
+
|
168
|
+
# Populate instruction properties
|
169
|
+
if properties:
|
170
|
+
|
171
|
+
def _get_value(prop_dict, prop_name):
|
172
|
+
if ndval := prop_dict.get(prop_name, None):
|
173
|
+
return ndval[0]
|
174
|
+
return None
|
175
|
+
|
176
|
+
# is_qubit_operational is a bit of expensive operation so precache the value
|
177
|
+
faulty_qubits = {
|
178
|
+
q for q in range(configuration.num_qubits) if not properties.is_qubit_operational(q)
|
179
|
+
}
|
180
|
+
|
181
|
+
qubit_properties = []
|
182
|
+
for qi in range(0, configuration.num_qubits):
|
183
|
+
# TODO faulty qubit handling might be needed since
|
184
|
+
# faulty qubit reporting qubit properties doesn't make sense.
|
185
|
+
try:
|
186
|
+
prop_dict = properties.qubit_property(qubit=qi)
|
187
|
+
except KeyError:
|
188
|
+
continue
|
189
|
+
qubit_properties.append(
|
190
|
+
QubitProperties(
|
191
|
+
t1=prop_dict.get("T1", (None, None))[0],
|
192
|
+
t2=prop_dict.get("T2", (None, None))[0],
|
193
|
+
frequency=prop_dict.get("frequency", (None, None))[0],
|
194
|
+
)
|
195
|
+
)
|
196
|
+
in_data["qubit_properties"] = qubit_properties
|
197
|
+
|
198
|
+
for name in all_instructions:
|
199
|
+
try:
|
200
|
+
for qubits, params in properties.gate_property(name).items():
|
201
|
+
if filter_faulty and (
|
202
|
+
set.intersection(faulty_qubits, qubits)
|
203
|
+
or not properties.is_gate_operational(name, qubits)
|
204
|
+
):
|
205
|
+
try:
|
206
|
+
# Qubits might be pre-defined by the gate config
|
207
|
+
# However properties objects says the qubits is non-operational
|
208
|
+
del prop_name_map[name][qubits]
|
209
|
+
except KeyError:
|
210
|
+
pass
|
211
|
+
faulty_ops.add((name, qubits))
|
212
|
+
continue
|
213
|
+
if prop_name_map[name] is None:
|
214
|
+
# This instruction is tied to particular qubits
|
215
|
+
# i.e. gate config is not provided, and instruction has been globally defined.
|
216
|
+
prop_name_map[name] = {}
|
217
|
+
prop_name_map[name][qubits] = InstructionProperties(
|
218
|
+
error=_get_value(params, "gate_error"),
|
219
|
+
duration=_get_value(params, "gate_length"),
|
220
|
+
)
|
221
|
+
if isinstance(prop_name_map[name], dict) and any(
|
222
|
+
v is None for v in prop_name_map[name].values()
|
223
|
+
):
|
224
|
+
# Properties provides gate properties only for subset of qubits
|
225
|
+
# Associated qubit set might be defined by the gate config here
|
226
|
+
logger.info(
|
227
|
+
"Gate properties of instruction %s are not provided for every qubits. "
|
228
|
+
"This gate is ideal for some qubits and the rest is with finite error. "
|
229
|
+
"Created backend target may confuse error-aware circuit optimization.",
|
230
|
+
name,
|
231
|
+
)
|
232
|
+
except BackendPropertyError:
|
233
|
+
# This gate doesn't report any property
|
234
|
+
continue
|
235
|
+
|
236
|
+
# Measure instruction property is stored in qubit property
|
237
|
+
prop_name_map["measure"] = {}
|
238
|
+
|
239
|
+
for qubit_idx in range(configuration.num_qubits):
|
240
|
+
if filter_faulty and (qubit_idx in faulty_qubits):
|
241
|
+
continue
|
242
|
+
qubit_prop = properties.qubit_property(qubit_idx)
|
243
|
+
prop_name_map["measure"][(qubit_idx,)] = InstructionProperties(
|
244
|
+
error=_get_value(qubit_prop, "readout_error"),
|
245
|
+
duration=_get_value(qubit_prop, "readout_length"),
|
246
|
+
)
|
247
|
+
|
248
|
+
for op in required:
|
249
|
+
# Map required ops to each operational qubit
|
250
|
+
if prop_name_map[op] is None:
|
251
|
+
prop_name_map[op] = {
|
252
|
+
(q,): None
|
253
|
+
for q in range(configuration.num_qubits)
|
254
|
+
if not filter_faulty or (q not in faulty_qubits)
|
255
|
+
}
|
256
|
+
|
257
|
+
if defaults:
|
258
|
+
inst_sched_map = defaults.instruction_schedule_map
|
259
|
+
|
260
|
+
for name in inst_sched_map.instructions:
|
261
|
+
for qubits in inst_sched_map.qubits_with_instruction(name):
|
262
|
+
if not isinstance(qubits, tuple):
|
263
|
+
qubits = (qubits,)
|
264
|
+
if (
|
265
|
+
name not in all_instructions
|
266
|
+
or name not in prop_name_map
|
267
|
+
or prop_name_map[name] is None
|
268
|
+
or qubits not in prop_name_map[name]
|
269
|
+
):
|
270
|
+
logger.info(
|
271
|
+
"Gate calibration for instruction %s on qubits %s is found "
|
272
|
+
"in the PulseDefaults payload. However, this entry is not defined in "
|
273
|
+
"the gate mapping of Target. This calibration is ignored.",
|
274
|
+
name,
|
275
|
+
qubits,
|
276
|
+
)
|
277
|
+
continue
|
278
|
+
|
279
|
+
if (name, qubits) in faulty_ops:
|
280
|
+
continue
|
281
|
+
|
282
|
+
entry = inst_sched_map._get_calibration_entry(name, qubits)
|
283
|
+
try:
|
284
|
+
prop_name_map[name][qubits]._calibration_prop = entry
|
285
|
+
except AttributeError:
|
286
|
+
# if instruction properties are "None", add entry
|
287
|
+
prop_name_map[name].update({qubits: InstructionProperties(None, None, entry)})
|
288
|
+
logger.info(
|
289
|
+
"The PulseDefaults payload received contains an instruction %s on "
|
290
|
+
"qubits %s which is not present in the configuration or properties payload."
|
291
|
+
"A new properties entry will be added to include the new calibration data.",
|
292
|
+
name,
|
293
|
+
qubits,
|
294
|
+
)
|
295
|
+
# Add parsed properties to target
|
296
|
+
target = Target(**in_data)
|
297
|
+
for inst_name in all_instructions:
|
298
|
+
if inst_name == "delay" and not add_delay:
|
299
|
+
continue
|
300
|
+
if inst_name in qiskit_control_flow_mapping:
|
301
|
+
# Control flow operator doesn't have gate property.
|
302
|
+
target.add_instruction(
|
303
|
+
instruction=qiskit_control_flow_mapping[inst_name],
|
304
|
+
name=inst_name,
|
305
|
+
)
|
306
|
+
else:
|
307
|
+
target.add_instruction(
|
308
|
+
instruction=inst_name_map[inst_name],
|
309
|
+
properties=prop_name_map.get(inst_name, None),
|
310
|
+
name=inst_name,
|
311
|
+
)
|
312
|
+
|
313
|
+
return target
|
314
|
+
|
315
|
+
|
316
|
+
def qubit_props_list_from_props(
|
317
|
+
properties: BackendProperties,
|
318
|
+
) -> List[QubitProperties]:
|
319
|
+
"""Uses BackendProperties to construct
|
320
|
+
and return a list of QubitProperties.
|
321
|
+
"""
|
322
|
+
qubit_props: List[QubitProperties] = []
|
323
|
+
for qubit, _ in enumerate(properties.qubits):
|
324
|
+
try:
|
325
|
+
t_1 = properties.t1(qubit)
|
326
|
+
except BackendPropertyError:
|
327
|
+
t_1 = None
|
328
|
+
try:
|
329
|
+
t_2 = properties.t2(qubit)
|
330
|
+
except BackendPropertyError:
|
331
|
+
t_2 = None
|
332
|
+
try:
|
333
|
+
frequency = properties.frequency(qubit)
|
334
|
+
except BackendPropertyError:
|
335
|
+
frequency = None
|
336
|
+
qubit_props.append(
|
337
|
+
QubitProperties( # type: ignore[no-untyped-call]
|
338
|
+
t1=t_1,
|
339
|
+
t2=t_2,
|
340
|
+
frequency=frequency,
|
341
|
+
)
|
342
|
+
)
|
343
|
+
return qubit_props
|
344
|
+
|
345
|
+
|
346
|
+
class BackendV2Converter(BackendV2):
|
347
|
+
"""A converter class that takes a :class:`~.BackendV1` instance and wraps it in a
|
348
|
+
:class:`~.BackendV2` interface.
|
349
|
+
|
350
|
+
This class implements the :class:`~.BackendV2` interface and is used to enable
|
351
|
+
common access patterns between :class:`~.BackendV1` and :class:`~.BackendV2`. This
|
352
|
+
class should only be used if you need a :class:`~.BackendV2` and still need
|
353
|
+
compatibility with :class:`~.BackendV1`.
|
354
|
+
|
355
|
+
When using custom calibrations (or other custom workflows) it is **not** recommended
|
356
|
+
to mutate the ``BackendV1`` object before applying this converter. For example, in order to
|
357
|
+
convert a ``BackendV1`` object with a customized ``defaults().instruction_schedule_map``,
|
358
|
+
which has a custom calibration for an operation, the operation name must be in
|
359
|
+
``configuration().basis_gates`` and ``name_mapping`` must be supplied for the operation.
|
360
|
+
Otherwise, the operation will be dropped in the resulting ``BackendV2`` object.
|
361
|
+
|
362
|
+
Instead it is typically better to add custom calibrations **after** applying this converter
|
363
|
+
instead of updating ``BackendV1.defaults()`` in advance. For example::
|
364
|
+
|
365
|
+
backend_v2 = BackendV2Converter(backend_v1)
|
366
|
+
backend_v2.target.add_instruction(
|
367
|
+
custom_gate, {(0, 1): InstructionProperties(calibration=custom_sched)}
|
368
|
+
)
|
369
|
+
"""
|
370
|
+
|
371
|
+
def __init__(
|
372
|
+
self,
|
373
|
+
backend: BackendV1,
|
374
|
+
name_mapping: Optional[Dict[str, Any]] = None,
|
375
|
+
add_delay: bool = True,
|
376
|
+
filter_faulty: bool = True,
|
377
|
+
):
|
378
|
+
"""Initialize a BackendV2 converter instance based on a BackendV1 instance.
|
379
|
+
|
380
|
+
Args:
|
381
|
+
backend: The input :class:`~.BackendV1` based backend to wrap in a
|
382
|
+
:class:`~.BackendV2` interface
|
383
|
+
name_mapping: An optional dictionary that maps custom gate/operation names in
|
384
|
+
``backend`` to an :class:`~.Operation` object representing that
|
385
|
+
gate/operation. By default most standard gates names are mapped to the
|
386
|
+
standard gate object from :mod:`qiskit.circuit.library` this only needs
|
387
|
+
to be specified if the input ``backend`` defines gates in names outside
|
388
|
+
that set.
|
389
|
+
add_delay: If set to true a :class:`~qiskit.circuit.Delay` operation
|
390
|
+
will be added to the target as a supported operation for all
|
391
|
+
qubits
|
392
|
+
filter_faulty: If the :class:`~.BackendProperties` object (if present) for
|
393
|
+
``backend`` has any qubits or gates flagged as non-operational filter
|
394
|
+
those from the output target.
|
395
|
+
"""
|
396
|
+
self._backend = backend
|
397
|
+
self._config = self._backend.configuration()
|
398
|
+
super().__init__(
|
399
|
+
provider=backend.provider,
|
400
|
+
name=backend.name(),
|
401
|
+
description=getattr(self._config, "description", None),
|
402
|
+
online_date=getattr(self._config, "online_date", None),
|
403
|
+
backend_version=self._config.backend_version,
|
404
|
+
)
|
405
|
+
self._options = self._backend._options
|
406
|
+
self._properties = None
|
407
|
+
self._defaults = None
|
408
|
+
|
409
|
+
with warnings.catch_warnings():
|
410
|
+
# The class QobjExperimentHeader is deprecated
|
411
|
+
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
412
|
+
if hasattr(self._backend, "properties"):
|
413
|
+
self._properties = self._backend.properties()
|
414
|
+
if hasattr(self._backend, "defaults"):
|
415
|
+
self._defaults = self._backend.defaults()
|
416
|
+
|
417
|
+
self._target = None
|
418
|
+
self._name_mapping = name_mapping
|
419
|
+
self._add_delay = add_delay
|
420
|
+
self._filter_faulty = filter_faulty
|
421
|
+
|
422
|
+
@property
|
423
|
+
def target(self):
|
424
|
+
"""A :class:`qiskit.transpiler.Target` object for the backend.
|
425
|
+
|
426
|
+
:rtype: Target
|
427
|
+
"""
|
428
|
+
if self._target is None:
|
429
|
+
self._target = _convert_to_target(
|
430
|
+
configuration=self._config,
|
431
|
+
properties=self._properties,
|
432
|
+
defaults=self._defaults,
|
433
|
+
custom_name_mapping=self._name_mapping,
|
434
|
+
add_delay=self._add_delay,
|
435
|
+
filter_faulty=self._filter_faulty,
|
436
|
+
)
|
437
|
+
return self._target
|
438
|
+
|
439
|
+
@property
|
440
|
+
def max_circuits(self):
|
441
|
+
return self._config.max_experiments
|
442
|
+
|
443
|
+
@classmethod
|
444
|
+
def _default_options(cls):
|
445
|
+
return Options()
|
446
|
+
|
447
|
+
@property
|
448
|
+
def dtm(self) -> float:
|
449
|
+
return self._config.dtm
|
450
|
+
|
451
|
+
@property
|
452
|
+
def meas_map(self) -> List[List[int]]:
|
453
|
+
return self._config.meas_map
|
454
|
+
|
455
|
+
@deprecate_pulse_dependency
|
456
|
+
def drive_channel(self, qubit: int):
|
457
|
+
return self._config.drive(qubit)
|
458
|
+
|
459
|
+
@deprecate_pulse_dependency
|
460
|
+
def measure_channel(self, qubit: int):
|
461
|
+
return self._config.measure(qubit)
|
462
|
+
|
463
|
+
@deprecate_pulse_dependency
|
464
|
+
def acquire_channel(self, qubit: int):
|
465
|
+
return self._config.acquire(qubit)
|
466
|
+
|
467
|
+
@deprecate_pulse_dependency
|
468
|
+
def control_channel(self, qubits: Iterable[int]):
|
469
|
+
return self._config.control(qubits)
|
470
|
+
|
471
|
+
def run(self, run_input, **options):
|
472
|
+
return self._backend.run(run_input, **options)
|
@@ -0,0 +1,45 @@
|
|
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
|
+
.. code-block::
|
24
|
+
|
25
|
+
from qiskit.providers.basic_provider import BasicProvider
|
26
|
+
|
27
|
+
backend = BasicProvider().get_backend('basic_simulator')
|
28
|
+
|
29
|
+
|
30
|
+
Classes
|
31
|
+
=======
|
32
|
+
|
33
|
+
.. autosummary::
|
34
|
+
:toctree: ../stubs/
|
35
|
+
|
36
|
+
BasicSimulator
|
37
|
+
BasicProvider
|
38
|
+
BasicProviderJob
|
39
|
+
BasicProviderError
|
40
|
+
"""
|
41
|
+
|
42
|
+
from .basic_provider import BasicProvider
|
43
|
+
from .basic_provider_job import BasicProviderJob
|
44
|
+
from .basic_simulator import BasicSimulator
|
45
|
+
from .exceptions import BasicProviderError
|
@@ -0,0 +1,101 @@
|
|
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.provider import ProviderV1
|
27
|
+
from qiskit.providers.exceptions import QiskitBackendNotFoundError
|
28
|
+
from qiskit.providers.providerutils import filter_backends
|
29
|
+
|
30
|
+
from .basic_simulator import BasicSimulator
|
31
|
+
|
32
|
+
|
33
|
+
logger = logging.getLogger(__name__)
|
34
|
+
|
35
|
+
SIMULATORS = [BasicSimulator]
|
36
|
+
|
37
|
+
|
38
|
+
class BasicProvider(ProviderV1):
|
39
|
+
"""Provider for test simulators."""
|
40
|
+
|
41
|
+
def __init__(self) -> None:
|
42
|
+
super().__init__()
|
43
|
+
|
44
|
+
# Populate the list of test backends (simulators)
|
45
|
+
self._backends = self._verify_backends()
|
46
|
+
|
47
|
+
def get_backend(self, name: str | None = None, **kwargs) -> Backend:
|
48
|
+
return super().get_backend(name=name, **kwargs)
|
49
|
+
|
50
|
+
def backends(
|
51
|
+
self, name: str | None = None, filters: Callable | None = None, **kwargs
|
52
|
+
) -> list[Backend]:
|
53
|
+
backends = self._backends.values()
|
54
|
+
if name:
|
55
|
+
available = [
|
56
|
+
backend.name() if backend.version == 1 else backend.name for backend in backends
|
57
|
+
]
|
58
|
+
if name not in available:
|
59
|
+
raise QiskitBackendNotFoundError(
|
60
|
+
f"The '{name}' backend is not installed in your system."
|
61
|
+
)
|
62
|
+
return filter_backends(backends, filters=filters, **kwargs)
|
63
|
+
|
64
|
+
def _verify_backends(self) -> OrderedDict[str, Backend]:
|
65
|
+
"""
|
66
|
+
Return the test backends in `BACKENDS` that are
|
67
|
+
effectively available (as some of them might depend on the presence
|
68
|
+
of an optional dependency or on the existence of a binary).
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
dict[str:Backend]: a dict of test backend instances for
|
72
|
+
the backends that could be instantiated, keyed by backend name.
|
73
|
+
"""
|
74
|
+
ret = OrderedDict()
|
75
|
+
for backend_cls in SIMULATORS:
|
76
|
+
backend_instance = self._get_backend_instance(backend_cls)
|
77
|
+
backend_name = backend_instance.name
|
78
|
+
ret[backend_name] = backend_instance
|
79
|
+
return ret
|
80
|
+
|
81
|
+
def _get_backend_instance(self, backend_cls: Type[Backend]) -> Backend:
|
82
|
+
"""
|
83
|
+
Return an instance of a backend from its class.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
backend_cls (class): backend class.
|
87
|
+
Returns:
|
88
|
+
Backend: a backend instance.
|
89
|
+
Raises:
|
90
|
+
QiskitError: if the backend could not be instantiated.
|
91
|
+
"""
|
92
|
+
# Verify that the backend can be instantiated.
|
93
|
+
try:
|
94
|
+
backend_instance = backend_cls(provider=self)
|
95
|
+
except Exception as err:
|
96
|
+
raise QiskitError(f"Backend {backend_cls} could not be instantiated: {err}") from err
|
97
|
+
|
98
|
+
return backend_instance
|
99
|
+
|
100
|
+
def __str__(self) -> str:
|
101
|
+
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
|