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
qiskit/qpy/type_keys.py
ADDED
@@ -0,0 +1,415 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2019.
|
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=too-many-return-statements
|
14
|
+
|
15
|
+
"""
|
16
|
+
QPY Type keys for several namespace.
|
17
|
+
"""
|
18
|
+
|
19
|
+
import uuid
|
20
|
+
from abc import abstractmethod
|
21
|
+
from enum import Enum, IntEnum, IntFlag
|
22
|
+
|
23
|
+
import numpy as np
|
24
|
+
|
25
|
+
from qiskit.circuit import (
|
26
|
+
Gate,
|
27
|
+
Instruction,
|
28
|
+
QuantumCircuit,
|
29
|
+
ControlledGate,
|
30
|
+
CASE_DEFAULT,
|
31
|
+
Clbit,
|
32
|
+
ClassicalRegister,
|
33
|
+
Duration,
|
34
|
+
)
|
35
|
+
from qiskit.circuit.annotated_operation import AnnotatedOperation, Modifier
|
36
|
+
from qiskit.circuit.classical import expr, types
|
37
|
+
from qiskit.circuit.library import PauliEvolutionGate
|
38
|
+
from qiskit.circuit.parameter import Parameter
|
39
|
+
from qiskit.circuit.parameterexpression import ParameterExpression
|
40
|
+
from qiskit.circuit.parametervector import ParameterVectorElement
|
41
|
+
from qiskit.qpy import exceptions
|
42
|
+
|
43
|
+
|
44
|
+
class TypeKeyBase(bytes, Enum):
|
45
|
+
"""Abstract baseclass for type key Enums."""
|
46
|
+
|
47
|
+
@classmethod
|
48
|
+
@abstractmethod
|
49
|
+
def assign(cls, obj):
|
50
|
+
"""Assign type key to given object.
|
51
|
+
|
52
|
+
Args:
|
53
|
+
obj (any): Arbitrary object to evaluate.
|
54
|
+
|
55
|
+
Returns:
|
56
|
+
TypeKey: Corresponding key object.
|
57
|
+
"""
|
58
|
+
pass
|
59
|
+
|
60
|
+
@classmethod
|
61
|
+
@abstractmethod
|
62
|
+
def retrieve(cls, type_key):
|
63
|
+
"""Get a class from given type key.
|
64
|
+
|
65
|
+
Args:
|
66
|
+
type_key (bytes): Object type key.
|
67
|
+
|
68
|
+
Returns:
|
69
|
+
any: Corresponding class.
|
70
|
+
"""
|
71
|
+
pass
|
72
|
+
|
73
|
+
|
74
|
+
class Value(TypeKeyBase):
|
75
|
+
"""Type key enum for value object."""
|
76
|
+
|
77
|
+
INTEGER = b"i"
|
78
|
+
FLOAT = b"f"
|
79
|
+
COMPLEX = b"c"
|
80
|
+
CASE_DEFAULT = b"d"
|
81
|
+
REGISTER = b"R"
|
82
|
+
NUMPY_OBJ = b"n"
|
83
|
+
PARAMETER = b"p"
|
84
|
+
PARAMETER_VECTOR = b"v"
|
85
|
+
PARAMETER_EXPRESSION = b"e"
|
86
|
+
STRING = b"s"
|
87
|
+
NULL = b"z"
|
88
|
+
EXPRESSION = b"x"
|
89
|
+
MODIFIER = b"m"
|
90
|
+
|
91
|
+
@classmethod
|
92
|
+
def assign(cls, obj):
|
93
|
+
if isinstance(obj, int):
|
94
|
+
return cls.INTEGER
|
95
|
+
if isinstance(obj, float):
|
96
|
+
return cls.FLOAT
|
97
|
+
if isinstance(obj, complex):
|
98
|
+
return cls.COMPLEX
|
99
|
+
if isinstance(obj, (np.integer, np.floating, np.complexfloating, np.ndarray)):
|
100
|
+
return cls.NUMPY_OBJ
|
101
|
+
if isinstance(obj, ParameterVectorElement):
|
102
|
+
return cls.PARAMETER_VECTOR
|
103
|
+
if isinstance(obj, Parameter):
|
104
|
+
return cls.PARAMETER
|
105
|
+
if isinstance(obj, ParameterExpression):
|
106
|
+
return cls.PARAMETER_EXPRESSION
|
107
|
+
if isinstance(obj, str):
|
108
|
+
return cls.STRING
|
109
|
+
if isinstance(obj, (Clbit, ClassicalRegister)):
|
110
|
+
return cls.REGISTER
|
111
|
+
if obj is None:
|
112
|
+
return cls.NULL
|
113
|
+
if obj is CASE_DEFAULT:
|
114
|
+
return cls.CASE_DEFAULT
|
115
|
+
if isinstance(obj, expr.Expr):
|
116
|
+
return cls.EXPRESSION
|
117
|
+
if isinstance(obj, Modifier):
|
118
|
+
return cls.MODIFIER
|
119
|
+
|
120
|
+
raise exceptions.QpyError(
|
121
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
122
|
+
)
|
123
|
+
|
124
|
+
@classmethod
|
125
|
+
def retrieve(cls, type_key):
|
126
|
+
raise NotImplementedError
|
127
|
+
|
128
|
+
|
129
|
+
class Condition(IntEnum):
|
130
|
+
"""Type keys for the ``conditional_key`` field of the INSTRUCTION struct."""
|
131
|
+
|
132
|
+
# This class is deliberately raw integers and not in terms of ASCII characters for backwards
|
133
|
+
# compatibility in the form as an old Boolean value was expanded; `NONE` and `TWO_TUPLE` must
|
134
|
+
# have the enumeration values 0 and 1.
|
135
|
+
|
136
|
+
NONE = 0
|
137
|
+
TWO_TUPLE = 1
|
138
|
+
EXPRESSION = 2
|
139
|
+
|
140
|
+
|
141
|
+
class InstructionExtraFlags(IntFlag):
|
142
|
+
"""If an instruction has extra payloads associated with it."""
|
143
|
+
|
144
|
+
HAS_ANNOTATIONS = 0b1000_0000
|
145
|
+
|
146
|
+
|
147
|
+
class Container(TypeKeyBase):
|
148
|
+
"""Type key enum for container-like object."""
|
149
|
+
|
150
|
+
RANGE = b"r"
|
151
|
+
TUPLE = b"t"
|
152
|
+
|
153
|
+
@classmethod
|
154
|
+
def assign(cls, obj):
|
155
|
+
if isinstance(obj, range):
|
156
|
+
return cls.RANGE
|
157
|
+
if isinstance(obj, tuple):
|
158
|
+
return cls.TUPLE
|
159
|
+
|
160
|
+
raise exceptions.QpyError(
|
161
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
162
|
+
)
|
163
|
+
|
164
|
+
@classmethod
|
165
|
+
def retrieve(cls, type_key):
|
166
|
+
raise NotImplementedError
|
167
|
+
|
168
|
+
|
169
|
+
class CircuitInstruction(TypeKeyBase):
|
170
|
+
"""Type key enum for circuit instruction object."""
|
171
|
+
|
172
|
+
INSTRUCTION = b"i"
|
173
|
+
GATE = b"g"
|
174
|
+
PAULI_EVOL_GATE = b"p"
|
175
|
+
CONTROLLED_GATE = b"c"
|
176
|
+
ANNOTATED_OPERATION = b"a"
|
177
|
+
|
178
|
+
@classmethod
|
179
|
+
def assign(cls, obj):
|
180
|
+
if isinstance(obj, PauliEvolutionGate):
|
181
|
+
return cls.PAULI_EVOL_GATE
|
182
|
+
if isinstance(obj, ControlledGate):
|
183
|
+
return cls.CONTROLLED_GATE
|
184
|
+
if isinstance(obj, AnnotatedOperation):
|
185
|
+
return cls.ANNOTATED_OPERATION
|
186
|
+
if isinstance(obj, Gate):
|
187
|
+
return cls.GATE
|
188
|
+
if isinstance(obj, Instruction):
|
189
|
+
return cls.INSTRUCTION
|
190
|
+
|
191
|
+
raise exceptions.QpyError(
|
192
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
193
|
+
)
|
194
|
+
|
195
|
+
@classmethod
|
196
|
+
def retrieve(cls, type_key):
|
197
|
+
raise NotImplementedError
|
198
|
+
|
199
|
+
|
200
|
+
class ScheduleOperand(TypeKeyBase):
|
201
|
+
"""Type key enum for schedule instruction operand object.
|
202
|
+
|
203
|
+
Note: This class is kept post pulse-removal to allow reading of
|
204
|
+
legacy payloads containing pulse gates without breaking the entire
|
205
|
+
load flow.
|
206
|
+
"""
|
207
|
+
|
208
|
+
WAVEFORM = b"w"
|
209
|
+
SYMBOLIC_PULSE = b"s"
|
210
|
+
CHANNEL = b"c"
|
211
|
+
KERNEL = b"k"
|
212
|
+
DISCRIMINATOR = b"d"
|
213
|
+
|
214
|
+
# We need to have own string type definition for operands of schedule instruction.
|
215
|
+
# Note that string type is already defined in the Value namespace,
|
216
|
+
# but its key "s" conflicts with the SYMBOLIC_PULSE in the ScheduleOperand namespace.
|
217
|
+
# New in QPY version 7.
|
218
|
+
OPERAND_STR = b"o"
|
219
|
+
|
220
|
+
@classmethod
|
221
|
+
def assign(cls, _):
|
222
|
+
raise NotImplementedError
|
223
|
+
|
224
|
+
@classmethod
|
225
|
+
def retrieve(cls, _):
|
226
|
+
raise NotImplementedError
|
227
|
+
|
228
|
+
|
229
|
+
class Program(TypeKeyBase):
|
230
|
+
"""Type key enum for program that QPY supports."""
|
231
|
+
|
232
|
+
CIRCUIT = b"q"
|
233
|
+
# This is left for backward compatibility, for identifying payloads of type `ScheduleBlock`
|
234
|
+
# and raising accordingly. `ScheduleBlock` support has been removed in Qiskit 2.0 as part
|
235
|
+
# of the pulse package removal in that version.
|
236
|
+
SCHEDULE_BLOCK = b"s"
|
237
|
+
|
238
|
+
@classmethod
|
239
|
+
def assign(cls, obj):
|
240
|
+
if isinstance(obj, QuantumCircuit):
|
241
|
+
return cls.CIRCUIT
|
242
|
+
|
243
|
+
raise exceptions.QpyError(
|
244
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
245
|
+
)
|
246
|
+
|
247
|
+
@classmethod
|
248
|
+
def retrieve(cls, type_key):
|
249
|
+
raise NotImplementedError
|
250
|
+
|
251
|
+
|
252
|
+
class Expression(TypeKeyBase):
|
253
|
+
"""Type keys for the ``EXPRESSION`` QPY item."""
|
254
|
+
|
255
|
+
VAR = b"x"
|
256
|
+
STRETCH = b"s"
|
257
|
+
VALUE = b"v"
|
258
|
+
CAST = b"c"
|
259
|
+
UNARY = b"u"
|
260
|
+
BINARY = b"b"
|
261
|
+
INDEX = b"i"
|
262
|
+
|
263
|
+
@classmethod
|
264
|
+
def assign(cls, obj):
|
265
|
+
if (
|
266
|
+
isinstance(obj, expr.Expr)
|
267
|
+
and (key := getattr(cls, obj.__class__.__name__.upper(), None)) is not None
|
268
|
+
):
|
269
|
+
return key
|
270
|
+
raise exceptions.QpyError(f"Object '{obj}' is not supported in {cls.__name__} namespace.")
|
271
|
+
|
272
|
+
@classmethod
|
273
|
+
def retrieve(cls, type_key):
|
274
|
+
raise NotImplementedError
|
275
|
+
|
276
|
+
|
277
|
+
class ExprVarDeclaration(TypeKeyBase):
|
278
|
+
"""Type keys for the ``EXPR_VAR_DECLARATION`` QPY item."""
|
279
|
+
|
280
|
+
INPUT = b"I"
|
281
|
+
CAPTURE = b"C"
|
282
|
+
LOCAL = b"L"
|
283
|
+
STRETCH_CAPTURE = b"A"
|
284
|
+
STRETCH_LOCAL = b"O"
|
285
|
+
|
286
|
+
@classmethod
|
287
|
+
def assign(cls, obj):
|
288
|
+
raise NotImplementedError
|
289
|
+
|
290
|
+
@classmethod
|
291
|
+
def retrieve(cls, type_key):
|
292
|
+
raise NotImplementedError
|
293
|
+
|
294
|
+
|
295
|
+
class ExprType(TypeKeyBase):
|
296
|
+
"""Type keys for the ``EXPR_TYPE`` QPY item."""
|
297
|
+
|
298
|
+
BOOL = b"b"
|
299
|
+
UINT = b"u"
|
300
|
+
FLOAT = b"f"
|
301
|
+
DURATION = b"d"
|
302
|
+
|
303
|
+
@classmethod
|
304
|
+
def assign(cls, obj):
|
305
|
+
if (
|
306
|
+
isinstance(obj, types.Type)
|
307
|
+
and (key := getattr(cls, obj.__class__.__name__.upper(), None)) is not None
|
308
|
+
):
|
309
|
+
return key
|
310
|
+
raise exceptions.QpyError(f"Object '{obj}' is not supported in {cls.__name__} namespace.")
|
311
|
+
|
312
|
+
@classmethod
|
313
|
+
def retrieve(cls, type_key):
|
314
|
+
raise NotImplementedError
|
315
|
+
|
316
|
+
|
317
|
+
class ExprVar(TypeKeyBase):
|
318
|
+
"""Type keys for the ``EXPR_VAR`` QPY item."""
|
319
|
+
|
320
|
+
CLBIT = b"C"
|
321
|
+
REGISTER = b"R"
|
322
|
+
UUID = b"U"
|
323
|
+
|
324
|
+
@classmethod
|
325
|
+
def assign(cls, obj):
|
326
|
+
if isinstance(obj, uuid.UUID):
|
327
|
+
return cls.UUID
|
328
|
+
if isinstance(obj, Clbit):
|
329
|
+
return cls.CLBIT
|
330
|
+
if isinstance(obj, ClassicalRegister):
|
331
|
+
return cls.REGISTER
|
332
|
+
raise exceptions.QpyError(
|
333
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
334
|
+
)
|
335
|
+
|
336
|
+
@classmethod
|
337
|
+
def retrieve(cls, type_key):
|
338
|
+
raise NotImplementedError
|
339
|
+
|
340
|
+
|
341
|
+
class ExprValue(TypeKeyBase):
|
342
|
+
"""Type keys for the ``EXPR_VALUE`` QPY item."""
|
343
|
+
|
344
|
+
BOOL = b"b"
|
345
|
+
INT = b"i"
|
346
|
+
FLOAT = b"f"
|
347
|
+
DURATION = b"t"
|
348
|
+
|
349
|
+
@classmethod
|
350
|
+
def assign(cls, obj):
|
351
|
+
if isinstance(obj, bool):
|
352
|
+
return cls.BOOL
|
353
|
+
if isinstance(obj, int):
|
354
|
+
return cls.INT
|
355
|
+
if isinstance(obj, float):
|
356
|
+
return cls.FLOAT
|
357
|
+
if isinstance(obj, Duration):
|
358
|
+
return cls.DURATION
|
359
|
+
raise exceptions.QpyError(
|
360
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
361
|
+
)
|
362
|
+
|
363
|
+
@classmethod
|
364
|
+
def retrieve(cls, type_key):
|
365
|
+
raise NotImplementedError
|
366
|
+
|
367
|
+
|
368
|
+
class CircuitDuration(TypeKeyBase):
|
369
|
+
"""Type keys for the ``DURATION`` QPY item."""
|
370
|
+
|
371
|
+
DT = b"t"
|
372
|
+
NS = b"n"
|
373
|
+
US = b"u"
|
374
|
+
MS = b"m"
|
375
|
+
S = b"s"
|
376
|
+
|
377
|
+
@classmethod
|
378
|
+
def assign(cls, obj):
|
379
|
+
if isinstance(obj, Duration):
|
380
|
+
unit = obj.unit()
|
381
|
+
if unit == "dt":
|
382
|
+
return cls.DT
|
383
|
+
if unit == "ns":
|
384
|
+
return cls.NS
|
385
|
+
if unit == "us":
|
386
|
+
return cls.US
|
387
|
+
if unit == "ms":
|
388
|
+
return cls.MS
|
389
|
+
if unit == "s":
|
390
|
+
return cls.S
|
391
|
+
raise exceptions.QpyError(
|
392
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
393
|
+
)
|
394
|
+
|
395
|
+
@classmethod
|
396
|
+
def retrieve(cls, type_key):
|
397
|
+
raise NotImplementedError
|
398
|
+
|
399
|
+
|
400
|
+
class SymExprEncoding(TypeKeyBase):
|
401
|
+
"""Type keys for the symbolic encoding field in the file header."""
|
402
|
+
|
403
|
+
SYMPY = b"p"
|
404
|
+
SYMENGINE = b"e"
|
405
|
+
|
406
|
+
@classmethod
|
407
|
+
def assign(cls, obj):
|
408
|
+
if obj:
|
409
|
+
return cls.SYMENGINE
|
410
|
+
else:
|
411
|
+
return cls.SYMPY
|
412
|
+
|
413
|
+
@classmethod
|
414
|
+
def retrieve(cls, type_key):
|
415
|
+
raise NotImplementedError
|
@@ -0,0 +1,172 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 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
|
+
Quantum Information (:mod:`qiskit.quantum_info`)
|
15
|
+
================================================
|
16
|
+
|
17
|
+
.. currentmodule:: qiskit.quantum_info
|
18
|
+
|
19
|
+
.. _quantum_info_operators:
|
20
|
+
|
21
|
+
Operators
|
22
|
+
=========
|
23
|
+
|
24
|
+
.. autosummary::
|
25
|
+
:toctree: ../stubs/
|
26
|
+
|
27
|
+
Operator
|
28
|
+
Pauli
|
29
|
+
Clifford
|
30
|
+
ScalarOp
|
31
|
+
SparseObservable
|
32
|
+
SparsePauliOp
|
33
|
+
PauliLindbladMap
|
34
|
+
QubitSparsePauli
|
35
|
+
QubitSparsePauliList
|
36
|
+
CNOTDihedral
|
37
|
+
PauliList
|
38
|
+
pauli_basis
|
39
|
+
get_clifford_gate_names
|
40
|
+
|
41
|
+
.. _quantum_info_states:
|
42
|
+
|
43
|
+
States
|
44
|
+
======
|
45
|
+
|
46
|
+
.. autosummary::
|
47
|
+
:toctree: ../stubs/
|
48
|
+
|
49
|
+
Statevector
|
50
|
+
DensityMatrix
|
51
|
+
StabilizerState
|
52
|
+
|
53
|
+
Channels
|
54
|
+
========
|
55
|
+
.. autosummary::
|
56
|
+
:toctree: ../stubs/
|
57
|
+
|
58
|
+
Choi
|
59
|
+
SuperOp
|
60
|
+
Kraus
|
61
|
+
Stinespring
|
62
|
+
Chi
|
63
|
+
PTM
|
64
|
+
|
65
|
+
Measures
|
66
|
+
========
|
67
|
+
|
68
|
+
.. autofunction:: average_gate_fidelity
|
69
|
+
.. autofunction:: process_fidelity
|
70
|
+
.. autofunction:: gate_error
|
71
|
+
.. autofunction:: diamond_norm
|
72
|
+
.. autofunction:: state_fidelity
|
73
|
+
.. autofunction:: purity
|
74
|
+
.. autofunction:: concurrence
|
75
|
+
.. autofunction:: entropy
|
76
|
+
.. autofunction:: entanglement_of_formation
|
77
|
+
.. autofunction:: mutual_information
|
78
|
+
|
79
|
+
Utility Functions
|
80
|
+
=================
|
81
|
+
|
82
|
+
.. autosummary::
|
83
|
+
:toctree: ../stubs/
|
84
|
+
|
85
|
+
Quaternion
|
86
|
+
|
87
|
+
.. autofunction:: partial_trace
|
88
|
+
.. autofunction:: schmidt_decomposition
|
89
|
+
.. autofunction:: shannon_entropy
|
90
|
+
.. autofunction:: commutator
|
91
|
+
.. autofunction:: anti_commutator
|
92
|
+
.. autofunction:: double_commutator
|
93
|
+
|
94
|
+
Random
|
95
|
+
======
|
96
|
+
|
97
|
+
.. autofunction:: random_statevector
|
98
|
+
.. autofunction:: random_density_matrix
|
99
|
+
.. autofunction:: random_unitary
|
100
|
+
.. autofunction:: random_hermitian
|
101
|
+
.. autofunction:: random_pauli
|
102
|
+
.. autofunction:: random_clifford
|
103
|
+
.. autofunction:: random_quantum_channel
|
104
|
+
.. autofunction:: random_cnotdihedral
|
105
|
+
.. autofunction:: random_pauli_list
|
106
|
+
|
107
|
+
Analysis
|
108
|
+
=========
|
109
|
+
|
110
|
+
.. autofunction:: hellinger_distance
|
111
|
+
.. autofunction:: hellinger_fidelity
|
112
|
+
|
113
|
+
.. autosummary::
|
114
|
+
:toctree: ../stubs/
|
115
|
+
|
116
|
+
Z2Symmetries
|
117
|
+
|
118
|
+
"""
|
119
|
+
|
120
|
+
from __future__ import annotations
|
121
|
+
|
122
|
+
from qiskit._accelerate.pauli_lindblad_map import (
|
123
|
+
QubitSparsePauliList,
|
124
|
+
QubitSparsePauli,
|
125
|
+
PauliLindbladMap,
|
126
|
+
)
|
127
|
+
from qiskit._accelerate.sparse_observable import SparseObservable
|
128
|
+
|
129
|
+
from .analysis import hellinger_distance, hellinger_fidelity, Z2Symmetries
|
130
|
+
from .operators import (
|
131
|
+
Clifford,
|
132
|
+
Operator,
|
133
|
+
Pauli,
|
134
|
+
PauliList,
|
135
|
+
ScalarOp,
|
136
|
+
SparsePauliOp,
|
137
|
+
anti_commutator,
|
138
|
+
commutator,
|
139
|
+
double_commutator,
|
140
|
+
pauli_basis,
|
141
|
+
get_clifford_gate_names,
|
142
|
+
)
|
143
|
+
from .operators.channel import PTM, Chi, Choi, Kraus, Stinespring, SuperOp
|
144
|
+
from .operators.dihedral import CNOTDihedral
|
145
|
+
from .operators.measures import average_gate_fidelity, diamond_norm, gate_error, process_fidelity
|
146
|
+
from .random import (
|
147
|
+
random_clifford,
|
148
|
+
random_cnotdihedral,
|
149
|
+
random_density_matrix,
|
150
|
+
random_hermitian,
|
151
|
+
random_pauli,
|
152
|
+
random_pauli_list,
|
153
|
+
random_quantum_channel,
|
154
|
+
random_statevector,
|
155
|
+
random_unitary,
|
156
|
+
)
|
157
|
+
from .states import (
|
158
|
+
DensityMatrix,
|
159
|
+
StabilizerState,
|
160
|
+
Statevector,
|
161
|
+
concurrence,
|
162
|
+
entanglement_of_formation,
|
163
|
+
entropy,
|
164
|
+
mutual_information,
|
165
|
+
partial_trace,
|
166
|
+
purity,
|
167
|
+
schmidt_decomposition,
|
168
|
+
shannon_entropy,
|
169
|
+
state_fidelity,
|
170
|
+
negativity,
|
171
|
+
)
|
172
|
+
from .quaternion import Quaternion
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 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
|
+
"""Module for functions for post processing results."""
|
14
|
+
from __future__ import annotations
|
15
|
+
from .average import average_data
|
16
|
+
from .distance import hellinger_fidelity, hellinger_distance
|
17
|
+
from .z2_symmetries import Z2Symmetries
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2018.
|
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
|
+
"""A collection of useful functions for post processing results."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import numpy as np
|
18
|
+
|
19
|
+
from .make_observable import make_dict_observable
|
20
|
+
|
21
|
+
|
22
|
+
def average_data(counts: dict, observable: dict | np.ndarray | list) -> float:
|
23
|
+
"""Compute the mean value of an diagonal observable.
|
24
|
+
|
25
|
+
Takes in a diagonal observable in dictionary, list or matrix format and then
|
26
|
+
calculates the sum_i value(i) P(i) where value(i) is the value of the
|
27
|
+
observable for state i.
|
28
|
+
|
29
|
+
Args:
|
30
|
+
counts (dict): a dict of outcomes from an experiment
|
31
|
+
observable (dict or matrix or list): The observable to be averaged over.
|
32
|
+
As an example, ZZ on qubits can be given as:
|
33
|
+
* dict: {"00": 1, "11": 1, "01": -1, "10": -1}
|
34
|
+
* matrix: [[1, 0, 0, 0], [0, -1, 0, 0, ], [0, 0, -1, 0], [0, 0, 0, 1]]
|
35
|
+
* matrix diagonal (list): [1, -1, -1, 1]
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
Double: Average of the observable
|
39
|
+
"""
|
40
|
+
if not isinstance(observable, dict):
|
41
|
+
observable = make_dict_observable(observable)
|
42
|
+
temp = 0
|
43
|
+
tot = sum(counts.values())
|
44
|
+
for key in counts:
|
45
|
+
if key in observable:
|
46
|
+
temp += counts[key] * observable[key] / tot
|
47
|
+
return temp
|