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,78 @@
|
|
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
|
+
Primitive job abstract base class
|
14
|
+
"""
|
15
|
+
|
16
|
+
from abc import ABC, abstractmethod
|
17
|
+
from typing import Generic, TypeVar, Union
|
18
|
+
|
19
|
+
from ..containers import PrimitiveResult
|
20
|
+
from .base_result import _BasePrimitiveResult
|
21
|
+
|
22
|
+
ResultT = TypeVar("ResultT", bound=Union[_BasePrimitiveResult, PrimitiveResult])
|
23
|
+
StatusT = TypeVar("StatusT")
|
24
|
+
|
25
|
+
|
26
|
+
class BasePrimitiveJob(ABC, Generic[ResultT, StatusT]):
|
27
|
+
"""Primitive job abstract base class."""
|
28
|
+
|
29
|
+
def __init__(self, job_id: str, **kwargs) -> None:
|
30
|
+
"""Initializes the primitive job.
|
31
|
+
|
32
|
+
Args:
|
33
|
+
job_id: A unique id in the context of the primitive used to run the job.
|
34
|
+
kwargs: Any key value metadata to associate with this job.
|
35
|
+
"""
|
36
|
+
self._job_id = job_id
|
37
|
+
self.metadata = kwargs
|
38
|
+
|
39
|
+
def job_id(self) -> str:
|
40
|
+
"""Return a unique id identifying the job."""
|
41
|
+
return self._job_id
|
42
|
+
|
43
|
+
@abstractmethod
|
44
|
+
def result(self) -> ResultT:
|
45
|
+
"""Return the results of the job."""
|
46
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `result` method.")
|
47
|
+
|
48
|
+
@abstractmethod
|
49
|
+
def status(self) -> StatusT:
|
50
|
+
"""Return the status of the job."""
|
51
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `status` method.")
|
52
|
+
|
53
|
+
@abstractmethod
|
54
|
+
def done(self) -> bool:
|
55
|
+
"""Return whether the job has successfully run."""
|
56
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `done` method.")
|
57
|
+
|
58
|
+
@abstractmethod
|
59
|
+
def running(self) -> bool:
|
60
|
+
"""Return whether the job is actively running."""
|
61
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `running` method.")
|
62
|
+
|
63
|
+
@abstractmethod
|
64
|
+
def cancelled(self) -> bool:
|
65
|
+
"""Return whether the job has been cancelled."""
|
66
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `cancelled` method.")
|
67
|
+
|
68
|
+
@abstractmethod
|
69
|
+
def in_final_state(self) -> bool:
|
70
|
+
"""Return whether the job is in a final job state such as ``DONE`` or ``ERROR``."""
|
71
|
+
raise NotImplementedError(
|
72
|
+
"Subclass of BasePrimitiveJob must implement `is_final_state` method."
|
73
|
+
)
|
74
|
+
|
75
|
+
@abstractmethod
|
76
|
+
def cancel(self):
|
77
|
+
"""Attempt to cancel the job."""
|
78
|
+
raise NotImplementedError("Subclass of BasePrimitiveJob must implement `cancel` method.")
|
@@ -0,0 +1,65 @@
|
|
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 result abstract base class
|
14
|
+
"""
|
15
|
+
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from abc import ABC
|
19
|
+
from collections.abc import Sequence
|
20
|
+
from dataclasses import fields
|
21
|
+
from typing import Any, Dict
|
22
|
+
|
23
|
+
from numpy import ndarray
|
24
|
+
|
25
|
+
ExperimentData = Dict[str, Any]
|
26
|
+
|
27
|
+
|
28
|
+
class _BasePrimitiveResult(ABC):
|
29
|
+
"""
|
30
|
+
Base class for deprecated Primitive V1 result methods.
|
31
|
+
"""
|
32
|
+
|
33
|
+
def __post_init__(self) -> None:
|
34
|
+
"""
|
35
|
+
Verify that all fields in any inheriting result dataclass are consistent, after
|
36
|
+
instantiation, with the number of experiments being represented.
|
37
|
+
|
38
|
+
This magic method is specific of `dataclasses.dataclass`, therefore all inheriting
|
39
|
+
classes must have this decorator.
|
40
|
+
|
41
|
+
Raises:
|
42
|
+
TypeError: If one of the data fields is not a Sequence or ``numpy.ndarray``.
|
43
|
+
ValueError: Inconsistent number of experiments across data fields.
|
44
|
+
"""
|
45
|
+
num_experiments = None
|
46
|
+
for value in self._field_values: # type: Sequence
|
47
|
+
if num_experiments is None:
|
48
|
+
num_experiments = len(value)
|
49
|
+
# TODO: enforce all data fields to be tuples instead of sequences
|
50
|
+
if not isinstance(value, (Sequence, ndarray)) or isinstance(value, (str, bytes)):
|
51
|
+
raise TypeError(
|
52
|
+
f"Expected sequence or `numpy.ndarray`, provided {type(value)} instead."
|
53
|
+
)
|
54
|
+
if len(value) != num_experiments:
|
55
|
+
raise ValueError("Inconsistent number of experiments across data fields.")
|
56
|
+
|
57
|
+
@property # TODO: functools.cached_property when py37 is dropped
|
58
|
+
def _field_names(self) -> tuple[str, ...]:
|
59
|
+
"""Tuple of field names in any inheriting result dataclass."""
|
60
|
+
return tuple(field.name for field in fields(self))
|
61
|
+
|
62
|
+
@property # TODO: functools.cached_property when py37 is dropped
|
63
|
+
def _field_values(self) -> tuple:
|
64
|
+
"""Tuple of field values in any inheriting result dataclass."""
|
65
|
+
return tuple(getattr(self, name) for name in self._field_names)
|
@@ -0,0 +1,204 @@
|
|
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
|
+
"""Base Sampler V1 and V2 classes"""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from abc import ABC, abstractmethod
|
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.utils.deprecation import deprecate_func
|
25
|
+
|
26
|
+
from ..containers.primitive_result import PrimitiveResult
|
27
|
+
from ..containers.sampler_pub import SamplerPubLike
|
28
|
+
from ..containers.sampler_pub_result import SamplerPubResult
|
29
|
+
from . import validation
|
30
|
+
from .base_primitive import BasePrimitive
|
31
|
+
from .base_primitive_job import BasePrimitiveJob
|
32
|
+
|
33
|
+
T = TypeVar("T", bound=Job)
|
34
|
+
|
35
|
+
|
36
|
+
class BaseSamplerV1(BasePrimitive, Generic[T]):
|
37
|
+
r"""Sampler V1 base class
|
38
|
+
|
39
|
+
Base class of Sampler that calculates quasi-probabilities of bitstrings from quantum circuits.
|
40
|
+
|
41
|
+
A sampler is initialized with an empty parameter set. The sampler is used to
|
42
|
+
create a :class:`~qiskit.providers.JobV1`, via the :meth:`qiskit.primitives.Sampler.run()`
|
43
|
+
method. This method is called with the following parameters
|
44
|
+
|
45
|
+
* quantum circuits (:math:`\psi_i(\theta)`): list of (parameterized) quantum circuits.
|
46
|
+
(a list of :class:`~qiskit.circuit.QuantumCircuit` objects)
|
47
|
+
|
48
|
+
* parameter values (:math:`\theta_k`): list of sets of parameter values
|
49
|
+
to be bound to the parameters of the quantum circuits.
|
50
|
+
(list of list of float)
|
51
|
+
|
52
|
+
The method returns a :class:`~qiskit.providers.JobV1` object, calling
|
53
|
+
:meth:`qiskit.providers.JobV1.result()` yields a :class:`~qiskit.primitives.SamplerResult`
|
54
|
+
object, which contains probabilities or quasi-probabilities of bitstrings,
|
55
|
+
plus optional metadata like error bars in the samples.
|
56
|
+
|
57
|
+
Here is an example of how sampler is used.
|
58
|
+
|
59
|
+
.. code-block:: python
|
60
|
+
|
61
|
+
from qiskit.primitives import Sampler
|
62
|
+
from qiskit import QuantumCircuit
|
63
|
+
from qiskit.circuit.library import RealAmplitudes
|
64
|
+
|
65
|
+
# a Bell circuit
|
66
|
+
bell = QuantumCircuit(2)
|
67
|
+
bell.h(0)
|
68
|
+
bell.cx(0, 1)
|
69
|
+
bell.measure_all()
|
70
|
+
|
71
|
+
# two parameterized circuits
|
72
|
+
pqc = RealAmplitudes(num_qubits=2, reps=2)
|
73
|
+
pqc.measure_all()
|
74
|
+
pqc2 = RealAmplitudes(num_qubits=2, reps=3)
|
75
|
+
pqc2.measure_all()
|
76
|
+
|
77
|
+
theta1 = [0, 1, 1, 2, 3, 5]
|
78
|
+
theta2 = [0, 1, 2, 3, 4, 5, 6, 7]
|
79
|
+
|
80
|
+
# initialization of the sampler
|
81
|
+
sampler = Sampler()
|
82
|
+
|
83
|
+
# Sampler runs a job on the Bell circuit
|
84
|
+
job = sampler.run(circuits=[bell], parameter_values=[[]], parameters=[[]])
|
85
|
+
job_result = job.result()
|
86
|
+
print([q.binary_probabilities() for q in job_result.quasi_dists])
|
87
|
+
|
88
|
+
# Sampler runs a job on the parameterized circuits
|
89
|
+
job2 = sampler.run(
|
90
|
+
circuits=[pqc, pqc2],
|
91
|
+
parameter_values=[theta1, theta2],
|
92
|
+
parameters=[pqc.parameters, pqc2.parameters])
|
93
|
+
job_result = job2.result()
|
94
|
+
print([q.binary_probabilities() for q in job_result.quasi_dists])
|
95
|
+
|
96
|
+
"""
|
97
|
+
|
98
|
+
__hash__ = None
|
99
|
+
|
100
|
+
def __init__(
|
101
|
+
self,
|
102
|
+
*,
|
103
|
+
options: dict | None = None,
|
104
|
+
):
|
105
|
+
"""
|
106
|
+
Args:
|
107
|
+
options: Default options.
|
108
|
+
"""
|
109
|
+
super().__init__(options)
|
110
|
+
|
111
|
+
def run(
|
112
|
+
self,
|
113
|
+
circuits: QuantumCircuit | Sequence[QuantumCircuit],
|
114
|
+
parameter_values: Sequence[float] | Sequence[Sequence[float]] | None = None,
|
115
|
+
**run_options,
|
116
|
+
) -> T:
|
117
|
+
"""Run the job of the sampling of bitstrings.
|
118
|
+
|
119
|
+
Args:
|
120
|
+
circuits: One of more circuit objects.
|
121
|
+
parameter_values: Parameters to be bound to the circuit.
|
122
|
+
run_options: Backend runtime options used for circuit execution.
|
123
|
+
|
124
|
+
Returns:
|
125
|
+
The job object of the result of the sampler. The i-th result corresponds to
|
126
|
+
``circuits[i]`` evaluated with parameters bound as ``parameter_values[i]``.
|
127
|
+
|
128
|
+
Raises:
|
129
|
+
ValueError: Invalid arguments are given.
|
130
|
+
"""
|
131
|
+
# Validation
|
132
|
+
circuits, parameter_values = validation._validate_sampler_args(circuits, parameter_values)
|
133
|
+
|
134
|
+
# Options
|
135
|
+
run_opts = copy(self.options)
|
136
|
+
run_opts.update_options(**run_options)
|
137
|
+
|
138
|
+
return self._run(
|
139
|
+
circuits,
|
140
|
+
parameter_values,
|
141
|
+
**run_opts.__dict__,
|
142
|
+
)
|
143
|
+
|
144
|
+
@abstractmethod
|
145
|
+
def _run(
|
146
|
+
self,
|
147
|
+
circuits: tuple[QuantumCircuit, ...],
|
148
|
+
parameter_values: tuple[tuple[float, ...], ...],
|
149
|
+
**run_options,
|
150
|
+
) -> T:
|
151
|
+
raise NotImplementedError("The subclass of BaseSampler must implement `_run` method.")
|
152
|
+
|
153
|
+
|
154
|
+
class BaseSampler(BaseSamplerV1[T]):
|
155
|
+
"""DEPRECATED. Type alias for Sampler V1 base class
|
156
|
+
|
157
|
+
See :class:`.BaseSamplerV1` for details.
|
158
|
+
"""
|
159
|
+
|
160
|
+
@deprecate_func(
|
161
|
+
since="1.2",
|
162
|
+
additional_msg="The `BaseSampler` class is a type alias for the `BaseSamplerV1` "
|
163
|
+
"interface that has been deprecated in favor of explicitly versioned interface classes. "
|
164
|
+
"It is recommended to migrate all implementations to use `BaseSamplerV2`. "
|
165
|
+
"However, for implementations incompatible with `BaseSamplerV2`, `BaseSampler` can "
|
166
|
+
"be replaced with the explicitly versioned `BaseSamplerV1` class.",
|
167
|
+
)
|
168
|
+
def __init__(
|
169
|
+
self,
|
170
|
+
*,
|
171
|
+
options: dict | None = None,
|
172
|
+
):
|
173
|
+
"""
|
174
|
+
Args:
|
175
|
+
options: Default options.
|
176
|
+
"""
|
177
|
+
super().__init__(options=options)
|
178
|
+
|
179
|
+
|
180
|
+
class BaseSamplerV2(ABC):
|
181
|
+
r"""Sampler V2 base class.
|
182
|
+
|
183
|
+
A Sampler returns samples of quantum circuit outputs.
|
184
|
+
|
185
|
+
All sampler implementations must implement default value for the ``shots`` in the
|
186
|
+
:meth:`.run` method if ``None`` is given both as a ``kwarg`` and in all of the pubs.
|
187
|
+
"""
|
188
|
+
|
189
|
+
@abstractmethod
|
190
|
+
def run(
|
191
|
+
self, pubs: Iterable[SamplerPubLike], *, shots: int | None = None
|
192
|
+
) -> BasePrimitiveJob[PrimitiveResult[SamplerPubResult]]:
|
193
|
+
"""Run and collect samples from each pub.
|
194
|
+
|
195
|
+
Args:
|
196
|
+
pubs: An iterable of pub-like objects. For example, a list of circuits
|
197
|
+
or tuples ``(circuit, parameter_values)``.
|
198
|
+
shots: The total number of shots to sample for each sampler pub that does
|
199
|
+
not specify its own shots. If ``None``, the primitive's default
|
200
|
+
shots value will be used, which can vary by implementation.
|
201
|
+
|
202
|
+
Returns:
|
203
|
+
The job object of Sampler's result.
|
204
|
+
"""
|
@@ -0,0 +1,46 @@
|
|
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
|
+
Estimator V1 result class
|
14
|
+
"""
|
15
|
+
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from dataclasses import dataclass
|
19
|
+
from typing import TYPE_CHECKING, Any
|
20
|
+
|
21
|
+
from .base_result import _BasePrimitiveResult
|
22
|
+
|
23
|
+
if TYPE_CHECKING:
|
24
|
+
import numpy as np
|
25
|
+
|
26
|
+
|
27
|
+
@dataclass(frozen=True)
|
28
|
+
class EstimatorResult(_BasePrimitiveResult):
|
29
|
+
"""Result of Estimator V1.
|
30
|
+
|
31
|
+
.. code-block:: python
|
32
|
+
|
33
|
+
result = estimator.run(circuits, observables, params).result()
|
34
|
+
|
35
|
+
where the i-th elements of ``result`` correspond to the circuit and observable given by
|
36
|
+
``circuits[i]``, ``observables[i]``, and the parameter values bounds by ``params[i]``.
|
37
|
+
For example, ``results.values[i]`` gives the expectation value, and ``result.metadata[i]``
|
38
|
+
is a metadata dictionary for this circuit and parameters.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
values (np.ndarray): The array of the expectation values.
|
42
|
+
metadata (list[dict]): List of the metadata.
|
43
|
+
"""
|
44
|
+
|
45
|
+
values: "np.ndarray[Any, np.dtype[np.float64]]"
|
46
|
+
metadata: list[dict[str, Any]]
|
@@ -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
|
+
Sampler V1 result class
|
14
|
+
"""
|
15
|
+
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from dataclasses import dataclass
|
19
|
+
from typing import Any
|
20
|
+
|
21
|
+
from qiskit.result import QuasiDistribution
|
22
|
+
|
23
|
+
from .base_result import _BasePrimitiveResult
|
24
|
+
|
25
|
+
|
26
|
+
@dataclass(frozen=True)
|
27
|
+
class SamplerResult(_BasePrimitiveResult):
|
28
|
+
"""Result of Sampler V1.
|
29
|
+
|
30
|
+
.. code-block:: python
|
31
|
+
|
32
|
+
result = sampler.run(circuits, params).result()
|
33
|
+
|
34
|
+
where the i-th elements of ``result`` correspond to the circuit given by ``circuits[i]``,
|
35
|
+
and the parameter values bounds by ``params[i]``.
|
36
|
+
For example, ``results.quasi_dists[i]`` gives the quasi-probabilities of bitstrings, and
|
37
|
+
``result.metadata[i]`` is a metadata dictionary for this circuit and parameters.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
quasi_dists (list[QuasiDistribution]): List of the quasi-probabilities.
|
41
|
+
metadata (list[dict]): List of the metadata.
|
42
|
+
"""
|
43
|
+
|
44
|
+
quasi_dists: list[QuasiDistribution]
|
45
|
+
metadata: list[dict[str, Any]]
|
@@ -0,0 +1,231 @@
|
|
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 validation methods.
|
14
|
+
|
15
|
+
Note that these are not intended to be part of the public API of base primitives
|
16
|
+
but are here for backwards compatibility with deprecated functions.
|
17
|
+
"""
|
18
|
+
|
19
|
+
from __future__ import annotations
|
20
|
+
|
21
|
+
from collections.abc import Sequence
|
22
|
+
import typing
|
23
|
+
import numpy as np
|
24
|
+
|
25
|
+
from qiskit.circuit import QuantumCircuit, ControlFlowOp, Measure
|
26
|
+
from qiskit.quantum_info.operators import SparsePauliOp
|
27
|
+
from qiskit.quantum_info.operators.base_operator import BaseOperator
|
28
|
+
|
29
|
+
from ..utils import init_observable
|
30
|
+
|
31
|
+
if typing.TYPE_CHECKING:
|
32
|
+
from qiskit.opflow import PauliSumOp
|
33
|
+
|
34
|
+
|
35
|
+
def _validate_estimator_args(
|
36
|
+
circuits: Sequence[QuantumCircuit] | QuantumCircuit,
|
37
|
+
observables: Sequence[BaseOperator | PauliSumOp | str] | BaseOperator | PauliSumOp | str,
|
38
|
+
parameter_values: Sequence[Sequence[float]] | Sequence[float] | float | None = None,
|
39
|
+
) -> tuple[tuple[QuantumCircuit], tuple[BaseOperator], tuple[tuple[float]]]:
|
40
|
+
"""Validate run arguments for a reference Estimator.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
circuits: one or more circuit objects.
|
44
|
+
observables: one or more observable objects.
|
45
|
+
parameter_values: concrete parameters to be bound.
|
46
|
+
|
47
|
+
Returns:
|
48
|
+
The formatted arguments ``(circuits, observables, parameter_values)``.
|
49
|
+
|
50
|
+
Raises:
|
51
|
+
TypeError: If input arguments are invalid types.
|
52
|
+
ValueError: if input arguments are invalid values.
|
53
|
+
"""
|
54
|
+
# Singular validation
|
55
|
+
circuits = _validate_circuits(circuits)
|
56
|
+
observables = _validate_observables(observables)
|
57
|
+
parameter_values = _validate_parameter_values(
|
58
|
+
parameter_values,
|
59
|
+
default=[()] * len(circuits),
|
60
|
+
)
|
61
|
+
|
62
|
+
# Cross-validation
|
63
|
+
_cross_validate_circuits_parameter_values(circuits, parameter_values)
|
64
|
+
_cross_validate_circuits_observables(circuits, observables)
|
65
|
+
|
66
|
+
return circuits, observables, parameter_values
|
67
|
+
|
68
|
+
|
69
|
+
def _validate_sampler_args(
|
70
|
+
circuits: Sequence[QuantumCircuit] | QuantumCircuit,
|
71
|
+
parameter_values: Sequence[Sequence[float]] | Sequence[float] | float | None = None,
|
72
|
+
) -> tuple[tuple[QuantumCircuit], tuple[BaseOperator], tuple[tuple[float]]]:
|
73
|
+
"""Validate run arguments for a reference Sampler.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
circuits: one or more circuit objects.
|
77
|
+
parameter_values: concrete parameters to be bound.
|
78
|
+
|
79
|
+
Returns:
|
80
|
+
The formatted arguments ``(circuits, parameter_values)``.
|
81
|
+
|
82
|
+
Raises:
|
83
|
+
TypeError: If input arguments are invalid types.
|
84
|
+
ValueError: if input arguments are invalid values.
|
85
|
+
"""
|
86
|
+
# Singular validation
|
87
|
+
circuits = _validate_circuits(circuits, requires_measure=True)
|
88
|
+
parameter_values = _validate_parameter_values(
|
89
|
+
parameter_values,
|
90
|
+
default=[()] * len(circuits),
|
91
|
+
)
|
92
|
+
|
93
|
+
# Cross-validation
|
94
|
+
_cross_validate_circuits_parameter_values(circuits, parameter_values)
|
95
|
+
|
96
|
+
return circuits, parameter_values
|
97
|
+
|
98
|
+
|
99
|
+
def _validate_circuits(
|
100
|
+
circuits: Sequence[QuantumCircuit] | QuantumCircuit,
|
101
|
+
requires_measure: bool = False,
|
102
|
+
) -> tuple[QuantumCircuit, ...]:
|
103
|
+
if isinstance(circuits, QuantumCircuit):
|
104
|
+
circuits = (circuits,)
|
105
|
+
elif not isinstance(circuits, Sequence) or not all(
|
106
|
+
isinstance(cir, QuantumCircuit) for cir in circuits
|
107
|
+
):
|
108
|
+
raise TypeError("Invalid circuits, expected Sequence[QuantumCircuit].")
|
109
|
+
elif not isinstance(circuits, tuple):
|
110
|
+
circuits = tuple(circuits)
|
111
|
+
if len(circuits) == 0:
|
112
|
+
raise ValueError("No circuits were provided.")
|
113
|
+
|
114
|
+
if requires_measure:
|
115
|
+
for i, circuit in enumerate(circuits):
|
116
|
+
if circuit.num_clbits == 0:
|
117
|
+
raise ValueError(
|
118
|
+
f"The {i}-th circuit does not have any classical bit. "
|
119
|
+
"Sampler requires classical bits, plus measurements "
|
120
|
+
"on the desired qubits."
|
121
|
+
)
|
122
|
+
if not _has_measure(circuit):
|
123
|
+
raise ValueError(
|
124
|
+
f"The {i}-th circuit does not have Measure instruction. "
|
125
|
+
"Without measurements, the circuit cannot be sampled from."
|
126
|
+
)
|
127
|
+
return circuits
|
128
|
+
|
129
|
+
|
130
|
+
def _validate_parameter_values(
|
131
|
+
parameter_values: Sequence[Sequence[float]] | Sequence[float] | float | None,
|
132
|
+
default: Sequence[Sequence[float]] | Sequence[float] | None = None,
|
133
|
+
) -> tuple[tuple[float, ...], ...]:
|
134
|
+
# Allow optional (if default)
|
135
|
+
if parameter_values is None:
|
136
|
+
if default is None:
|
137
|
+
raise ValueError("No default `parameter_values`, optional input disallowed.")
|
138
|
+
parameter_values = default
|
139
|
+
|
140
|
+
# Support numpy ndarray
|
141
|
+
if isinstance(parameter_values, np.ndarray):
|
142
|
+
parameter_values = parameter_values.tolist()
|
143
|
+
elif isinstance(parameter_values, Sequence):
|
144
|
+
parameter_values = tuple(
|
145
|
+
vector.tolist() if isinstance(vector, np.ndarray) else vector
|
146
|
+
for vector in parameter_values
|
147
|
+
)
|
148
|
+
|
149
|
+
# Allow single value
|
150
|
+
if _isreal(parameter_values):
|
151
|
+
parameter_values = ((parameter_values,),)
|
152
|
+
elif isinstance(parameter_values, Sequence) and not any(
|
153
|
+
isinstance(vector, Sequence) for vector in parameter_values
|
154
|
+
):
|
155
|
+
parameter_values = (parameter_values,)
|
156
|
+
|
157
|
+
# Validation
|
158
|
+
if (
|
159
|
+
not isinstance(parameter_values, Sequence)
|
160
|
+
or not all(isinstance(vector, Sequence) for vector in parameter_values)
|
161
|
+
or not all(all(_isreal(value) for value in vector) for vector in parameter_values)
|
162
|
+
):
|
163
|
+
raise TypeError("Invalid parameter values, expected Sequence[Sequence[float]].")
|
164
|
+
|
165
|
+
return tuple(tuple(float(value) for value in vector) for vector in parameter_values)
|
166
|
+
|
167
|
+
|
168
|
+
def _validate_observables(
|
169
|
+
observables: Sequence[BaseOperator | PauliSumOp | str] | BaseOperator | PauliSumOp | str,
|
170
|
+
) -> tuple[SparsePauliOp, ...]:
|
171
|
+
if isinstance(observables, str) or not isinstance(observables, Sequence):
|
172
|
+
observables = (observables,)
|
173
|
+
if len(observables) == 0:
|
174
|
+
raise ValueError("No observables were provided.")
|
175
|
+
return tuple(init_observable(obs) for obs in observables)
|
176
|
+
|
177
|
+
|
178
|
+
def _cross_validate_circuits_parameter_values(
|
179
|
+
circuits: tuple[QuantumCircuit, ...], parameter_values: tuple[tuple[float, ...], ...]
|
180
|
+
) -> None:
|
181
|
+
if len(circuits) != len(parameter_values):
|
182
|
+
raise ValueError(
|
183
|
+
f"The number of circuits ({len(circuits)}) does not match "
|
184
|
+
f"the number of parameter value sets ({len(parameter_values)})."
|
185
|
+
)
|
186
|
+
for i, (circuit, vector) in enumerate(zip(circuits, parameter_values)):
|
187
|
+
if len(vector) != circuit.num_parameters:
|
188
|
+
raise ValueError(
|
189
|
+
f"The number of values ({len(vector)}) does not match "
|
190
|
+
f"the number of parameters ({circuit.num_parameters}) for the {i}-th circuit."
|
191
|
+
)
|
192
|
+
|
193
|
+
|
194
|
+
def _cross_validate_circuits_observables(
|
195
|
+
circuits: tuple[QuantumCircuit, ...], observables: tuple[BaseOperator | PauliSumOp, ...]
|
196
|
+
) -> None:
|
197
|
+
if len(circuits) != len(observables):
|
198
|
+
raise ValueError(
|
199
|
+
f"The number of circuits ({len(circuits)}) does not match "
|
200
|
+
f"the number of observables ({len(observables)})."
|
201
|
+
)
|
202
|
+
for i, (circuit, observable) in enumerate(zip(circuits, observables)):
|
203
|
+
if circuit.num_qubits != observable.num_qubits:
|
204
|
+
raise ValueError(
|
205
|
+
f"The number of qubits of the {i}-th circuit ({circuit.num_qubits}) does "
|
206
|
+
f"not match the number of qubits of the {i}-th observable "
|
207
|
+
f"({observable.num_qubits})."
|
208
|
+
)
|
209
|
+
|
210
|
+
|
211
|
+
def _isint(obj: Sequence[Sequence[float]] | Sequence[float] | float) -> bool:
|
212
|
+
"""Check if object is int."""
|
213
|
+
int_types = (int, np.integer)
|
214
|
+
return isinstance(obj, int_types) and not isinstance(obj, bool)
|
215
|
+
|
216
|
+
|
217
|
+
def _isreal(obj: Sequence[Sequence[float]] | Sequence[float] | float) -> bool:
|
218
|
+
"""Check if object is a real number: int or float except ``±Inf`` and ``NaN``."""
|
219
|
+
float_types = (float, np.floating)
|
220
|
+
return _isint(obj) or isinstance(obj, float_types) and float("-Inf") < obj < float("Inf")
|
221
|
+
|
222
|
+
|
223
|
+
def _has_measure(circuit: QuantumCircuit) -> bool:
|
224
|
+
for instruction in reversed(circuit):
|
225
|
+
if isinstance(instruction.operation, Measure):
|
226
|
+
return True
|
227
|
+
elif isinstance(instruction.operation, ControlFlowOp):
|
228
|
+
for block in instruction.operation.blocks:
|
229
|
+
if _has_measure(block):
|
230
|
+
return True
|
231
|
+
return False
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 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
|
+
Data containers for primitives.
|
15
|
+
"""
|
16
|
+
|
17
|
+
|
18
|
+
from .bindings_array import BindingsArrayLike
|
19
|
+
from .bit_array import BitArray
|
20
|
+
from .data_bin import DataBin, make_data_bin
|
21
|
+
from .estimator_pub import EstimatorPubLike
|
22
|
+
from .observables_array import ObservableLike, ObservablesArrayLike
|
23
|
+
from .primitive_result import PrimitiveResult
|
24
|
+
from .pub_result import PubResult
|
25
|
+
from .sampler_pub import SamplerPubLike
|
26
|
+
from .sampler_pub_result import SamplerPubResult
|