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,206 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020, 2024.
|
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
|
+
"""Boolean OR circuit and gate."""
|
15
|
+
|
16
|
+
from __future__ import annotations
|
17
|
+
from typing import List, Optional
|
18
|
+
|
19
|
+
from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister, Gate
|
20
|
+
from qiskit.circuit.library.standard_gates import MCXGate
|
21
|
+
from qiskit.utils.deprecation import deprecate_func
|
22
|
+
|
23
|
+
|
24
|
+
class OR(QuantumCircuit):
|
25
|
+
r"""A circuit implementing the logical OR operation on a number of qubits.
|
26
|
+
|
27
|
+
For the OR operation the state :math:`|1\rangle` is interpreted as ``True``. The result
|
28
|
+
qubit is flipped, if the state of any variable qubit is ``True``. The OR is implemented using
|
29
|
+
a multi-open-controlled X gate (i.e. flips if the state is :math:`|0\rangle`) and
|
30
|
+
applying an X gate on the result qubit.
|
31
|
+
Using a list of flags, qubits can be skipped or negated.
|
32
|
+
|
33
|
+
The OR gate without special flags:
|
34
|
+
|
35
|
+
.. plot::
|
36
|
+
:alt: Diagram illustrating the previously described circuit.
|
37
|
+
|
38
|
+
from qiskit.circuit.library import OR
|
39
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
40
|
+
circuit = OR(5)
|
41
|
+
_generate_circuit_library_visualization(circuit)
|
42
|
+
|
43
|
+
Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
|
44
|
+
return ``True`` if the first qubit is ``False`` or one of the last two are ``True`` we use the
|
45
|
+
flags ``[-1, 0, 0, 1, 1]``.
|
46
|
+
|
47
|
+
.. plot::
|
48
|
+
:alt: Diagram illustrating the previously described circuit.
|
49
|
+
|
50
|
+
from qiskit.circuit.library import OR
|
51
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
52
|
+
circuit = OR(5, flags=[-1, 0, 0, 1, 1])
|
53
|
+
_generate_circuit_library_visualization(circuit)
|
54
|
+
|
55
|
+
"""
|
56
|
+
|
57
|
+
@deprecate_func(
|
58
|
+
since="1.3",
|
59
|
+
additional_msg="Use qiskit.circuit.library.OrGate instead.",
|
60
|
+
pending=True,
|
61
|
+
)
|
62
|
+
def __init__(
|
63
|
+
self,
|
64
|
+
num_variable_qubits: int,
|
65
|
+
flags: Optional[List[int]] = None,
|
66
|
+
mcx_mode: str = "noancilla",
|
67
|
+
) -> None:
|
68
|
+
"""Create a new logical OR circuit.
|
69
|
+
|
70
|
+
Args:
|
71
|
+
num_variable_qubits: The qubits of which the OR is computed. The result will be written
|
72
|
+
into an additional result qubit.
|
73
|
+
flags: A list of +1/0/-1 marking negations or omissions of qubits.
|
74
|
+
mcx_mode: The mode to be used to implement the multi-controlled X gate.
|
75
|
+
"""
|
76
|
+
self.num_variable_qubits = num_variable_qubits
|
77
|
+
self.flags = flags
|
78
|
+
|
79
|
+
# add registers
|
80
|
+
qr_variable = QuantumRegister(num_variable_qubits, name="variable")
|
81
|
+
qr_result = QuantumRegister(1, name="result")
|
82
|
+
circuit = QuantumCircuit(qr_variable, qr_result, name="or")
|
83
|
+
|
84
|
+
# determine the control qubits: all that have a nonzero flag
|
85
|
+
flags = flags or [1] * num_variable_qubits
|
86
|
+
control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
|
87
|
+
|
88
|
+
# determine the qubits that need to be flipped (if a flag is > 0)
|
89
|
+
flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag > 0]
|
90
|
+
|
91
|
+
# determine the number of ancillas
|
92
|
+
num_ancillas = MCXGate.get_num_ancilla_qubits(len(control_qubits), mode=mcx_mode)
|
93
|
+
if num_ancillas > 0:
|
94
|
+
qr_ancilla = AncillaRegister(num_ancillas, "ancilla")
|
95
|
+
circuit.add_register(qr_ancilla)
|
96
|
+
else:
|
97
|
+
qr_ancilla = AncillaRegister(0)
|
98
|
+
|
99
|
+
circuit.x(qr_result)
|
100
|
+
if len(flip_qubits) > 0:
|
101
|
+
circuit.x(flip_qubits)
|
102
|
+
circuit.mcx(control_qubits, qr_result[:], qr_ancilla[:], mode=mcx_mode)
|
103
|
+
if len(flip_qubits) > 0:
|
104
|
+
circuit.x(flip_qubits)
|
105
|
+
|
106
|
+
super().__init__(*circuit.qregs, name="or")
|
107
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
108
|
+
|
109
|
+
|
110
|
+
class OrGate(Gate):
|
111
|
+
r"""A gate representing the logical OR operation on a number of qubits.
|
112
|
+
|
113
|
+
For the OR operation the state :math:`|1\rangle` is interpreted as ``True``. The result
|
114
|
+
qubit is flipped, if the state of any variable qubit is ``True``. The OR is implemented using
|
115
|
+
a multi-open-controlled X gate (i.e. flips if the state is :math:`|0\rangle`) and
|
116
|
+
applying an X gate on the result qubit.
|
117
|
+
Using a list of flags, qubits can be skipped or negated.
|
118
|
+
|
119
|
+
The OrGate gate without special flags:
|
120
|
+
|
121
|
+
.. plot::
|
122
|
+
:alt: Diagram illustrating the previously described circuit.
|
123
|
+
|
124
|
+
from qiskit.circuit import QuantumCircuit
|
125
|
+
from qiskit.circuit.library import OrGate
|
126
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
127
|
+
circuit = QuantumCircuit(6)
|
128
|
+
circuit.append(OrGate(5), [0, 1, 2, 3, 4, 5])
|
129
|
+
_generate_circuit_library_visualization(circuit)
|
130
|
+
|
131
|
+
Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
|
132
|
+
return ``True`` if the first qubit is ``False`` or one of the last two are ``True`` we use the
|
133
|
+
flags ``[-1, 0, 0, 1, 1]``.
|
134
|
+
|
135
|
+
.. plot::
|
136
|
+
:alt: Diagram illustrating the previously described circuit.
|
137
|
+
|
138
|
+
from qiskit.circuit import QuantumCircuit
|
139
|
+
from qiskit.circuit.library import OrGate
|
140
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
141
|
+
circuit = QuantumCircuit(6)
|
142
|
+
circuit.append(OrGate(5, flags=[-1, 0, 0, 1, 1]), [0, 1, 2, 3, 4, 5])
|
143
|
+
_generate_circuit_library_visualization(circuit)
|
144
|
+
|
145
|
+
"""
|
146
|
+
|
147
|
+
def __init__(
|
148
|
+
self,
|
149
|
+
num_variable_qubits: int,
|
150
|
+
flags: list[int] | None = None,
|
151
|
+
) -> None:
|
152
|
+
"""
|
153
|
+
Args:
|
154
|
+
num_variable_qubits: The qubits of which the OR is computed. The result will be written
|
155
|
+
into an additional result qubit.
|
156
|
+
flags: A list of +1/0/-1 marking negations or omissions of qubits.
|
157
|
+
"""
|
158
|
+
super().__init__("or", num_variable_qubits + 1, [])
|
159
|
+
self.num_variable_qubits = num_variable_qubits
|
160
|
+
self.flags = flags
|
161
|
+
|
162
|
+
def _define(self):
|
163
|
+
# add registers
|
164
|
+
qr_variable = QuantumRegister(self.num_variable_qubits, name="variable")
|
165
|
+
qr_result = QuantumRegister(1, name="result")
|
166
|
+
|
167
|
+
# determine the control qubits: all that have a nonzero flag
|
168
|
+
flags = self.flags or [1] * self.num_variable_qubits
|
169
|
+
control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
|
170
|
+
|
171
|
+
# determine the qubits that need to be flipped (if a flag is > 0)
|
172
|
+
flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag > 0]
|
173
|
+
|
174
|
+
# create the definition circuit
|
175
|
+
circuit = QuantumCircuit(qr_variable, qr_result, name="or")
|
176
|
+
|
177
|
+
circuit.x(qr_result)
|
178
|
+
if len(flip_qubits) > 0:
|
179
|
+
circuit.x(flip_qubits)
|
180
|
+
circuit.mcx(control_qubits, qr_result[:])
|
181
|
+
if len(flip_qubits) > 0:
|
182
|
+
circuit.x(flip_qubits)
|
183
|
+
|
184
|
+
self.definition = circuit
|
185
|
+
|
186
|
+
# pylint: disable=unused-argument
|
187
|
+
def inverse(self, annotated: bool = False):
|
188
|
+
r"""Return inverted OR gate (itself).
|
189
|
+
|
190
|
+
Args:
|
191
|
+
annotated: when set to ``True``, this is typically used to return an
|
192
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
193
|
+
:class:`.Gate`. However, for this class this argument is ignored as this gate
|
194
|
+
is self-inverse.
|
195
|
+
|
196
|
+
Returns:
|
197
|
+
OrGate: inverse gate (self-inverse).
|
198
|
+
"""
|
199
|
+
return OrGate(self.num_variable_qubits, self.flags)
|
200
|
+
|
201
|
+
def __eq__(self, other):
|
202
|
+
return (
|
203
|
+
isinstance(other, OrGate)
|
204
|
+
and self.num_variable_qubits == other.num_variable_qubits
|
205
|
+
and self.flags == other.flags
|
206
|
+
)
|
@@ -0,0 +1,167 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020, 2024.
|
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
|
+
"""Bitwise XOR circuit and gate."""
|
15
|
+
|
16
|
+
from typing import Optional
|
17
|
+
|
18
|
+
import numpy as np
|
19
|
+
from qiskit.circuit import QuantumCircuit, Gate
|
20
|
+
from qiskit.circuit.exceptions import CircuitError
|
21
|
+
from qiskit.utils.deprecation import deprecate_func
|
22
|
+
|
23
|
+
|
24
|
+
class XOR(QuantumCircuit):
|
25
|
+
"""An n_qubit circuit for bitwise xor-ing the input with some integer ``amount``.
|
26
|
+
|
27
|
+
The ``amount`` is xor-ed in bitstring form with the input.
|
28
|
+
|
29
|
+
This circuit can also represent addition by ``amount`` over the finite field GF(2).
|
30
|
+
"""
|
31
|
+
|
32
|
+
@deprecate_func(
|
33
|
+
since="1.3",
|
34
|
+
additional_msg="Instead, for xor-ing with a specified amount, use BitwiseXorGate,"
|
35
|
+
"and for xor-ing with a random amount, use random_bitwise_xor.",
|
36
|
+
pending=True,
|
37
|
+
)
|
38
|
+
def __init__(
|
39
|
+
self,
|
40
|
+
num_qubits: int,
|
41
|
+
amount: Optional[int] = None,
|
42
|
+
seed: Optional[int] = None,
|
43
|
+
) -> None:
|
44
|
+
"""Return a circuit implementing bitwise xor.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
num_qubits: the width of circuit.
|
48
|
+
amount: the xor amount in decimal form.
|
49
|
+
seed: random seed in case a random xor is requested.
|
50
|
+
|
51
|
+
Raises:
|
52
|
+
CircuitError: if the xor bitstring exceeds available qubits.
|
53
|
+
|
54
|
+
Reference Circuit:
|
55
|
+
.. plot::
|
56
|
+
:alt: Diagram illustrating the previously described circuit.
|
57
|
+
|
58
|
+
from qiskit.circuit.library import XOR
|
59
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
60
|
+
circuit = XOR(5, seed=42)
|
61
|
+
_generate_circuit_library_visualization(circuit)
|
62
|
+
"""
|
63
|
+
circuit = QuantumCircuit(num_qubits, name="xor")
|
64
|
+
|
65
|
+
if amount is not None:
|
66
|
+
if len(bin(amount)[2:]) > num_qubits:
|
67
|
+
raise CircuitError("Bits in 'amount' exceed circuit width")
|
68
|
+
else:
|
69
|
+
rng = np.random.default_rng(seed)
|
70
|
+
amount = rng.integers(0, 2**num_qubits)
|
71
|
+
|
72
|
+
for i in range(num_qubits):
|
73
|
+
bit = amount & 1
|
74
|
+
amount = amount >> 1
|
75
|
+
if bit == 1:
|
76
|
+
circuit.x(i)
|
77
|
+
|
78
|
+
super().__init__(*circuit.qregs, name="xor")
|
79
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
80
|
+
|
81
|
+
|
82
|
+
class BitwiseXorGate(Gate):
|
83
|
+
"""An n-qubit gate for bitwise xor-ing the input with some integer ``amount``.
|
84
|
+
|
85
|
+
The ``amount`` is xor-ed in bitstring form with the input.
|
86
|
+
|
87
|
+
This gate can also represent addition by ``amount`` over the finite field GF(2).
|
88
|
+
|
89
|
+
Reference Circuit:
|
90
|
+
|
91
|
+
.. plot::
|
92
|
+
:alt: Diagram illustrating the previously described circuit.
|
93
|
+
|
94
|
+
from qiskit.circuit import QuantumCircuit
|
95
|
+
from qiskit.circuit.library import BitwiseXorGate
|
96
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
97
|
+
circuit = QuantumCircuit(5)
|
98
|
+
circuit.append(BitwiseXorGate(5, amount=12), [0, 1, 2, 3, 4])
|
99
|
+
_generate_circuit_library_visualization(circuit)
|
100
|
+
|
101
|
+
"""
|
102
|
+
|
103
|
+
def __init__(
|
104
|
+
self,
|
105
|
+
num_qubits: int,
|
106
|
+
amount: int,
|
107
|
+
) -> None:
|
108
|
+
"""
|
109
|
+
Args:
|
110
|
+
num_qubits: the width of circuit.
|
111
|
+
amount: the xor amount in decimal form.
|
112
|
+
|
113
|
+
Raises:
|
114
|
+
CircuitError: if the xor bitstring exceeds available qubits.
|
115
|
+
"""
|
116
|
+
if len(bin(amount)[2:]) > num_qubits:
|
117
|
+
raise CircuitError("Bits in 'amount' exceed circuit width")
|
118
|
+
|
119
|
+
super().__init__("xor", num_qubits, [])
|
120
|
+
self.amount = amount
|
121
|
+
|
122
|
+
def _define(self):
|
123
|
+
circuit = QuantumCircuit(self.num_qubits, name="xor")
|
124
|
+
amount = self.amount
|
125
|
+
for i in range(self.num_qubits):
|
126
|
+
bit = amount & 1
|
127
|
+
amount = amount >> 1
|
128
|
+
if bit == 1:
|
129
|
+
circuit.x(i)
|
130
|
+
|
131
|
+
self.definition = circuit
|
132
|
+
|
133
|
+
def __eq__(self, other):
|
134
|
+
return (
|
135
|
+
isinstance(other, BitwiseXorGate)
|
136
|
+
and self.num_qubits == other.num_qubits
|
137
|
+
and self.amount == other.amount
|
138
|
+
)
|
139
|
+
|
140
|
+
# pylint: disable=unused-argument
|
141
|
+
def inverse(self, annotated: bool = False):
|
142
|
+
r"""Return inverted BitwiseXorGate gate (itself).
|
143
|
+
|
144
|
+
Args:
|
145
|
+
annotated: when set to ``True``, this is typically used to return an
|
146
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
147
|
+
:class:`.Gate`. However, for this class this argument is ignored as this gate
|
148
|
+
is self-inverse.
|
149
|
+
|
150
|
+
Returns:
|
151
|
+
BitwiseXorGate: inverse gate (self-inverse).
|
152
|
+
"""
|
153
|
+
return BitwiseXorGate(self.num_qubits, self.amount)
|
154
|
+
|
155
|
+
|
156
|
+
def random_bitwise_xor(num_qubits: int, seed: int) -> BitwiseXorGate:
|
157
|
+
"""
|
158
|
+
Create a random BitwiseXorGate.
|
159
|
+
|
160
|
+
Args:
|
161
|
+
num_qubits: the width of circuit.
|
162
|
+
seed: random seed in case a random xor is requested.
|
163
|
+
"""
|
164
|
+
|
165
|
+
rng = np.random.default_rng(seed)
|
166
|
+
amount = rng.integers(0, 2**num_qubits)
|
167
|
+
return BitwiseXorGate(num_qubits, amount)
|
@@ -0,0 +1,57 @@
|
|
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
|
+
Data-encoding circuits
|
15
|
+
======================
|
16
|
+
|
17
|
+
In machine learning, pattern recognition and image processing, a **data-encoding circuit**
|
18
|
+
starts from an initial set of measured data and builds derived values (also known as
|
19
|
+
**features**) intended to be informative and non-redundant, facilitating the subsequent
|
20
|
+
learning and generalization steps, and in some cases leading to better human
|
21
|
+
interpretations.
|
22
|
+
|
23
|
+
A feature map is related to **dimensionality reduction**; it involves reducing the amount of
|
24
|
+
resources required to describe a large set of data. When performing analysis of complex data,
|
25
|
+
one of the major problems stems from the number of variables involved. Analysis with a large
|
26
|
+
number of variables generally requires a large amount of memory and computation power, and may
|
27
|
+
even cause a classification algorithm to overfit to training samples and generalize poorly to new
|
28
|
+
samples.
|
29
|
+
|
30
|
+
When the input data to an algorithm is too large to be processed and is suspected to be redundant
|
31
|
+
(for example, the same measurement is provided in both pounds and kilograms), then it can be
|
32
|
+
transformed into a reduced set of features, named a **feature vector**.
|
33
|
+
|
34
|
+
The process of determining a subset of the initial features is called **feature selection**.
|
35
|
+
The selected features are expected to contain the relevant information from the input data,
|
36
|
+
so that the desired task can be performed by using the reduced representation instead
|
37
|
+
of the complete initial data.
|
38
|
+
|
39
|
+
"""
|
40
|
+
|
41
|
+
from .pauli_feature_map import PauliFeatureMap, pauli_feature_map, z_feature_map, zz_feature_map
|
42
|
+
from ._z_feature_map import ZFeatureMap
|
43
|
+
from ._zz_feature_map import ZZFeatureMap
|
44
|
+
from .state_preparation import StatePreparation, UniformSuperpositionGate
|
45
|
+
from .initializer import Initialize
|
46
|
+
|
47
|
+
__all__ = [
|
48
|
+
"pauli_feature_map",
|
49
|
+
"PauliFeatureMap",
|
50
|
+
"z_feature_map",
|
51
|
+
"ZFeatureMap",
|
52
|
+
"zz_feature_map",
|
53
|
+
"ZZFeatureMap",
|
54
|
+
"StatePreparation",
|
55
|
+
"UniformSuperpositionGate",
|
56
|
+
"Initialize",
|
57
|
+
]
|
@@ -0,0 +1,115 @@
|
|
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
|
+
"""Create a new first-order Pauli-Z expansion circuit."""
|
14
|
+
|
15
|
+
from typing import Callable, Optional
|
16
|
+
import numpy as np
|
17
|
+
from qiskit.utils.deprecation import deprecate_func
|
18
|
+
|
19
|
+
from .pauli_feature_map import PauliFeatureMap
|
20
|
+
|
21
|
+
|
22
|
+
class ZFeatureMap(PauliFeatureMap):
|
23
|
+
"""The first order Pauli Z-evolution circuit.
|
24
|
+
|
25
|
+
On 3 qubits and with 2 repetitions the circuit is represented by:
|
26
|
+
|
27
|
+
.. code-block:: text
|
28
|
+
|
29
|
+
┌───┐┌─────────────┐┌───┐┌─────────────┐
|
30
|
+
┤ H ├┤ P(2.0*x[0]) ├┤ H ├┤ P(2.0*x[0]) ├
|
31
|
+
├───┤├─────────────┤├───┤├─────────────┤
|
32
|
+
┤ H ├┤ U(2.0*x[1]) ├┤ H ├┤ P(2.0*x[1]) ├
|
33
|
+
├───┤├─────────────┤├───┤├─────────────┤
|
34
|
+
┤ H ├┤ P(2.0*x[2]) ├┤ H ├┤ P(2.0*x[2]) ├
|
35
|
+
└───┘└─────────────┘└───┘└─────────────┘
|
36
|
+
|
37
|
+
This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli
|
38
|
+
strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without
|
39
|
+
entangling gates.
|
40
|
+
|
41
|
+
Examples:
|
42
|
+
|
43
|
+
>>> prep = ZFeatureMap(3, reps=3, insert_barriers=True)
|
44
|
+
>>> print(prep.decompose())
|
45
|
+
┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐
|
46
|
+
q_0: ┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├
|
47
|
+
├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
|
48
|
+
q_1: ┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├
|
49
|
+
├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
|
50
|
+
q_2: ┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├
|
51
|
+
└───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘
|
52
|
+
|
53
|
+
>>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array
|
54
|
+
>>> prep = ZFeatureMap(3, reps=1, data_map_func=data_map)
|
55
|
+
>>> print(prep.decompose())
|
56
|
+
┌───┐┌──────────────────────┐
|
57
|
+
q_0: ┤ H ├┤ P(2.0*x[0]**2 + 2.0) ├
|
58
|
+
├───┤├──────────────────────┤
|
59
|
+
q_1: ┤ H ├┤ P(2.0*x[1]**2 + 2.0) ├
|
60
|
+
├───┤├──────────────────────┤
|
61
|
+
q_2: ┤ H ├┤ P(2.0*x[2]**2 + 2.0) ├
|
62
|
+
└───┘└──────────────────────┘
|
63
|
+
|
64
|
+
>>> from qiskit.circuit.library import TwoLocal
|
65
|
+
>>> ry = TwoLocal(3, "ry", "cz", reps=1)
|
66
|
+
>>> classifier = ZFeatureMap(3, reps=1) + ry
|
67
|
+
>>> print(classifier.decompose())
|
68
|
+
┌───┐┌─────────────┐┌──────────┐ ┌──────────┐
|
69
|
+
q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
|
70
|
+
├───┤├─────────────┤├──────────┤ │ │ └──────────┘┌──────────┐
|
71
|
+
q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4]) ├
|
72
|
+
├───┤├─────────────┤├──────────┤ │ │ ├──────────┤
|
73
|
+
q_2: ┤ H ├┤ P(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
|
74
|
+
└───┘└─────────────┘└──────────┘ └──────────┘
|
75
|
+
|
76
|
+
"""
|
77
|
+
|
78
|
+
@deprecate_func(
|
79
|
+
since="1.3",
|
80
|
+
additional_msg=(
|
81
|
+
"Use the z_feature_map function as a replacement. Note that this will no longer "
|
82
|
+
"return a BlueprintCircuit, but just a plain QuantumCircuit."
|
83
|
+
),
|
84
|
+
pending=True,
|
85
|
+
)
|
86
|
+
def __init__(
|
87
|
+
self,
|
88
|
+
feature_dimension: int,
|
89
|
+
reps: int = 2,
|
90
|
+
data_map_func: Optional[Callable[[np.ndarray], float]] = None,
|
91
|
+
parameter_prefix: str = "x",
|
92
|
+
insert_barriers: bool = False,
|
93
|
+
name: str = "ZFeatureMap",
|
94
|
+
) -> None:
|
95
|
+
"""Create a new first-order Pauli-Z expansion circuit.
|
96
|
+
|
97
|
+
Args:
|
98
|
+
feature_dimension: The number of features
|
99
|
+
reps: The number of repeated circuits. Defaults to 2, has a minimum value of 1.
|
100
|
+
data_map_func: A mapping function for data x which can be supplied to override the
|
101
|
+
default mapping from :meth:`self_product`.
|
102
|
+
parameter_prefix: The prefix used if default parameters are generated.
|
103
|
+
insert_barriers: If True, barriers are inserted in between the evolution instructions
|
104
|
+
and hadamard layers.
|
105
|
+
|
106
|
+
"""
|
107
|
+
super().__init__(
|
108
|
+
feature_dimension=feature_dimension,
|
109
|
+
paulis=["Z"],
|
110
|
+
reps=reps,
|
111
|
+
data_map_func=data_map_func,
|
112
|
+
parameter_prefix=parameter_prefix,
|
113
|
+
insert_barriers=insert_barriers,
|
114
|
+
name=name,
|
115
|
+
)
|