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,339 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 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
|
+
"""Sampler V2 implementation for an arbitrary Backend object."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import warnings
|
18
|
+
from collections import defaultdict
|
19
|
+
from dataclasses import dataclass
|
20
|
+
from typing import Any, Iterable, Union
|
21
|
+
|
22
|
+
import numpy as np
|
23
|
+
from numpy.typing import NDArray
|
24
|
+
|
25
|
+
from qiskit.circuit import QuantumCircuit
|
26
|
+
from qiskit.exceptions import QiskitError
|
27
|
+
from qiskit.primitives.backend_estimator import _run_circuits
|
28
|
+
from qiskit.primitives.base import BaseSamplerV2
|
29
|
+
from qiskit.primitives.containers import (
|
30
|
+
BitArray,
|
31
|
+
DataBin,
|
32
|
+
PrimitiveResult,
|
33
|
+
SamplerPubLike,
|
34
|
+
SamplerPubResult,
|
35
|
+
)
|
36
|
+
from qiskit.primitives.containers.bit_array import _min_num_bytes
|
37
|
+
from qiskit.primitives.containers.sampler_pub import SamplerPub
|
38
|
+
from qiskit.primitives.primitive_job import PrimitiveJob
|
39
|
+
from qiskit.providers.backend import BackendV1, BackendV2
|
40
|
+
from qiskit.result import Result
|
41
|
+
|
42
|
+
|
43
|
+
@dataclass
|
44
|
+
class Options:
|
45
|
+
"""Options for :class:`~.BackendSamplerV2`"""
|
46
|
+
|
47
|
+
default_shots: int = 1024
|
48
|
+
"""The default shots to use if none are specified in :meth:`~.run`.
|
49
|
+
Default: 1024.
|
50
|
+
"""
|
51
|
+
|
52
|
+
seed_simulator: int | None = None
|
53
|
+
"""The seed to use in the simulator. If None, a random seed will be used.
|
54
|
+
Default: None.
|
55
|
+
"""
|
56
|
+
|
57
|
+
run_options: dict[str, Any] | None = None
|
58
|
+
"""A dictionary of options to pass to the backend's ``run()`` method.
|
59
|
+
Default: None (no option passed to backend's ``run`` method)
|
60
|
+
"""
|
61
|
+
|
62
|
+
|
63
|
+
@dataclass
|
64
|
+
class _MeasureInfo:
|
65
|
+
creg_name: str
|
66
|
+
num_bits: int
|
67
|
+
num_bytes: int
|
68
|
+
start: int
|
69
|
+
|
70
|
+
|
71
|
+
ResultMemory = Union[list[str], list[list[float]], list[list[list[float]]]]
|
72
|
+
"""Type alias for possible level 2 and level 1 result memory formats. For level
|
73
|
+
2, the format is a list of bit strings. For level 1, format can be either a
|
74
|
+
list of I/Q pairs (list with two floats) for each memory slot if using
|
75
|
+
``meas_return=avg`` or a list of of lists of I/Q pairs if using
|
76
|
+
``meas_return=single`` with the outer list indexing shot number and the inner
|
77
|
+
list indexing memory slot.
|
78
|
+
"""
|
79
|
+
|
80
|
+
|
81
|
+
class BackendSamplerV2(BaseSamplerV2):
|
82
|
+
"""Evaluates bitstrings for provided quantum circuits
|
83
|
+
|
84
|
+
The :class:`~.BackendSamplerV2` class is a generic implementation of the
|
85
|
+
:class:`~.BaseSamplerV2` interface that is used to wrap a :class:`~.BackendV2`
|
86
|
+
(or :class:`~.BackendV1`) object in the class :class:`~.BaseSamplerV2` API. It
|
87
|
+
facilitates using backends that do not provide a native
|
88
|
+
:class:`~.BaseSamplerV2` implementation in places that work with
|
89
|
+
:class:`~.BaseSamplerV2`. However,
|
90
|
+
if you're using a provider that has a native implementation of
|
91
|
+
:class:`~.BaseSamplerV2`, it is a better choice to leverage that native
|
92
|
+
implementation as it will likely include additional optimizations and be
|
93
|
+
a more efficient implementation. The generic nature of this class
|
94
|
+
precludes doing any provider- or backend-specific optimizations.
|
95
|
+
|
96
|
+
This class does not perform any measurement or gate mitigation.
|
97
|
+
|
98
|
+
Each tuple of ``(circuit, <optional> parameter values, <optional> shots)``, called a sampler
|
99
|
+
primitive unified bloc (PUB), produces its own array-valued result. The :meth:`~run` method can
|
100
|
+
be given many pubs at once.
|
101
|
+
|
102
|
+
The options for :class:`~.BackendSamplerV2` consist of the following items.
|
103
|
+
|
104
|
+
* ``default_shots``: The default shots to use if none are specified in :meth:`~run`.
|
105
|
+
Default: 1024.
|
106
|
+
|
107
|
+
* ``seed_simulator``: The seed to use in the simulator. If None, a random seed will be used.
|
108
|
+
Default: None.
|
109
|
+
|
110
|
+
* ``run_options``: A dictionary of options to pass through to the ``run()``
|
111
|
+
method of the wrapped :class:`~.BackendV2` instance.
|
112
|
+
|
113
|
+
.. note::
|
114
|
+
|
115
|
+
This class requires a backend that supports ``memory`` option.
|
116
|
+
|
117
|
+
"""
|
118
|
+
|
119
|
+
def __init__(
|
120
|
+
self,
|
121
|
+
*,
|
122
|
+
backend: BackendV1 | BackendV2,
|
123
|
+
options: dict | None = None,
|
124
|
+
):
|
125
|
+
"""
|
126
|
+
Args:
|
127
|
+
backend: The backend to run the primitive on.
|
128
|
+
options: The options to control the default shots (``default_shots``) and
|
129
|
+
the random seed for the simulator (``seed_simulator``).
|
130
|
+
"""
|
131
|
+
self._backend = backend
|
132
|
+
self._options = Options(**options) if options else Options()
|
133
|
+
|
134
|
+
@property
|
135
|
+
def backend(self) -> BackendV1 | BackendV2:
|
136
|
+
"""Returns the backend which this sampler object based on."""
|
137
|
+
return self._backend
|
138
|
+
|
139
|
+
@property
|
140
|
+
def options(self) -> Options:
|
141
|
+
"""Return the options"""
|
142
|
+
return self._options
|
143
|
+
|
144
|
+
def run(
|
145
|
+
self, pubs: Iterable[SamplerPubLike], *, shots: int | None = None
|
146
|
+
) -> PrimitiveJob[PrimitiveResult[SamplerPubResult]]:
|
147
|
+
if shots is None:
|
148
|
+
shots = self._options.default_shots
|
149
|
+
coerced_pubs = [SamplerPub.coerce(pub, shots) for pub in pubs]
|
150
|
+
self._validate_pubs(coerced_pubs)
|
151
|
+
job = PrimitiveJob(self._run, coerced_pubs)
|
152
|
+
job._submit()
|
153
|
+
return job
|
154
|
+
|
155
|
+
def _validate_pubs(self, pubs: list[SamplerPub]):
|
156
|
+
for i, pub in enumerate(pubs):
|
157
|
+
if len(pub.circuit.cregs) == 0:
|
158
|
+
warnings.warn(
|
159
|
+
f"The {i}-th pub's circuit has no output classical registers and so the result "
|
160
|
+
"will be empty. Did you mean to add measurement instructions?",
|
161
|
+
UserWarning,
|
162
|
+
)
|
163
|
+
|
164
|
+
def _run(self, pubs: list[SamplerPub]) -> PrimitiveResult[SamplerPubResult]:
|
165
|
+
pub_dict = defaultdict(list)
|
166
|
+
# consolidate pubs with the same number of shots
|
167
|
+
for i, pub in enumerate(pubs):
|
168
|
+
pub_dict[pub.shots].append(i)
|
169
|
+
|
170
|
+
results = [None] * len(pubs)
|
171
|
+
for shots, lst in pub_dict.items():
|
172
|
+
# run pubs with the same number of shots at once
|
173
|
+
pub_results = self._run_pubs([pubs[i] for i in lst], shots)
|
174
|
+
# reconstruct the result of pubs
|
175
|
+
for i, pub_result in zip(lst, pub_results):
|
176
|
+
results[i] = pub_result
|
177
|
+
return PrimitiveResult(results, metadata={"version": 2})
|
178
|
+
|
179
|
+
def _run_pubs(self, pubs: list[SamplerPub], shots: int) -> list[SamplerPubResult]:
|
180
|
+
"""Compute results for pubs that all require the same value of ``shots``."""
|
181
|
+
# prepare circuits
|
182
|
+
bound_circuits = [pub.parameter_values.bind_all(pub.circuit) for pub in pubs]
|
183
|
+
flatten_circuits = []
|
184
|
+
for circuits in bound_circuits:
|
185
|
+
flatten_circuits.extend(np.ravel(circuits).tolist())
|
186
|
+
|
187
|
+
run_opts = self._options.run_options or {}
|
188
|
+
# run circuits
|
189
|
+
results, _ = _run_circuits(
|
190
|
+
flatten_circuits,
|
191
|
+
self._backend,
|
192
|
+
clear_metadata=False,
|
193
|
+
memory=True,
|
194
|
+
shots=shots,
|
195
|
+
seed_simulator=self._options.seed_simulator,
|
196
|
+
**run_opts,
|
197
|
+
)
|
198
|
+
result_memory = _prepare_memory(results)
|
199
|
+
|
200
|
+
# pack memory to an ndarray of uint8
|
201
|
+
results = []
|
202
|
+
start = 0
|
203
|
+
meas_level = (
|
204
|
+
None
|
205
|
+
if self._options.run_options is None
|
206
|
+
else self._options.run_options.get("meas_level")
|
207
|
+
)
|
208
|
+
for pub, bound in zip(pubs, bound_circuits):
|
209
|
+
meas_info, max_num_bytes = _analyze_circuit(pub.circuit)
|
210
|
+
end = start + bound.size
|
211
|
+
results.append(
|
212
|
+
self._postprocess_pub(
|
213
|
+
result_memory[start:end],
|
214
|
+
shots,
|
215
|
+
bound.shape,
|
216
|
+
meas_info,
|
217
|
+
max_num_bytes,
|
218
|
+
pub.circuit.metadata,
|
219
|
+
meas_level,
|
220
|
+
)
|
221
|
+
)
|
222
|
+
start = end
|
223
|
+
|
224
|
+
return results
|
225
|
+
|
226
|
+
def _postprocess_pub(
|
227
|
+
self,
|
228
|
+
result_memory: list[ResultMemory],
|
229
|
+
shots: int,
|
230
|
+
shape: tuple[int, ...],
|
231
|
+
meas_info: list[_MeasureInfo],
|
232
|
+
max_num_bytes: int,
|
233
|
+
circuit_metadata: dict,
|
234
|
+
meas_level: int | None,
|
235
|
+
) -> SamplerPubResult:
|
236
|
+
"""Converts the memory data into a sampler pub result
|
237
|
+
|
238
|
+
For level 2 data, the memory data are stored in an array of bit arrays
|
239
|
+
with the shape of the pub. For level 1 data, the data are stored in a
|
240
|
+
complex numpy array.
|
241
|
+
"""
|
242
|
+
if meas_level == 2 or meas_level is None:
|
243
|
+
arrays = {
|
244
|
+
item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
|
245
|
+
for item in meas_info
|
246
|
+
}
|
247
|
+
memory_array = _memory_array(result_memory, max_num_bytes)
|
248
|
+
|
249
|
+
for samples, index in zip(memory_array, np.ndindex(*shape)):
|
250
|
+
for item in meas_info:
|
251
|
+
ary = _samples_to_packed_array(samples, item.num_bits, item.start)
|
252
|
+
arrays[item.creg_name][index] = ary
|
253
|
+
|
254
|
+
meas = {
|
255
|
+
item.creg_name: BitArray(arrays[item.creg_name], item.num_bits)
|
256
|
+
for item in meas_info
|
257
|
+
}
|
258
|
+
elif meas_level == 1:
|
259
|
+
raw = np.array(result_memory)
|
260
|
+
cplx = raw[..., 0] + 1j * raw[..., 1]
|
261
|
+
cplx = np.reshape(cplx, (*shape, *cplx.shape[1:]))
|
262
|
+
meas = {item.creg_name: cplx for item in meas_info}
|
263
|
+
else:
|
264
|
+
raise QiskitError(f"Unsupported meas_level: {meas_level}")
|
265
|
+
return SamplerPubResult(
|
266
|
+
DataBin(**meas, shape=shape),
|
267
|
+
metadata={"shots": shots, "circuit_metadata": circuit_metadata},
|
268
|
+
)
|
269
|
+
|
270
|
+
|
271
|
+
def _analyze_circuit(circuit: QuantumCircuit) -> tuple[list[_MeasureInfo], int]:
|
272
|
+
"""Analyzes the information for each creg in a circuit."""
|
273
|
+
meas_info = []
|
274
|
+
max_num_bits = 0
|
275
|
+
for creg in circuit.cregs:
|
276
|
+
name = creg.name
|
277
|
+
num_bits = creg.size
|
278
|
+
if num_bits != 0:
|
279
|
+
start = circuit.find_bit(creg[0]).index
|
280
|
+
else:
|
281
|
+
start = 0
|
282
|
+
meas_info.append(
|
283
|
+
_MeasureInfo(
|
284
|
+
creg_name=name,
|
285
|
+
num_bits=num_bits,
|
286
|
+
num_bytes=_min_num_bytes(num_bits),
|
287
|
+
start=start,
|
288
|
+
)
|
289
|
+
)
|
290
|
+
max_num_bits = max(max_num_bits, start + num_bits)
|
291
|
+
return meas_info, _min_num_bytes(max_num_bits)
|
292
|
+
|
293
|
+
|
294
|
+
def _prepare_memory(results: list[Result]) -> list[ResultMemory]:
|
295
|
+
"""Joins splitted results if exceeding max_experiments"""
|
296
|
+
lst = []
|
297
|
+
for res in results:
|
298
|
+
for exp in res.results:
|
299
|
+
if hasattr(exp.data, "memory") and exp.data.memory:
|
300
|
+
lst.append(exp.data.memory)
|
301
|
+
else:
|
302
|
+
# no measure in a circuit
|
303
|
+
lst.append(["0x0"] * exp.shots)
|
304
|
+
return lst
|
305
|
+
|
306
|
+
|
307
|
+
def _memory_array(results: list[list[str]], num_bytes: int) -> NDArray[np.uint8]:
|
308
|
+
"""Converts the memory data into an array in an unpacked way."""
|
309
|
+
lst = []
|
310
|
+
for memory in results:
|
311
|
+
if num_bytes > 0:
|
312
|
+
data = b"".join(int(i, 16).to_bytes(num_bytes, "big") for i in memory)
|
313
|
+
data = np.frombuffer(data, dtype=np.uint8).reshape(-1, num_bytes)
|
314
|
+
else:
|
315
|
+
# no measure in a circuit
|
316
|
+
data = np.zeros((len(memory), num_bytes), dtype=np.uint8)
|
317
|
+
lst.append(data)
|
318
|
+
ary = np.asarray(lst)
|
319
|
+
return np.unpackbits(ary, axis=-1, bitorder="big")
|
320
|
+
|
321
|
+
|
322
|
+
def _samples_to_packed_array(
|
323
|
+
samples: NDArray[np.uint8], num_bits: int, start: int
|
324
|
+
) -> NDArray[np.uint8]:
|
325
|
+
"""Converts an unpacked array of the memory data into a packed array."""
|
326
|
+
# samples of `Backend.run(memory=True)` will be the order of
|
327
|
+
# clbit_last, ..., clbit_1, clbit_0
|
328
|
+
# place samples in the order of clbit_start+num_bits-1, ..., clbit_start+1, clbit_start
|
329
|
+
if start == 0:
|
330
|
+
ary = samples[:, -start - num_bits :]
|
331
|
+
else:
|
332
|
+
ary = samples[:, -start - num_bits : -start]
|
333
|
+
# pad 0 in the left to align the number to be mod 8
|
334
|
+
# since np.packbits(bitorder='big') pads 0 to the right.
|
335
|
+
pad_size = -num_bits % 8
|
336
|
+
ary = np.pad(ary, ((0, 0), (pad_size, 0)), constant_values=0)
|
337
|
+
# pack bits in big endian order
|
338
|
+
ary = np.packbits(ary, axis=-1, bitorder="big")
|
339
|
+
return ary
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2022.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Abstract base classes for primitives module.
|
15
|
+
"""
|
16
|
+
|
17
|
+
from .base_sampler import BaseSampler, BaseSamplerV1, BaseSamplerV2
|
18
|
+
from .base_estimator import BaseEstimator, BaseEstimatorV1, BaseEstimatorV2
|
19
|
+
from .estimator_result import EstimatorResult
|
20
|
+
from .sampler_result import SamplerResult
|
@@ -0,0 +1,252 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2022, 2023, 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
|
+
"""Base Estimator V1 and V2 classes"""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from abc import abstractmethod, ABC
|
18
|
+
from collections.abc import Iterable, Sequence
|
19
|
+
from copy import copy
|
20
|
+
from typing import Generic, TypeVar
|
21
|
+
|
22
|
+
from qiskit.circuit import QuantumCircuit
|
23
|
+
from qiskit.providers import JobV1 as Job
|
24
|
+
from qiskit.quantum_info.operators import SparsePauliOp
|
25
|
+
from qiskit.quantum_info.operators.base_operator import BaseOperator
|
26
|
+
from qiskit.utils.deprecation import deprecate_func
|
27
|
+
|
28
|
+
from ..containers import (
|
29
|
+
DataBin,
|
30
|
+
EstimatorPubLike,
|
31
|
+
PrimitiveResult,
|
32
|
+
PubResult,
|
33
|
+
)
|
34
|
+
from ..containers.estimator_pub import EstimatorPub
|
35
|
+
from . import validation
|
36
|
+
from .base_primitive import BasePrimitive
|
37
|
+
from .base_primitive_job import BasePrimitiveJob
|
38
|
+
|
39
|
+
T = TypeVar("T", bound=Job)
|
40
|
+
|
41
|
+
|
42
|
+
class BaseEstimatorV1(BasePrimitive, Generic[T]):
|
43
|
+
r"""Estimator V1 base class.
|
44
|
+
|
45
|
+
Base class for Estimator that estimates expectation values of quantum circuits and observables.
|
46
|
+
|
47
|
+
An estimator is initialized with an empty parameter set. The estimator is used to
|
48
|
+
create a :class:`~qiskit.providers.JobV1`, via the
|
49
|
+
:meth:`qiskit.primitives.Estimator.run()` method. This method is called
|
50
|
+
with the following parameters
|
51
|
+
|
52
|
+
* quantum circuits (:math:`\psi_i(\theta)`): list of (parameterized) quantum circuits
|
53
|
+
(a list of :class:`~qiskit.circuit.QuantumCircuit` objects).
|
54
|
+
|
55
|
+
* observables (:math:`H_j`): a list of :class:`~qiskit.quantum_info.SparsePauliOp`
|
56
|
+
objects.
|
57
|
+
|
58
|
+
* parameter values (:math:`\theta_k`): list of sets of values
|
59
|
+
to be bound to the parameters of the quantum circuits
|
60
|
+
(list of list of float).
|
61
|
+
|
62
|
+
The method returns a :class:`~qiskit.providers.JobV1` object, calling
|
63
|
+
:meth:`qiskit.providers.JobV1.result()` yields the
|
64
|
+
a list of expectation values plus optional metadata like confidence intervals for
|
65
|
+
the estimation.
|
66
|
+
|
67
|
+
.. math::
|
68
|
+
|
69
|
+
\langle\psi_i(\theta_k)|H_j|\psi_i(\theta_k)\rangle
|
70
|
+
|
71
|
+
Here is an example of how the estimator is used.
|
72
|
+
|
73
|
+
.. code-block:: python
|
74
|
+
|
75
|
+
from qiskit.primitives import Estimator
|
76
|
+
from qiskit.circuit.library import RealAmplitudes
|
77
|
+
from qiskit.quantum_info import SparsePauliOp
|
78
|
+
|
79
|
+
psi1 = RealAmplitudes(num_qubits=2, reps=2)
|
80
|
+
psi2 = RealAmplitudes(num_qubits=2, reps=3)
|
81
|
+
|
82
|
+
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
|
83
|
+
H2 = SparsePauliOp.from_list([("IZ", 1)])
|
84
|
+
H3 = SparsePauliOp.from_list([("ZI", 1), ("ZZ", 1)])
|
85
|
+
|
86
|
+
theta1 = [0, 1, 1, 2, 3, 5]
|
87
|
+
theta2 = [0, 1, 1, 2, 3, 5, 8, 13]
|
88
|
+
theta3 = [1, 2, 3, 4, 5, 6]
|
89
|
+
|
90
|
+
estimator = Estimator()
|
91
|
+
|
92
|
+
# calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
|
93
|
+
job = estimator.run([psi1], [H1], [theta1])
|
94
|
+
job_result = job.result() # It will block until the job finishes.
|
95
|
+
print(f"The primitive-job finished with result {job_result}")
|
96
|
+
|
97
|
+
# calculate [ <psi1(theta1)|H1|psi1(theta1)>,
|
98
|
+
# <psi2(theta2)|H2|psi2(theta2)>,
|
99
|
+
# <psi1(theta3)|H3|psi1(theta3)> ]
|
100
|
+
job2 = estimator.run([psi1, psi2, psi1], [H1, H2, H3], [theta1, theta2, theta3])
|
101
|
+
job_result = job2.result()
|
102
|
+
print(f"The primitive-job finished with result {job_result}")
|
103
|
+
"""
|
104
|
+
|
105
|
+
__hash__ = None
|
106
|
+
|
107
|
+
def __init__(
|
108
|
+
self,
|
109
|
+
*,
|
110
|
+
options: dict | None = None,
|
111
|
+
):
|
112
|
+
"""
|
113
|
+
Creating an instance of an Estimator V1, or using one in a ``with`` context opens a session that
|
114
|
+
holds resources until the instance is ``close()`` ed or the context is exited.
|
115
|
+
|
116
|
+
Args:
|
117
|
+
options: Default options.
|
118
|
+
"""
|
119
|
+
super().__init__(options)
|
120
|
+
|
121
|
+
def run(
|
122
|
+
self,
|
123
|
+
circuits: Sequence[QuantumCircuit] | QuantumCircuit,
|
124
|
+
observables: Sequence[BaseOperator | str] | BaseOperator | str,
|
125
|
+
parameter_values: Sequence[Sequence[float]] | Sequence[float] | float | None = None,
|
126
|
+
**run_options,
|
127
|
+
) -> T:
|
128
|
+
"""Run the job of the estimation of expectation value(s).
|
129
|
+
|
130
|
+
``circuits``, ``observables``, and ``parameter_values`` should have the same
|
131
|
+
length. The i-th element of the result is the expectation of observable
|
132
|
+
|
133
|
+
.. code-block:: python
|
134
|
+
|
135
|
+
obs = observables[i]
|
136
|
+
|
137
|
+
for the state prepared by
|
138
|
+
|
139
|
+
.. code-block:: python
|
140
|
+
|
141
|
+
circ = circuits[i]
|
142
|
+
|
143
|
+
with bound parameters
|
144
|
+
|
145
|
+
.. code-block:: python
|
146
|
+
|
147
|
+
values = parameter_values[i]
|
148
|
+
|
149
|
+
Args:
|
150
|
+
circuits: one or more circuit objects.
|
151
|
+
observables: one or more observable objects. Several formats are allowed;
|
152
|
+
importantly, ``str`` should follow the string representation format for
|
153
|
+
:class:`~qiskit.quantum_info.Pauli` objects.
|
154
|
+
parameter_values: concrete parameters to be bound.
|
155
|
+
run_options: runtime options used for circuit execution.
|
156
|
+
|
157
|
+
Returns:
|
158
|
+
The job object of EstimatorResult.
|
159
|
+
|
160
|
+
Raises:
|
161
|
+
TypeError: Invalid argument type given.
|
162
|
+
ValueError: Invalid argument values given.
|
163
|
+
"""
|
164
|
+
# Validation
|
165
|
+
circuits, observables, parameter_values = validation._validate_estimator_args(
|
166
|
+
circuits, observables, parameter_values
|
167
|
+
)
|
168
|
+
|
169
|
+
# Options
|
170
|
+
run_opts = copy(self.options)
|
171
|
+
run_opts.update_options(**run_options)
|
172
|
+
|
173
|
+
return self._run(
|
174
|
+
circuits,
|
175
|
+
observables,
|
176
|
+
parameter_values,
|
177
|
+
**run_opts.__dict__,
|
178
|
+
)
|
179
|
+
|
180
|
+
@abstractmethod
|
181
|
+
def _run(
|
182
|
+
self,
|
183
|
+
circuits: tuple[QuantumCircuit, ...],
|
184
|
+
observables: tuple[SparsePauliOp, ...],
|
185
|
+
parameter_values: tuple[tuple[float, ...], ...],
|
186
|
+
**run_options,
|
187
|
+
) -> T:
|
188
|
+
raise NotImplementedError("The subclass of BaseEstimator must implement `_run` method.")
|
189
|
+
|
190
|
+
|
191
|
+
class BaseEstimator(BaseEstimatorV1[T]):
|
192
|
+
"""DEPRECATED. Type alias for Estimator V1 base class.
|
193
|
+
|
194
|
+
See :class:`.BaseEstimatorV1` for details.
|
195
|
+
"""
|
196
|
+
|
197
|
+
@deprecate_func(
|
198
|
+
since="1.2",
|
199
|
+
additional_msg="The `BaseEstimator` class is a type alias for the `BaseEstimatorV1` "
|
200
|
+
"interface that has been deprecated in favor of explicitly versioned interface classes. "
|
201
|
+
"It is recommended to migrate all implementations to use `BaseEstimatorV2`. "
|
202
|
+
"However, for implementations incompatible with `BaseEstimatorV2`, `BaseEstimator` can "
|
203
|
+
"be replaced with the explicitly versioned `BaseEstimatorV1` class.",
|
204
|
+
)
|
205
|
+
def __init__(
|
206
|
+
self,
|
207
|
+
*,
|
208
|
+
options: dict | None = None,
|
209
|
+
):
|
210
|
+
"""
|
211
|
+
Creating an instance of an Estimator, or using one in a ``with`` context opens a session that
|
212
|
+
holds resources until the instance is ``close()`` ed or the context is exited.
|
213
|
+
|
214
|
+
Args:
|
215
|
+
options: Default options.
|
216
|
+
"""
|
217
|
+
super().__init__(options=options)
|
218
|
+
|
219
|
+
|
220
|
+
class BaseEstimatorV2(ABC):
|
221
|
+
r"""Estimator V2 base class.
|
222
|
+
|
223
|
+
An estimator estimates expectation values for provided quantum circuit and
|
224
|
+
observable combinations.
|
225
|
+
|
226
|
+
An Estimator implementation must treat the :meth:`.run` method ``precision=None``
|
227
|
+
kwarg as using a default ``precision`` value. The default value and methods to
|
228
|
+
set it can be determined by the Estimator implementor.
|
229
|
+
"""
|
230
|
+
|
231
|
+
@staticmethod
|
232
|
+
def _make_data_bin(_: EstimatorPub) -> type[DataBin]:
|
233
|
+
# this method is present for backwards compat. new primitive implementations
|
234
|
+
# should avoid it.
|
235
|
+
return DataBin
|
236
|
+
|
237
|
+
@abstractmethod
|
238
|
+
def run(
|
239
|
+
self, pubs: Iterable[EstimatorPubLike], *, precision: float | None = None
|
240
|
+
) -> BasePrimitiveJob[PrimitiveResult[PubResult]]:
|
241
|
+
"""Estimate expectation values for each provided pub (Primitive Unified Bloc).
|
242
|
+
|
243
|
+
Args:
|
244
|
+
pubs: An iterable of pub-like objects, such as tuples ``(circuit, observables)``
|
245
|
+
or ``(circuit, observables, parameter_values)``.
|
246
|
+
precision: The target precision for expectation value estimates of each
|
247
|
+
run Estimator Pub that does not specify its own precision. If None
|
248
|
+
the estimator's default precision value will be used.
|
249
|
+
|
250
|
+
Returns:
|
251
|
+
A job object that contains results.
|
252
|
+
"""
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2022.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Primitive V1 abstract base class."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from abc import ABC
|
18
|
+
|
19
|
+
from qiskit.providers import Options
|
20
|
+
|
21
|
+
|
22
|
+
class BasePrimitive(ABC):
|
23
|
+
"""Primitive V1 abstract base class."""
|
24
|
+
|
25
|
+
def __init__(self, options: dict | None = None):
|
26
|
+
self._run_options = Options()
|
27
|
+
if options is not None:
|
28
|
+
self._run_options.update_options(**options)
|
29
|
+
|
30
|
+
@property
|
31
|
+
def options(self) -> Options:
|
32
|
+
"""Return options values for the estimator.
|
33
|
+
|
34
|
+
Returns:
|
35
|
+
options
|
36
|
+
"""
|
37
|
+
return self._run_options
|
38
|
+
|
39
|
+
def set_options(self, **fields):
|
40
|
+
"""Set options values for the estimator.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
**fields: The fields to update the options
|
44
|
+
"""
|
45
|
+
self._run_options.update_options(**fields)
|