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,984 @@
|
|
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
|
+
r"""
|
15
|
+
===============================================
|
16
|
+
Circuit Library (:mod:`qiskit.circuit.library`)
|
17
|
+
===============================================
|
18
|
+
|
19
|
+
.. currentmodule:: qiskit.circuit.library
|
20
|
+
|
21
|
+
The circuit library is a collection of valuable circuits and building blocks. We call these valuable
|
22
|
+
for different reasons. For instance, they can be used as building blocks for algorithms, serve as
|
23
|
+
benchmarks, or they are circuits conjectured to be difficult to simulate classically.
|
24
|
+
|
25
|
+
Elements in the circuit library are either :class:`.QuantumCircuit`\ s or
|
26
|
+
:class:`~.circuit.Instruction`\ s, allowing them to be easily investigated or plugged into other
|
27
|
+
circuits. This enables fast prototyping and circuit design at higher levels of abstraction.
|
28
|
+
|
29
|
+
For example:
|
30
|
+
|
31
|
+
.. plot::
|
32
|
+
:alt: A circuit implementing a Suzuki-Trotter expansion of a Hamiltonian evolution.
|
33
|
+
:include-source:
|
34
|
+
|
35
|
+
from qiskit.circuit import QuantumCircuit
|
36
|
+
from qiskit.circuit.library import PauliEvolutionGate
|
37
|
+
from qiskit.quantum_info import SparsePauliOp
|
38
|
+
|
39
|
+
hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"], coeffs=[1, 1, -1])
|
40
|
+
gate = PauliEvolutionGate(hamiltonian)
|
41
|
+
|
42
|
+
circuit = QuantumCircuit(hamiltonian.num_qubits)
|
43
|
+
circuit.append(gate, circuit.qubits)
|
44
|
+
|
45
|
+
circuit.draw("mpl")
|
46
|
+
|
47
|
+
This library is organized in different sections:
|
48
|
+
|
49
|
+
* :ref:`Standard gates <standard-gates>`
|
50
|
+
* :ref:`Standard directives <standard-directives>`
|
51
|
+
* :ref:`Standard operations <standard-operations>`
|
52
|
+
* :ref:`Generalized gates <generalized-gates>`
|
53
|
+
* :ref:`Arithmetic operations <arithmetic>`
|
54
|
+
* :ref:`Basis changes <basis-change>`
|
55
|
+
* :ref:`Boolean logic <boolean-logic>`
|
56
|
+
* :ref:`Data encoding <data-encoding>`
|
57
|
+
* :ref:`Data preparation <data-preparation>`
|
58
|
+
* :ref:`Particular operations <particular>`
|
59
|
+
* :ref:`N-local circuits <n-local>`
|
60
|
+
* :ref:`Oracles <oracles>`
|
61
|
+
* :ref:`Template circuits <template>`
|
62
|
+
|
63
|
+
We distinguish into different categories of operations:
|
64
|
+
|
65
|
+
Standard gates
|
66
|
+
These are fundamental quantum gates, a subset of which typically forms a basis gate
|
67
|
+
set on a quantum computer. These are unitary operations represented as :class:`.Gate`.
|
68
|
+
The library also provides standard compiler directives (a :class:`.Barrier`) and non-unitary
|
69
|
+
operations (like :class:`.Measure`).
|
70
|
+
|
71
|
+
Abstract operations
|
72
|
+
This category includes operations that are defined by a mathematical action, but can be implemented
|
73
|
+
with different decompositions. For example, a multi-controlled :class:`.XGate` flips the target
|
74
|
+
qubit if all control qubits are :math:`|1\rangle`, and there are a variety of concrete circuits
|
75
|
+
implementing this operation using lower-level gates. Such abstract operations are represented as
|
76
|
+
:class:`.Gate` or :class:`~.circuit.Instruction`. This allows building the circuit without choosing
|
77
|
+
a concrete implementation of each block and, finally, let the compiler (or you as user) choose the
|
78
|
+
optimal decomposition. For example:
|
79
|
+
|
80
|
+
.. plot::
|
81
|
+
:alt: A circuit with a multi-controlled X gate.
|
82
|
+
:include-source:
|
83
|
+
|
84
|
+
from qiskit.circuit.library import MCXGate
|
85
|
+
mcx = MCXGate(4)
|
86
|
+
|
87
|
+
from qiskit import QuantumCircuit
|
88
|
+
circuit = QuantumCircuit(5)
|
89
|
+
circuit.append(mcx, [0, 1, 4, 2, 3])
|
90
|
+
circuit.draw("mpl")
|
91
|
+
|
92
|
+
For circuits with abstract operations, the circuit context is taken into account during
|
93
|
+
transpilation. For example, if idle qubits are available, they can be used to obtain a shallower
|
94
|
+
circuit::
|
95
|
+
|
96
|
+
from qiskit import transpile
|
97
|
+
|
98
|
+
small_circuit = QuantumCircuit(5) # here we have no idle qubits
|
99
|
+
small_circuit.append(mcx, [0, 1, 4, 2, 3])
|
100
|
+
small_tqc = transpile(small_circuit, basis_gates=["u", "cx"])
|
101
|
+
print("No aux:", small_tqc.count_ops())
|
102
|
+
|
103
|
+
large_circuit = QuantumCircuit(10) # now we will have 5 idle qubits
|
104
|
+
large_circuit.append(mcx, [0, 1, 4, 2, 3])
|
105
|
+
large_tqc = transpile(large_circuit, basis_gates=["u", "cx"])
|
106
|
+
print("With aux:", large_tqc.count_ops())
|
107
|
+
|
108
|
+
Which prints:
|
109
|
+
|
110
|
+
.. parsed-literal::
|
111
|
+
|
112
|
+
No aux: OrderedDict([('u', 41), ('cx', 36)])
|
113
|
+
With aux: OrderedDict([('u', 24), ('cx', 18)])
|
114
|
+
|
115
|
+
Structural operations
|
116
|
+
These operations have a unique decomposition. As the compiler does not need to reason about
|
117
|
+
them on a higher level, they are implemented as functions that return a :class:`.QuantumCircuit`
|
118
|
+
object. For example:
|
119
|
+
|
120
|
+
.. plot::
|
121
|
+
:alt: The real amplitudes ansatz circuit.
|
122
|
+
:include-source:
|
123
|
+
|
124
|
+
from qiskit.circuit.library import real_amplitudes
|
125
|
+
|
126
|
+
ansatz = real_amplitudes(5, entanglement="pairwise")
|
127
|
+
ansatz.draw("mpl")
|
128
|
+
|
129
|
+
|
130
|
+
.. _standard-gates:
|
131
|
+
|
132
|
+
Standard gates
|
133
|
+
==============
|
134
|
+
|
135
|
+
These operations are reversible unitary gates and they all subclass
|
136
|
+
:class:`~qiskit.circuit.Gate`. As a consequence, they all have the methods
|
137
|
+
:meth:`~qiskit.circuit.Gate.to_matrix`, :meth:`~qiskit.circuit.Gate.power`,
|
138
|
+
and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to unitary operations.
|
139
|
+
|
140
|
+
For example:
|
141
|
+
|
142
|
+
.. plot::
|
143
|
+
:alt: The X gate and the matrix, power, and control methods.
|
144
|
+
:include-source:
|
145
|
+
:nofigs:
|
146
|
+
|
147
|
+
from qiskit.circuit.library import XGate
|
148
|
+
gate = XGate()
|
149
|
+
print(gate.to_matrix()) # X gate
|
150
|
+
print(gate.power(1/2).to_matrix()) # √X gate -- see also the SXGate
|
151
|
+
print(gate.control(1).to_matrix()) # CX (controlled X) gate
|
152
|
+
|
153
|
+
.. code-block:: text
|
154
|
+
|
155
|
+
[[0.+0.j 1.+0.j]
|
156
|
+
[1.+0.j 0.+0.j]]
|
157
|
+
[[0.5+0.5j 0.5-0.5j]
|
158
|
+
[0.5-0.5j 0.5+0.5j]]
|
159
|
+
[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]
|
160
|
+
[0.+0.j 0.+0.j 0.+0.j 1.+0.j]
|
161
|
+
[0.+0.j 0.+0.j 1.+0.j 0.+0.j]
|
162
|
+
[0.+0.j 1.+0.j 0.+0.j 0.+0.j]]
|
163
|
+
|
164
|
+
|
165
|
+
The function :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates
|
166
|
+
and operations.
|
167
|
+
|
168
|
+
.. autofunction:: get_standard_gate_name_mapping
|
169
|
+
|
170
|
+
1-qubit standard gates
|
171
|
+
----------------------
|
172
|
+
|
173
|
+
.. autosummary::
|
174
|
+
:toctree: ../stubs/
|
175
|
+
|
176
|
+
HGate
|
177
|
+
IGate
|
178
|
+
PhaseGate
|
179
|
+
RGate
|
180
|
+
RXGate
|
181
|
+
RYGate
|
182
|
+
RZGate
|
183
|
+
SGate
|
184
|
+
SdgGate
|
185
|
+
SXGate
|
186
|
+
SXdgGate
|
187
|
+
TGate
|
188
|
+
TdgGate
|
189
|
+
UGate
|
190
|
+
U1Gate
|
191
|
+
U2Gate
|
192
|
+
U3Gate
|
193
|
+
XGate
|
194
|
+
YGate
|
195
|
+
ZGate
|
196
|
+
|
197
|
+
2-qubit standard gates
|
198
|
+
----------------------
|
199
|
+
|
200
|
+
.. autosummary::
|
201
|
+
:toctree: ../stubs/
|
202
|
+
|
203
|
+
CHGate
|
204
|
+
CPhaseGate
|
205
|
+
CRXGate
|
206
|
+
CRYGate
|
207
|
+
CRZGate
|
208
|
+
CSGate
|
209
|
+
CSdgGate
|
210
|
+
CSXGate
|
211
|
+
CUGate
|
212
|
+
CU1Gate
|
213
|
+
CU3Gate
|
214
|
+
CXGate
|
215
|
+
CYGate
|
216
|
+
CZGate
|
217
|
+
DCXGate
|
218
|
+
ECRGate
|
219
|
+
iSwapGate
|
220
|
+
RXXGate
|
221
|
+
RYYGate
|
222
|
+
RZXGate
|
223
|
+
RZZGate
|
224
|
+
SwapGate
|
225
|
+
XXMinusYYGate
|
226
|
+
XXPlusYYGate
|
227
|
+
|
228
|
+
3+ qubit standard gates
|
229
|
+
-----------------------
|
230
|
+
|
231
|
+
.. autosummary::
|
232
|
+
:toctree: ../stubs/
|
233
|
+
|
234
|
+
C3SXGate
|
235
|
+
C3XGate
|
236
|
+
C4XGate
|
237
|
+
CCXGate
|
238
|
+
CCZGate
|
239
|
+
CSwapGate
|
240
|
+
RCCXGate
|
241
|
+
RC3XGate
|
242
|
+
|
243
|
+
Global standard gates
|
244
|
+
---------------------
|
245
|
+
|
246
|
+
The following gate is global and does not take any qubit arguments.
|
247
|
+
|
248
|
+
.. autosummary::
|
249
|
+
:toctree: ../stubs/
|
250
|
+
|
251
|
+
GlobalPhaseGate
|
252
|
+
|
253
|
+
|
254
|
+
.. _standard-directives:
|
255
|
+
|
256
|
+
Standard Directives
|
257
|
+
===================
|
258
|
+
|
259
|
+
Directives are operations to the quantum stack that are meant to be interpreted by the backend or
|
260
|
+
the transpiler. In general, the transpiler or backend might optionally ignore them if there is no
|
261
|
+
implementation for them.
|
262
|
+
|
263
|
+
* :class:`~qiskit.circuit.Barrier`
|
264
|
+
|
265
|
+
|
266
|
+
.. _standard-operations:
|
267
|
+
|
268
|
+
Standard Operations
|
269
|
+
===================
|
270
|
+
|
271
|
+
Operations are non-reversible changes in the quantum state of the circuit.
|
272
|
+
|
273
|
+
* :class:`~qiskit.circuit.Measure`
|
274
|
+
* :class:`~qiskit.circuit.Reset`
|
275
|
+
|
276
|
+
|
277
|
+
.. _generalized-gates:
|
278
|
+
|
279
|
+
Generalized Gates
|
280
|
+
=================
|
281
|
+
|
282
|
+
This module extends the standard gates with a broader collection of basic gates. This includes
|
283
|
+
gates that are variadic, meaning that the number of qubits depends on the input.
|
284
|
+
For example::
|
285
|
+
|
286
|
+
from qiskit.circuit.library import DiagonalGate
|
287
|
+
|
288
|
+
diagonal = DiagonalGate([1, 1j])
|
289
|
+
print(diagonal.num_qubits)
|
290
|
+
|
291
|
+
diagonal = DiagonalGate([1, 1, 1, -1])
|
292
|
+
print(diagonal.num_qubits)
|
293
|
+
|
294
|
+
which prints:
|
295
|
+
|
296
|
+
.. code-block:: text
|
297
|
+
|
298
|
+
1
|
299
|
+
2
|
300
|
+
|
301
|
+
.. autosummary::
|
302
|
+
:toctree: ../stubs/
|
303
|
+
|
304
|
+
DiagonalGate
|
305
|
+
PermutationGate
|
306
|
+
MCMTGate
|
307
|
+
MCPhaseGate
|
308
|
+
MCXGate
|
309
|
+
MSGate
|
310
|
+
RVGate
|
311
|
+
PauliGate
|
312
|
+
LinearFunction
|
313
|
+
Isometry
|
314
|
+
UnitaryGate
|
315
|
+
UCGate
|
316
|
+
UCPauliRotGate
|
317
|
+
UCRXGate
|
318
|
+
UCRYGate
|
319
|
+
UCRZGate
|
320
|
+
|
321
|
+
The above objects derive :class:`.Gate` or :class:`~.circuit.Instruction`, which allows the
|
322
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
323
|
+
of the following, which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
324
|
+
|
325
|
+
.. autosummary::
|
326
|
+
:toctree: ../stubs/
|
327
|
+
:template: autosummary/class_no_inherited_members.rst
|
328
|
+
|
329
|
+
Diagonal
|
330
|
+
MCMT
|
331
|
+
MCMTVChain
|
332
|
+
MCXGrayCode
|
333
|
+
MCXRecursive
|
334
|
+
MCXVChain
|
335
|
+
Permutation
|
336
|
+
GMS
|
337
|
+
GR
|
338
|
+
GRX
|
339
|
+
GRY
|
340
|
+
GRZ
|
341
|
+
|
342
|
+
.. _boolean-logic:
|
343
|
+
|
344
|
+
Boolean Logic
|
345
|
+
=============
|
346
|
+
|
347
|
+
These :class:`.Gate`\ s implement boolean logic operations, such as the logical
|
348
|
+
``or`` of a set of qubit states.
|
349
|
+
|
350
|
+
.. autosummary::
|
351
|
+
:toctree: ../stubs/
|
352
|
+
|
353
|
+
AndGate
|
354
|
+
OrGate
|
355
|
+
BitwiseXorGate
|
356
|
+
InnerProductGate
|
357
|
+
|
358
|
+
The above objects derive :class:`.Gate` (or return this type), which allows the
|
359
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
360
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
361
|
+
|
362
|
+
.. autosummary::
|
363
|
+
:toctree: ../stubs/
|
364
|
+
:template: autosummary/class_no_inherited_members.rst
|
365
|
+
|
366
|
+
AND
|
367
|
+
OR
|
368
|
+
XOR
|
369
|
+
InnerProduct
|
370
|
+
|
371
|
+
|
372
|
+
A random bitwise ``xor`` circuit can be directly generated using:
|
373
|
+
|
374
|
+
.. autosummary::
|
375
|
+
:toctree: ../stubs/
|
376
|
+
|
377
|
+
random_bitwise_xor
|
378
|
+
|
379
|
+
.. _basis-change:
|
380
|
+
|
381
|
+
Basis Change
|
382
|
+
============
|
383
|
+
|
384
|
+
These gates perform basis transformations of the qubit states. For example,
|
385
|
+
in the case of the Quantum Fourier Transform (QFT), it transforms between
|
386
|
+
the computational basis and the Fourier basis.
|
387
|
+
|
388
|
+
.. autosummary::
|
389
|
+
:toctree: ../stubs/
|
390
|
+
|
391
|
+
QFTGate
|
392
|
+
|
393
|
+
The above object derives :class:`.Gate`, which allows the
|
394
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
395
|
+
of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
|
396
|
+
|
397
|
+
.. autosummary::
|
398
|
+
:toctree: ../stubs/
|
399
|
+
:template: autosummary/class_no_inherited_members.rst
|
400
|
+
|
401
|
+
QFT
|
402
|
+
|
403
|
+
.. _arithmetic:
|
404
|
+
|
405
|
+
Arithmetic
|
406
|
+
==========
|
407
|
+
|
408
|
+
These gates and circuits perform classical arithmetic, such as addition or multiplication.
|
409
|
+
|
410
|
+
Adders
|
411
|
+
------
|
412
|
+
|
413
|
+
Adders compute the sum of two :math:`n`-qubit registers, that is
|
414
|
+
|
415
|
+
.. math::
|
416
|
+
|
417
|
+
|a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{t},
|
418
|
+
|
419
|
+
where the size :math:`t` of the output register depends on the type of adder used.
|
420
|
+
|
421
|
+
.. autosummary::
|
422
|
+
:toctree: ../stubs/
|
423
|
+
|
424
|
+
ModularAdderGate
|
425
|
+
HalfAdderGate
|
426
|
+
FullAdderGate
|
427
|
+
|
428
|
+
The above objects derive :class:`.Gate`, which allows the
|
429
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
430
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
431
|
+
|
432
|
+
.. autosummary::
|
433
|
+
:toctree: ../stubs/
|
434
|
+
:template: autosummary/class_no_inherited_members.rst
|
435
|
+
|
436
|
+
DraperQFTAdder
|
437
|
+
CDKMRippleCarryAdder
|
438
|
+
VBERippleCarryAdder
|
439
|
+
|
440
|
+
Multipliers
|
441
|
+
-----------
|
442
|
+
|
443
|
+
Multipliers compute the product of two :math:`n`-qubit registers, that is
|
444
|
+
|
445
|
+
.. math::
|
446
|
+
|
447
|
+
|a\rangle_n |b\rangle_n |0\rangle_{t} \mapsto |a\rangle_n |b\rangle_n |a \cdot b\rangle_t,
|
448
|
+
|
449
|
+
where :math:`t` is the number of bits used to represent the result.
|
450
|
+
|
451
|
+
.. autosummary::
|
452
|
+
:toctree: ../stubs/
|
453
|
+
|
454
|
+
MultiplierGate
|
455
|
+
|
456
|
+
The above object derives :class:`.Gate`, which allows the
|
457
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
458
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
459
|
+
|
460
|
+
.. autosummary::
|
461
|
+
:toctree: ../stubs/
|
462
|
+
:template: autosummary/class_no_inherited_members.rst
|
463
|
+
|
464
|
+
HRSCumulativeMultiplier
|
465
|
+
RGQFTMultiplier
|
466
|
+
|
467
|
+
Amplitude Functions
|
468
|
+
-------------------
|
469
|
+
|
470
|
+
An amplitude function approximates a function :math:`f: \{0, ..., 2^n - 1\} \rightarrow [0, 1]`
|
471
|
+
applied on the amplitudes of :math:`n` qubits. See the class docstring for more detailed information.
|
472
|
+
|
473
|
+
.. autosummary::
|
474
|
+
:toctree: ../stubs/
|
475
|
+
|
476
|
+
LinearAmplitudeFunctionGate
|
477
|
+
|
478
|
+
The above object derives :class:`.Gate`, which allows the
|
479
|
+
compiler to reason about it on an abstract level. We therefore suggest using this instead
|
480
|
+
of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
|
481
|
+
|
482
|
+
.. autosummary::
|
483
|
+
:toctree: ../stubs/
|
484
|
+
:template: autosummary/class_no_inherited_members.rst
|
485
|
+
|
486
|
+
LinearAmplitudeFunction
|
487
|
+
|
488
|
+
Functional Pauli Rotations
|
489
|
+
--------------------------
|
490
|
+
|
491
|
+
Functional Pauli rotations implement operations of the form
|
492
|
+
|
493
|
+
.. math::
|
494
|
+
|
495
|
+
|x\rangle |0\rangle \mapsto \cos(f(x))|x\rangle|0\rangle + \sin(f(x))|x\rangle|1\rangle
|
496
|
+
|
497
|
+
using Pauli-:math:`Y` rotations for different types of functions :math:`f`, such as linear,
|
498
|
+
polynomial, or a piecewise version of these. They are similar to the amplitude functions above, but
|
499
|
+
without pre- and post-processing for the domain and image of the target function.
|
500
|
+
|
501
|
+
.. autosummary::
|
502
|
+
:toctree: ../stubs/
|
503
|
+
|
504
|
+
LinearPauliRotationsGate
|
505
|
+
PolynomialPauliRotationsGate
|
506
|
+
PiecewiseLinearPauliRotationsGate
|
507
|
+
PiecewisePolynomialPauliRotationsGate
|
508
|
+
PiecewiseChebyshevGate
|
509
|
+
|
510
|
+
The above objects derive :class:`.Gate`, which allows the
|
511
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
512
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
513
|
+
|
514
|
+
.. autosummary::
|
515
|
+
:toctree: ../stubs/
|
516
|
+
:template: autosummary/class_no_inherited_members.rst
|
517
|
+
|
518
|
+
FunctionalPauliRotations
|
519
|
+
LinearPauliRotations
|
520
|
+
PolynomialPauliRotations
|
521
|
+
PiecewiseLinearPauliRotations
|
522
|
+
PiecewisePolynomialPauliRotations
|
523
|
+
PiecewiseChebyshev
|
524
|
+
|
525
|
+
|
526
|
+
Other arithmetic functions
|
527
|
+
--------------------------
|
528
|
+
|
529
|
+
Here we list additional arithmetic circuits. See the individual class docstrings for more details.
|
530
|
+
|
531
|
+
.. autosummary::
|
532
|
+
:toctree: ../stubs/
|
533
|
+
|
534
|
+
ExactReciprocalGate
|
535
|
+
IntegerComparatorGate
|
536
|
+
QuadraticFormGate
|
537
|
+
WeightedSumGate
|
538
|
+
|
539
|
+
The above objects derive :class:`.Gate`, which allows the
|
540
|
+
compiler to reason about them on an abstract level. We therefore suggest using these instead
|
541
|
+
of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
|
542
|
+
|
543
|
+
.. autosummary::
|
544
|
+
:toctree: ../stubs/
|
545
|
+
:template: autosummary/class_no_inherited_members.rst
|
546
|
+
|
547
|
+
ExactReciprocal
|
548
|
+
IntegerComparator
|
549
|
+
QuadraticForm
|
550
|
+
WeightedAdder
|
551
|
+
|
552
|
+
.. _particular:
|
553
|
+
|
554
|
+
Particular Quantum Circuits
|
555
|
+
===========================
|
556
|
+
|
557
|
+
The following gates and quantum circuits define specific operations of interest:
|
558
|
+
|
559
|
+
.. autosummary::
|
560
|
+
:toctree: ../stubs/
|
561
|
+
|
562
|
+
fourier_checking
|
563
|
+
hidden_linear_function
|
564
|
+
iqp
|
565
|
+
random_iqp
|
566
|
+
quantum_volume
|
567
|
+
phase_estimation
|
568
|
+
grover_operator
|
569
|
+
unitary_overlap
|
570
|
+
GraphStateGate
|
571
|
+
PauliEvolutionGate
|
572
|
+
HamiltonianGate
|
573
|
+
|
574
|
+
Below we provide the same operations as classes deriving :class:`.QuantumCircuit`. For better
|
575
|
+
runtime and compiler performance, however, we suggest using above functions and gates.
|
576
|
+
|
577
|
+
.. autosummary::
|
578
|
+
:toctree: ../stubs/
|
579
|
+
:template: autosummary/class_no_inherited_members.rst
|
580
|
+
|
581
|
+
FourierChecking
|
582
|
+
GraphState
|
583
|
+
HiddenLinearFunction
|
584
|
+
IQP
|
585
|
+
QuantumVolume
|
586
|
+
PhaseEstimation
|
587
|
+
GroverOperator
|
588
|
+
UnitaryOverlap
|
589
|
+
|
590
|
+
.. _n-local:
|
591
|
+
|
592
|
+
N-local circuits
|
593
|
+
================
|
594
|
+
|
595
|
+
The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
|
596
|
+
a broad set of variational quantum algorithms.
|
597
|
+
|
598
|
+
For example, we can build a variational circuit
|
599
|
+
|
600
|
+
.. plot::
|
601
|
+
:alt: The efficient SU2 ansatz circuit...
|
602
|
+
:context:
|
603
|
+
|
604
|
+
from qiskit.circuit.library import efficient_su2
|
605
|
+
|
606
|
+
num_qubits = 4
|
607
|
+
ansatz = efficient_su2(num_qubits, entanglement="pairwise")
|
608
|
+
ansatz.draw("mpl")
|
609
|
+
|
610
|
+
and combine it with
|
611
|
+
|
612
|
+
.. plot::
|
613
|
+
:alt: ... combined with the ZZ feature map.
|
614
|
+
:include-source:
|
615
|
+
:context:
|
616
|
+
|
617
|
+
from qiskit.circuit.library import zz_feature_map
|
618
|
+
|
619
|
+
circuit = zz_feature_map(num_qubits)
|
620
|
+
circuit.barrier()
|
621
|
+
circuit.compose(ansatz, inplace=True)
|
622
|
+
|
623
|
+
circuit.draw("mpl")
|
624
|
+
|
625
|
+
to obtain a circuit for variational quantum classification.
|
626
|
+
|
627
|
+
The following functions all construct variational circuits and are optimized for a fast
|
628
|
+
construction:
|
629
|
+
|
630
|
+
.. autosummary::
|
631
|
+
:toctree: ../stubs/
|
632
|
+
|
633
|
+
n_local
|
634
|
+
efficient_su2
|
635
|
+
real_amplitudes
|
636
|
+
pauli_two_design
|
637
|
+
excitation_preserving
|
638
|
+
qaoa_ansatz
|
639
|
+
hamiltonian_variational_ansatz
|
640
|
+
evolved_operator_ansatz
|
641
|
+
|
642
|
+
While we suggest using the above functions, we also continue supporting the following
|
643
|
+
:class:`.BlueprintCircuit`, which wrap the circuits into a block
|
644
|
+
and allow for inplace mutations of the circuits:
|
645
|
+
|
646
|
+
.. autosummary::
|
647
|
+
:toctree: ../stubs/
|
648
|
+
:template: autosummary/class_no_inherited_members.rst
|
649
|
+
|
650
|
+
NLocal
|
651
|
+
TwoLocal
|
652
|
+
PauliTwoDesign
|
653
|
+
RealAmplitudes
|
654
|
+
EfficientSU2
|
655
|
+
EvolvedOperatorAnsatz
|
656
|
+
ExcitationPreserving
|
657
|
+
QAOAAnsatz
|
658
|
+
|
659
|
+
|
660
|
+
.. _data-encoding:
|
661
|
+
|
662
|
+
Data encoding circuits
|
663
|
+
======================
|
664
|
+
|
665
|
+
The following functions return a parameterized :class:`.QuantumCircuit` to use as data
|
666
|
+
encoding circuits in a series of variational quantum algorithms:
|
667
|
+
|
668
|
+
.. autosummary::
|
669
|
+
:toctree: ../stubs/
|
670
|
+
|
671
|
+
pauli_feature_map
|
672
|
+
z_feature_map
|
673
|
+
zz_feature_map
|
674
|
+
|
675
|
+
While we suggest using the above functions, we also continue supporting the following
|
676
|
+
:class:`.BlueprintCircuit`, which wrap the circuits into a block
|
677
|
+
and allow for inplace mutations of the circuits:
|
678
|
+
|
679
|
+
.. autosummary::
|
680
|
+
:toctree: ../stubs/
|
681
|
+
:template: autosummary/class_no_inherited_members.rst
|
682
|
+
|
683
|
+
PauliFeatureMap
|
684
|
+
ZFeatureMap
|
685
|
+
ZZFeatureMap
|
686
|
+
|
687
|
+
|
688
|
+
.. _data-preparation:
|
689
|
+
|
690
|
+
Data preparation circuits
|
691
|
+
=========================
|
692
|
+
|
693
|
+
The following operations are used for state preparation:
|
694
|
+
|
695
|
+
.. autosummary::
|
696
|
+
:toctree: ../stubs/
|
697
|
+
|
698
|
+
StatePreparation
|
699
|
+
Initialize
|
700
|
+
|
701
|
+
.. _oracles:
|
702
|
+
|
703
|
+
Oracles
|
704
|
+
=======
|
705
|
+
|
706
|
+
An "oracle" can refer to a variety of black-box operations on quantum states. Here, we consider
|
707
|
+
oracles implementing boolean functions :math:`f: \{0, ..., 2^n - 1\} \rightarrow \{0, 1\}` via
|
708
|
+
phase-flips
|
709
|
+
|
710
|
+
.. math::
|
711
|
+
|
712
|
+
|x\rangle_n \mapsto (-1)^{f(x)} |x\rangle_n,
|
713
|
+
|
714
|
+
or bit-flips
|
715
|
+
|
716
|
+
.. math::
|
717
|
+
|
718
|
+
|x\rangle_n |b\rangle \mapsto |x\rangle_n |b \oplus f(x)\rangle.
|
719
|
+
|
720
|
+
These are implemented in
|
721
|
+
|
722
|
+
.. autosummary::
|
723
|
+
:toctree: ../stubs/
|
724
|
+
|
725
|
+
PhaseOracleGate
|
726
|
+
BitFlipOracleGate
|
727
|
+
|
728
|
+
and an important building block for Grover's algorithm (see :func:`.grover_operator`).
|
729
|
+
|
730
|
+
In addition to the :class:`.Gate`-based implementation we also support the
|
731
|
+
:class:`.QuantumCircuit`-version of the phase flip oracle
|
732
|
+
|
733
|
+
.. autosummary::
|
734
|
+
:toctree: ../stubs/
|
735
|
+
:template: autosummary/class_no_inherited_members.rst
|
736
|
+
|
737
|
+
PhaseOracle
|
738
|
+
|
739
|
+
|
740
|
+
.. _template:
|
741
|
+
|
742
|
+
Template circuits
|
743
|
+
=================
|
744
|
+
|
745
|
+
Templates are functions that return circuits that compute the identity. They are used at
|
746
|
+
circuit optimization where matching part of the template allows the compiler
|
747
|
+
to replace the match with the inverse of the remainder from the template.
|
748
|
+
|
749
|
+
In this example, the identity constant in a template is checked:
|
750
|
+
|
751
|
+
.. plot::
|
752
|
+
:alt: A Toffoli template circuit.
|
753
|
+
:include-source:
|
754
|
+
:nofigs:
|
755
|
+
|
756
|
+
from qiskit.circuit.library.templates import template_nct_4b_1
|
757
|
+
from qiskit.quantum_info import Operator
|
758
|
+
import numpy as np
|
759
|
+
|
760
|
+
template = template_nct_4b_1()
|
761
|
+
|
762
|
+
identity = np.identity(2 ** len(template.qubits), dtype=complex)
|
763
|
+
data = Operator(template).data
|
764
|
+
np.allclose(data, identity) # True, template_nct_4b_1 is the identity
|
765
|
+
|
766
|
+
NCT (Not-CNOT-Toffoli) template circuits
|
767
|
+
----------------------------------------
|
768
|
+
|
769
|
+
Template circuits for :class:`~qiskit.circuit.library.XGate`,
|
770
|
+
:class:`~qiskit.circuit.library.CXGate`,
|
771
|
+
and :class:`~qiskit.circuit.library.CCXGate` (Toffoli) gates.
|
772
|
+
|
773
|
+
**Reference:**
|
774
|
+
Maslov, D. and Dueck, G. W. and Miller, D. M.,
|
775
|
+
Techniques for the synthesis of reversible Toffoli networks, 2007
|
776
|
+
http://dx.doi.org/10.1145/1278349.1278355
|
777
|
+
|
778
|
+
.. currentmodule:: qiskit.circuit.library.templates.nct
|
779
|
+
.. autofunction:: template_nct_2a_1
|
780
|
+
.. autofunction:: template_nct_2a_2
|
781
|
+
.. autofunction:: template_nct_2a_3
|
782
|
+
.. autofunction:: template_nct_4a_1
|
783
|
+
.. autofunction:: template_nct_4a_2
|
784
|
+
.. autofunction:: template_nct_4a_3
|
785
|
+
.. autofunction:: template_nct_4b_1
|
786
|
+
.. autofunction:: template_nct_4b_2
|
787
|
+
.. autofunction:: template_nct_5a_1
|
788
|
+
.. autofunction:: template_nct_5a_2
|
789
|
+
.. autofunction:: template_nct_5a_3
|
790
|
+
.. autofunction:: template_nct_5a_4
|
791
|
+
.. autofunction:: template_nct_6a_1
|
792
|
+
.. autofunction:: template_nct_6a_2
|
793
|
+
.. autofunction:: template_nct_6a_3
|
794
|
+
.. autofunction:: template_nct_6a_4
|
795
|
+
.. autofunction:: template_nct_6b_1
|
796
|
+
.. autofunction:: template_nct_6b_2
|
797
|
+
.. autofunction:: template_nct_6c_1
|
798
|
+
.. autofunction:: template_nct_7a_1
|
799
|
+
.. autofunction:: template_nct_7b_1
|
800
|
+
.. autofunction:: template_nct_7c_1
|
801
|
+
.. autofunction:: template_nct_7d_1
|
802
|
+
.. autofunction:: template_nct_7e_1
|
803
|
+
.. autofunction:: template_nct_9a_1
|
804
|
+
.. autofunction:: template_nct_9c_1
|
805
|
+
.. autofunction:: template_nct_9c_2
|
806
|
+
.. autofunction:: template_nct_9c_3
|
807
|
+
.. autofunction:: template_nct_9c_4
|
808
|
+
.. autofunction:: template_nct_9c_5
|
809
|
+
.. autofunction:: template_nct_9c_6
|
810
|
+
.. autofunction:: template_nct_9c_7
|
811
|
+
.. autofunction:: template_nct_9c_8
|
812
|
+
.. autofunction:: template_nct_9c_9
|
813
|
+
.. autofunction:: template_nct_9c_10
|
814
|
+
.. autofunction:: template_nct_9c_11
|
815
|
+
.. autofunction:: template_nct_9c_12
|
816
|
+
.. autofunction:: template_nct_9d_1
|
817
|
+
.. autofunction:: template_nct_9d_2
|
818
|
+
.. autofunction:: template_nct_9d_3
|
819
|
+
.. autofunction:: template_nct_9d_4
|
820
|
+
.. autofunction:: template_nct_9d_5
|
821
|
+
.. autofunction:: template_nct_9d_6
|
822
|
+
.. autofunction:: template_nct_9d_7
|
823
|
+
.. autofunction:: template_nct_9d_8
|
824
|
+
.. autofunction:: template_nct_9d_9
|
825
|
+
.. autofunction:: template_nct_9d_10
|
826
|
+
.. currentmodule:: qiskit.circuit.library
|
827
|
+
|
828
|
+
Clifford template circuits
|
829
|
+
--------------------------
|
830
|
+
|
831
|
+
Template circuits over Clifford gates.
|
832
|
+
|
833
|
+
.. autofunction:: clifford_2_1
|
834
|
+
.. autofunction:: clifford_2_2
|
835
|
+
.. autofunction:: clifford_2_3
|
836
|
+
.. autofunction:: clifford_2_4
|
837
|
+
.. autofunction:: clifford_3_1
|
838
|
+
.. autofunction:: clifford_4_1
|
839
|
+
.. autofunction:: clifford_4_2
|
840
|
+
.. autofunction:: clifford_4_3
|
841
|
+
.. autofunction:: clifford_4_4
|
842
|
+
.. autofunction:: clifford_5_1
|
843
|
+
.. autofunction:: clifford_6_1
|
844
|
+
.. autofunction:: clifford_6_2
|
845
|
+
.. autofunction:: clifford_6_3
|
846
|
+
.. autofunction:: clifford_6_4
|
847
|
+
.. autofunction:: clifford_6_5
|
848
|
+
.. autofunction:: clifford_8_1
|
849
|
+
.. autofunction:: clifford_8_2
|
850
|
+
.. autofunction:: clifford_8_3
|
851
|
+
|
852
|
+
RZXGate template circuits
|
853
|
+
-------------------------
|
854
|
+
|
855
|
+
Template circuits with :class:`~qiskit.circuit.library.RZXGate`.
|
856
|
+
|
857
|
+
.. autofunction:: rzx_yz
|
858
|
+
.. autofunction:: rzx_xz
|
859
|
+
.. autofunction:: rzx_cy
|
860
|
+
.. autofunction:: rzx_zz1
|
861
|
+
.. autofunction:: rzx_zz2
|
862
|
+
.. autofunction:: rzx_zz3
|
863
|
+
|
864
|
+
"""
|
865
|
+
|
866
|
+
from .standard_gates import *
|
867
|
+
from .templates import *
|
868
|
+
from ..barrier import Barrier
|
869
|
+
from ..measure import Measure
|
870
|
+
from ..reset import Reset
|
871
|
+
|
872
|
+
|
873
|
+
from .blueprintcircuit import BlueprintCircuit
|
874
|
+
from .generalized_gates import (
|
875
|
+
Diagonal,
|
876
|
+
DiagonalGate,
|
877
|
+
MCMT,
|
878
|
+
MCMTVChain,
|
879
|
+
Permutation,
|
880
|
+
PermutationGate,
|
881
|
+
GMS,
|
882
|
+
MCMTGate,
|
883
|
+
MSGate,
|
884
|
+
GR,
|
885
|
+
GRX,
|
886
|
+
GRY,
|
887
|
+
GRZ,
|
888
|
+
RVGate,
|
889
|
+
PauliGate,
|
890
|
+
LinearFunction,
|
891
|
+
Isometry,
|
892
|
+
UnitaryGate,
|
893
|
+
UCGate,
|
894
|
+
UCPauliRotGate,
|
895
|
+
UCRXGate,
|
896
|
+
UCRYGate,
|
897
|
+
UCRZGate,
|
898
|
+
)
|
899
|
+
from .pauli_evolution import PauliEvolutionGate
|
900
|
+
from .hamiltonian_gate import HamiltonianGate
|
901
|
+
from .boolean_logic import (
|
902
|
+
AND,
|
903
|
+
AndGate,
|
904
|
+
OR,
|
905
|
+
OrGate,
|
906
|
+
XOR,
|
907
|
+
BitwiseXorGate,
|
908
|
+
random_bitwise_xor,
|
909
|
+
InnerProduct,
|
910
|
+
InnerProductGate,
|
911
|
+
)
|
912
|
+
from .basis_change import QFT, QFTGate
|
913
|
+
from .arithmetic import (
|
914
|
+
ModularAdderGate,
|
915
|
+
HalfAdderGate,
|
916
|
+
FullAdderGate,
|
917
|
+
MultiplierGate,
|
918
|
+
FunctionalPauliRotations,
|
919
|
+
LinearPauliRotations,
|
920
|
+
LinearPauliRotationsGate,
|
921
|
+
PiecewiseLinearPauliRotations,
|
922
|
+
PiecewiseLinearPauliRotationsGate,
|
923
|
+
PiecewisePolynomialPauliRotations,
|
924
|
+
PiecewisePolynomialPauliRotationsGate,
|
925
|
+
PolynomialPauliRotations,
|
926
|
+
PolynomialPauliRotationsGate,
|
927
|
+
IntegerComparator,
|
928
|
+
IntegerComparatorGate,
|
929
|
+
WeightedAdder,
|
930
|
+
WeightedSumGate,
|
931
|
+
QuadraticForm,
|
932
|
+
QuadraticFormGate,
|
933
|
+
LinearAmplitudeFunction,
|
934
|
+
LinearAmplitudeFunctionGate,
|
935
|
+
VBERippleCarryAdder,
|
936
|
+
CDKMRippleCarryAdder,
|
937
|
+
DraperQFTAdder,
|
938
|
+
PiecewiseChebyshev,
|
939
|
+
PiecewiseChebyshevGate,
|
940
|
+
HRSCumulativeMultiplier,
|
941
|
+
RGQFTMultiplier,
|
942
|
+
ExactReciprocal,
|
943
|
+
ExactReciprocalGate,
|
944
|
+
)
|
945
|
+
|
946
|
+
from .n_local import (
|
947
|
+
n_local,
|
948
|
+
NLocal,
|
949
|
+
TwoLocal,
|
950
|
+
pauli_two_design,
|
951
|
+
PauliTwoDesign,
|
952
|
+
real_amplitudes,
|
953
|
+
RealAmplitudes,
|
954
|
+
efficient_su2,
|
955
|
+
EfficientSU2,
|
956
|
+
hamiltonian_variational_ansatz,
|
957
|
+
evolved_operator_ansatz,
|
958
|
+
EvolvedOperatorAnsatz,
|
959
|
+
excitation_preserving,
|
960
|
+
ExcitationPreserving,
|
961
|
+
qaoa_ansatz,
|
962
|
+
QAOAAnsatz,
|
963
|
+
)
|
964
|
+
from .data_preparation import (
|
965
|
+
z_feature_map,
|
966
|
+
zz_feature_map,
|
967
|
+
pauli_feature_map,
|
968
|
+
PauliFeatureMap,
|
969
|
+
ZFeatureMap,
|
970
|
+
ZZFeatureMap,
|
971
|
+
StatePreparation,
|
972
|
+
Initialize,
|
973
|
+
)
|
974
|
+
from .quantum_volume import QuantumVolume, quantum_volume
|
975
|
+
from .fourier_checking import FourierChecking, fourier_checking
|
976
|
+
from .graph_state import GraphState, GraphStateGate
|
977
|
+
from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
|
978
|
+
from .iqp import IQP, iqp, random_iqp
|
979
|
+
from .phase_estimation import PhaseEstimation, phase_estimation
|
980
|
+
from .grover_operator import GroverOperator, grover_operator
|
981
|
+
from .phase_oracle import PhaseOracle, PhaseOracleGate
|
982
|
+
from .bit_flip_oracle import BitFlipOracleGate
|
983
|
+
from .overlap import UnitaryOverlap, unitary_overlap
|
984
|
+
from .standard_gates import get_standard_gate_name_mapping
|