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,239 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 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
|
+
"""Phase Oracle object."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from qiskit.circuit import QuantumCircuit, Gate
|
18
|
+
|
19
|
+
from qiskit.synthesis.boolean.boolean_expression import BooleanExpression
|
20
|
+
|
21
|
+
|
22
|
+
class PhaseOracle(QuantumCircuit):
|
23
|
+
r"""Phase Oracle.
|
24
|
+
|
25
|
+
The Phase Oracle object constructs circuits for any arbitrary
|
26
|
+
input logical expressions. A logical expression is composed of logical operators
|
27
|
+
`&` (logical `AND`), `|` (logical `OR`),
|
28
|
+
`~` (logical `NOT`), and `^` (logical `XOR`).
|
29
|
+
as well as symbols for literals (variables).
|
30
|
+
For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
|
31
|
+
are both valid string representation of boolean logical expressions.
|
32
|
+
|
33
|
+
A phase oracle for a boolean function `f(x)` performs the following
|
34
|
+
quantum operation:
|
35
|
+
|
36
|
+
.. math::
|
37
|
+
|
38
|
+
|x\rangle \mapsto (-1)^{f(x)}|x\rangle
|
39
|
+
|
40
|
+
For convenience, this oracle, in addition to parsing arbitrary logical expressions,
|
41
|
+
also supports input strings in the `DIMACS CNF format
|
42
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
43
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
44
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
45
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
46
|
+
or more literals. See :meth:`qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file`.
|
47
|
+
|
48
|
+
From 16 variables on, possible performance issues should be expected when using the
|
49
|
+
default synthesizer.
|
50
|
+
"""
|
51
|
+
|
52
|
+
def __init__(
|
53
|
+
self,
|
54
|
+
expression: str,
|
55
|
+
var_order: list[str] | None = None,
|
56
|
+
) -> None:
|
57
|
+
"""
|
58
|
+
Args:
|
59
|
+
expression: A Python-like boolean expression.
|
60
|
+
var_order: A list with the order in which variables will be created.
|
61
|
+
(default: by appearance)
|
62
|
+
"""
|
63
|
+
self.boolean_expression = BooleanExpression(expression, var_order=var_order)
|
64
|
+
oracle = self.boolean_expression.synth(circuit_type="phase")
|
65
|
+
|
66
|
+
super().__init__(oracle.num_qubits, name="Phase Oracle")
|
67
|
+
|
68
|
+
self.compose(oracle, inplace=True, copy=False)
|
69
|
+
|
70
|
+
def evaluate_bitstring(self, bitstring: str) -> bool:
|
71
|
+
"""Evaluate the oracle on a bitstring.
|
72
|
+
This evaluation is done classically without any quantum circuit.
|
73
|
+
|
74
|
+
Args:
|
75
|
+
bitstring: The bitstring for which to evaluate. The input bitstring is expected to be
|
76
|
+
in little-endian order.
|
77
|
+
|
78
|
+
Returns:
|
79
|
+
True if the bitstring is a good state, False otherwise.
|
80
|
+
"""
|
81
|
+
return self.boolean_expression.simulate(bitstring[::-1])
|
82
|
+
|
83
|
+
@classmethod
|
84
|
+
def from_dimacs_file(cls, filename: str):
|
85
|
+
r"""Create a PhaseOracle from the string in the DIMACS format.
|
86
|
+
|
87
|
+
It is possible to build a PhaseOracle from a file in `DIMACS CNF format
|
88
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
89
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
90
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
91
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
92
|
+
or more literals.
|
93
|
+
|
94
|
+
The following is an example of a CNF expressed in the DIMACS format:
|
95
|
+
|
96
|
+
.. code:: text
|
97
|
+
|
98
|
+
c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
|
99
|
+
p cnf 3 5
|
100
|
+
-1 -2 -3 0
|
101
|
+
1 -2 3 0
|
102
|
+
1 2 -3 0
|
103
|
+
1 -2 -3 0
|
104
|
+
-1 2 3 0
|
105
|
+
|
106
|
+
The first line, following the `c` character, is a comment. The second line specifies that
|
107
|
+
the CNF is over three boolean variables --- let us call them :math:`x_1, x_2, x_3`, and
|
108
|
+
contains five clauses. The five clauses, listed afterwards, are implicitly joined by the
|
109
|
+
logical `AND` operator, :math:`\land`, while the variables in each clause, represented by
|
110
|
+
their indices, are implicitly disjoined by the logical `OR` operator, :math:`lor`. The
|
111
|
+
:math:`-` symbol preceding a boolean variable index corresponds to the logical `NOT`
|
112
|
+
operator, :math:`lnot`. Character `0` (zero) marks the end of each clause. Essentially,
|
113
|
+
the code above corresponds to the following CNF:
|
114
|
+
|
115
|
+
:math:`(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)
|
116
|
+
\land (x_1 \lor \lnot x_2 \lor x_3)
|
117
|
+
\land (x_1 \lor x_2 \lor \lnot x_3)
|
118
|
+
\land (x_1 \lor \lnot x_2 \lor \lnot x_3)
|
119
|
+
\land (\lnot x_1 \lor x_2 \lor x_3)`.
|
120
|
+
|
121
|
+
|
122
|
+
Args:
|
123
|
+
filename: A file in DIMACS format.
|
124
|
+
|
125
|
+
Returns:
|
126
|
+
PhaseOracle: A quantum circuit with a phase oracle.
|
127
|
+
"""
|
128
|
+
expr = BooleanExpression.from_dimacs_file(filename)
|
129
|
+
return cls(expr)
|
130
|
+
|
131
|
+
|
132
|
+
class PhaseOracleGate(Gate):
|
133
|
+
r"""Implements a phase oracle.
|
134
|
+
|
135
|
+
The Phase Oracle Gate object constructs circuits for any arbitrary
|
136
|
+
input logical expressions. A logical expression is composed of logical operators
|
137
|
+
`&` (logical `AND`), `|` (logical `OR`),
|
138
|
+
`~` (logical `NOT`), and `^` (logical `XOR`).
|
139
|
+
as well as symbols for literals (variables).
|
140
|
+
For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
|
141
|
+
are both valid string representation of boolean logical expressions.
|
142
|
+
|
143
|
+
A phase oracle for a boolean function `f(x)` performs the following
|
144
|
+
quantum operation:
|
145
|
+
|
146
|
+
.. math::
|
147
|
+
|
148
|
+
|x\rangle \mapsto (-1)^{f(x)}|x\rangle
|
149
|
+
|
150
|
+
For convenience, this oracle, in addition to parsing arbitrary logical expressions,
|
151
|
+
also supports input strings in the `DIMACS CNF format
|
152
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
153
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
154
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
155
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
156
|
+
or more literals. See :meth:`qiskit.circuit.library.phase_oracle.PhaseOracleGate.from_dimacs_file`.
|
157
|
+
|
158
|
+
From 16 variables on, possible performance issues should be expected when using the
|
159
|
+
default synthesizer.
|
160
|
+
"""
|
161
|
+
|
162
|
+
def __init__(
|
163
|
+
self,
|
164
|
+
expression: str,
|
165
|
+
var_order: list[str] | None = None,
|
166
|
+
label: str | None = None,
|
167
|
+
) -> None:
|
168
|
+
"""
|
169
|
+
Args:
|
170
|
+
expression: A Python-like boolean expression.
|
171
|
+
var_order: A list with the order in which variables will be created.
|
172
|
+
(default: by appearance)
|
173
|
+
label: A label for the gate to display in visualizations. Per default, the label is
|
174
|
+
set to display the textual represntation of the boolean expression (truncated if needed)
|
175
|
+
"""
|
176
|
+
self.boolean_expression = BooleanExpression(expression, var_order=var_order)
|
177
|
+
|
178
|
+
if label is None:
|
179
|
+
short_expr_for_name = (expression[:15] + "...") if len(expression) > 15 else expression
|
180
|
+
label = short_expr_for_name
|
181
|
+
|
182
|
+
super().__init__(
|
183
|
+
name="Phase Oracle",
|
184
|
+
num_qubits=self.boolean_expression.num_bits,
|
185
|
+
params=[],
|
186
|
+
label=label,
|
187
|
+
)
|
188
|
+
|
189
|
+
def _define(self):
|
190
|
+
"""Defined by the synthesized phase oracle"""
|
191
|
+
self.definition = self.boolean_expression.synth(circuit_type="phase")
|
192
|
+
|
193
|
+
@classmethod
|
194
|
+
def from_dimacs_file(cls, filename: str) -> PhaseOracleGate:
|
195
|
+
r"""Create a PhaseOracle from the string in the DIMACS format.
|
196
|
+
|
197
|
+
It is possible to build a PhaseOracle from a file in `DIMACS CNF format
|
198
|
+
<https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
199
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
200
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
201
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
202
|
+
or more literals.
|
203
|
+
|
204
|
+
The following is an example of a CNF expressed in the DIMACS format:
|
205
|
+
|
206
|
+
.. code:: text
|
207
|
+
|
208
|
+
c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
|
209
|
+
p cnf 3 5
|
210
|
+
-1 -2 -3 0
|
211
|
+
1 -2 3 0
|
212
|
+
1 2 -3 0
|
213
|
+
1 -2 -3 0
|
214
|
+
-1 2 3 0
|
215
|
+
|
216
|
+
The first line, following the `c` character, is a comment. The second line specifies that
|
217
|
+
the CNF is over three boolean variables --- let us call them :math:`x_1, x_2, x_3`, and
|
218
|
+
contains five clauses. The five clauses, listed afterwards, are implicitly joined by the
|
219
|
+
logical `AND` operator, :math:`\land`, while the variables in each clause, represented by
|
220
|
+
their indices, are implicitly disjoined by the logical `OR` operator, :math:`\lor`. The
|
221
|
+
:math:`-` symbol preceding a boolean variable index corresponds to the logical `NOT`
|
222
|
+
operator, :math:`\lnot`. Character `0` (zero) marks the end of each clause. Essentially,
|
223
|
+
the code above corresponds to the following CNF:
|
224
|
+
|
225
|
+
:math:`(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)
|
226
|
+
\land (x_1 \lor \lnot x_2 \lor x_3)
|
227
|
+
\land (x_1 \lor x_2 \lor \lnot x_3)
|
228
|
+
\land (x_1 \lor \lnot x_2 \lor \lnot x_3)
|
229
|
+
\land (\lnot x_1 \lor x_2 \lor x_3)`.
|
230
|
+
|
231
|
+
|
232
|
+
Args:
|
233
|
+
filename: A file in DIMACS format.
|
234
|
+
|
235
|
+
Returns:
|
236
|
+
PhaseOracleGate: A quantum circuit with a phase oracle.
|
237
|
+
"""
|
238
|
+
expr = BooleanExpression.from_dimacs_file(filename)
|
239
|
+
return cls(expr)
|
@@ -0,0 +1,179 @@
|
|
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
|
+
"""Quantum Volume model circuit."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from typing import Optional, Union
|
18
|
+
|
19
|
+
import numpy as np
|
20
|
+
from qiskit.circuit import QuantumCircuit, CircuitInstruction
|
21
|
+
from qiskit.circuit.library.generalized_gates import PermutationGate, UnitaryGate
|
22
|
+
from qiskit._accelerate.circuit_library import quantum_volume as qv_rs
|
23
|
+
|
24
|
+
|
25
|
+
class QuantumVolume(QuantumCircuit):
|
26
|
+
"""A quantum volume model circuit.
|
27
|
+
|
28
|
+
The model circuits are random instances of circuits used to measure
|
29
|
+
the Quantum Volume metric, as introduced in [1].
|
30
|
+
|
31
|
+
The model circuits consist of layers of Haar random
|
32
|
+
elements of SU(4) applied between corresponding pairs
|
33
|
+
of qubits in a random bipartition.
|
34
|
+
|
35
|
+
**Reference Circuit:**
|
36
|
+
|
37
|
+
.. plot::
|
38
|
+
:alt: Diagram illustrating the previously described circuit.
|
39
|
+
|
40
|
+
from qiskit.circuit.library import QuantumVolume
|
41
|
+
circuit = QuantumVolume(5, 6, seed=10)
|
42
|
+
circuit.draw('mpl')
|
43
|
+
|
44
|
+
**Expanded Circuit:**
|
45
|
+
|
46
|
+
.. plot::
|
47
|
+
:alt: Diagram illustrating the previously described circuit.
|
48
|
+
|
49
|
+
from qiskit.circuit.library import QuantumVolume
|
50
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
51
|
+
circuit = QuantumVolume(5, 6, seed=10, classical_permutation=False)
|
52
|
+
_generate_circuit_library_visualization(circuit.decompose())
|
53
|
+
|
54
|
+
**References:**
|
55
|
+
|
56
|
+
[1] A. Cross et al. Validating quantum computers using
|
57
|
+
randomized model circuits, Phys. Rev. A 100, 032328 (2019).
|
58
|
+
[`arXiv:1811.12926 <https://arxiv.org/abs/1811.12926>`_]
|
59
|
+
"""
|
60
|
+
|
61
|
+
def __init__(
|
62
|
+
self,
|
63
|
+
num_qubits: int,
|
64
|
+
depth: Optional[int] = None,
|
65
|
+
seed: Optional[Union[int, np.random.Generator]] = None,
|
66
|
+
classical_permutation: bool = True,
|
67
|
+
*,
|
68
|
+
flatten: bool = False,
|
69
|
+
) -> None:
|
70
|
+
"""Create quantum volume model circuit of size num_qubits x depth.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
num_qubits: number of active qubits in model circuit.
|
74
|
+
depth: layers of SU(4) operations in model circuit.
|
75
|
+
seed: Random number generator or generator seed.
|
76
|
+
classical_permutation: use classical permutations at every layer,
|
77
|
+
rather than quantum.
|
78
|
+
flatten: If ``False`` (the default), construct a circuit that contains a single
|
79
|
+
instruction, which in turn has the actual volume structure. If ``True``, construct
|
80
|
+
the volume structure directly.
|
81
|
+
"""
|
82
|
+
import scipy.stats
|
83
|
+
|
84
|
+
# Parameters
|
85
|
+
depth = depth or num_qubits # how many layers of SU(4)
|
86
|
+
width = num_qubits // 2 # how many SU(4)s fit in each layer
|
87
|
+
rng = seed if isinstance(seed, np.random.Generator) else np.random.default_rng(seed)
|
88
|
+
seed_name = seed
|
89
|
+
if seed_name is None:
|
90
|
+
# Get the internal entropy used to seed the default RNG, if no seed was given. This
|
91
|
+
# stays in the output name, so effectively stores a way of regenerating the circuit.
|
92
|
+
# This is just best-effort only, for backwards compatibility, and isn't critical (if
|
93
|
+
# someone needs full reproducibility, they should be manually controlling the seeding).
|
94
|
+
seed_name = getattr(getattr(rng.bit_generator, "seed_seq", None), "entropy", None)
|
95
|
+
|
96
|
+
super().__init__(
|
97
|
+
num_qubits,
|
98
|
+
name="quantum_volume_" + str([num_qubits, depth, seed_name]).replace(" ", ""),
|
99
|
+
)
|
100
|
+
if classical_permutation:
|
101
|
+
if seed is not None:
|
102
|
+
max_value = np.iinfo(np.int64).max
|
103
|
+
seed = rng.integers(max_value, dtype=np.int64)
|
104
|
+
qv_circ = quantum_volume(num_qubits, depth, seed)
|
105
|
+
qv_circ.name = self.name
|
106
|
+
if flatten:
|
107
|
+
self.compose(qv_circ, inplace=True)
|
108
|
+
else:
|
109
|
+
self._append(CircuitInstruction(qv_circ.to_instruction(), tuple(self.qubits)))
|
110
|
+
else:
|
111
|
+
if seed is None:
|
112
|
+
seed = seed_name
|
113
|
+
|
114
|
+
base = self if flatten else QuantumCircuit(num_qubits, name=self.name)
|
115
|
+
|
116
|
+
# For each layer, generate a permutation of qubits
|
117
|
+
# Then generate and apply a Haar-random SU(4) to each pair
|
118
|
+
unitaries = scipy.stats.unitary_group.rvs(4, depth * width, rng).reshape(
|
119
|
+
depth, width, 4, 4
|
120
|
+
)
|
121
|
+
qubits = tuple(base.qubits)
|
122
|
+
for row in unitaries:
|
123
|
+
perm = rng.permutation(num_qubits)
|
124
|
+
base._append(CircuitInstruction(PermutationGate(perm), qubits))
|
125
|
+
for w, unitary in enumerate(row):
|
126
|
+
gate = UnitaryGate(unitary, check_input=False, num_qubits=2)
|
127
|
+
qubit = 2 * w
|
128
|
+
base._append(CircuitInstruction(gate, qubits[qubit : qubit + 2]))
|
129
|
+
if not flatten:
|
130
|
+
self._append(CircuitInstruction(base.to_instruction(), tuple(self.qubits)))
|
131
|
+
|
132
|
+
|
133
|
+
def quantum_volume(
|
134
|
+
num_qubits: int,
|
135
|
+
depth: int | None = None,
|
136
|
+
seed: int | np.random.Generator | None = None,
|
137
|
+
) -> QuantumCircuit:
|
138
|
+
"""A quantum volume model circuit.
|
139
|
+
|
140
|
+
The model circuits are random instances of circuits used to measure
|
141
|
+
the Quantum Volume metric, as introduced in [1].
|
142
|
+
|
143
|
+
The model circuits consist of layers of Haar random
|
144
|
+
elements of SU(4) applied between corresponding pairs
|
145
|
+
of qubits in a random bipartition.
|
146
|
+
|
147
|
+
This function is multithreaded and will launch a thread pool with threads equal to the number
|
148
|
+
of CPUs by default. You can tune the number of threads with the ``RAYON_NUM_THREADS``
|
149
|
+
environment variable. For example, setting ``RAYON_NUM_THREADS=4`` would limit the thread pool
|
150
|
+
to 4 threads.
|
151
|
+
|
152
|
+
Args:
|
153
|
+
num_qubits: The number qubits to use for the generated circuit.
|
154
|
+
depth: The number of layers for the generated circuit. If this
|
155
|
+
is not specified it will default to ``num_qubits`` layers.
|
156
|
+
seed: An optional RNG seed used for generating the random SU(4)
|
157
|
+
matrices used in the output circuit. This can be either an
|
158
|
+
integer or a numpy generator. If an integer is specfied it must
|
159
|
+
be an value between 0 and 2**64 - 1.
|
160
|
+
|
161
|
+
**Reference Circuit:**
|
162
|
+
|
163
|
+
.. plot::
|
164
|
+
:alt: Diagram illustrating the previously described circuit.
|
165
|
+
|
166
|
+
from qiskit.circuit.library import quantum_volume
|
167
|
+
circuit = quantum_volume(5, 6, seed=10)
|
168
|
+
circuit.draw('mpl')
|
169
|
+
|
170
|
+
**References:**
|
171
|
+
|
172
|
+
[1] A. Cross et al. Validating quantum computers using
|
173
|
+
randomized model circuits, Phys. Rev. A 100, 032328 (2019).
|
174
|
+
`arXiv:1811.12926 <https://arxiv.org/abs/1811.12926>`__
|
175
|
+
"""
|
176
|
+
if isinstance(seed, np.random.Generator):
|
177
|
+
seed = seed.integers(0, dtype=np.uint64)
|
178
|
+
depth = depth or num_qubits
|
179
|
+
return QuantumCircuit._from_circuit_data(qv_rs(num_qubits, depth, seed))
|
@@ -0,0 +1,141 @@
|
|
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
|
+
Standard gates
|
15
|
+
"""
|
16
|
+
|
17
|
+
from .h import HGate, CHGate
|
18
|
+
from .i import IGate
|
19
|
+
from .p import PhaseGate, CPhaseGate, MCPhaseGate
|
20
|
+
from .r import RGate
|
21
|
+
from .rx import RXGate, CRXGate
|
22
|
+
from .rxx import RXXGate
|
23
|
+
from .ry import RYGate, CRYGate
|
24
|
+
from .ryy import RYYGate
|
25
|
+
from .rz import RZGate, CRZGate
|
26
|
+
from .rzz import RZZGate
|
27
|
+
from .rzx import RZXGate
|
28
|
+
from .xx_minus_yy import XXMinusYYGate
|
29
|
+
from .xx_plus_yy import XXPlusYYGate
|
30
|
+
from .ecr import ECRGate
|
31
|
+
from .s import SGate, SdgGate, CSGate, CSdgGate
|
32
|
+
from .swap import SwapGate, CSwapGate
|
33
|
+
from .iswap import iSwapGate
|
34
|
+
from .sx import SXGate, SXdgGate, CSXGate
|
35
|
+
from .dcx import DCXGate
|
36
|
+
from .t import TGate, TdgGate
|
37
|
+
from .u import UGate, CUGate
|
38
|
+
from .u1 import U1Gate, CU1Gate, MCU1Gate
|
39
|
+
from .u2 import U2Gate
|
40
|
+
from .u3 import U3Gate, CU3Gate
|
41
|
+
from .x import XGate, CXGate, CCXGate, C3XGate, C3SXGate, C4XGate, RCCXGate, RC3XGate
|
42
|
+
from .x import MCXGate, MCXGrayCode, MCXRecursive, MCXVChain
|
43
|
+
from .y import YGate, CYGate
|
44
|
+
from .z import ZGate, CZGate, CCZGate
|
45
|
+
from .global_phase import GlobalPhaseGate
|
46
|
+
|
47
|
+
|
48
|
+
def get_standard_gate_name_mapping():
|
49
|
+
"""Return a dictionary mapping the name of standard gates and instructions to an object for
|
50
|
+
that name.
|
51
|
+
|
52
|
+
Examples:
|
53
|
+
|
54
|
+
.. code-block:: python
|
55
|
+
|
56
|
+
from qiskit.circuit.library import get_standard_gate_name_mapping
|
57
|
+
|
58
|
+
gate_name_map = get_standard_gate_name_mapping()
|
59
|
+
cx_object = gate_name_map["cx"]
|
60
|
+
|
61
|
+
print(cx_object)
|
62
|
+
print(type(cx_object))
|
63
|
+
|
64
|
+
.. code-block:: text
|
65
|
+
|
66
|
+
Instruction(name='cx', num_qubits=2, num_clbits=0, params=[])
|
67
|
+
_SingletonCXGate
|
68
|
+
"""
|
69
|
+
|
70
|
+
from qiskit.circuit.parameter import Parameter
|
71
|
+
from qiskit.circuit.measure import Measure
|
72
|
+
from qiskit.circuit.delay import Delay
|
73
|
+
from qiskit.circuit.reset import Reset
|
74
|
+
|
75
|
+
lambda_ = Parameter("λ")
|
76
|
+
theta = Parameter("ϴ")
|
77
|
+
phi = Parameter("φ")
|
78
|
+
gamma = Parameter("γ")
|
79
|
+
beta = Parameter("β")
|
80
|
+
time = Parameter("t")
|
81
|
+
|
82
|
+
# Standard gates library mapping, multicontrolled gates not included since they're
|
83
|
+
# variable width
|
84
|
+
gates = [
|
85
|
+
IGate(),
|
86
|
+
SXGate(),
|
87
|
+
XGate(),
|
88
|
+
CXGate(),
|
89
|
+
RZGate(lambda_),
|
90
|
+
RGate(theta, phi),
|
91
|
+
C3SXGate(),
|
92
|
+
CCXGate(),
|
93
|
+
DCXGate(),
|
94
|
+
CHGate(),
|
95
|
+
CPhaseGate(theta),
|
96
|
+
CRXGate(theta),
|
97
|
+
CRYGate(theta),
|
98
|
+
CRZGate(theta),
|
99
|
+
CSwapGate(),
|
100
|
+
CSXGate(),
|
101
|
+
CUGate(theta, phi, lambda_, gamma),
|
102
|
+
CU1Gate(lambda_),
|
103
|
+
CU3Gate(theta, phi, lambda_),
|
104
|
+
CYGate(),
|
105
|
+
CZGate(),
|
106
|
+
CCZGate(),
|
107
|
+
GlobalPhaseGate(theta),
|
108
|
+
HGate(),
|
109
|
+
PhaseGate(theta),
|
110
|
+
RCCXGate(),
|
111
|
+
RC3XGate(),
|
112
|
+
RXGate(theta),
|
113
|
+
RXXGate(theta),
|
114
|
+
RYGate(theta),
|
115
|
+
RYYGate(theta),
|
116
|
+
RZZGate(theta),
|
117
|
+
RZXGate(theta),
|
118
|
+
XXMinusYYGate(theta, beta),
|
119
|
+
XXPlusYYGate(theta, beta),
|
120
|
+
ECRGate(),
|
121
|
+
SGate(),
|
122
|
+
SdgGate(),
|
123
|
+
CSGate(),
|
124
|
+
CSdgGate(),
|
125
|
+
SwapGate(),
|
126
|
+
iSwapGate(),
|
127
|
+
SXdgGate(),
|
128
|
+
TGate(),
|
129
|
+
TdgGate(),
|
130
|
+
UGate(theta, phi, lambda_),
|
131
|
+
U1Gate(lambda_),
|
132
|
+
U2Gate(phi, lambda_),
|
133
|
+
U3Gate(theta, phi, lambda_),
|
134
|
+
YGate(),
|
135
|
+
ZGate(),
|
136
|
+
Delay(time),
|
137
|
+
Reset(),
|
138
|
+
Measure(),
|
139
|
+
]
|
140
|
+
name_mapping = {gate.name: gate for gate in gates}
|
141
|
+
return name_mapping
|
@@ -0,0 +1,76 @@
|
|
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
|
+
"""Double-CNOT gate."""
|
14
|
+
|
15
|
+
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
16
|
+
from qiskit.circuit._utils import with_gate_array
|
17
|
+
from qiskit._accelerate.circuit import StandardGate
|
18
|
+
|
19
|
+
|
20
|
+
@with_gate_array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]])
|
21
|
+
class DCXGate(SingletonGate):
|
22
|
+
r"""Double-CNOT gate.
|
23
|
+
|
24
|
+
A 2-qubit Clifford gate consisting of two back-to-back
|
25
|
+
CNOTs with alternate controls.
|
26
|
+
|
27
|
+
Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
|
28
|
+
with the :meth:`~qiskit.circuit.QuantumCircuit.dcx` method.
|
29
|
+
|
30
|
+
.. code-block:: text
|
31
|
+
|
32
|
+
┌───┐
|
33
|
+
q_0: ──■──┤ X ├
|
34
|
+
┌─┴─┐└─┬─┘
|
35
|
+
q_1: ┤ X ├──■──
|
36
|
+
└───┘
|
37
|
+
|
38
|
+
This is a classical logic gate, equivalent to a CNOT-SWAP (CNS) sequence,
|
39
|
+
and locally equivalent to an iSWAP.
|
40
|
+
|
41
|
+
.. math::
|
42
|
+
|
43
|
+
DCX\ q_0, q_1 =
|
44
|
+
\begin{pmatrix}
|
45
|
+
1 & 0 & 0 & 0 \\
|
46
|
+
0 & 0 & 0 & 1 \\
|
47
|
+
0 & 1 & 0 & 0 \\
|
48
|
+
0 & 0 & 1 & 0
|
49
|
+
\end{pmatrix}
|
50
|
+
"""
|
51
|
+
|
52
|
+
_standard_gate = StandardGate.DCX
|
53
|
+
|
54
|
+
def __init__(self, label=None):
|
55
|
+
"""Create new DCX gate."""
|
56
|
+
super().__init__("dcx", 2, [], label=label)
|
57
|
+
|
58
|
+
_singleton_lookup_key = stdlib_singleton_key()
|
59
|
+
|
60
|
+
def _define(self):
|
61
|
+
"""Default definition"""
|
62
|
+
# pylint: disable=cyclic-import
|
63
|
+
from qiskit.circuit import QuantumCircuit
|
64
|
+
|
65
|
+
# ┌───┐
|
66
|
+
# q_0: ──■──┤ X ├
|
67
|
+
# ┌─┴─┐└─┬─┘
|
68
|
+
# q_1: ┤ X ├──■──
|
69
|
+
# └───┘
|
70
|
+
|
71
|
+
self.definition = QuantumCircuit._from_circuit_data(
|
72
|
+
StandardGate.DCX._get_definition(self.params), add_regs=True, name=self.name
|
73
|
+
)
|
74
|
+
|
75
|
+
def __eq__(self, other):
|
76
|
+
return isinstance(other, DCXGate)
|