qiskit 1.3.0__cp39-abi3-macosx_11_0_arm64.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.abi3.so +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,347 @@
|
|
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
|
+
.. currentmodule:: qiskit.utils.optionals
|
15
|
+
|
16
|
+
Qiskit has several features that are enabled only if certain *optional* dependencies
|
17
|
+
are satisfied. This module, :mod:`qiskit.utils.optionals`, has a collection of objects that can
|
18
|
+
be used to test if certain functionality is available, and optionally raise
|
19
|
+
:class:`.MissingOptionalLibraryError` if the functionality is not available.
|
20
|
+
|
21
|
+
|
22
|
+
Available Testers
|
23
|
+
=================
|
24
|
+
|
25
|
+
Qiskit Components
|
26
|
+
-----------------
|
27
|
+
|
28
|
+
.. py:data:: HAS_AER
|
29
|
+
|
30
|
+
`Qiskit Aer <https://qiskit.github.io/qiskit-aer/>` provides high-performance simulators for
|
31
|
+
the quantum circuits constructed within Qiskit.
|
32
|
+
|
33
|
+
.. py:data:: HAS_IBMQ
|
34
|
+
|
35
|
+
The :mod:`Qiskit IBMQ Provider <qiskit.providers.ibmq>` is used for accessing IBM Quantum
|
36
|
+
hardware in the IBM cloud.
|
37
|
+
|
38
|
+
.. py:data:: HAS_IGNIS
|
39
|
+
|
40
|
+
:mod:`Qiskit Ignis <qiskit.ignis>` provides tools for quantum hardware verification, noise
|
41
|
+
characterization, and error correction.
|
42
|
+
|
43
|
+
.. py:data:: HAS_TOQM
|
44
|
+
|
45
|
+
`Qiskit TOQM <https://github.com/qiskit-toqm/qiskit-toqm>`__ provides transpiler passes
|
46
|
+
for the `Time-optimal Qubit mapping algorithm <https://doi.org/10.1145/3445814.3446706>`__.
|
47
|
+
|
48
|
+
|
49
|
+
External Python Libraries
|
50
|
+
-------------------------
|
51
|
+
|
52
|
+
.. py:data:: HAS_CONSTRAINT
|
53
|
+
|
54
|
+
`python-constraint <https://github.com/python-constraint/python-constraint>`__ is a
|
55
|
+
constraint satisfaction problem solver, used in the :class:`~.CSPLayout` transpiler pass.
|
56
|
+
|
57
|
+
.. py:data:: HAS_CPLEX
|
58
|
+
|
59
|
+
The `IBM CPLEX Optimizer <https://www.ibm.com/analytics/cplex-optimizer>`__ is a
|
60
|
+
high-performance mathematical programming solver for linear, mixed-integer and quadratic
|
61
|
+
programming. This is no longer by Qiskit, but it weas historically and the optional
|
62
|
+
remains for backwards compatibility.
|
63
|
+
|
64
|
+
.. py:data:: HAS_CVXPY
|
65
|
+
|
66
|
+
`CVXPY <https://www.cvxpy.org/>`__ is a Python package for solving convex optimization
|
67
|
+
problems. It is required for calculating diamond norms with
|
68
|
+
:func:`.quantum_info.diamond_norm`.
|
69
|
+
|
70
|
+
.. py:data:: HAS_DOCPLEX
|
71
|
+
|
72
|
+
`IBM Decision Optimization CPLEX Modelling
|
73
|
+
<http://ibmdecisionoptimization.github.io/docplex-doc/>`__ is a library for prescriptive
|
74
|
+
analysis. Like CPLEX, this is no longer by Qiskit, but it weas historically and the
|
75
|
+
optional remains for backwards compatibility.
|
76
|
+
|
77
|
+
.. py:data:: HAS_FIXTURES
|
78
|
+
|
79
|
+
The test suite has additional features that are available if the optional `fixtures
|
80
|
+
<https://launchpad.net/python-fixtures>`__ module is installed. This generally also needs
|
81
|
+
:data:`HAS_TESTTOOLS` as well. This is generally only needed for Qiskit developers.
|
82
|
+
|
83
|
+
.. py:data:: HAS_IPYTHON
|
84
|
+
|
85
|
+
If `the IPython kernel <https://ipython.org/>`__ is available, certain additional
|
86
|
+
visualizations and line magics are made available.
|
87
|
+
|
88
|
+
.. py:data:: HAS_IPYWIDGETS
|
89
|
+
|
90
|
+
Monitoring widgets for jobs running on external backends can be provided if `ipywidgets
|
91
|
+
<https://ipywidgets.readthedocs.io/en/latest/>`__ is available.
|
92
|
+
|
93
|
+
.. py:data:: HAS_JAX
|
94
|
+
|
95
|
+
Some methods of gradient calculation within :mod:`.opflow.gradients` require `JAX
|
96
|
+
<https://github.com/google/jax>`__ for autodifferentiation.
|
97
|
+
|
98
|
+
.. py:data:: HAS_JUPYTER
|
99
|
+
|
100
|
+
Some of the tests require a complete `Jupyter <https://jupyter.org/>`__ installation to test
|
101
|
+
interactivity features.
|
102
|
+
|
103
|
+
.. py:data:: HAS_MATPLOTLIB
|
104
|
+
|
105
|
+
Qiskit provides several visualization tools in the :mod:`.visualization` module.
|
106
|
+
Almost all of these are built using `Matplotlib <https://matplotlib.org/>`__, which must
|
107
|
+
be installed in order to use them.
|
108
|
+
|
109
|
+
.. py:data:: HAS_NETWORKX
|
110
|
+
|
111
|
+
No longer used by Qiskit. Internally, Qiskit now uses the high-performance `rustworkx
|
112
|
+
<https://github.com/Qiskit/rustworkx>`__ library as a core dependency, and during the
|
113
|
+
change-over period, it was sometimes convenient to convert things into the Python-only
|
114
|
+
`NetworkX <https://networkx.org/>`__ format. Some tests of application modules, such as
|
115
|
+
`Qiskit Nature <https://qiskit-community.github.io/qiskit-nature/>`__ still use NetworkX.
|
116
|
+
|
117
|
+
.. py:data:: HAS_NLOPT
|
118
|
+
|
119
|
+
`NLopt <https://nlopt.readthedocs.io/en/latest/>`__ is a nonlinear optimization library,
|
120
|
+
used by the global optimizers in the :mod:`.algorithms.optimizers` module.
|
121
|
+
|
122
|
+
.. py:data:: HAS_PIL
|
123
|
+
|
124
|
+
PIL is a Python image-manipulation library. Qiskit actually uses the `pillow
|
125
|
+
<https://pillow.readthedocs.io/en/stable/>`__ fork of PIL if it is available when generating
|
126
|
+
certain visualizations, for example of both :class:`.QuantumCircuit` and
|
127
|
+
:class:`.DAGCircuit` in certain modes.
|
128
|
+
|
129
|
+
.. py:data:: HAS_PYDOT
|
130
|
+
|
131
|
+
For some graph visualizations, Qiskit uses `pydot <https://github.com/pydot/pydot>`__ as an
|
132
|
+
interface to GraphViz (see :data:`HAS_GRAPHVIZ`).
|
133
|
+
|
134
|
+
.. py:data:: HAS_PYGMENTS
|
135
|
+
|
136
|
+
Pygments is a code highlighter and formatter used by many environments that involve rich
|
137
|
+
display of code blocks, including Sphinx and Jupyter. Qiskit uses this when producing rich
|
138
|
+
output for these environments.
|
139
|
+
|
140
|
+
.. py:data:: HAS_PYLATEX
|
141
|
+
|
142
|
+
Various LaTeX-based visualizations, especially the circuit drawers, need access to the
|
143
|
+
`pylatexenc <https://github.com/phfaist/pylatexenc>`__ project to work correctly.
|
144
|
+
|
145
|
+
.. py:data:: HAS_QASM3_IMPORT
|
146
|
+
|
147
|
+
The functions :func:`.qasm3.load` and :func:`.qasm3.loads` for importing OpenQASM 3 programs
|
148
|
+
into :class:`.QuantumCircuit` instances use `an external importer package
|
149
|
+
<https://qiskit.github.io/qiskit-qasm3-import>`__.
|
150
|
+
|
151
|
+
.. py:data:: HAS_SEABORN
|
152
|
+
|
153
|
+
Qiskit provides several visualization tools in the :mod:`.visualization` module. Some
|
154
|
+
of these are built using `Seaborn <https://seaborn.pydata.org/>`__, which must be installed
|
155
|
+
in order to use them.
|
156
|
+
|
157
|
+
.. py:data:: HAS_SKLEARN
|
158
|
+
|
159
|
+
Some of the gradient functions in :mod:`.opflow.gradients` use regularisation methods from
|
160
|
+
`Scikit Learn <https://scikit-learn.org/stable/>`__.
|
161
|
+
|
162
|
+
.. py:data:: HAS_SKQUANT
|
163
|
+
|
164
|
+
Some of the optimisers in :mod:`.algorithms.optimizers` are based on those found in `Scikit
|
165
|
+
Quant <https://github.com/scikit-quant/scikit-quant>`__, which must be installed to use
|
166
|
+
them.
|
167
|
+
|
168
|
+
.. py:data:: HAS_SQSNOBFIT
|
169
|
+
|
170
|
+
`SQSnobFit <https://pypi.org/project/SQSnobFit/>`__ is a library for the "stable noisy
|
171
|
+
optimization by branch and fit" algorithm. It is used by the :class:`.SNOBFIT` optimizer.
|
172
|
+
|
173
|
+
.. py:data:: HAS_SYMENGINE
|
174
|
+
|
175
|
+
`Symengine <https://github.com/symengine/symengine>`__ is a fast C++ backend for the
|
176
|
+
symbolic-manipulation library `Sympy <https://www.sympy.org/en/index.html>`__. Qiskit uses
|
177
|
+
special methods from Symengine to accelerate its handling of
|
178
|
+
:class:`~.circuit.Parameter`\\ s if available.
|
179
|
+
|
180
|
+
.. py:data:: HAS_TESTTOOLS
|
181
|
+
|
182
|
+
Qiskit's test suite has more advanced functionality available if the optional
|
183
|
+
`testtools <https://pypi.org/project/testtools/>`__ library is installed. This is generally
|
184
|
+
only needed for Qiskit developers.
|
185
|
+
|
186
|
+
.. py:data:: HAS_TWEEDLEDUM
|
187
|
+
|
188
|
+
`Tweedledum <https://github.com/boschmitt/tweedledum>`__ is an extension library for
|
189
|
+
synthesis and optimization of circuits that may involve classical oracles. Qiskit's
|
190
|
+
:class:`.PhaseOracle` uses this, which is used in turn by amplification algorithms via
|
191
|
+
the :class:`.AmplificationProblem`.
|
192
|
+
|
193
|
+
.. py:data:: HAS_Z3
|
194
|
+
|
195
|
+
`Z3 <https://github.com/Z3Prover/z3>`__ is a theorem prover, used in the
|
196
|
+
:class:`.CrosstalkAdaptiveSchedule` and :class:`.HoareOptimizer` transpiler passes.
|
197
|
+
|
198
|
+
External Command-Line Tools
|
199
|
+
---------------------------
|
200
|
+
|
201
|
+
.. py:data:: HAS_GRAPHVIZ
|
202
|
+
|
203
|
+
For some graph visualizations, Qiskit uses the `GraphViz <https://graphviz.org/>`__
|
204
|
+
visualization tool via its ``pydot`` interface (see :data:`HAS_PYDOT`).
|
205
|
+
|
206
|
+
.. py:data:: HAS_PDFLATEX
|
207
|
+
|
208
|
+
Visualization tools that use LaTeX in their output, such as the circuit drawers, require
|
209
|
+
``pdflatex`` to be available. You will generally need to ensure that you have a working
|
210
|
+
LaTeX installation available, and the ``qcircuit.tex`` package.
|
211
|
+
|
212
|
+
.. py:data:: HAS_PDFTOCAIRO
|
213
|
+
|
214
|
+
Visualization tools that convert LaTeX-generated files into rasterized images use the
|
215
|
+
``pdftocairo`` tool. This is part of the `Poppler suite of PDF tools
|
216
|
+
<https://poppler.freedesktop.org/>`__.
|
217
|
+
|
218
|
+
|
219
|
+
Lazy Checker Classes
|
220
|
+
====================
|
221
|
+
|
222
|
+
.. currentmodule:: qiskit.utils
|
223
|
+
|
224
|
+
Each of the lazy checkers is an instance of :class:`.LazyDependencyManager` in one of its two
|
225
|
+
subclasses: :class:`.LazyImportTester` and :class:`.LazySubprocessTester`. These should be imported
|
226
|
+
from :mod:`.utils` directly if required, such as::
|
227
|
+
|
228
|
+
from qiskit.utils import LazyImportTester
|
229
|
+
|
230
|
+
.. autoclass:: qiskit.utils.LazyDependencyManager
|
231
|
+
:members:
|
232
|
+
|
233
|
+
.. autoclass:: qiskit.utils.LazyImportTester
|
234
|
+
.. autoclass:: qiskit.utils.LazySubprocessTester
|
235
|
+
"""
|
236
|
+
|
237
|
+
# NOTE: If you're changing this file, sync it with `requirements-optional.txt` and potentially
|
238
|
+
# `pyproject.toml` as well.
|
239
|
+
|
240
|
+
import logging as _logging
|
241
|
+
|
242
|
+
from .lazy_tester import (
|
243
|
+
LazyImportTester as _LazyImportTester,
|
244
|
+
LazySubprocessTester as _LazySubprocessTester,
|
245
|
+
)
|
246
|
+
|
247
|
+
_logger = _logging.getLogger(__name__)
|
248
|
+
|
249
|
+
HAS_AER = _LazyImportTester(
|
250
|
+
"qiskit_aer",
|
251
|
+
name="Qiskit Aer",
|
252
|
+
install="pip install qiskit-aer",
|
253
|
+
)
|
254
|
+
HAS_IBMQ = _LazyImportTester(
|
255
|
+
"qiskit.providers.ibmq",
|
256
|
+
name="IBMQ Provider",
|
257
|
+
install="pip install qiskit-ibmq-provider",
|
258
|
+
)
|
259
|
+
HAS_IGNIS = _LazyImportTester(
|
260
|
+
"qiskit.ignis",
|
261
|
+
name="Qiskit Ignis",
|
262
|
+
install="pip install qiskit-ignis",
|
263
|
+
)
|
264
|
+
HAS_TOQM = _LazyImportTester("qiskit_toqm", name="Qiskit TOQM", install="pip install qiskit-toqm")
|
265
|
+
|
266
|
+
HAS_CONSTRAINT = _LazyImportTester(
|
267
|
+
"constraint",
|
268
|
+
name="python-constraint",
|
269
|
+
install="pip install python-constraint",
|
270
|
+
)
|
271
|
+
|
272
|
+
HAS_CPLEX = _LazyImportTester(
|
273
|
+
"cplex",
|
274
|
+
install="pip install cplex",
|
275
|
+
msg="This may not be possible for all Python versions and OSes",
|
276
|
+
)
|
277
|
+
HAS_CVXPY = _LazyImportTester("cvxpy", install="pip install cvxpy")
|
278
|
+
HAS_DOCPLEX = _LazyImportTester(
|
279
|
+
{"docplex": (), "docplex.mp.model": ("Model",)},
|
280
|
+
install="pip install docplex",
|
281
|
+
msg="This may not be possible for all Python versions and OSes",
|
282
|
+
)
|
283
|
+
HAS_FIXTURES = _LazyImportTester("fixtures", install="pip install fixtures")
|
284
|
+
HAS_IPYTHON = _LazyImportTester("IPython", install="pip install ipython")
|
285
|
+
HAS_IPYWIDGETS = _LazyImportTester("ipywidgets", install="pip install ipywidgets")
|
286
|
+
HAS_JAX = _LazyImportTester(
|
287
|
+
{"jax": ("grad", "jit"), "jax.numpy": ()},
|
288
|
+
name="jax",
|
289
|
+
install="pip install jax",
|
290
|
+
)
|
291
|
+
HAS_JUPYTER = _LazyImportTester(["jupyter", "nbformat", "nbconvert"], install="pip install jupyter")
|
292
|
+
HAS_MATPLOTLIB = _LazyImportTester(
|
293
|
+
("matplotlib.patches", "matplotlib.pyplot"),
|
294
|
+
name="matplotlib",
|
295
|
+
install="pip install matplotlib",
|
296
|
+
)
|
297
|
+
HAS_NETWORKX = _LazyImportTester("networkx", install="pip install networkx")
|
298
|
+
|
299
|
+
HAS_NLOPT = _LazyImportTester("nlopt", name="NLopt Optimizer", install="pip install nlopt")
|
300
|
+
HAS_PIL = _LazyImportTester("PIL.Image", name="pillow", install="pip install pillow")
|
301
|
+
HAS_PYDOT = _LazyImportTester("pydot", install="pip install pydot")
|
302
|
+
HAS_PYGMENTS = _LazyImportTester("pygments", install="pip install pygments")
|
303
|
+
HAS_PYLATEX = _LazyImportTester(
|
304
|
+
{
|
305
|
+
"pylatexenc.latex2text": ("LatexNodes2Text",),
|
306
|
+
"pylatexenc.latexencode": ("utf8tolatex",),
|
307
|
+
},
|
308
|
+
name="pylatexenc",
|
309
|
+
install="pip install pylatexenc",
|
310
|
+
)
|
311
|
+
HAS_QASM3_IMPORT = _LazyImportTester(
|
312
|
+
"qiskit_qasm3_import", install="pip install qiskit_qasm3_import"
|
313
|
+
)
|
314
|
+
HAS_SEABORN = _LazyImportTester("seaborn", install="pip install seaborn")
|
315
|
+
HAS_SKLEARN = _LazyImportTester(
|
316
|
+
{"sklearn.linear_model": ("Ridge", "Lasso")},
|
317
|
+
name="scikit-learn",
|
318
|
+
install="pip install scikit-learn",
|
319
|
+
)
|
320
|
+
HAS_SKQUANT = _LazyImportTester(
|
321
|
+
"skquant.opt",
|
322
|
+
name="scikit-quant",
|
323
|
+
install="pip install scikit-quant",
|
324
|
+
)
|
325
|
+
HAS_SQSNOBFIT = _LazyImportTester("SQSnobFit", install="pip install SQSnobFit")
|
326
|
+
HAS_SYMENGINE = _LazyImportTester("symengine", install="pip install symengine")
|
327
|
+
HAS_TESTTOOLS = _LazyImportTester("testtools", install="pip install testtools")
|
328
|
+
HAS_TWEEDLEDUM = _LazyImportTester("tweedledum", install="pip install tweedledum")
|
329
|
+
HAS_Z3 = _LazyImportTester("z3", install="pip install z3-solver")
|
330
|
+
|
331
|
+
HAS_GRAPHVIZ = _LazySubprocessTester(
|
332
|
+
("dot", "-V"),
|
333
|
+
name="Graphviz",
|
334
|
+
msg=(
|
335
|
+
"To install, follow the instructions at https://graphviz.org/download/."
|
336
|
+
" Qiskit needs the Graphviz binaries, which the 'graphviz' package on pip does not install."
|
337
|
+
" You must install the actual Graphviz software"
|
338
|
+
),
|
339
|
+
)
|
340
|
+
HAS_PDFLATEX = _LazySubprocessTester(
|
341
|
+
("pdflatex", "-version"),
|
342
|
+
msg="You will likely need to install a full LaTeX distribution for your system",
|
343
|
+
)
|
344
|
+
HAS_PDFTOCAIRO = _LazySubprocessTester(
|
345
|
+
("pdftocairo", "-v"),
|
346
|
+
msg="This is part of the 'poppler' set of PDF utilities",
|
347
|
+
)
|
qiskit/utils/parallel.py
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 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
|
+
# This file is part of QuTiP: Quantum Toolbox in Python.
|
14
|
+
#
|
15
|
+
# Copyright (c) 2011 and later, Paul D. Nation and Robert J. Johansson.
|
16
|
+
# All rights reserved.
|
17
|
+
#
|
18
|
+
# Redistribution and use in source and binary forms, with or without
|
19
|
+
# modification, are permitted provided that the following conditions are
|
20
|
+
# met:
|
21
|
+
#
|
22
|
+
# 1. Redistributions of source code must retain the above copyright notice,
|
23
|
+
# this list of conditions and the following disclaimer.
|
24
|
+
#
|
25
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
26
|
+
# notice, this list of conditions and the following disclaimer in the
|
27
|
+
# documentation and/or other materials provided with the distribution.
|
28
|
+
#
|
29
|
+
# 3. Neither the name of the QuTiP: Quantum Toolbox in Python nor the names
|
30
|
+
# of its contributors may be used to endorse or promote products derived
|
31
|
+
# from this software without specific prior written permission.
|
32
|
+
#
|
33
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
34
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
35
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
36
|
+
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
37
|
+
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
38
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
39
|
+
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
40
|
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
41
|
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
42
|
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
43
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
44
|
+
###############################################################################
|
45
|
+
|
46
|
+
"""
|
47
|
+
Routines for running Python functions in parallel using process pools
|
48
|
+
from the multiprocessing library.
|
49
|
+
"""
|
50
|
+
|
51
|
+
from __future__ import annotations
|
52
|
+
|
53
|
+
import os
|
54
|
+
from concurrent.futures import ProcessPoolExecutor
|
55
|
+
import sys
|
56
|
+
|
57
|
+
from qiskit.exceptions import QiskitError
|
58
|
+
from qiskit.utils.multiprocessing import local_hardware_info
|
59
|
+
from qiskit import user_config
|
60
|
+
|
61
|
+
|
62
|
+
def get_platform_parallel_default():
|
63
|
+
"""
|
64
|
+
Returns the default parallelism flag value for the current platform.
|
65
|
+
|
66
|
+
Returns:
|
67
|
+
parallel_default: The default parallelism flag value for the
|
68
|
+
current platform.
|
69
|
+
|
70
|
+
"""
|
71
|
+
# Default False on Windows
|
72
|
+
if sys.platform == "win32":
|
73
|
+
parallel_default = False
|
74
|
+
# On macOS default false on Python >=3.8
|
75
|
+
elif sys.platform == "darwin":
|
76
|
+
parallel_default = False
|
77
|
+
# On linux (and other OSes) default to True
|
78
|
+
else:
|
79
|
+
parallel_default = True
|
80
|
+
|
81
|
+
return parallel_default
|
82
|
+
|
83
|
+
|
84
|
+
CONFIG = user_config.get_config()
|
85
|
+
|
86
|
+
if os.getenv("QISKIT_PARALLEL", None) is not None:
|
87
|
+
PARALLEL_DEFAULT = os.getenv("QISKIT_PARALLEL", None).lower() == "true"
|
88
|
+
else:
|
89
|
+
PARALLEL_DEFAULT = get_platform_parallel_default()
|
90
|
+
|
91
|
+
# Set parallel flag
|
92
|
+
if os.getenv("QISKIT_IN_PARALLEL") is None:
|
93
|
+
os.environ["QISKIT_IN_PARALLEL"] = "FALSE"
|
94
|
+
|
95
|
+
if os.getenv("QISKIT_NUM_PROCS") is not None:
|
96
|
+
CPU_COUNT = int(os.getenv("QISKIT_NUM_PROCS"))
|
97
|
+
else:
|
98
|
+
CPU_COUNT = CONFIG.get("num_process", local_hardware_info()["cpus"])
|
99
|
+
|
100
|
+
|
101
|
+
def _task_wrapper(param):
|
102
|
+
(task, value, task_args, task_kwargs) = param
|
103
|
+
return task(value, *task_args, **task_kwargs)
|
104
|
+
|
105
|
+
|
106
|
+
def should_run_in_parallel(num_processes: int | None = None) -> bool:
|
107
|
+
"""Return whether the current parallelisation configuration suggests that we should run things
|
108
|
+
like :func:`parallel_map` in parallel (``True``) or degrade to serial (``False``).
|
109
|
+
|
110
|
+
Args:
|
111
|
+
num_processes: the number of processes requested for use (if given).
|
112
|
+
"""
|
113
|
+
num_processes = CPU_COUNT if num_processes is None else num_processes
|
114
|
+
return (
|
115
|
+
num_processes > 1
|
116
|
+
and os.getenv("QISKIT_IN_PARALLEL", "FALSE") == "FALSE"
|
117
|
+
and CONFIG.get("parallel_enabled", PARALLEL_DEFAULT)
|
118
|
+
)
|
119
|
+
|
120
|
+
|
121
|
+
def parallel_map( # pylint: disable=dangerous-default-value
|
122
|
+
task, values, task_args=(), task_kwargs={}, num_processes=CPU_COUNT
|
123
|
+
):
|
124
|
+
"""
|
125
|
+
Parallel execution of a mapping of `values` to the function `task`. This
|
126
|
+
is functionally equivalent to::
|
127
|
+
|
128
|
+
result = [task(value, *task_args, **task_kwargs) for value in values]
|
129
|
+
|
130
|
+
This will parallelise the results if the number of ``values`` is greater than one, and the
|
131
|
+
current system configuration permits parallelization.
|
132
|
+
|
133
|
+
Args:
|
134
|
+
task (func): Function that is to be called for each value in ``values``.
|
135
|
+
values (array_like): List or array of values for which the ``task`` function is to be
|
136
|
+
evaluated.
|
137
|
+
task_args (list): Optional additional arguments to the ``task`` function.
|
138
|
+
task_kwargs (dict): Optional additional keyword argument to the ``task`` function.
|
139
|
+
num_processes (int): Number of processes to spawn.
|
140
|
+
|
141
|
+
Returns:
|
142
|
+
result: The result list contains the value of ``task(value, *task_args, **task_kwargs)`` for
|
143
|
+
each value in ``values``.
|
144
|
+
|
145
|
+
Raises:
|
146
|
+
QiskitError: If user interrupts via keyboard.
|
147
|
+
|
148
|
+
Examples:
|
149
|
+
|
150
|
+
.. code-block:: python
|
151
|
+
|
152
|
+
import time
|
153
|
+
from qiskit.utils import parallel_map
|
154
|
+
def func(_):
|
155
|
+
time.sleep(0.1)
|
156
|
+
return 0
|
157
|
+
parallel_map(func, list(range(10)));
|
158
|
+
"""
|
159
|
+
if num_processes is None:
|
160
|
+
num_processes = CPU_COUNT
|
161
|
+
if len(values) == 0:
|
162
|
+
return []
|
163
|
+
if len(values) == 1:
|
164
|
+
return [task(values[0], *task_args, **task_kwargs)]
|
165
|
+
|
166
|
+
if should_run_in_parallel(num_processes):
|
167
|
+
os.environ["QISKIT_IN_PARALLEL"] = "TRUE"
|
168
|
+
try:
|
169
|
+
results = []
|
170
|
+
with ProcessPoolExecutor(max_workers=num_processes) as executor:
|
171
|
+
param = ((task, value, task_args, task_kwargs) for value in values)
|
172
|
+
future = executor.map(_task_wrapper, param)
|
173
|
+
|
174
|
+
results = list(future)
|
175
|
+
|
176
|
+
except (KeyboardInterrupt, Exception) as error:
|
177
|
+
if isinstance(error, KeyboardInterrupt):
|
178
|
+
os.environ["QISKIT_IN_PARALLEL"] = "FALSE"
|
179
|
+
raise QiskitError("Keyboard interrupt in parallel_map.") from error
|
180
|
+
# Otherwise just reset parallel flag and error
|
181
|
+
os.environ["QISKIT_IN_PARALLEL"] = "FALSE"
|
182
|
+
raise error
|
183
|
+
|
184
|
+
os.environ["QISKIT_IN_PARALLEL"] = "FALSE"
|
185
|
+
return results
|
186
|
+
|
187
|
+
results = []
|
188
|
+
for _, value in enumerate(values):
|
189
|
+
result = task(value, *task_args, **task_kwargs)
|
190
|
+
results.append(result)
|
191
|
+
return results
|
qiskit/utils/units.py
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017.
|
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
|
+
"""SI unit utilities"""
|
14
|
+
from __future__ import annotations
|
15
|
+
|
16
|
+
import numpy as np
|
17
|
+
|
18
|
+
from qiskit.circuit.parameterexpression import ParameterExpression
|
19
|
+
|
20
|
+
|
21
|
+
def apply_prefix(value: float | ParameterExpression, unit: str) -> float | ParameterExpression:
|
22
|
+
"""
|
23
|
+
Given a SI unit prefix and value, apply the prefix to convert to
|
24
|
+
standard SI unit.
|
25
|
+
|
26
|
+
Args:
|
27
|
+
value: The number to apply prefix to.
|
28
|
+
unit: String prefix.
|
29
|
+
|
30
|
+
Returns:
|
31
|
+
Converted value.
|
32
|
+
|
33
|
+
.. note::
|
34
|
+
|
35
|
+
This may induce tiny value error due to internal representation of float object.
|
36
|
+
See https://docs.python.org/3/tutorial/floatingpoint.html for details.
|
37
|
+
|
38
|
+
Raises:
|
39
|
+
ValueError: If the ``units`` aren't recognized.
|
40
|
+
"""
|
41
|
+
prefactors = {
|
42
|
+
"f": -15,
|
43
|
+
"p": -12,
|
44
|
+
"n": -9,
|
45
|
+
"u": -6,
|
46
|
+
"µ": -6,
|
47
|
+
"m": -3,
|
48
|
+
"k": 3,
|
49
|
+
"M": 6,
|
50
|
+
"G": 9,
|
51
|
+
"T": 12,
|
52
|
+
"P": 15,
|
53
|
+
}
|
54
|
+
|
55
|
+
if not unit or len(unit) == 1:
|
56
|
+
# for example, "m" can represent meter
|
57
|
+
return value
|
58
|
+
|
59
|
+
if unit[0] not in prefactors:
|
60
|
+
raise ValueError(f"Could not understand unit: {unit}")
|
61
|
+
|
62
|
+
pow10 = prefactors[unit[0]]
|
63
|
+
|
64
|
+
# to avoid round-off error of prefactor
|
65
|
+
if pow10 < 0:
|
66
|
+
return value / pow(10, -pow10)
|
67
|
+
|
68
|
+
return value * pow(10, pow10)
|
69
|
+
|
70
|
+
|
71
|
+
def detach_prefix(value: float, decimal: int | None = None) -> tuple[float, str]:
|
72
|
+
"""
|
73
|
+
Given a SI unit value, find the most suitable prefix to scale the value.
|
74
|
+
|
75
|
+
For example, the ``value = 1.3e8`` will be converted into a tuple of ``(130.0, "M")``,
|
76
|
+
which represents a scaled value and auxiliary unit that may be used to display the value.
|
77
|
+
In above example, that value might be displayed as ``130 MHz`` (unit is arbitrary here).
|
78
|
+
|
79
|
+
Example:
|
80
|
+
|
81
|
+
>>> value, prefix = detach_prefix(1e4)
|
82
|
+
>>> print(f"{value} {prefix}Hz")
|
83
|
+
10 kHz
|
84
|
+
|
85
|
+
Args:
|
86
|
+
value: The number to find prefix.
|
87
|
+
decimal: Optional. An arbitrary integer number to represent a precision of the value.
|
88
|
+
If specified, it tries to round the mantissa and adjust the prefix to rounded value.
|
89
|
+
For example, 999_999.91 will become 999.9999 k with ``decimal=4``,
|
90
|
+
while 1.0 M with ``decimal=3`` or less.
|
91
|
+
|
92
|
+
Returns:
|
93
|
+
A tuple of scaled value and prefix.
|
94
|
+
|
95
|
+
.. note::
|
96
|
+
|
97
|
+
This may induce tiny value error due to internal representation of float object.
|
98
|
+
See https://docs.python.org/3/tutorial/floatingpoint.html for details.
|
99
|
+
|
100
|
+
Raises:
|
101
|
+
ValueError: If the ``value`` is out of range.
|
102
|
+
ValueError: If the ``value`` is not real number.
|
103
|
+
"""
|
104
|
+
prefactors = {
|
105
|
+
-15: "f",
|
106
|
+
-12: "p",
|
107
|
+
-9: "n",
|
108
|
+
-6: "µ",
|
109
|
+
-3: "m",
|
110
|
+
0: "",
|
111
|
+
3: "k",
|
112
|
+
6: "M",
|
113
|
+
9: "G",
|
114
|
+
12: "T",
|
115
|
+
15: "P",
|
116
|
+
}
|
117
|
+
|
118
|
+
if not np.isreal(value):
|
119
|
+
raise ValueError(f"Input should be real number. Cannot convert {value}.")
|
120
|
+
|
121
|
+
if np.abs(value) != 0:
|
122
|
+
pow10 = int(np.floor(np.log10(np.abs(value)) / 3) * 3)
|
123
|
+
else:
|
124
|
+
pow10 = 0
|
125
|
+
|
126
|
+
# to avoid round-off error of prefactor
|
127
|
+
if pow10 > 0:
|
128
|
+
mant = value / pow(10, pow10)
|
129
|
+
else:
|
130
|
+
mant = value * pow(10, -pow10)
|
131
|
+
|
132
|
+
if decimal is not None:
|
133
|
+
# Corner case handling
|
134
|
+
# For example, 999_999.99 can be rounded to 1000.0 k rather than 1.0 M.
|
135
|
+
mant = np.round(mant, decimal)
|
136
|
+
if mant >= 1000:
|
137
|
+
mant /= 1000
|
138
|
+
pow10 += 3
|
139
|
+
|
140
|
+
if pow10 not in prefactors:
|
141
|
+
raise ValueError(f"Value is out of range: {value}")
|
142
|
+
|
143
|
+
return mant, prefactors[pow10]
|