qiskit 2.1.0rc1__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -0
- qiskit/__init__.py +159 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/circuit/__init__.py +1335 -0
- qiskit/circuit/_add_control.py +338 -0
- qiskit/circuit/_classical_resource_map.py +154 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/annotation.py +404 -0
- qiskit/circuit/barrier.py +46 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +266 -0
- qiskit/circuit/classical/expr/constructors.py +764 -0
- qiskit/circuit/classical/expr/expr.py +156 -0
- qiskit/circuit/classical/expr/visitors.py +381 -0
- qiskit/circuit/classical/types/__init__.py +113 -0
- qiskit/circuit/classical/types/ordering.py +229 -0
- qiskit/circuit/classical/types/types.py +30 -0
- qiskit/circuit/commutation_checker.py +133 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +59 -0
- qiskit/circuit/controlflow/_builder_utils.py +211 -0
- qiskit/circuit/controlflow/box.py +188 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +791 -0
- qiskit/circuit/controlflow/continue_loop.py +56 -0
- qiskit/circuit/controlflow/control_flow.py +94 -0
- qiskit/circuit/controlflow/for_loop.py +218 -0
- qiskit/circuit/controlflow/if_else.py +498 -0
- qiskit/circuit/controlflow/switch_case.py +411 -0
- qiskit/circuit/controlflow/while_loop.py +166 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +159 -0
- qiskit/circuit/duration.py +80 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +564 -0
- qiskit/circuit/instructionset.py +132 -0
- qiskit/circuit/library/__init__.py +984 -0
- qiskit/circuit/library/arithmetic/__init__.py +40 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +235 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +131 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +201 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +506 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +395 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +501 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +370 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +428 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +316 -0
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +322 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -0
- qiskit/circuit/library/data_preparation/__init__.py +57 -0
- qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/fourier_checking.py +160 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +163 -0
- qiskit/circuit/library/generalized_gates/gms.py +179 -0
- qiskit/circuit/library/generalized_gates/gr.py +219 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +318 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
- qiskit/circuit/library/generalized_gates/pauli.py +84 -0
- qiskit/circuit/library/generalized_gates/permutation.py +202 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -0
- qiskit/circuit/library/generalized_gates/uc.py +303 -0
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
- qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
- qiskit/circuit/library/generalized_gates/ucry.py +32 -0
- qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
- qiskit/circuit/library/generalized_gates/unitary.py +236 -0
- qiskit/circuit/library/graph_state.py +172 -0
- qiskit/circuit/library/grover_operator.py +583 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +163 -0
- qiskit/circuit/library/iqp.py +180 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +282 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +301 -0
- qiskit/circuit/library/n_local/n_local.py +1478 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +183 -0
- qiskit/circuit/library/pauli_evolution.py +202 -0
- qiskit/circuit/library/phase_estimation.py +177 -0
- qiskit/circuit/library/phase_oracle.py +239 -0
- qiskit/circuit/library/quantum_volume.py +179 -0
- qiskit/circuit/library/standard_gates/__init__.py +141 -0
- qiskit/circuit/library/standard_gates/dcx.py +76 -0
- qiskit/circuit/library/standard_gates/ecr.py +126 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1936 -0
- qiskit/circuit/library/standard_gates/global_phase.py +83 -0
- qiskit/circuit/library/standard_gates/h.py +230 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +115 -0
- qiskit/circuit/library/standard_gates/p.py +415 -0
- qiskit/circuit/library/standard_gates/r.py +108 -0
- qiskit/circuit/library/standard_gates/rx.py +269 -0
- qiskit/circuit/library/standard_gates/rxx.py +165 -0
- qiskit/circuit/library/standard_gates/ry.py +268 -0
- qiskit/circuit/library/standard_gates/ryy.py +165 -0
- qiskit/circuit/library/standard_gates/rz.py +290 -0
- qiskit/circuit/library/standard_gates/rzx.py +211 -0
- qiskit/circuit/library/standard_gates/rzz.py +181 -0
- qiskit/circuit/library/standard_gates/s.py +424 -0
- qiskit/circuit/library/standard_gates/swap.py +268 -0
- qiskit/circuit/library/standard_gates/sx.py +303 -0
- qiskit/circuit/library/standard_gates/t.py +169 -0
- qiskit/circuit/library/standard_gates/u.py +379 -0
- qiskit/circuit/library/standard_gates/u1.py +466 -0
- qiskit/circuit/library/standard_gates/u2.py +145 -0
- qiskit/circuit/library/standard_gates/u3.py +412 -0
- qiskit/circuit/library/standard_gates/x.py +1335 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +164 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +197 -0
- qiskit/circuit/library/standard_gates/y.py +253 -0
- qiskit/circuit/library/standard_gates/z.py +331 -0
- qiskit/circuit/library/templates/__init__.py +92 -0
- qiskit/circuit/library/templates/clifford/__init__.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
- qiskit/circuit/measure.py +53 -0
- qiskit/circuit/operation.py +68 -0
- qiskit/circuit/parameter.py +188 -0
- qiskit/circuit/parameterexpression.py +737 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +140 -0
- qiskit/circuit/quantumcircuit.py +7610 -0
- qiskit/circuit/quantumcircuitdata.py +137 -0
- qiskit/circuit/random/__init__.py +50 -0
- qiskit/circuit/random/utils.py +755 -0
- qiskit/circuit/reset.py +37 -0
- qiskit/circuit/singleton.py +600 -0
- qiskit/circuit/store.py +89 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +185 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +27 -0
- qiskit/compiler/transpiler.py +375 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +80 -0
- qiskit/converters/circuit_to_dagdependency.py +49 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +142 -0
- qiskit/converters/dag_to_circuit.py +79 -0
- qiskit/converters/dag_to_dagdependency.py +54 -0
- qiskit/converters/dag_to_dagdependency_v2.py +43 -0
- qiskit/converters/dagdependency_to_circuit.py +40 -0
- qiskit/converters/dagdependency_to_dag.py +48 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +403 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +612 -0
- qiskit/dagcircuit/dagdependency_v2.py +566 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +193 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +258 -0
- qiskit/passmanager/base_tasks.py +230 -0
- qiskit/passmanager/compilation_status.py +74 -0
- qiskit/passmanager/exceptions.py +19 -0
- qiskit/passmanager/flow_controllers.py +116 -0
- qiskit/passmanager/passmanager.py +353 -0
- qiskit/primitives/__init__.py +490 -0
- qiskit/primitives/backend_estimator_v2.py +530 -0
- qiskit/primitives/backend_sampler_v2.py +339 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +247 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_primitive_v1.py +45 -0
- qiskit/primitives/base/base_result_v1.py +65 -0
- qiskit/primitives/base/base_sampler.py +196 -0
- qiskit/primitives/base/estimator_result_v1.py +46 -0
- qiskit/primitives/base/sampler_result_v1.py +45 -0
- qiskit/primitives/base/validation_v1.py +250 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +391 -0
- qiskit/primitives/containers/bit_array.py +764 -0
- qiskit/primitives/containers/data_bin.py +172 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +380 -0
- qiskit/primitives/containers/primitive_result.py +53 -0
- qiskit/primitives/containers/pub_result.py +51 -0
- qiskit/primitives/containers/sampler_pub.py +193 -0
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +129 -0
- qiskit/primitives/primitive_job.py +100 -0
- qiskit/primitives/statevector_estimator.py +175 -0
- qiskit/primitives/statevector_sampler.py +290 -0
- qiskit/primitives/utils.py +72 -0
- qiskit/providers/__init__.py +677 -0
- qiskit/providers/backend.py +364 -0
- qiskit/providers/basic_provider/__init__.py +47 -0
- qiskit/providers/basic_provider/basic_provider.py +121 -0
- qiskit/providers/basic_provider/basic_provider_job.py +65 -0
- qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
- qiskit/providers/basic_provider/basic_simulator.py +693 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +33 -0
- qiskit/providers/fake_provider/__init__.py +69 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +376 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/qasm/libs/dummy/stdgates.inc +75 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +82 -0
- qiskit/qasm2/__init__.py +669 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +364 -0
- qiskit/qasm2/parse.py +438 -0
- qiskit/qasm3/__init__.py +466 -0
- qiskit/qasm3/ast.py +796 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1363 -0
- qiskit/qasm3/printer.py +620 -0
- qiskit/qpy/__init__.py +2141 -0
- qiskit/qpy/binary_io/__init__.py +35 -0
- qiskit/qpy/binary_io/circuits.py +1687 -0
- qiskit/qpy/binary_io/parse_sympy_repr.py +126 -0
- qiskit/qpy/binary_io/schedules.py +288 -0
- qiskit/qpy/binary_io/value.py +1183 -0
- qiskit/qpy/common.py +361 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +458 -0
- qiskit/qpy/interface.py +384 -0
- qiskit/qpy/type_keys.py +415 -0
- qiskit/quantum_info/__init__.py +172 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +104 -0
- qiskit/quantum_info/analysis/make_observable.py +44 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
- qiskit/quantum_info/operators/__init__.py +29 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +373 -0
- qiskit/quantum_info/operators/channel/transformations.py +490 -0
- qiskit/quantum_info/operators/custom_iterator.py +48 -0
- qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
- qiskit/quantum_info/operators/dihedral/dihedral.py +511 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +64 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +418 -0
- qiskit/quantum_info/operators/mixins/__init__.py +52 -0
- qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
- qiskit/quantum_info/operators/mixins/group.py +171 -0
- qiskit/quantum_info/operators/mixins/linear.py +84 -0
- qiskit/quantum_info/operators/mixins/multiply.py +62 -0
- qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
- qiskit/quantum_info/operators/op_shape.py +525 -0
- qiskit/quantum_info/operators/operator.py +869 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +24 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1032 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +584 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +117 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1239 -0
- qiskit/quantum_info/operators/utils/__init__.py +20 -0
- qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
- qiskit/quantum_info/operators/utils/commutator.py +36 -0
- qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
- qiskit/quantum_info/quaternion.py +156 -0
- qiskit/quantum_info/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +857 -0
- qiskit/quantum_info/states/measures.py +288 -0
- qiskit/quantum_info/states/quantum_state.py +503 -0
- qiskit/quantum_info/states/random.py +157 -0
- qiskit/quantum_info/states/stabilizerstate.py +805 -0
- qiskit/quantum_info/states/statevector.py +977 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +61 -0
- qiskit/result/counts.py +189 -0
- qiskit/result/distributions/__init__.py +17 -0
- qiskit/result/distributions/probability.py +100 -0
- qiskit/result/distributions/quasi.py +154 -0
- qiskit/result/exceptions.py +40 -0
- qiskit/result/models.py +241 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +385 -0
- qiskit/result/sampled_expval.py +76 -0
- qiskit/result/utils.py +294 -0
- qiskit/synthesis/__init__.py +250 -0
- qiskit/synthesis/arithmetic/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +107 -0
- qiskit/synthesis/arithmetic/adders/rv_ripple_carry_adder.py +156 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/comparators/__init__.py +16 -0
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/synthesis/boolean/__init__.py +13 -0
- qiskit/synthesis/boolean/boolean_expression.py +231 -0
- qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
- qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +53 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +280 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +123 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +316 -0
- qiskit/synthesis/evolution/qdrift.py +133 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +227 -0
- qiskit/synthesis/linear/__init__.py +26 -0
- qiskit/synthesis/linear/cnot_synth.py +69 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +61 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +61 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +29 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +583 -0
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +205 -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 +61 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
- qiskit/synthesis/two_qubit/__init__.py +20 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -0
- qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
- qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
- qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
- qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
- qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
- qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
- qiskit/synthesis/unitary/__init__.py +13 -0
- qiskit/synthesis/unitary/aqc/__init__.py +177 -0
- qiskit/synthesis/unitary/aqc/approximate.py +116 -0
- qiskit/synthesis/unitary/aqc/aqc.py +175 -0
- qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
- qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/synthesis/unitary/qsd.py +359 -0
- qiskit/transpiler/__init__.py +1352 -0
- qiskit/transpiler/basepasses.py +190 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +263 -0
- qiskit/transpiler/layout.py +740 -0
- qiskit/transpiler/passes/__init__.py +278 -0
- qiskit/transpiler/passes/analysis/__init__.py +23 -0
- qiskit/transpiler/passes/analysis/count_ops.py +30 -0
- qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
- qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
- qiskit/transpiler/passes/analysis/depth.py +33 -0
- qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
- qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
- qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
- qiskit/transpiler/passes/analysis/size.py +36 -0
- qiskit/transpiler/passes/analysis/width.py +27 -0
- qiskit/transpiler/passes/basis/__init__.py +19 -0
- qiskit/transpiler/passes/basis/basis_translator.py +138 -0
- qiskit/transpiler/passes/basis/decompose.py +137 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -0
- qiskit/transpiler/passes/layout/__init__.py +26 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +128 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +197 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +54 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +525 -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 +292 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +245 -0
- qiskit/transpiler/passes/optimization/__init__.py +42 -0
- qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
- qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
- qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +117 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +176 -0
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
- qiskit/transpiler/passes/optimization/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +251 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -0
- qiskit/transpiler/passes/optimization/optimize_clifford_t.py +68 -0
- qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
- qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +70 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -0
- qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
- qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
- qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +633 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +21 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +166 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +397 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +465 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +433 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +21 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
- qiskit/transpiler/passes/scheduling/padding/context_aware_dynamical_decoupling.py +876 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
- qiskit/transpiler/passes/synthesis/__init__.py +21 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/clifford_unitary_synth_plugin.py +123 -0
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +2338 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +738 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +318 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
- qiskit/transpiler/passes/utils/__init__.py +32 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +60 -0
- qiskit/transpiler/passes/utils/check_map.py +78 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +61 -0
- qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
- qiskit/transpiler/passes/utils/error.py +69 -0
- qiskit/transpiler/passes/utils/filter_op_nodes.py +66 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +93 -0
- qiskit/transpiler/passes/utils/gates_basis.py +51 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +50 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +503 -0
- qiskit/transpiler/passmanager_config.py +154 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1114 -0
- qiskit/transpiler/preset_passmanagers/common.py +773 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +443 -0
- qiskit/transpiler/preset_passmanagers/level0.py +104 -0
- qiskit/transpiler/preset_passmanagers/level1.py +108 -0
- qiskit/transpiler/preset_passmanagers/level2.py +109 -0
- qiskit/transpiler/preset_passmanagers/level3.py +110 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
- qiskit/transpiler/target.py +905 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +266 -0
- qiskit/utils/__init__.py +90 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +382 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/optionals.py +355 -0
- qiskit/utils/parallel.py +318 -0
- qiskit/utils/units.py +146 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +290 -0
- qiskit/visualization/array.py +207 -0
- qiskit/visualization/bloch.py +778 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +677 -0
- qiskit/visualization/circuit/circuit_visualization.py +735 -0
- qiskit/visualization/circuit/latex.py +668 -0
- qiskit/visualization/circuit/matplotlib.py +2041 -0
- qiskit/visualization/circuit/qcstyle.py +130 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1849 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +487 -0
- qiskit/visualization/dag/__init__.py +13 -0
- qiskit/visualization/dag/dagstyle.py +103 -0
- qiskit/visualization/dag/styles/__init__.py +13 -0
- qiskit/visualization/dag/styles/color.json +10 -0
- qiskit/visualization/dag/styles/plain.json +5 -0
- qiskit/visualization/dag_visualization.py +389 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1424 -0
- qiskit/visualization/library.py +40 -0
- qiskit/visualization/pass_manager_visualization.py +312 -0
- qiskit/visualization/state_visualization.py +1546 -0
- qiskit/visualization/style.py +223 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +495 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +444 -0
- qiskit/visualization/timeline/layouts.py +115 -0
- qiskit/visualization/timeline/plotters/__init__.py +16 -0
- qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
- qiskit/visualization/timeline/plotters/matplotlib.py +195 -0
- qiskit/visualization/timeline/stylesheet.py +301 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +369 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-2.1.0rc1.dist-info/METADATA +221 -0
- qiskit-2.1.0rc1.dist-info/RECORD +699 -0
- qiskit-2.1.0rc1.dist-info/WHEEL +6 -0
- qiskit-2.1.0rc1.dist-info/entry_points.txt +88 -0
- qiskit-2.1.0rc1.dist-info/licenses/LICENSE.txt +203 -0
- qiskit-2.1.0rc1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
# pylint: disable=redefined-builtin
|
14
|
+
|
15
|
+
"""Object to represent the information at a node in the DAGCircuit."""
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from qiskit.exceptions import QiskitError
|
19
|
+
|
20
|
+
|
21
|
+
class DAGDepNode:
|
22
|
+
"""Object to represent the information at a node in the DAGDependency().
|
23
|
+
|
24
|
+
It is used as the return value from `*_nodes()` functions and can
|
25
|
+
be supplied to functions that take a node.
|
26
|
+
"""
|
27
|
+
|
28
|
+
__slots__ = [
|
29
|
+
"type",
|
30
|
+
"_op",
|
31
|
+
"name",
|
32
|
+
"_qargs",
|
33
|
+
"cargs",
|
34
|
+
"sort_key",
|
35
|
+
"node_id",
|
36
|
+
"successors",
|
37
|
+
"predecessors",
|
38
|
+
"reachable",
|
39
|
+
"matchedwith",
|
40
|
+
"isblocked",
|
41
|
+
"successorstovisit",
|
42
|
+
"qindices",
|
43
|
+
"cindices",
|
44
|
+
]
|
45
|
+
|
46
|
+
def __init__(
|
47
|
+
self,
|
48
|
+
type=None,
|
49
|
+
op=None,
|
50
|
+
name=None,
|
51
|
+
qargs=(),
|
52
|
+
cargs=(),
|
53
|
+
successors: list[int] | None = None,
|
54
|
+
predecessors: list[int] | None = None,
|
55
|
+
reachable=None,
|
56
|
+
matchedwith: list[int] | None = None,
|
57
|
+
successorstovisit: list[int] | None = None,
|
58
|
+
isblocked: bool | None = None,
|
59
|
+
qindices: list[int] | None = None,
|
60
|
+
cindices: list[int] | None = None,
|
61
|
+
nid: int = -1,
|
62
|
+
):
|
63
|
+
|
64
|
+
self.type = type
|
65
|
+
self._op = op
|
66
|
+
self.name = name
|
67
|
+
self._qargs = tuple(qargs) if qargs is not None else ()
|
68
|
+
self.cargs = tuple(cargs) if cargs is not None else ()
|
69
|
+
self.node_id = nid
|
70
|
+
self.sort_key: str = str(self._qargs)
|
71
|
+
self.successors: list[int] = successors if successors is not None else []
|
72
|
+
self.predecessors: list[int] = predecessors if predecessors is not None else []
|
73
|
+
self.reachable = reachable
|
74
|
+
self.matchedwith: list[int] = matchedwith if matchedwith is not None else []
|
75
|
+
self.isblocked: bool = isblocked
|
76
|
+
self.successorstovisit: list[int] = (
|
77
|
+
successorstovisit if successorstovisit is not None else []
|
78
|
+
)
|
79
|
+
self.qindices: list[int] = qindices if qindices is not None else []
|
80
|
+
self.cindices: list[int] = cindices if cindices is not None else []
|
81
|
+
|
82
|
+
@property
|
83
|
+
def op(self):
|
84
|
+
"""Returns the Instruction object corresponding to the op for the node, else None"""
|
85
|
+
if not self.type or self.type != "op":
|
86
|
+
raise QiskitError(f"The node {str(self)} is not an op node")
|
87
|
+
return self._op
|
88
|
+
|
89
|
+
@op.setter
|
90
|
+
def op(self, data):
|
91
|
+
self._op = data
|
92
|
+
|
93
|
+
@property
|
94
|
+
def qargs(self):
|
95
|
+
"""
|
96
|
+
Returns list of Qubit, else an empty list.
|
97
|
+
"""
|
98
|
+
return self._qargs
|
99
|
+
|
100
|
+
@qargs.setter
|
101
|
+
def qargs(self, new_qargs):
|
102
|
+
"""Sets the qargs to be the given list of qargs."""
|
103
|
+
self._qargs = tuple(new_qargs)
|
104
|
+
self.sort_key = str(new_qargs)
|
105
|
+
|
106
|
+
@staticmethod
|
107
|
+
def semantic_eq(node1, node2):
|
108
|
+
"""
|
109
|
+
Check if DAG nodes are considered equivalent, e.g., as a node_match for nx.is_isomorphic.
|
110
|
+
|
111
|
+
Args:
|
112
|
+
node1 (DAGDepNode): A node to compare.
|
113
|
+
node2 (DAGDepNode): The other node to compare.
|
114
|
+
|
115
|
+
Return:
|
116
|
+
Bool: If node1 == node2
|
117
|
+
"""
|
118
|
+
# For barriers, qarg order is not significant so compare as sets
|
119
|
+
if "barrier" == node1.name == node2.name:
|
120
|
+
return set(node1._qargs) == set(node2._qargs)
|
121
|
+
|
122
|
+
if node1.type == node2.type:
|
123
|
+
if node1._op == node2._op:
|
124
|
+
if node1.name == node2.name:
|
125
|
+
if node1._qargs == node2._qargs:
|
126
|
+
if node1.cargs == node2.cargs:
|
127
|
+
if node1.type == "op":
|
128
|
+
if getattr(node1._op, "condition", None) != getattr(
|
129
|
+
node2._op, "condition", None
|
130
|
+
):
|
131
|
+
return False
|
132
|
+
return True
|
133
|
+
return False
|
134
|
+
|
135
|
+
def copy(self):
|
136
|
+
"""
|
137
|
+
Function to copy a DAGDepNode object.
|
138
|
+
Returns:
|
139
|
+
DAGDepNode: a copy of a DAGDepNode object.
|
140
|
+
"""
|
141
|
+
|
142
|
+
dagdepnode = DAGDepNode()
|
143
|
+
|
144
|
+
dagdepnode.type = self.type
|
145
|
+
dagdepnode._op = self.op
|
146
|
+
dagdepnode.name = self.name
|
147
|
+
dagdepnode._qargs = self._qargs
|
148
|
+
dagdepnode.cargs = self.cargs
|
149
|
+
dagdepnode.node_id = self.node_id
|
150
|
+
dagdepnode.sort_key = self.sort_key
|
151
|
+
dagdepnode.successors = self.successors
|
152
|
+
dagdepnode.predecessors = self.predecessors
|
153
|
+
dagdepnode.reachable = self.reachable
|
154
|
+
dagdepnode.isblocked = self.isblocked
|
155
|
+
dagdepnode.successorstovisit = self.successorstovisit
|
156
|
+
dagdepnode.qindices = self.qindices
|
157
|
+
dagdepnode.cindices = self.cindices
|
158
|
+
dagdepnode.matchedwith = self.matchedwith.copy()
|
159
|
+
|
160
|
+
return dagdepnode
|
@@ -0,0 +1,193 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2019, 2021.
|
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
|
+
"""Objects to represent the information at a node in the DAGCircuit."""
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import typing
|
18
|
+
import uuid
|
19
|
+
|
20
|
+
import qiskit._accelerate.circuit
|
21
|
+
from qiskit.circuit import (
|
22
|
+
BoxOp,
|
23
|
+
Clbit,
|
24
|
+
ClassicalRegister,
|
25
|
+
IfElseOp,
|
26
|
+
WhileLoopOp,
|
27
|
+
SwitchCaseOp,
|
28
|
+
ForLoopOp,
|
29
|
+
Parameter,
|
30
|
+
QuantumCircuit,
|
31
|
+
)
|
32
|
+
from qiskit.circuit.classical import expr
|
33
|
+
|
34
|
+
if typing.TYPE_CHECKING:
|
35
|
+
from qiskit.dagcircuit import DAGCircuit
|
36
|
+
|
37
|
+
|
38
|
+
DAGNode = qiskit._accelerate.circuit.DAGNode
|
39
|
+
DAGOpNode = qiskit._accelerate.circuit.DAGOpNode
|
40
|
+
DAGInNode = qiskit._accelerate.circuit.DAGInNode
|
41
|
+
DAGOutNode = qiskit._accelerate.circuit.DAGOutNode
|
42
|
+
|
43
|
+
|
44
|
+
def _legacy_condition_eq(cond1, cond2, bit_indices1, bit_indices2) -> bool:
|
45
|
+
if cond1 is cond2 is None:
|
46
|
+
return True
|
47
|
+
elif None in (cond1, cond2):
|
48
|
+
return False
|
49
|
+
target1, val1 = cond1
|
50
|
+
target2, val2 = cond2
|
51
|
+
if val1 != val2:
|
52
|
+
return False
|
53
|
+
if isinstance(target1, Clbit) and isinstance(target2, Clbit):
|
54
|
+
return bit_indices1[target1] == bit_indices2[target2]
|
55
|
+
if isinstance(target1, ClassicalRegister) and isinstance(target2, ClassicalRegister):
|
56
|
+
return target1.size == target2.size and all(
|
57
|
+
bit_indices1[t1] == bit_indices2[t2] for t1, t2 in zip(target1, target2)
|
58
|
+
)
|
59
|
+
return False
|
60
|
+
|
61
|
+
|
62
|
+
def _circuit_to_dag(circuit: QuantumCircuit, node_qargs, node_cargs, bit_indices) -> DAGCircuit:
|
63
|
+
"""Get a :class:`.DAGCircuit` of the given :class:`.QuantumCircuit`. The bits in the output
|
64
|
+
will be ordered in a canonical order based on their indices in the outer DAG, as defined by the
|
65
|
+
``bit_indices`` mapping and the ``node_{q,c}args`` arguments."""
|
66
|
+
from qiskit.converters import circuit_to_dag # pylint: disable=cyclic-import
|
67
|
+
|
68
|
+
def sort_key(bits):
|
69
|
+
outer, _inner = bits
|
70
|
+
return bit_indices[outer]
|
71
|
+
|
72
|
+
return circuit_to_dag(
|
73
|
+
circuit,
|
74
|
+
copy_operations=False,
|
75
|
+
qubit_order=[
|
76
|
+
inner for _outer, inner in sorted(zip(node_qargs, circuit.qubits), key=sort_key)
|
77
|
+
],
|
78
|
+
clbit_order=[
|
79
|
+
inner for _outer, inner in sorted(zip(node_cargs, circuit.clbits), key=sort_key)
|
80
|
+
],
|
81
|
+
)
|
82
|
+
|
83
|
+
|
84
|
+
def _make_expr_key(bit_indices):
|
85
|
+
def key(var):
|
86
|
+
if isinstance(var, Clbit):
|
87
|
+
return bit_indices.get(var)
|
88
|
+
if isinstance(var, ClassicalRegister):
|
89
|
+
return [bit_indices.get(bit) for bit in var]
|
90
|
+
return None
|
91
|
+
|
92
|
+
return key
|
93
|
+
|
94
|
+
|
95
|
+
def _condition_op_eq(node1, node2, bit_indices1, bit_indices2):
|
96
|
+
cond1 = None
|
97
|
+
cond2 = None
|
98
|
+
if node1.is_control_flow():
|
99
|
+
cond1 = node1.op.condition
|
100
|
+
if node2.is_control_flow():
|
101
|
+
cond2 = node2.op.condition
|
102
|
+
if isinstance(cond1, expr.Expr) and isinstance(cond2, expr.Expr):
|
103
|
+
if not expr.structurally_equivalent(
|
104
|
+
cond1, cond2, _make_expr_key(bit_indices1), _make_expr_key(bit_indices2)
|
105
|
+
):
|
106
|
+
return False
|
107
|
+
elif isinstance(cond1, expr.Expr) or isinstance(cond2, expr.Expr):
|
108
|
+
return False
|
109
|
+
elif not _legacy_condition_eq(cond1, cond2, bit_indices1, bit_indices2):
|
110
|
+
return False
|
111
|
+
return len(node1.op.blocks) == len(node2.op.blocks) and all(
|
112
|
+
_circuit_to_dag(block1, node1.qargs, node1.cargs, bit_indices1)
|
113
|
+
== _circuit_to_dag(block2, node2.qargs, node2.cargs, bit_indices2)
|
114
|
+
for block1, block2 in zip(node1.op.blocks, node2.op.blocks)
|
115
|
+
)
|
116
|
+
|
117
|
+
|
118
|
+
def _switch_case_eq(node1, node2, bit_indices1, bit_indices2):
|
119
|
+
target1 = node1.op.target
|
120
|
+
target2 = node2.op.target
|
121
|
+
if isinstance(target1, expr.Expr) and isinstance(target2, expr.Expr):
|
122
|
+
if not expr.structurally_equivalent(
|
123
|
+
target1, target2, _make_expr_key(bit_indices1), _make_expr_key(bit_indices2)
|
124
|
+
):
|
125
|
+
return False
|
126
|
+
elif isinstance(target1, Clbit) and isinstance(target2, Clbit):
|
127
|
+
if bit_indices1[target1] != bit_indices2[target2]:
|
128
|
+
return False
|
129
|
+
elif isinstance(target1, ClassicalRegister) and isinstance(target2, ClassicalRegister):
|
130
|
+
if target1.size != target2.size or any(
|
131
|
+
bit_indices1[b1] != bit_indices2[b2] for b1, b2 in zip(target1, target2)
|
132
|
+
):
|
133
|
+
return False
|
134
|
+
else:
|
135
|
+
return False
|
136
|
+
cases1 = [case for case, _ in node1.op.cases_specifier()]
|
137
|
+
cases2 = [case for case, _ in node2.op.cases_specifier()]
|
138
|
+
return (
|
139
|
+
len(cases1) == len(cases2)
|
140
|
+
and all(set(labels1) == set(labels2) for labels1, labels2 in zip(cases1, cases2))
|
141
|
+
and len(node1.op.blocks) == len(node2.op.blocks)
|
142
|
+
and all(
|
143
|
+
_circuit_to_dag(block1, node1.qargs, node1.cargs, bit_indices1)
|
144
|
+
== _circuit_to_dag(block2, node2.qargs, node2.cargs, bit_indices2)
|
145
|
+
for block1, block2 in zip(node1.op.blocks, node2.op.blocks)
|
146
|
+
)
|
147
|
+
)
|
148
|
+
|
149
|
+
|
150
|
+
def _for_loop_eq(node1, node2, bit_indices1, bit_indices2):
|
151
|
+
indexset1, param1, body1 = node1.op.params
|
152
|
+
indexset2, param2, body2 = node2.op.params
|
153
|
+
if indexset1 != indexset2:
|
154
|
+
return False
|
155
|
+
if (param1 is None and param2 is not None) or (param1 is not None and param2 is None):
|
156
|
+
return False
|
157
|
+
if param1 is not None and param2 is not None:
|
158
|
+
sentinel = Parameter(str(uuid.uuid4()))
|
159
|
+
body1 = (
|
160
|
+
body1.assign_parameters({param1: sentinel}, inplace=False)
|
161
|
+
if param1 in body1.parameters
|
162
|
+
else body1
|
163
|
+
)
|
164
|
+
body2 = (
|
165
|
+
body2.assign_parameters({param2: sentinel}, inplace=False)
|
166
|
+
if param2 in body2.parameters
|
167
|
+
else body2
|
168
|
+
)
|
169
|
+
return _circuit_to_dag(body1, node1.qargs, node1.cargs, bit_indices1) == _circuit_to_dag(
|
170
|
+
body2, node2.qargs, node2.cargs, bit_indices2
|
171
|
+
)
|
172
|
+
|
173
|
+
|
174
|
+
def _box_eq(node1, node2, bit_indices1, bit_indices2):
|
175
|
+
return (
|
176
|
+
(node1.op.duration == node2.op.duration)
|
177
|
+
and (
|
178
|
+
_circuit_to_dag(node1.op.blocks[0], node1.qargs, node1.cargs, bit_indices1)
|
179
|
+
== _circuit_to_dag(node2.op.blocks[0], node2.qargs, node2.cargs, bit_indices2)
|
180
|
+
)
|
181
|
+
and (node1.op.annotations == node2.op.annotations)
|
182
|
+
)
|
183
|
+
|
184
|
+
|
185
|
+
_SEMANTIC_EQ_CONTROL_FLOW = {
|
186
|
+
IfElseOp: _condition_op_eq,
|
187
|
+
WhileLoopOp: _condition_op_eq,
|
188
|
+
SwitchCaseOp: _switch_case_eq,
|
189
|
+
ForLoopOp: _for_loop_eq,
|
190
|
+
BoxOp: _box_eq,
|
191
|
+
}
|
192
|
+
|
193
|
+
_SEMANTIC_EQ_SYMMETRIC = frozenset({"barrier", "swap", "break_loop", "continue_loop"})
|
@@ -0,0 +1,42 @@
|
|
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
|
+
"""
|
14
|
+
Exception for errors raised by the DAGCircuit object.
|
15
|
+
"""
|
16
|
+
from qiskit.exceptions import QiskitError
|
17
|
+
|
18
|
+
|
19
|
+
class DAGCircuitError(QiskitError):
|
20
|
+
"""Base class for errors raised by the DAGCircuit object."""
|
21
|
+
|
22
|
+
def __init__(self, *msg):
|
23
|
+
"""Set the error message."""
|
24
|
+
super().__init__(*msg)
|
25
|
+
self.msg = " ".join(msg)
|
26
|
+
|
27
|
+
def __str__(self):
|
28
|
+
"""Return the message."""
|
29
|
+
return repr(self.msg)
|
30
|
+
|
31
|
+
|
32
|
+
class DAGDependencyError(QiskitError):
|
33
|
+
"""Base class for errors raised by the DAGDependency object."""
|
34
|
+
|
35
|
+
def __init__(self, *msg):
|
36
|
+
"""Set the error message."""
|
37
|
+
super().__init__(*msg)
|
38
|
+
self.msg = " ".join(msg)
|
39
|
+
|
40
|
+
def __str__(self):
|
41
|
+
"""Return the message."""
|
42
|
+
return repr(self.msg)
|
qiskit/exceptions.py
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
===============================================
|
15
|
+
Top-level exceptions (:mod:`qiskit.exceptions`)
|
16
|
+
===============================================
|
17
|
+
|
18
|
+
Exceptions
|
19
|
+
==========
|
20
|
+
|
21
|
+
All Qiskit-related exceptions raised by Qiskit are subclasses of the base:
|
22
|
+
|
23
|
+
.. autoexception:: QiskitError
|
24
|
+
|
25
|
+
.. note::
|
26
|
+
|
27
|
+
Errors that are just general programming errors, such as incorrect typing, may still raise
|
28
|
+
standard Python errors such as ``TypeError``. :exc:`QiskitError` is generally for errors raised
|
29
|
+
in usage that is particular to Qiskit.
|
30
|
+
|
31
|
+
Many of the Qiskit subpackages define their own more granular error, to help in catching only the
|
32
|
+
subset of errors you care about. For example, :mod:`qiskit.circuit` almost exclusively uses
|
33
|
+
:exc:`.CircuitError`, while both :exc:`.QASM2ExportError` and :exc:`.QASM2ParseError` derive from
|
34
|
+
:exc:`.QASM2Error` in :mod:`qiskit.qasm2`, which is in turn a type of :exc:`.QiskitError`.
|
35
|
+
|
36
|
+
Qiskit has several optional features that depend on other packages that are not required for a
|
37
|
+
minimal install. You can read more about those, and ways to check for their presence, in
|
38
|
+
:mod:`qiskit.utils.optionals`. Trying to use a feature that requires an optional extra will raise a
|
39
|
+
particular error, which subclasses both :exc:`QiskitError` and the Python built-in ``ImportError``.
|
40
|
+
|
41
|
+
.. autoexception:: MissingOptionalLibraryError
|
42
|
+
|
43
|
+
Two more uncommon errors relate to failures in reading user-configuration files, or specifying a
|
44
|
+
filename that cannot be used:
|
45
|
+
|
46
|
+
.. autoexception:: QiskitUserConfigError
|
47
|
+
.. autoexception:: InvalidFileError
|
48
|
+
|
49
|
+
|
50
|
+
Warnings
|
51
|
+
========
|
52
|
+
|
53
|
+
Some particular features of Qiskit may raise custom warnings. In general, Qiskit will use built-in
|
54
|
+
Python warnings (such as :exc:`DeprecationWarning`) when appropriate, but warnings related to
|
55
|
+
Qiskit-specific functionality will be subtypes of :exc:`QiskitWarning`.
|
56
|
+
|
57
|
+
.. autoexception:: QiskitWarning
|
58
|
+
|
59
|
+
Related to :exc:`MissingOptionalLibraryError`, in some cases an optional dependency might be found,
|
60
|
+
but fail to import for some other reason. In this case, Qiskit will continue as if the dependency
|
61
|
+
is not present, but will raise :exc:`OptionalDependencyImportWarning` to let you know about it.
|
62
|
+
|
63
|
+
.. autoexception:: OptionalDependencyImportWarning
|
64
|
+
|
65
|
+
When experimental features are being used, Qiskit will raise :exc:`ExperimentalWarning`.
|
66
|
+
|
67
|
+
.. warning::
|
68
|
+
|
69
|
+
Qiskit experimental features can break at any minor release and their API might change without
|
70
|
+
previous notification. Their use is not recommended in production.
|
71
|
+
|
72
|
+
.. autoexception:: ExperimentalWarning
|
73
|
+
|
74
|
+
Filtering warnings
|
75
|
+
------------------
|
76
|
+
|
77
|
+
Python has built-in mechanisms to filter warnings, described in the documentation of the
|
78
|
+
:mod:`warnings` module. You can use these subclasses in your warning filters from within Python to
|
79
|
+
silence warnings you are not interested in. For example, if you are knowingly using experimental
|
80
|
+
features and are comfortable that they make break in later versions, you can silence
|
81
|
+
:exc:`ExperimentalWarning` like this::
|
82
|
+
|
83
|
+
import warnings
|
84
|
+
from qiskit.exceptions import ExperimentalWarning
|
85
|
+
|
86
|
+
warnings.filterwarnings("ignore", category=ExperimentalWarning)
|
87
|
+
"""
|
88
|
+
|
89
|
+
from typing import Optional
|
90
|
+
|
91
|
+
|
92
|
+
class QiskitError(Exception):
|
93
|
+
"""Base class for errors raised by Qiskit."""
|
94
|
+
|
95
|
+
def __init__(self, *message):
|
96
|
+
"""Set the error message."""
|
97
|
+
super().__init__(" ".join(message))
|
98
|
+
self.message = " ".join(message)
|
99
|
+
|
100
|
+
def __str__(self):
|
101
|
+
"""Return the message."""
|
102
|
+
return repr(self.message)
|
103
|
+
|
104
|
+
|
105
|
+
class QiskitUserConfigError(QiskitError):
|
106
|
+
"""Raised when an error is encountered reading a user config file."""
|
107
|
+
|
108
|
+
message = "User config invalid"
|
109
|
+
|
110
|
+
|
111
|
+
class MissingOptionalLibraryError(QiskitError, ImportError):
|
112
|
+
"""Raised when an optional library is missing."""
|
113
|
+
|
114
|
+
def __init__(
|
115
|
+
self, libname: str, name: str, pip_install: Optional[str] = None, msg: Optional[str] = None
|
116
|
+
) -> None:
|
117
|
+
"""Set the error message.
|
118
|
+
Args:
|
119
|
+
libname: Name of missing library
|
120
|
+
name: Name of class, function, module that uses this library
|
121
|
+
pip_install: pip install command, if any
|
122
|
+
msg: Descriptive message, if any
|
123
|
+
"""
|
124
|
+
message = [f"The '{libname}' library is required to use '{name}'."]
|
125
|
+
if pip_install:
|
126
|
+
message.append(f"You can install it with '{pip_install}'.")
|
127
|
+
if msg:
|
128
|
+
message.append(f" {msg}.")
|
129
|
+
|
130
|
+
super().__init__(" ".join(message))
|
131
|
+
self.message = " ".join(message)
|
132
|
+
|
133
|
+
def __str__(self) -> str:
|
134
|
+
"""Return the message."""
|
135
|
+
return repr(self.message)
|
136
|
+
|
137
|
+
|
138
|
+
class InvalidFileError(QiskitError):
|
139
|
+
"""Raised when the file provided is not valid for the specific task."""
|
140
|
+
|
141
|
+
|
142
|
+
class QiskitWarning(UserWarning):
|
143
|
+
"""Common subclass of warnings for Qiskit-specific warnings being raised."""
|
144
|
+
|
145
|
+
|
146
|
+
class OptionalDependencyImportWarning(QiskitWarning):
|
147
|
+
"""Raised when an optional library raises errors during its import."""
|
148
|
+
|
149
|
+
# Not a subclass of `ImportWarning` because those are hidden by default.
|
150
|
+
|
151
|
+
|
152
|
+
class ExperimentalWarning(QiskitWarning):
|
153
|
+
"""Raised when an experimental feature is being used."""
|