qiskit 2.0.3__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 +141 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/circuit/__init__.py +1343 -0
- qiskit/circuit/_add_control.py +312 -0
- qiskit/circuit/_classical_resource_map.py +150 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/annotated_operation.py +279 -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 +498 -0
- qiskit/circuit/classical/expr/visitors.py +375 -0
- qiskit/circuit/classical/types/__init__.py +113 -0
- qiskit/circuit/classical/types/ordering.py +229 -0
- qiskit/circuit/classical/types/types.py +153 -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 +163 -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 +157 -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 +502 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +409 -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 +316 -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 +159 -0
- qiskit/circuit/library/generalized_gates/gms.py +175 -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 +198 -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 +217 -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 +303 -0
- qiskit/circuit/library/n_local/n_local.py +1477 -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 +201 -0
- qiskit/circuit/library/phase_estimation.py +177 -0
- qiskit/circuit/library/phase_oracle.py +239 -0
- qiskit/circuit/library/quantum_volume.py +180 -0
- qiskit/circuit/library/standard_gates/__init__.py +141 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +129 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +84 -0
- qiskit/circuit/library/standard_gates/h.py +253 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +133 -0
- qiskit/circuit/library/standard_gates/p.py +422 -0
- qiskit/circuit/library/standard_gates/r.py +114 -0
- qiskit/circuit/library/standard_gates/rx.py +293 -0
- qiskit/circuit/library/standard_gates/rxx.py +180 -0
- qiskit/circuit/library/standard_gates/ry.py +286 -0
- qiskit/circuit/library/standard_gates/ryy.py +180 -0
- qiskit/circuit/library/standard_gates/rz.py +307 -0
- qiskit/circuit/library/standard_gates/rzx.py +226 -0
- qiskit/circuit/library/standard_gates/rzz.py +193 -0
- qiskit/circuit/library/standard_gates/s.py +419 -0
- qiskit/circuit/library/standard_gates/swap.py +281 -0
- qiskit/circuit/library/standard_gates/sx.py +310 -0
- qiskit/circuit/library/standard_gates/t.py +178 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +490 -0
- qiskit/circuit/library/standard_gates/u2.py +145 -0
- qiskit/circuit/library/standard_gates/u3.py +428 -0
- qiskit/circuit/library/standard_gates/x.py +1481 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
- qiskit/circuit/library/standard_gates/y.py +257 -0
- qiskit/circuit/library/standard_gates/z.py +338 -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 +179 -0
- qiskit/circuit/parameterexpression.py +703 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +140 -0
- qiskit/circuit/quantumcircuit.py +7540 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +366 -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 +193 -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 +55 -0
- qiskit/dagcircuit/collect_blocks.py +407 -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 +188 -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 +175 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +296 -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 +81 -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 +374 -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 +372 -0
- qiskit/qasm3/ast.py +782 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1340 -0
- qiskit/qasm3/printer.py +608 -0
- qiskit/qpy/__init__.py +1965 -0
- qiskit/qpy/binary_io/__init__.py +35 -0
- qiskit/qpy/binary_io/circuits.py +1455 -0
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +308 -0
- qiskit/qpy/binary_io/value.py +1165 -0
- qiskit/qpy/common.py +353 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +442 -0
- qiskit/qpy/interface.py +344 -0
- qiskit/qpy/type_keys.py +409 -0
- qiskit/quantum_info/__init__.py +162 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +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 +28 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +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 +23 -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 +558 -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 +74 -0
- qiskit/result/utils.py +294 -0
- qiskit/synthesis/__init__.py +240 -0
- qiskit/synthesis/arithmetic/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/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/commutator_decompose.py +265 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +120 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +313 -0
- qiskit/synthesis/evolution/qdrift.py +130 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +224 -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 +25 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/__init__.py +15 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
- qiskit/synthesis/permutation/__init__.py +18 -0
- qiskit/synthesis/permutation/permutation_full.py +78 -0
- qiskit/synthesis/permutation/permutation_lnn.py +54 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
- qiskit/synthesis/permutation/permutation_utils.py +16 -0
- qiskit/synthesis/qft/__init__.py +16 -0
- qiskit/synthesis/qft/qft_decompose_full.py +97 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
- qiskit/synthesis/two_qubit/__init__.py +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 +288 -0
- qiskit/transpiler/__init__.py +1345 -0
- qiskit/transpiler/basepasses.py +190 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +740 -0
- qiskit/transpiler/passes/__init__.py +276 -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 +177 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +219 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +116 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +506 -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 +256 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +235 -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 +250 -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_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 +639 -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 +463 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +408 -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 +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -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 +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -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 +1963 -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 +313 -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 +151 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
- qiskit/transpiler/preset_passmanagers/common.py +672 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -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 +354 -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 +675 -0
- qiskit/visualization/circuit/circuit_visualization.py +735 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2019 -0
- qiskit/visualization/circuit/qcstyle.py +278 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1849 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +487 -0
- qiskit/visualization/dag_visualization.py +318 -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/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.0.3.dist-info/METADATA +220 -0
- qiskit-2.0.3.dist-info/RECORD +690 -0
- qiskit-2.0.3.dist-info/WHEEL +6 -0
- qiskit-2.0.3.dist-info/entry_points.txt +82 -0
- qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
- qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,202 @@
|
|
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
|
+
"""Two-qubit XX-YY gate."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import math
|
18
|
+
from cmath import exp
|
19
|
+
from math import pi
|
20
|
+
from typing import Optional
|
21
|
+
|
22
|
+
import numpy as np
|
23
|
+
|
24
|
+
from qiskit.circuit.gate import Gate
|
25
|
+
from qiskit.circuit.library.standard_gates.ry import RYGate
|
26
|
+
from qiskit.circuit.library.standard_gates.rz import RZGate
|
27
|
+
from qiskit.circuit.library.standard_gates.s import SdgGate, SGate
|
28
|
+
from qiskit.circuit.library.standard_gates.sx import SXdgGate, SXGate
|
29
|
+
from qiskit.circuit.library.standard_gates.x import CXGate
|
30
|
+
from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
|
31
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
32
|
+
from qiskit.circuit import QuantumRegister
|
33
|
+
from qiskit._accelerate.circuit import StandardGate
|
34
|
+
|
35
|
+
|
36
|
+
class XXMinusYYGate(Gate):
|
37
|
+
r"""XX-YY interaction gate.
|
38
|
+
|
39
|
+
A 2-qubit parameterized XX-YY interaction. Its action is to induce
|
40
|
+
a coherent rotation by some angle between :math:`|00\rangle` and :math:`|11\rangle`.
|
41
|
+
|
42
|
+
**Circuit Symbol:**
|
43
|
+
|
44
|
+
.. code-block:: text
|
45
|
+
|
46
|
+
┌───────────────┐
|
47
|
+
q_0: ┤0 ├
|
48
|
+
│ (XX-YY)(θ,β) │
|
49
|
+
q_1: ┤1 ├
|
50
|
+
└───────────────┘
|
51
|
+
|
52
|
+
**Matrix Representation:**
|
53
|
+
|
54
|
+
.. math::
|
55
|
+
|
56
|
+
\newcommand{\rotationangle}{\frac{\theta}{2}}
|
57
|
+
|
58
|
+
R_{XX-YY}(\theta, \beta) q_0, q_1 =
|
59
|
+
RZ_1(\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX-YY}{2}\right) \cdot RZ_1(-\beta) =
|
60
|
+
\begin{pmatrix}
|
61
|
+
\cos\left(\rotationangle\right) & 0 & 0 & -i\sin\left(\rotationangle\right)e^{-i\beta} \\
|
62
|
+
0 & 1 & 0 & 0 \\
|
63
|
+
0 & 0 & 1 & 0 \\
|
64
|
+
-i\sin\left(\rotationangle\right)e^{i\beta} & 0 & 0 & \cos\left(\rotationangle\right)
|
65
|
+
\end{pmatrix}
|
66
|
+
"""
|
67
|
+
|
68
|
+
_standard_gate = StandardGate.XXMinusYYGate
|
69
|
+
|
70
|
+
def __init__(
|
71
|
+
self,
|
72
|
+
theta: ParameterValueType,
|
73
|
+
beta: ParameterValueType = 0,
|
74
|
+
label: Optional[str] = "(XX-YY)",
|
75
|
+
):
|
76
|
+
"""Create new XX-YY gate.
|
77
|
+
|
78
|
+
Args:
|
79
|
+
theta: The rotation angle.
|
80
|
+
beta: The phase angle.
|
81
|
+
label: The label of the gate.
|
82
|
+
"""
|
83
|
+
super().__init__("xx_minus_yy", 2, [theta, beta], label=label)
|
84
|
+
|
85
|
+
def _define(self):
|
86
|
+
"""
|
87
|
+
gate xx_minus_yy(theta, beta) a, b {
|
88
|
+
rz(-beta) b;
|
89
|
+
rz(-pi/2) a;
|
90
|
+
sx a;
|
91
|
+
rz(pi/2) a;
|
92
|
+
s b;
|
93
|
+
cx a, b;
|
94
|
+
ry(theta/2) a;
|
95
|
+
ry(-theta/2) b;
|
96
|
+
cx a, b;
|
97
|
+
sdg b;
|
98
|
+
rz(-pi/2) a;
|
99
|
+
sxdg a;
|
100
|
+
rz(pi/2) a;
|
101
|
+
rz(beta) b;
|
102
|
+
}
|
103
|
+
"""
|
104
|
+
theta, beta = self.params
|
105
|
+
register = QuantumRegister(2, "q")
|
106
|
+
circuit = QuantumCircuit(register, name=self.name)
|
107
|
+
a, b = register
|
108
|
+
rules = [
|
109
|
+
(RZGate(-beta), [b], []),
|
110
|
+
(RZGate(-pi / 2), [a], []),
|
111
|
+
(SXGate(), [a], []),
|
112
|
+
(RZGate(pi / 2), [a], []),
|
113
|
+
(SGate(), [b], []),
|
114
|
+
(CXGate(), [a, b], []),
|
115
|
+
(RYGate(theta / 2), [a], []),
|
116
|
+
(RYGate(-theta / 2), [b], []),
|
117
|
+
(CXGate(), [a, b], []),
|
118
|
+
(SdgGate(), [b], []),
|
119
|
+
(RZGate(-pi / 2), [a], []),
|
120
|
+
(SXdgGate(), [a], []),
|
121
|
+
(RZGate(pi / 2), [a], []),
|
122
|
+
(RZGate(beta), [b], []),
|
123
|
+
]
|
124
|
+
for instr, qargs, cargs in rules:
|
125
|
+
circuit._append(instr, qargs, cargs)
|
126
|
+
|
127
|
+
self.definition = circuit
|
128
|
+
|
129
|
+
def control(
|
130
|
+
self,
|
131
|
+
num_ctrl_qubits: int = 1,
|
132
|
+
label: str | None = None,
|
133
|
+
ctrl_state: str | int | None = None,
|
134
|
+
annotated: bool | None = None,
|
135
|
+
):
|
136
|
+
"""Return a (multi-)controlled-(XX-YY) gate.
|
137
|
+
|
138
|
+
Args:
|
139
|
+
num_ctrl_qubits: number of control qubits.
|
140
|
+
label: An optional label for the gate [Default: ``None``]
|
141
|
+
ctrl_state: control state expressed as integer,
|
142
|
+
string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
|
143
|
+
annotated: indicates whether the controlled gate should be implemented
|
144
|
+
as an annotated gate. If ``None``, this is set to ``True`` if
|
145
|
+
the gate contains free parameters, in which case it cannot
|
146
|
+
yet be synthesized.
|
147
|
+
|
148
|
+
Returns:
|
149
|
+
ControlledGate: controlled version of this gate.
|
150
|
+
"""
|
151
|
+
if annotated is None:
|
152
|
+
annotated = any(isinstance(p, ParameterExpression) for p in self.params)
|
153
|
+
|
154
|
+
gate = super().control(
|
155
|
+
num_ctrl_qubits=num_ctrl_qubits,
|
156
|
+
label=label,
|
157
|
+
ctrl_state=ctrl_state,
|
158
|
+
annotated=annotated,
|
159
|
+
)
|
160
|
+
return gate
|
161
|
+
|
162
|
+
def inverse(self, annotated: bool = False):
|
163
|
+
"""Inverse gate.
|
164
|
+
|
165
|
+
Args:
|
166
|
+
annotated: when set to ``True``, this is typically used to return an
|
167
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
168
|
+
:class:`.Gate`. However, for this class this argument is ignored as the inverse
|
169
|
+
of this gate is always a :class:`.XXMinusYYGate` with inverse
|
170
|
+
parameter values.
|
171
|
+
|
172
|
+
Returns:
|
173
|
+
XXMinusYYGate: inverse gate.
|
174
|
+
"""
|
175
|
+
theta, beta = self.params
|
176
|
+
return XXMinusYYGate(-theta, beta)
|
177
|
+
|
178
|
+
def __array__(self, dtype=None, copy=None):
|
179
|
+
"""Gate matrix."""
|
180
|
+
if copy is False:
|
181
|
+
raise ValueError("unable to avoid copy while creating an array as requested")
|
182
|
+
theta, beta = self.params
|
183
|
+
cos = math.cos(theta / 2)
|
184
|
+
sin = math.sin(theta / 2)
|
185
|
+
return np.array(
|
186
|
+
[
|
187
|
+
[cos, 0, 0, -1j * sin * exp(-1j * beta)],
|
188
|
+
[0, 1, 0, 0],
|
189
|
+
[0, 0, 1, 0],
|
190
|
+
[-1j * sin * exp(1j * beta), 0, 0, cos],
|
191
|
+
],
|
192
|
+
dtype=dtype,
|
193
|
+
)
|
194
|
+
|
195
|
+
def power(self, exponent: float, annotated: bool = False):
|
196
|
+
theta, beta = self.params
|
197
|
+
return XXMinusYYGate(exponent * theta, beta)
|
198
|
+
|
199
|
+
def __eq__(self, other):
|
200
|
+
if isinstance(other, XXMinusYYGate):
|
201
|
+
return self._compare_parameters(other)
|
202
|
+
return False
|
@@ -0,0 +1,236 @@
|
|
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
|
+
"""Two-qubit XX+YY gate."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import math
|
18
|
+
from cmath import exp
|
19
|
+
from math import pi
|
20
|
+
from typing import Optional
|
21
|
+
|
22
|
+
import numpy
|
23
|
+
|
24
|
+
from qiskit.circuit.gate import Gate
|
25
|
+
from qiskit.circuit import QuantumRegister
|
26
|
+
from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
|
27
|
+
from qiskit._accelerate.circuit import StandardGate
|
28
|
+
|
29
|
+
|
30
|
+
class XXPlusYYGate(Gate):
|
31
|
+
r"""XX+YY interaction gate.
|
32
|
+
|
33
|
+
A 2-qubit parameterized XX+YY interaction, also known as an XY gate. Its action is to induce
|
34
|
+
a coherent rotation by some angle between :math:`|01\rangle` and :math:`|10\rangle`.
|
35
|
+
|
36
|
+
**Circuit Symbol:**
|
37
|
+
|
38
|
+
.. code-block:: text
|
39
|
+
|
40
|
+
┌───────────────┐
|
41
|
+
q_0: ┤0 ├
|
42
|
+
│ (XX+YY)(θ,β) │
|
43
|
+
q_1: ┤1 ├
|
44
|
+
└───────────────┘
|
45
|
+
|
46
|
+
**Matrix Representation:**
|
47
|
+
|
48
|
+
.. math::
|
49
|
+
|
50
|
+
\newcommand{\rotationangle}{\frac{\theta}{2}}
|
51
|
+
|
52
|
+
R_{XX+YY}(\theta, \beta)\ q_0, q_1 =
|
53
|
+
RZ_0(-\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX+YY}{2}\right) \cdot RZ_0(\beta) =
|
54
|
+
\begin{pmatrix}
|
55
|
+
1 & 0 & 0 & 0 \\
|
56
|
+
0 & \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right)e^{-i\beta} & 0 \\
|
57
|
+
0 & -i\sin\left(\rotationangle\right)e^{i\beta} & \cos\left(\rotationangle\right) & 0 \\
|
58
|
+
0 & 0 & 0 & 1
|
59
|
+
\end{pmatrix}
|
60
|
+
|
61
|
+
.. note::
|
62
|
+
|
63
|
+
In Qiskit's convention, higher qubit indices are more significant
|
64
|
+
(little endian convention). In the above example we apply the gate
|
65
|
+
on (q_0, q_1) which results in adding the (optional) phase defined
|
66
|
+
by :math:`\beta` on q_0. Instead, if we apply it on (q_1, q_0), the
|
67
|
+
phase is added on q_1. If :math:`\beta` is set to its default value
|
68
|
+
of :math:`0`, the gate is equivalent in big and little endian.
|
69
|
+
|
70
|
+
.. code-block:: text
|
71
|
+
|
72
|
+
┌───────────────┐
|
73
|
+
q_0: ┤1 ├
|
74
|
+
│ (XX+YY)(θ,β) │
|
75
|
+
q_1: ┤0 ├
|
76
|
+
└───────────────┘
|
77
|
+
|
78
|
+
.. math::
|
79
|
+
|
80
|
+
\newcommand{\rotationangle}{\frac{\theta}{2}}
|
81
|
+
|
82
|
+
R_{XX+YY}(\theta, \beta)\ q_0, q_1 =
|
83
|
+
RZ_1(-\beta) \cdot \exp\left(-i \frac{\theta}{2} \frac{XX+YY}{2}\right) \cdot RZ_1(\beta) =
|
84
|
+
\begin{pmatrix}
|
85
|
+
1 & 0 & 0 & 0 \\
|
86
|
+
0 & \cos\left(\rotationangle\right) &
|
87
|
+
-i\sin\left(\rotationangle\right)e^{i\beta} & 0 \\
|
88
|
+
0 & -i\sin\left(\rotationangle\right)e^{-i\beta} &
|
89
|
+
\cos\left(\rotationangle\right) & 0 \\
|
90
|
+
0 & 0 & 0 & 1
|
91
|
+
\end{pmatrix}
|
92
|
+
"""
|
93
|
+
|
94
|
+
_standard_gate = StandardGate.XXPlusYYGate
|
95
|
+
|
96
|
+
def __init__(
|
97
|
+
self,
|
98
|
+
theta: ParameterValueType,
|
99
|
+
beta: ParameterValueType = 0,
|
100
|
+
label: Optional[str] = "(XX+YY)",
|
101
|
+
):
|
102
|
+
"""Create new XX+YY gate.
|
103
|
+
|
104
|
+
Args:
|
105
|
+
theta: The rotation angle.
|
106
|
+
beta: The phase angle.
|
107
|
+
label: The label of the gate.
|
108
|
+
"""
|
109
|
+
super().__init__("xx_plus_yy", 2, [theta, beta], label=label)
|
110
|
+
|
111
|
+
def _define(self):
|
112
|
+
"""
|
113
|
+
gate xx_plus_yy(theta, beta) a, b {
|
114
|
+
rz(beta) b;
|
115
|
+
rz(-pi/2) a;
|
116
|
+
sx a;
|
117
|
+
rz(pi/2) a;
|
118
|
+
s b;
|
119
|
+
cx a, b;
|
120
|
+
ry(theta/2) a;
|
121
|
+
ry(theta/2) b;
|
122
|
+
cx a, b;
|
123
|
+
sdg b;
|
124
|
+
rz(-pi/2) a;
|
125
|
+
sxdg a;
|
126
|
+
rz(pi/2) a;
|
127
|
+
rz(-beta) b;
|
128
|
+
}
|
129
|
+
"""
|
130
|
+
# pylint: disable=cyclic-import
|
131
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
132
|
+
from .x import CXGate
|
133
|
+
from .s import SGate, SdgGate
|
134
|
+
from .sx import SXGate, SXdgGate
|
135
|
+
from .rz import RZGate
|
136
|
+
from .ry import RYGate
|
137
|
+
|
138
|
+
theta = self.params[0]
|
139
|
+
beta = self.params[1]
|
140
|
+
q = QuantumRegister(2, "q")
|
141
|
+
qc = QuantumCircuit(q, name=self.name)
|
142
|
+
rules = [
|
143
|
+
(RZGate(beta), [q[0]], []),
|
144
|
+
(RZGate(-pi / 2), [q[1]], []),
|
145
|
+
(SXGate(), [q[1]], []),
|
146
|
+
(RZGate(pi / 2), [q[1]], []),
|
147
|
+
(SGate(), [q[0]], []),
|
148
|
+
(CXGate(), [q[1], q[0]], []),
|
149
|
+
(RYGate(-theta / 2), [q[1]], []),
|
150
|
+
(RYGate(-theta / 2), [q[0]], []),
|
151
|
+
(CXGate(), [q[1], q[0]], []),
|
152
|
+
(SdgGate(), [q[0]], []),
|
153
|
+
(RZGate(-pi / 2), [q[1]], []),
|
154
|
+
(SXdgGate(), [q[1]], []),
|
155
|
+
(RZGate(pi / 2), [q[1]], []),
|
156
|
+
(RZGate(-beta), [q[0]], []),
|
157
|
+
]
|
158
|
+
for instr, qargs, cargs in rules:
|
159
|
+
qc._append(instr, qargs, cargs)
|
160
|
+
|
161
|
+
self.definition = qc
|
162
|
+
|
163
|
+
def control(
|
164
|
+
self,
|
165
|
+
num_ctrl_qubits: int = 1,
|
166
|
+
label: str | None = None,
|
167
|
+
ctrl_state: str | int | None = None,
|
168
|
+
annotated: bool | None = None,
|
169
|
+
):
|
170
|
+
"""Return a (multi-)controlled-(XX+YY) gate.
|
171
|
+
|
172
|
+
Args:
|
173
|
+
num_ctrl_qubits: number of control qubits.
|
174
|
+
label: An optional label for the gate [Default: ``None``]
|
175
|
+
ctrl_state: control state expressed as integer,
|
176
|
+
string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
|
177
|
+
annotated: indicates whether the controlled gate should be implemented
|
178
|
+
as an annotated gate. If ``None``, this is set to ``True`` if
|
179
|
+
the gate contains free parameters, in which case it cannot
|
180
|
+
yet be synthesized.
|
181
|
+
|
182
|
+
Returns:
|
183
|
+
ControlledGate: controlled version of this gate.
|
184
|
+
"""
|
185
|
+
if annotated is None:
|
186
|
+
annotated = any(isinstance(p, ParameterExpression) for p in self.params)
|
187
|
+
|
188
|
+
gate = super().control(
|
189
|
+
num_ctrl_qubits=num_ctrl_qubits,
|
190
|
+
label=label,
|
191
|
+
ctrl_state=ctrl_state,
|
192
|
+
annotated=annotated,
|
193
|
+
)
|
194
|
+
return gate
|
195
|
+
|
196
|
+
def inverse(self, annotated: bool = False):
|
197
|
+
"""Return inverse XX+YY gate (i.e. with the negative rotation angle and same phase angle).
|
198
|
+
|
199
|
+
Args:
|
200
|
+
annotated: when set to ``True``, this is typically used to return an
|
201
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
202
|
+
:class:`.Gate`. However, for this class this argument is ignored as the inverse
|
203
|
+
of this gate is always a :class:`.XXPlusYYGate` with inverse
|
204
|
+
parameter values.
|
205
|
+
|
206
|
+
Returns:
|
207
|
+
XXPlusYYGate: inverse gate.
|
208
|
+
"""
|
209
|
+
return XXPlusYYGate(-self.params[0], self.params[1])
|
210
|
+
|
211
|
+
def __array__(self, dtype=None, copy=None):
|
212
|
+
"""Return a numpy.array for the XX+YY gate."""
|
213
|
+
if copy is False:
|
214
|
+
raise ValueError("unable to avoid copy while creating an array as requested")
|
215
|
+
half_theta = float(self.params[0]) / 2
|
216
|
+
beta = float(self.params[1])
|
217
|
+
cos = math.cos(half_theta)
|
218
|
+
sin = math.sin(half_theta)
|
219
|
+
return numpy.array(
|
220
|
+
[
|
221
|
+
[1, 0, 0, 0],
|
222
|
+
[0, cos, -1j * sin * exp(-1j * beta), 0],
|
223
|
+
[0, -1j * sin * exp(1j * beta), cos, 0],
|
224
|
+
[0, 0, 0, 1],
|
225
|
+
],
|
226
|
+
dtype=dtype,
|
227
|
+
)
|
228
|
+
|
229
|
+
def power(self, exponent: float, annotated: bool = False):
|
230
|
+
theta, beta = self.params
|
231
|
+
return XXPlusYYGate(exponent * theta, beta)
|
232
|
+
|
233
|
+
def __eq__(self, other):
|
234
|
+
if isinstance(other, XXPlusYYGate):
|
235
|
+
return self._compare_parameters(other)
|
236
|
+
return False
|
@@ -0,0 +1,257 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Y and CY gates."""
|
14
|
+
|
15
|
+
from math import pi
|
16
|
+
from typing import Optional, Union
|
17
|
+
|
18
|
+
# pylint: disable=cyclic-import
|
19
|
+
from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
|
20
|
+
from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
|
21
|
+
from qiskit._accelerate.circuit import StandardGate
|
22
|
+
|
23
|
+
_Y_ARRAY = [[0, -1j], [1j, 0]]
|
24
|
+
|
25
|
+
|
26
|
+
@with_gate_array(_Y_ARRAY)
|
27
|
+
class YGate(SingletonGate):
|
28
|
+
r"""The single-qubit Pauli-Y gate (:math:`\sigma_y`).
|
29
|
+
|
30
|
+
Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
|
31
|
+
with the :meth:`~qiskit.circuit.QuantumCircuit.y` method.
|
32
|
+
|
33
|
+
**Matrix Representation:**
|
34
|
+
|
35
|
+
.. math::
|
36
|
+
|
37
|
+
Y = \begin{pmatrix}
|
38
|
+
0 & -i \\
|
39
|
+
i & 0
|
40
|
+
\end{pmatrix}
|
41
|
+
|
42
|
+
**Circuit symbol:**
|
43
|
+
|
44
|
+
.. code-block:: text
|
45
|
+
|
46
|
+
┌───┐
|
47
|
+
q_0: ┤ Y ├
|
48
|
+
└───┘
|
49
|
+
|
50
|
+
Equivalent to a :math:`\pi` radian rotation about the Y axis.
|
51
|
+
|
52
|
+
.. note::
|
53
|
+
|
54
|
+
A global phase difference exists between the definitions of
|
55
|
+
:math:`RY(\pi)` and :math:`Y`.
|
56
|
+
|
57
|
+
.. math::
|
58
|
+
|
59
|
+
RY(\pi) = \begin{pmatrix}
|
60
|
+
0 & -1 \\
|
61
|
+
1 & 0
|
62
|
+
\end{pmatrix}
|
63
|
+
= -i Y
|
64
|
+
|
65
|
+
The gate is equivalent to a bit and phase flip.
|
66
|
+
|
67
|
+
.. math::
|
68
|
+
|
69
|
+
|0\rangle \rightarrow i|1\rangle \\
|
70
|
+
|1\rangle \rightarrow -i|0\rangle
|
71
|
+
"""
|
72
|
+
|
73
|
+
_standard_gate = StandardGate.YGate
|
74
|
+
|
75
|
+
def __init__(self, label: Optional[str] = None):
|
76
|
+
"""Create new Y gate."""
|
77
|
+
super().__init__("y", 1, [], label=label)
|
78
|
+
|
79
|
+
_singleton_lookup_key = stdlib_singleton_key()
|
80
|
+
|
81
|
+
def _define(self):
|
82
|
+
# pylint: disable=cyclic-import
|
83
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
84
|
+
from .u3 import U3Gate
|
85
|
+
|
86
|
+
q = QuantumRegister(1, "q")
|
87
|
+
qc = QuantumCircuit(q, name=self.name)
|
88
|
+
rules = [(U3Gate(pi, pi / 2, pi / 2), [q[0]], [])]
|
89
|
+
for instr, qargs, cargs in rules:
|
90
|
+
qc._append(instr, qargs, cargs)
|
91
|
+
|
92
|
+
self.definition = qc
|
93
|
+
|
94
|
+
def control(
|
95
|
+
self,
|
96
|
+
num_ctrl_qubits: int = 1,
|
97
|
+
label: Optional[str] = None,
|
98
|
+
ctrl_state: Optional[Union[str, int]] = None,
|
99
|
+
annotated: bool = False,
|
100
|
+
):
|
101
|
+
"""Return a (multi-)controlled-Y gate.
|
102
|
+
|
103
|
+
One control returns a CY gate.
|
104
|
+
|
105
|
+
Args:
|
106
|
+
num_ctrl_qubits: number of control qubits.
|
107
|
+
label: An optional label for the gate [Default: ``None``]
|
108
|
+
ctrl_state: control state expressed as integer,
|
109
|
+
string (e.g.``'110'``), or ``None``. If ``None``, use all 1s.
|
110
|
+
annotated: indicates whether the controlled gate should be implemented
|
111
|
+
as an annotated gate.
|
112
|
+
|
113
|
+
Returns:
|
114
|
+
ControlledGate: controlled version of this gate.
|
115
|
+
"""
|
116
|
+
if not annotated and num_ctrl_qubits == 1:
|
117
|
+
gate = CYGate(label=label, ctrl_state=ctrl_state, _base_label=self.label)
|
118
|
+
else:
|
119
|
+
gate = super().control(
|
120
|
+
num_ctrl_qubits=num_ctrl_qubits,
|
121
|
+
label=label,
|
122
|
+
ctrl_state=ctrl_state,
|
123
|
+
annotated=annotated,
|
124
|
+
)
|
125
|
+
return gate
|
126
|
+
|
127
|
+
def inverse(self, annotated: bool = False):
|
128
|
+
r"""Return inverted Y gate (:math:`Y^{\dagger} = Y`)
|
129
|
+
|
130
|
+
Args:
|
131
|
+
annotated: when set to ``True``, this is typically used to return an
|
132
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
133
|
+
:class:`.Gate`. However, for this class this argument is ignored as this gate
|
134
|
+
is self-inverse.
|
135
|
+
|
136
|
+
Returns:
|
137
|
+
YGate: inverse gate (self-inverse).
|
138
|
+
"""
|
139
|
+
return YGate() # self-inverse
|
140
|
+
|
141
|
+
def __eq__(self, other):
|
142
|
+
return isinstance(other, YGate)
|
143
|
+
|
144
|
+
|
145
|
+
@with_controlled_gate_array(_Y_ARRAY, num_ctrl_qubits=1)
|
146
|
+
class CYGate(SingletonControlledGate):
|
147
|
+
r"""Controlled-Y gate.
|
148
|
+
|
149
|
+
Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
|
150
|
+
with the :meth:`~qiskit.circuit.QuantumCircuit.cy` method.
|
151
|
+
|
152
|
+
**Circuit symbol:**
|
153
|
+
|
154
|
+
.. code-block:: text
|
155
|
+
|
156
|
+
q_0: ──■──
|
157
|
+
┌─┴─┐
|
158
|
+
q_1: ┤ Y ├
|
159
|
+
└───┘
|
160
|
+
|
161
|
+
**Matrix representation:**
|
162
|
+
|
163
|
+
.. math::
|
164
|
+
|
165
|
+
CY\ q_0, q_1 =
|
166
|
+
I \otimes |0 \rangle\langle 0| + Y \otimes |1 \rangle\langle 1| =
|
167
|
+
\begin{pmatrix}
|
168
|
+
1 & 0 & 0 & 0 \\
|
169
|
+
0 & 0 & 0 & -i \\
|
170
|
+
0 & 0 & 1 & 0 \\
|
171
|
+
0 & i & 0 & 0
|
172
|
+
\end{pmatrix}
|
173
|
+
|
174
|
+
|
175
|
+
.. note::
|
176
|
+
|
177
|
+
In Qiskit's convention, higher qubit indices are more significant
|
178
|
+
(little endian convention). In many textbooks, controlled gates are
|
179
|
+
presented with the assumption of more significant qubits as control,
|
180
|
+
which in our case would be q_1. Thus a textbook matrix for this
|
181
|
+
gate will be:
|
182
|
+
|
183
|
+
.. code-block:: text
|
184
|
+
|
185
|
+
┌───┐
|
186
|
+
q_0: ┤ Y ├
|
187
|
+
└─┬─┘
|
188
|
+
q_1: ──■──
|
189
|
+
|
190
|
+
.. math::
|
191
|
+
|
192
|
+
CY\ q_1, q_0 =
|
193
|
+
|0 \rangle\langle 0| \otimes I + |1 \rangle\langle 1| \otimes Y =
|
194
|
+
\begin{pmatrix}
|
195
|
+
1 & 0 & 0 & 0 \\
|
196
|
+
0 & 1 & 0 & 0 \\
|
197
|
+
0 & 0 & 0 & -i \\
|
198
|
+
0 & 0 & i & 0
|
199
|
+
\end{pmatrix}
|
200
|
+
|
201
|
+
"""
|
202
|
+
|
203
|
+
_standard_gate = StandardGate.CYGate
|
204
|
+
|
205
|
+
def __init__(
|
206
|
+
self,
|
207
|
+
label: Optional[str] = None,
|
208
|
+
ctrl_state: Optional[Union[str, int]] = None,
|
209
|
+
*,
|
210
|
+
_base_label=None,
|
211
|
+
):
|
212
|
+
"""Create new CY gate."""
|
213
|
+
super().__init__(
|
214
|
+
"cy",
|
215
|
+
2,
|
216
|
+
[],
|
217
|
+
num_ctrl_qubits=1,
|
218
|
+
label=label,
|
219
|
+
ctrl_state=ctrl_state,
|
220
|
+
base_gate=YGate(label=_base_label),
|
221
|
+
)
|
222
|
+
|
223
|
+
_singleton_lookup_key = stdlib_singleton_key(num_ctrl_qubits=1)
|
224
|
+
|
225
|
+
def _define(self):
|
226
|
+
"""
|
227
|
+
gate cy a,b { sdg b; cx a,b; s b; }
|
228
|
+
"""
|
229
|
+
# pylint: disable=cyclic-import
|
230
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister
|
231
|
+
from .s import SGate, SdgGate
|
232
|
+
from .x import CXGate
|
233
|
+
|
234
|
+
q = QuantumRegister(2, "q")
|
235
|
+
qc = QuantumCircuit(q, name=self.name)
|
236
|
+
rules = [(SdgGate(), [q[1]], []), (CXGate(), [q[0], q[1]], []), (SGate(), [q[1]], [])]
|
237
|
+
for instr, qargs, cargs in rules:
|
238
|
+
qc._append(instr, qargs, cargs)
|
239
|
+
|
240
|
+
self.definition = qc
|
241
|
+
|
242
|
+
def inverse(self, annotated: bool = False):
|
243
|
+
"""Return inverted CY gate (itself).
|
244
|
+
|
245
|
+
Args:
|
246
|
+
annotated: when set to ``True``, this is typically used to return an
|
247
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
248
|
+
:class:`.Gate`. However, for this class this argument is ignored as this gate
|
249
|
+
is self-inverse.
|
250
|
+
|
251
|
+
Returns:
|
252
|
+
CYGate: inverse gate (self-inverse).
|
253
|
+
"""
|
254
|
+
return CYGate(ctrl_state=self.ctrl_state) # self-inverse
|
255
|
+
|
256
|
+
def __eq__(self, other):
|
257
|
+
return isinstance(other, CYGate) and self.ctrl_state == other.ctrl_state
|