qiskit 1.3.0b1__cp39-abi3-macosx_10_9_x86_64.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 +127 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +42 -0
- qiskit/assembler/assemble_circuits.py +451 -0
- qiskit/assembler/assemble_schedules.py +365 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1270 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3264 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +48 -0
- qiskit/circuit/bit.py +94 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +238 -0
- qiskit/circuit/classical/expr/constructors.py +556 -0
- qiskit/circuit/classical/expr/expr.py +397 -0
- qiskit/circuit/classical/expr/visitors.py +300 -0
- qiskit/circuit/classical/types/__init__.py +109 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +140 -0
- qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
- qiskit/circuit/classicalfunction/classical_element.py +54 -0
- qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
- qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
- qiskit/circuit/classicalfunction/exceptions.py +35 -0
- qiskit/circuit/classicalfunction/types.py +18 -0
- qiskit/circuit/classicalfunction/utils.py +91 -0
- qiskit/circuit/classicalregister.py +57 -0
- qiskit/circuit/commutation_checker.py +106 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +28 -0
- qiskit/circuit/controlflow/_builder_utils.py +207 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +691 -0
- qiskit/circuit/controlflow/continue_loop.py +58 -0
- qiskit/circuit/controlflow/control_flow.py +84 -0
- qiskit/circuit/controlflow/for_loop.py +217 -0
- qiskit/circuit/controlflow/if_else.py +503 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +163 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +106 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +295 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +676 -0
- qiskit/circuit/instructionset.py +177 -0
- qiskit/circuit/library/__init__.py +572 -0
- qiskit/circuit/library/arithmetic/__init__.py +27 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +58 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +159 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +116 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +165 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +16 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +138 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +331 -0
- qiskit/circuit/library/blueprintcircuit.py +216 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +78 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +97 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +98 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +71 -0
- qiskit/circuit/library/data_preparation/__init__.py +54 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +343 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +97 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +165 -0
- qiskit/circuit/library/generalized_gates/gms.py +121 -0
- qiskit/circuit/library/generalized_gates/gr.py +215 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +312 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +256 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +192 -0
- qiskit/circuit/library/generalized_gates/rv.py +97 -0
- qiskit/circuit/library/generalized_gates/uc.py +213 -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 +215 -0
- qiskit/circuit/library/graph_state.py +86 -0
- qiskit/circuit/library/grover_operator.py +311 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +98 -0
- qiskit/circuit/library/iqp.py +96 -0
- qiskit/circuit/library/n_local/__init__.py +33 -0
- qiskit/circuit/library/n_local/efficient_su2.py +164 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +256 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +173 -0
- qiskit/circuit/library/n_local/n_local.py +1071 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +141 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +287 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +186 -0
- qiskit/circuit/library/n_local/two_local.py +282 -0
- qiskit/circuit/library/overlap.py +117 -0
- qiskit/circuit/library/pauli_evolution.py +184 -0
- qiskit/circuit/library/phase_estimation.py +99 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +115 -0
- qiskit/circuit/library/standard_gates/__init__.py +123 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +130 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +85 -0
- qiskit/circuit/library/standard_gates/h.py +257 -0
- qiskit/circuit/library/standard_gates/i.py +75 -0
- qiskit/circuit/library/standard_gates/iswap.py +134 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
- qiskit/circuit/library/standard_gates/p.py +433 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +302 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +297 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +318 -0
- qiskit/circuit/library/standard_gates/rzx.py +229 -0
- qiskit/circuit/library/standard_gates/rzz.py +196 -0
- qiskit/circuit/library/standard_gates/s.py +428 -0
- qiskit/circuit/library/standard_gates/swap.py +288 -0
- qiskit/circuit/library/standard_gates/sx.py +314 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +451 -0
- qiskit/circuit/library/standard_gates/u2.py +146 -0
- qiskit/circuit/library/standard_gates/u3.py +408 -0
- qiskit/circuit/library/standard_gates/x.py +1527 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
- qiskit/circuit/library/standard_gates/y.py +261 -0
- qiskit/circuit/library/standard_gates/z.py +348 -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 +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +32 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +40 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +32 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +33 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +42 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +46 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +53 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +43 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +67 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +58 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +57 -0
- qiskit/circuit/measure.py +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +174 -0
- qiskit/circuit/parameterexpression.py +559 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6793 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/quantumregister.py +75 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +358 -0
- qiskit/circuit/register.py +233 -0
- qiskit/circuit/reset.py +34 -0
- qiskit/circuit/singleton.py +604 -0
- qiskit/circuit/store.py +95 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +668 -0
- qiskit/compiler/scheduler.py +107 -0
- qiskit/compiler/sequencer.py +69 -0
- qiskit/compiler/transpiler.py +478 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +78 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +155 -0
- qiskit/converters/dag_to_circuit.py +77 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +42 -0
- qiskit/converters/dagdependency_to_dag.py +49 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +633 -0
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +176 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +240 -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 +333 -0
- qiskit/primitives/__init__.py +481 -0
- qiskit/primitives/backend_estimator.py +483 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +296 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +252 -0
- qiskit/primitives/base/base_primitive.py +45 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_result.py +65 -0
- qiskit/primitives/base/base_sampler.py +204 -0
- qiskit/primitives/base/estimator_result.py +46 -0
- qiskit/primitives/base/sampler_result.py +45 -0
- qiskit/primitives/base/validation.py +231 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +389 -0
- qiskit/primitives/containers/bit_array.py +741 -0
- qiskit/primitives/containers/data_bin.py +165 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +279 -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/estimator.py +172 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/sampler.py +162 -0
- qiskit/primitives/statevector_estimator.py +174 -0
- qiskit/primitives/statevector_sampler.py +292 -0
- qiskit/primitives/utils.py +247 -0
- qiskit/providers/__init__.py +803 -0
- qiskit/providers/backend.py +656 -0
- qiskit/providers/backend_compat.py +452 -0
- qiskit/providers/basic_provider/__init__.py +45 -0
- qiskit/providers/basic_provider/basic_provider.py +101 -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 +811 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +105 -0
- qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +165 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +44 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1019 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +89 -0
- qiskit/providers/models/backendconfiguration.py +1040 -0
- qiskit/providers/models/backendproperties.py +517 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +303 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +95 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/pulse/__init__.py +158 -0
- qiskit/pulse/builder.py +2213 -0
- qiskit/pulse/calibration_entries.py +378 -0
- qiskit/pulse/channels.py +225 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +43 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +409 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +148 -0
- qiskit/pulse/instructions/delay.py +69 -0
- qiskit/pulse/instructions/directives.py +146 -0
- qiskit/pulse/instructions/frequency.py +132 -0
- qiskit/pulse/instructions/instruction.py +268 -0
- qiskit/pulse/instructions/phase.py +149 -0
- qiskit/pulse/instructions/play.py +97 -0
- qiskit/pulse/instructions/reference.py +98 -0
- qiskit/pulse/instructions/snapshot.py +80 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +146 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +295 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1960 -0
- qiskit/pulse/library/waveform.py +134 -0
- qiskit/pulse/macros.py +262 -0
- qiskit/pulse/parameter_manager.py +445 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +1855 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +404 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +498 -0
- qiskit/pulse/transforms/dag.py +115 -0
- qiskit/pulse/utils.py +149 -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 +654 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +370 -0
- qiskit/qasm2/parse.py +408 -0
- qiskit/qasm3/__init__.py +366 -0
- qiskit/qasm3/ast.py +630 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1273 -0
- qiskit/qasm3/printer.py +577 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +81 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +177 -0
- qiskit/qobj/converters/pulse_instruction.py +895 -0
- qiskit/qobj/pulse_qobj.py +709 -0
- qiskit/qobj/qasm_qobj.py +708 -0
- qiskit/qobj/utils.py +46 -0
- qiskit/qpy/__init__.py +1641 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1460 -0
- qiskit/qpy/binary_io/schedules.py +636 -0
- qiskit/qpy/binary_io/value.py +728 -0
- qiskit/qpy/common.py +306 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +394 -0
- qiskit/qpy/interface.py +341 -0
- qiskit/qpy/type_keys.py +572 -0
- qiskit/quantum_info/__init__.py +158 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +102 -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 +377 -0
- qiskit/quantum_info/operators/channel/transformations.py +468 -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 +509 -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 +819 -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 +727 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +751 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -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 +1175 -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 +845 -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 +773 -0
- qiskit/quantum_info/states/statevector.py +958 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +73 -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/mitigation/__init__.py +13 -0
- qiskit/result/mitigation/base_readout_mitigator.py +79 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +269 -0
- qiskit/result/mitigation/local_readout_mitigator.py +320 -0
- qiskit/result/mitigation/utils.py +160 -0
- qiskit/result/models.py +234 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +392 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +40 -0
- qiskit/scheduler/config.py +35 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +137 -0
- qiskit/scheduler/schedule_circuit.py +67 -0
- qiskit/scheduler/sequence.py +102 -0
- qiskit/synthesis/__init__.py +195 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +47 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +57 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +446 -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 +241 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
- qiskit/synthesis/evolution/__init__.py +20 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +143 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/product_formula.py +384 -0
- qiskit/synthesis/evolution/qdrift.py +131 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +155 -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 +276 -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 +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +23 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -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 +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +78 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +193 -0
- qiskit/synthesis/two_qubit/__init__.py +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +759 -0
- qiskit/synthesis/two_qubit/weyl.py +97 -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 +1283 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +737 -0
- qiskit/transpiler/passes/__init__.py +310 -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 +693 -0
- qiskit/transpiler/passes/basis/decompose.py +98 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
- qiskit/transpiler/passes/calibration/__init__.py +17 -0
- qiskit/transpiler/passes/calibration/base_builder.py +79 -0
- qiskit/transpiler/passes/calibration/builders.py +20 -0
- qiskit/transpiler/passes/calibration/exceptions.py +22 -0
- qiskit/transpiler/passes/calibration/pulse_gate.py +98 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +160 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +395 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -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 +123 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +202 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +217 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +482 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +220 -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 +263 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +260 -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 +115 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +88 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -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 +232 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +93 -0
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +260 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -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_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -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 +638 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +22 -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 +395 -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 +443 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +153 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +105 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
- qiskit/transpiler/passes/scheduling/asap.py +175 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +308 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +307 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +441 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +160 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +691 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +928 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1055 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +52 -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 +65 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +88 -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 +65 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +349 -0
- qiskit/transpiler/passes/utils/gates_basis.py +74 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +162 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +490 -0
- qiskit/transpiler/passmanager_config.py +198 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1019 -0
- qiskit/transpiler/preset_passmanagers/common.py +647 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +543 -0
- qiskit/transpiler/preset_passmanagers/level0.py +113 -0
- qiskit/transpiler/preset_passmanagers/level1.py +120 -0
- qiskit/transpiler/preset_passmanagers/level2.py +119 -0
- qiskit/transpiler/preset_passmanagers/level3.py +119 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
- qiskit/transpiler/target.py +1261 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +262 -0
- qiskit/utils/__init__.py +89 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +490 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/multiprocessing.py +56 -0
- qiskit/utils/optionals.py +347 -0
- qiskit/utils/parallel.py +191 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +288 -0
- qiskit/visualization/array.py +204 -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 +726 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2029 -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 +1844 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +481 -0
- qiskit/visualization/dag_visualization.py +316 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1485 -0
- qiskit/visualization/library.py +37 -0
- qiskit/visualization/pass_manager_visualization.py +319 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +901 -0
- qiskit/visualization/pulse_v2/device_info.py +173 -0
- qiskit/visualization/pulse_v2/drawings.py +253 -0
- qiskit/visualization/pulse_v2/events.py +254 -0
- qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
- qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
- qiskit/visualization/pulse_v2/generators/chart.py +208 -0
- qiskit/visualization/pulse_v2/generators/frame.py +436 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
- qiskit/visualization/pulse_v2/interface.py +456 -0
- qiskit/visualization/pulse_v2/layouts.py +387 -0
- qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
- qiskit/visualization/pulse_v2/stylesheet.py +312 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/state_visualization.py +1518 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +457 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +424 -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 +192 -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-1.3.0b1.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0b1.dist-info/METADATA +221 -0
- qiskit-1.3.0b1.dist-info/RECORD +825 -0
- qiskit-1.3.0b1.dist-info/WHEEL +5 -0
- qiskit-1.3.0b1.dist-info/entry_points.txt +57 -0
- qiskit-1.3.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,336 @@
|
|
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
|
+
"""Prepare a quantum state from the state where all qubits are 0."""
|
13
|
+
|
14
|
+
from typing import Union, Optional
|
15
|
+
|
16
|
+
import math
|
17
|
+
import numpy as np
|
18
|
+
|
19
|
+
from qiskit.exceptions import QiskitError
|
20
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
21
|
+
from qiskit.circuit.quantumregister import QuantumRegister
|
22
|
+
from qiskit.circuit.gate import Gate
|
23
|
+
from qiskit.circuit.library.standard_gates.x import XGate
|
24
|
+
from qiskit.circuit.library.standard_gates.h import HGate
|
25
|
+
from qiskit.circuit.library.standard_gates.s import SGate, SdgGate
|
26
|
+
from qiskit.circuit.library.generalized_gates import Isometry
|
27
|
+
from qiskit.circuit.exceptions import CircuitError
|
28
|
+
from qiskit.quantum_info.states.statevector import (
|
29
|
+
Statevector,
|
30
|
+
) # pylint: disable=cyclic-import
|
31
|
+
|
32
|
+
_EPS = 1e-10 # global variable used to chop very small numbers to zero
|
33
|
+
|
34
|
+
|
35
|
+
class StatePreparation(Gate):
|
36
|
+
"""Complex amplitude state preparation.
|
37
|
+
|
38
|
+
Class that implements the (complex amplitude) state preparation of some
|
39
|
+
flexible collection of qubit registers.
|
40
|
+
"""
|
41
|
+
|
42
|
+
def __init__(
|
43
|
+
self,
|
44
|
+
params: Union[str, list, int, Statevector],
|
45
|
+
num_qubits: Optional[int] = None,
|
46
|
+
inverse: bool = False,
|
47
|
+
label: Optional[str] = None,
|
48
|
+
normalize: bool = False,
|
49
|
+
):
|
50
|
+
r"""
|
51
|
+
Args:
|
52
|
+
params:
|
53
|
+
* Statevector: Statevector to initialize to.
|
54
|
+
* list: vector of complex amplitudes to initialize to.
|
55
|
+
* string: labels of basis states of the Pauli eigenstates Z, X, Y. See
|
56
|
+
:meth:`.Statevector.from_label`.
|
57
|
+
Notice the order of the labels is reversed with respect to the qubit index to
|
58
|
+
be applied to. Example label '01' initializes the qubit zero to :math:`|1\rangle`
|
59
|
+
and the qubit one to :math:`|0\rangle`.
|
60
|
+
* int: an integer that is used as a bitmap indicating which qubits to initialize
|
61
|
+
to :math:`|1\rangle`. Example: setting params to 5 would initialize qubit 0 and qubit 2
|
62
|
+
to :math:`|1\rangle` and qubit 1 to :math:`|0\rangle`.
|
63
|
+
num_qubits: This parameter is only used if params is an int. Indicates the total
|
64
|
+
number of qubits in the `initialize` call. Example: `initialize` covers 5 qubits
|
65
|
+
and params is 3. This allows qubits 0 and 1 to be initialized to :math:`|1\rangle`
|
66
|
+
and the remaining 3 qubits to be initialized to :math:`|0\rangle`.
|
67
|
+
inverse: if True, the inverse state is constructed.
|
68
|
+
label: An optional label for the gate
|
69
|
+
normalize (bool): Whether to normalize an input array to a unit vector.
|
70
|
+
|
71
|
+
Raises:
|
72
|
+
QiskitError: ``num_qubits`` parameter used when ``params`` is not an integer
|
73
|
+
|
74
|
+
When a Statevector argument is passed the state is prepared based on the
|
75
|
+
:class:`~.library.Isometry` synthesis described in [1].
|
76
|
+
|
77
|
+
References:
|
78
|
+
1. Iten et al., Quantum circuits for isometries (2016).
|
79
|
+
`Phys. Rev. A 93, 032318
|
80
|
+
<https://journals.aps.org/pra/abstract/10.1103/PhysRevA.93.032318>`__.
|
81
|
+
|
82
|
+
"""
|
83
|
+
self._params_arg = params
|
84
|
+
self._inverse = inverse
|
85
|
+
self._name = "state_preparation_dg" if self._inverse else "state_preparation"
|
86
|
+
|
87
|
+
if label is None:
|
88
|
+
self._label = "State Preparation Dg" if self._inverse else "State Preparation"
|
89
|
+
else:
|
90
|
+
self._label = f"{label} Dg" if self._inverse else label
|
91
|
+
|
92
|
+
if isinstance(params, Statevector):
|
93
|
+
params = params.data
|
94
|
+
|
95
|
+
if not isinstance(params, int) and num_qubits is not None:
|
96
|
+
raise QiskitError(
|
97
|
+
"The num_qubits parameter to StatePreparation should only be"
|
98
|
+
" used when params is an integer"
|
99
|
+
)
|
100
|
+
self._from_label = isinstance(params, str)
|
101
|
+
self._from_int = isinstance(params, int)
|
102
|
+
|
103
|
+
# if initialized from a vector, check that the parameters are normalized
|
104
|
+
if not self._from_label and not self._from_int:
|
105
|
+
norm = np.linalg.norm(params)
|
106
|
+
if normalize:
|
107
|
+
params = np.array(params, dtype=np.complex128) / norm
|
108
|
+
elif not math.isclose(norm, 1.0, abs_tol=_EPS):
|
109
|
+
raise QiskitError(f"Sum of amplitudes-squared is not 1, but {norm}.")
|
110
|
+
|
111
|
+
num_qubits = self._get_num_qubits(num_qubits, params)
|
112
|
+
params = [params] if isinstance(params, int) else params
|
113
|
+
|
114
|
+
super().__init__(self._name, num_qubits, params, label=self._label)
|
115
|
+
|
116
|
+
def _define(self):
|
117
|
+
if self._from_label:
|
118
|
+
self.definition = self._define_from_label()
|
119
|
+
elif self._from_int:
|
120
|
+
self.definition = self._define_from_int()
|
121
|
+
else:
|
122
|
+
self.definition = self._define_synthesis_isom()
|
123
|
+
|
124
|
+
def _define_from_label(self):
|
125
|
+
q = QuantumRegister(self.num_qubits, "q")
|
126
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
127
|
+
|
128
|
+
for qubit, param in enumerate(reversed(self.params)):
|
129
|
+
if param == "1":
|
130
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
131
|
+
elif param == "+":
|
132
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
133
|
+
elif param == "-":
|
134
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
135
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
136
|
+
elif param == "r": # |+i>
|
137
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
138
|
+
initialize_circuit.append(SGate(), [q[qubit]])
|
139
|
+
elif param == "l": # |-i>
|
140
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
141
|
+
initialize_circuit.append(SdgGate(), [q[qubit]])
|
142
|
+
|
143
|
+
if self._inverse:
|
144
|
+
initialize_circuit = initialize_circuit.inverse()
|
145
|
+
|
146
|
+
return initialize_circuit
|
147
|
+
|
148
|
+
def _define_from_int(self):
|
149
|
+
q = QuantumRegister(self.num_qubits, "q")
|
150
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
151
|
+
|
152
|
+
# Convert to int since QuantumCircuit converted to complex
|
153
|
+
# and make a bit string and reverse it
|
154
|
+
intstr = f"{int(np.real(self.params[0])):0{self.num_qubits}b}"[::-1]
|
155
|
+
|
156
|
+
# Raise if number of bits is greater than num_qubits
|
157
|
+
if len(intstr) > self.num_qubits:
|
158
|
+
raise QiskitError(
|
159
|
+
f"StatePreparation integer has {len(intstr)} bits, but this exceeds the"
|
160
|
+
f" number of qubits in the circuit, {self.num_qubits}."
|
161
|
+
)
|
162
|
+
|
163
|
+
for qubit, bit in enumerate(intstr):
|
164
|
+
if bit == "1":
|
165
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
166
|
+
|
167
|
+
# note: X is it's own inverse, so even if self._inverse is True,
|
168
|
+
# we don't need to invert anything
|
169
|
+
return initialize_circuit
|
170
|
+
|
171
|
+
def _define_synthesis_isom(self):
|
172
|
+
"""Calculate a subcircuit that implements this initialization via isometry"""
|
173
|
+
q = QuantumRegister(self.num_qubits, "q")
|
174
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
175
|
+
|
176
|
+
isom = Isometry(self.params, 0, 0)
|
177
|
+
initialize_circuit.compose(isom.definition, copy=False, inplace=True)
|
178
|
+
|
179
|
+
# invert the circuit to create the desired vector from zero (assuming
|
180
|
+
# the qubits are in the zero state)
|
181
|
+
if self._inverse is True:
|
182
|
+
return initialize_circuit.inverse()
|
183
|
+
|
184
|
+
return initialize_circuit
|
185
|
+
|
186
|
+
def _get_num_qubits(self, num_qubits, params):
|
187
|
+
"""Get number of qubits needed for state preparation"""
|
188
|
+
if isinstance(params, str):
|
189
|
+
num_qubits = len(params)
|
190
|
+
elif isinstance(params, int):
|
191
|
+
if num_qubits is None:
|
192
|
+
num_qubits = int(math.log2(params)) + 1
|
193
|
+
else:
|
194
|
+
num_qubits = math.log2(len(params))
|
195
|
+
|
196
|
+
# Check if param is a power of 2
|
197
|
+
if num_qubits == 0 or not num_qubits.is_integer():
|
198
|
+
raise QiskitError("Desired statevector length not a positive power of 2.")
|
199
|
+
|
200
|
+
num_qubits = int(num_qubits)
|
201
|
+
return num_qubits
|
202
|
+
|
203
|
+
def inverse(self, annotated: bool = False):
|
204
|
+
"""Return inverted StatePreparation"""
|
205
|
+
|
206
|
+
label = (
|
207
|
+
None if self._label in ("State Preparation", "State Preparation Dg") else self._label
|
208
|
+
)
|
209
|
+
|
210
|
+
return StatePreparation(self._params_arg, inverse=not self._inverse, label=label)
|
211
|
+
|
212
|
+
def broadcast_arguments(self, qargs, cargs):
|
213
|
+
flat_qargs = [qarg for sublist in qargs for qarg in sublist]
|
214
|
+
|
215
|
+
if self.num_qubits != len(flat_qargs):
|
216
|
+
raise QiskitError(
|
217
|
+
f"StatePreparation parameter vector has {2**self.num_qubits}"
|
218
|
+
f" elements, therefore expects {self.num_qubits} "
|
219
|
+
f"qubits. However, {len(flat_qargs)} were provided."
|
220
|
+
)
|
221
|
+
yield flat_qargs, []
|
222
|
+
|
223
|
+
def validate_parameter(self, parameter):
|
224
|
+
"""StatePreparation instruction parameter can be str, int, float, and complex."""
|
225
|
+
|
226
|
+
# StatePreparation instruction parameter can be str
|
227
|
+
if isinstance(parameter, str):
|
228
|
+
if parameter in ["0", "1", "+", "-", "l", "r"]:
|
229
|
+
return parameter
|
230
|
+
raise CircuitError(
|
231
|
+
f"invalid param label {type(parameter)} for instruction {self.name}. Label should be "
|
232
|
+
"0, 1, +, -, l, or r "
|
233
|
+
)
|
234
|
+
|
235
|
+
# StatePreparation instruction parameter can be int, float, and complex.
|
236
|
+
if isinstance(parameter, (int, float, complex)):
|
237
|
+
return complex(parameter)
|
238
|
+
elif isinstance(parameter, np.number):
|
239
|
+
return complex(parameter.item())
|
240
|
+
else:
|
241
|
+
raise CircuitError(f"invalid param type {type(parameter)} for instruction {self.name}")
|
242
|
+
|
243
|
+
def _return_repeat(self, exponent: float) -> "Gate":
|
244
|
+
return Gate(name=f"{self.name}*{exponent}", num_qubits=self.num_qubits, params=[])
|
245
|
+
|
246
|
+
|
247
|
+
class UniformSuperpositionGate(Gate):
|
248
|
+
r"""Implements a uniform superposition state.
|
249
|
+
|
250
|
+
This gate is used to create the uniform superposition state
|
251
|
+
:math:`\frac{1}{\sqrt{M}} \sum_{j=0}^{M-1} |j\rangle` when it acts on an input
|
252
|
+
state :math:`|0...0\rangle`. Note, that `M` is not required to be
|
253
|
+
a power of 2, in which case the uniform superposition could be
|
254
|
+
prepared by a single layer of Hadamard gates.
|
255
|
+
|
256
|
+
.. note::
|
257
|
+
|
258
|
+
This class uses the Shukla-Vedula algorithm [1], which only needs
|
259
|
+
:math:`O(\log_2 (M))` qubits and :math:`O(\log_2 (M))` gates,
|
260
|
+
to prepare the superposition.
|
261
|
+
|
262
|
+
**References:**
|
263
|
+
[1]: A. Shukla and P. Vedula (2024), An efficient quantum algorithm for preparation
|
264
|
+
of uniform quantum superposition states, `Quantum Inf Process 23, 38
|
265
|
+
<https://link.springer.com/article/10.1007/s11128-024-04258-4>`_.
|
266
|
+
"""
|
267
|
+
|
268
|
+
def __init__(
|
269
|
+
self,
|
270
|
+
num_superpos_states: int = 2,
|
271
|
+
num_qubits: Optional[int] = None,
|
272
|
+
):
|
273
|
+
r"""
|
274
|
+
Args:
|
275
|
+
num_superpos_states (int):
|
276
|
+
A positive integer M = num_superpos_states (> 1) representing the number of computational
|
277
|
+
basis states with an amplitude of 1/sqrt(M) in the uniform superposition
|
278
|
+
state (:math:`\frac{1}{\sqrt{M}} \sum_{j=0}^{M-1} |j\rangle`, where
|
279
|
+
:math:`1< M <= 2^n`). Note that the remaining (:math:`2^n - M`) computational basis
|
280
|
+
states have zero amplitudes. Here M need not be an integer power of 2.
|
281
|
+
|
282
|
+
num_qubits (int):
|
283
|
+
A positive integer representing the number of qubits used. If num_qubits is None
|
284
|
+
or is not specified, then num_qubits is set to ceil(log2(num_superpos_states)).
|
285
|
+
|
286
|
+
Raises:
|
287
|
+
ValueError: num_qubits must be an integer greater than or equal to log2(num_superpos_states).
|
288
|
+
|
289
|
+
"""
|
290
|
+
if num_superpos_states <= 1:
|
291
|
+
raise ValueError("num_superpos_states must be a positive integer greater than 1.")
|
292
|
+
if num_qubits is None:
|
293
|
+
num_qubits = int(math.ceil(math.log2(num_superpos_states)))
|
294
|
+
else:
|
295
|
+
if not (isinstance(num_qubits, int) and (num_qubits >= math.log2(num_superpos_states))):
|
296
|
+
raise ValueError(
|
297
|
+
"num_qubits must be an integer greater than or equal to log2(num_superpos_states)."
|
298
|
+
)
|
299
|
+
super().__init__("USup", num_qubits, [num_superpos_states])
|
300
|
+
|
301
|
+
def _define(self):
|
302
|
+
|
303
|
+
qc = QuantumCircuit(self._num_qubits)
|
304
|
+
|
305
|
+
num_superpos_states = self.params[0]
|
306
|
+
|
307
|
+
if (
|
308
|
+
num_superpos_states & (num_superpos_states - 1)
|
309
|
+
) == 0: # if num_superpos_states is an integer power of 2
|
310
|
+
m = int(math.log2(num_superpos_states))
|
311
|
+
qc.h(range(m))
|
312
|
+
self.definition = qc
|
313
|
+
return
|
314
|
+
|
315
|
+
n_value = [int(x) for x in reversed(np.binary_repr(num_superpos_states))]
|
316
|
+
k = len(n_value)
|
317
|
+
l_value = [index for (index, item) in enumerate(n_value) if item == 1] # Locations of '1's
|
318
|
+
|
319
|
+
qc.x(l_value[1:k])
|
320
|
+
m_current_value = 2 ** l_value[0]
|
321
|
+
theta = -2 * np.arccos(np.sqrt(m_current_value / num_superpos_states))
|
322
|
+
|
323
|
+
if l_value[0] > 0: # if num_superpos_states is even
|
324
|
+
qc.h(range(l_value[0]))
|
325
|
+
qc.ry(theta, l_value[1])
|
326
|
+
qc.ch(l_value[1], range(l_value[0], l_value[1]), ctrl_state="0")
|
327
|
+
|
328
|
+
for m in range(1, len(l_value) - 1):
|
329
|
+
theta = -2 * np.arccos(
|
330
|
+
np.sqrt(2 ** l_value[m] / (num_superpos_states - m_current_value))
|
331
|
+
)
|
332
|
+
qc.cry(theta, l_value[m], l_value[m + 1], ctrl_state="0")
|
333
|
+
qc.ch(l_value[m + 1], range(l_value[m], l_value[m + 1]), ctrl_state="0")
|
334
|
+
m_current_value = m_current_value + 2 ** l_value[m]
|
335
|
+
|
336
|
+
self.definition = qc
|
@@ -0,0 +1,104 @@
|
|
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
|
+
|
18
|
+
from .pauli_feature_map import PauliFeatureMap
|
19
|
+
|
20
|
+
|
21
|
+
class ZFeatureMap(PauliFeatureMap):
|
22
|
+
"""The first order Pauli Z-evolution circuit.
|
23
|
+
|
24
|
+
On 3 qubits and with 2 repetitions the circuit is represented by:
|
25
|
+
|
26
|
+
.. parsed-literal::
|
27
|
+
|
28
|
+
┌───┐┌──────────────┐┌───┐┌──────────────┐
|
29
|
+
┤ H ├┤ U1(2.0*x[0]) ├┤ H ├┤ U1(2.0*x[0]) ├
|
30
|
+
├───┤├──────────────┤├───┤├──────────────┤
|
31
|
+
┤ H ├┤ U1(2.0*x[1]) ├┤ H ├┤ U1(2.0*x[1]) ├
|
32
|
+
├───┤├──────────────┤├───┤├──────────────┤
|
33
|
+
┤ H ├┤ U1(2.0*x[2]) ├┤ H ├┤ U1(2.0*x[2]) ├
|
34
|
+
└───┘└──────────────┘└───┘└──────────────┘
|
35
|
+
|
36
|
+
This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli
|
37
|
+
strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without
|
38
|
+
entangling gates.
|
39
|
+
|
40
|
+
Examples:
|
41
|
+
|
42
|
+
>>> prep = ZFeatureMap(3, reps=3, insert_barriers=True)
|
43
|
+
>>> print(prep)
|
44
|
+
┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐
|
45
|
+
q_0: ┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├
|
46
|
+
├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
|
47
|
+
q_1: ┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├
|
48
|
+
├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
|
49
|
+
q_2: ┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├
|
50
|
+
└───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘
|
51
|
+
|
52
|
+
>>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array
|
53
|
+
>>> prep = ZFeatureMap(3, reps=1, data_map_func=data_map)
|
54
|
+
>>> print(prep)
|
55
|
+
┌───┐┌───────────────────────┐
|
56
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]**2 + 2.0) ├
|
57
|
+
├───┤├───────────────────────┤
|
58
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]**2 + 2.0) ├
|
59
|
+
├───┤├───────────────────────┤
|
60
|
+
q_2: ┤ H ├┤ U1(2.0*x[2]**2 + 2.0) ├
|
61
|
+
└───┘└───────────────────────┘
|
62
|
+
|
63
|
+
>>> classifier = ZFeatureMap(3, reps=1) + RY(3, reps=1)
|
64
|
+
>>> print(classifier)
|
65
|
+
┌───┐┌──────────────┐┌──────────┐ ┌──────────┐
|
66
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
|
67
|
+
├───┤├──────────────┤├──────────┤ │ │ └──────────┘┌──────────┐
|
68
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4]) ├
|
69
|
+
├───┤├──────────────┤├──────────┤ │ │ ├──────────┤
|
70
|
+
q_2: ┤ H ├┤ U1(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
|
71
|
+
└───┘└──────────────┘└──────────┘ └──────────┘
|
72
|
+
|
73
|
+
"""
|
74
|
+
|
75
|
+
def __init__(
|
76
|
+
self,
|
77
|
+
feature_dimension: int,
|
78
|
+
reps: int = 2,
|
79
|
+
data_map_func: Optional[Callable[[np.ndarray], float]] = None,
|
80
|
+
parameter_prefix: str = "x",
|
81
|
+
insert_barriers: bool = False,
|
82
|
+
name: str = "ZFeatureMap",
|
83
|
+
) -> None:
|
84
|
+
"""Create a new first-order Pauli-Z expansion circuit.
|
85
|
+
|
86
|
+
Args:
|
87
|
+
feature_dimension: The number of features
|
88
|
+
reps: The number of repeated circuits. Defaults to 2, has a minimum value of 1.
|
89
|
+
data_map_func: A mapping function for data x which can be supplied to override the
|
90
|
+
default mapping from :meth:`self_product`.
|
91
|
+
parameter_prefix: The prefix used if default parameters are generated.
|
92
|
+
insert_barriers: If True, barriers are inserted in between the evolution instructions
|
93
|
+
and hadamard layers.
|
94
|
+
|
95
|
+
"""
|
96
|
+
super().__init__(
|
97
|
+
feature_dimension=feature_dimension,
|
98
|
+
paulis=["Z"],
|
99
|
+
reps=reps,
|
100
|
+
data_map_func=data_map_func,
|
101
|
+
parameter_prefix=parameter_prefix,
|
102
|
+
insert_barriers=insert_barriers,
|
103
|
+
name=name,
|
104
|
+
)
|
@@ -0,0 +1,118 @@
|
|
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
|
+
"""Second-order Pauli-Z expansion circuit."""
|
14
|
+
|
15
|
+
from typing import Callable, List, Union, Optional, Dict, Tuple
|
16
|
+
import numpy as np
|
17
|
+
from .pauli_feature_map import PauliFeatureMap
|
18
|
+
|
19
|
+
|
20
|
+
class ZZFeatureMap(PauliFeatureMap):
|
21
|
+
r"""Second-order Pauli-Z evolution circuit.
|
22
|
+
|
23
|
+
For 3 qubits and 1 repetition and linear entanglement the circuit is represented by:
|
24
|
+
|
25
|
+
.. parsed-literal::
|
26
|
+
|
27
|
+
┌───┐┌─────────────────┐
|
28
|
+
┤ H ├┤ U1(2.0*φ(x[0])) ├──■────────────────────────────■────────────────────────────────────
|
29
|
+
├───┤├─────────────────┤┌─┴─┐┌──────────────────────┐┌─┴─┐
|
30
|
+
┤ H ├┤ U1(2.0*φ(x[1])) ├┤ X ├┤ U1(2.0*φ(x[0],x[1])) ├┤ X ├──■────────────────────────────■──
|
31
|
+
├───┤├─────────────────┤└───┘└──────────────────────┘└───┘┌─┴─┐┌──────────────────────┐┌─┴─┐
|
32
|
+
┤ H ├┤ U1(2.0*φ(x[2])) ├──────────────────────────────────┤ X ├┤ U1(2.0*φ(x[1],x[2])) ├┤ X ├
|
33
|
+
└───┘└─────────────────┘ └───┘└──────────────────────┘└───┘
|
34
|
+
|
35
|
+
where :math:`\varphi` is a classical non-linear function, which defaults to :math:`\varphi(x) = x`
|
36
|
+
if and :math:`\varphi(x,y) = (\pi - x)(\pi - y)`.
|
37
|
+
|
38
|
+
Examples:
|
39
|
+
|
40
|
+
>>> from qiskit.circuit.library import ZZFeatureMap
|
41
|
+
>>> prep = ZZFeatureMap(2, reps=1)
|
42
|
+
>>> print(prep)
|
43
|
+
┌───┐┌──────────────┐
|
44
|
+
q_0: ┤ H ├┤ U1(2.0*x[0]) ├──■───────────────────────────────────────■──
|
45
|
+
├───┤├──────────────┤┌─┴─┐┌─────────────────────────────────┐┌─┴─┐
|
46
|
+
q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
|
47
|
+
└───┘└──────────────┘└───┘└─────────────────────────────────┘└───┘
|
48
|
+
|
49
|
+
>>> from qiskit.circuit.library import EfficientSU2
|
50
|
+
>>> classifier = ZZFeatureMap(3) + EfficientSU2(3)
|
51
|
+
>>> classifier.num_parameters
|
52
|
+
15
|
53
|
+
>>> classifier.parameters # 'x' for the data preparation, 'θ' for the SU2 parameters
|
54
|
+
ParameterView([
|
55
|
+
ParameterVectorElement(x[0]), ParameterVectorElement(x[1]),
|
56
|
+
ParameterVectorElement(x[2]), ParameterVectorElement(θ[0]),
|
57
|
+
ParameterVectorElement(θ[1]), ParameterVectorElement(θ[2]),
|
58
|
+
ParameterVectorElement(θ[3]), ParameterVectorElement(θ[4]),
|
59
|
+
ParameterVectorElement(θ[5]), ParameterVectorElement(θ[6]),
|
60
|
+
ParameterVectorElement(θ[7]), ParameterVectorElement(θ[8]),
|
61
|
+
ParameterVectorElement(θ[9]), ParameterVectorElement(θ[10]),
|
62
|
+
ParameterVectorElement(θ[11]), ParameterVectorElement(θ[12]),
|
63
|
+
ParameterVectorElement(θ[13]), ParameterVectorElement(θ[14]),
|
64
|
+
ParameterVectorElement(θ[15]), ParameterVectorElement(θ[16]),
|
65
|
+
ParameterVectorElement(θ[17]), ParameterVectorElement(θ[18]),
|
66
|
+
ParameterVectorElement(θ[19]), ParameterVectorElement(θ[20]),
|
67
|
+
ParameterVectorElement(θ[21]), ParameterVectorElement(θ[22]),
|
68
|
+
ParameterVectorElement(θ[23])
|
69
|
+
])
|
70
|
+
>>> classifier.count_ops()
|
71
|
+
OrderedDict([('ZZFeatureMap', 1), ('EfficientSU2', 1)])
|
72
|
+
"""
|
73
|
+
|
74
|
+
def __init__(
|
75
|
+
self,
|
76
|
+
feature_dimension: int,
|
77
|
+
reps: int = 2,
|
78
|
+
entanglement: Union[
|
79
|
+
str,
|
80
|
+
Dict[int, List[Tuple[int]]],
|
81
|
+
Callable[[int], Union[str, Dict[int, List[Tuple[int]]]]],
|
82
|
+
] = "full",
|
83
|
+
data_map_func: Optional[Callable[[np.ndarray], float]] = None,
|
84
|
+
parameter_prefix: str = "x",
|
85
|
+
insert_barriers: bool = False,
|
86
|
+
name: str = "ZZFeatureMap",
|
87
|
+
) -> None:
|
88
|
+
"""Create a new second-order Pauli-Z expansion.
|
89
|
+
|
90
|
+
Args:
|
91
|
+
feature_dimension: Number of features.
|
92
|
+
reps: The number of repeated circuits, has a min. value of 1.
|
93
|
+
entanglement: Specifies the entanglement structure. Refer to
|
94
|
+
:class:`~qiskit.circuit.library.PauliFeatureMap` for detail.
|
95
|
+
data_map_func: A mapping function for data x.
|
96
|
+
parameter_prefix: The prefix used if default parameters are generated.
|
97
|
+
insert_barriers: If True, barriers are inserted in between the evolution instructions
|
98
|
+
and hadamard layers.
|
99
|
+
|
100
|
+
Raises:
|
101
|
+
ValueError: If the feature dimension is smaller than 2.
|
102
|
+
"""
|
103
|
+
if feature_dimension < 2:
|
104
|
+
raise ValueError(
|
105
|
+
"The ZZFeatureMap contains 2-local interactions and cannot be "
|
106
|
+
f"defined for less than 2 qubits. You provided {feature_dimension}."
|
107
|
+
)
|
108
|
+
|
109
|
+
super().__init__(
|
110
|
+
feature_dimension=feature_dimension,
|
111
|
+
reps=reps,
|
112
|
+
entanglement=entanglement,
|
113
|
+
paulis=["Z", "ZZ"],
|
114
|
+
data_map_func=data_map_func,
|
115
|
+
parameter_prefix=parameter_prefix,
|
116
|
+
insert_barriers=insert_barriers,
|
117
|
+
name=name,
|
118
|
+
)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 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
|
+
"""Fourier checking circuit."""
|
14
|
+
|
15
|
+
from typing import List
|
16
|
+
|
17
|
+
import math
|
18
|
+
from qiskit.circuit import QuantumCircuit
|
19
|
+
from qiskit.circuit.exceptions import CircuitError
|
20
|
+
|
21
|
+
from .generalized_gates.diagonal import Diagonal
|
22
|
+
|
23
|
+
|
24
|
+
class FourierChecking(QuantumCircuit):
|
25
|
+
"""Fourier checking circuit.
|
26
|
+
|
27
|
+
The circuit for the Fourier checking algorithm, introduced in [1],
|
28
|
+
involves a layer of Hadamards, the function :math:`f`, another layer of
|
29
|
+
Hadamards, the function :math:`g`, followed by a final layer of Hadamards.
|
30
|
+
The functions :math:`f` and :math:`g` are classical functions realized
|
31
|
+
as phase oracles (diagonal operators with {-1, 1} on the diagonal).
|
32
|
+
|
33
|
+
The probability of observing the all-zeros string is :math:`p(f,g)`.
|
34
|
+
The algorithm solves the promise Fourier checking problem,
|
35
|
+
which decides if f is correlated with the Fourier transform
|
36
|
+
of g, by testing if :math:`p(f,g) <= 0.01` or :math:`p(f,g) >= 0.05`,
|
37
|
+
promised that one or the other of these is true.
|
38
|
+
|
39
|
+
The functions :math:`f` and :math:`g` are currently implemented
|
40
|
+
from their truth tables but could be represented concisely and
|
41
|
+
implemented efficiently for special classes of functions.
|
42
|
+
|
43
|
+
Fourier checking is a special case of :math:`k`-fold forrelation [2].
|
44
|
+
|
45
|
+
**Reference:**
|
46
|
+
|
47
|
+
[1] S. Aaronson, BQP and the Polynomial Hierarchy, 2009 (Section 3.2).
|
48
|
+
`arXiv:0910.4698 <https://arxiv.org/abs/0910.4698>`_
|
49
|
+
|
50
|
+
[2] S. Aaronson, A. Ambainis, Forrelation: a problem that
|
51
|
+
optimally separates quantum from classical computing, 2014.
|
52
|
+
`arXiv:1411.5729 <https://arxiv.org/abs/1411.5729>`_
|
53
|
+
"""
|
54
|
+
|
55
|
+
def __init__(self, f: List[int], g: List[int]) -> None:
|
56
|
+
"""Create Fourier checking circuit.
|
57
|
+
|
58
|
+
Args:
|
59
|
+
f: truth table for f, length 2**n list of {1,-1}.
|
60
|
+
g: truth table for g, length 2**n list of {1,-1}.
|
61
|
+
|
62
|
+
Raises:
|
63
|
+
CircuitError: if the inputs f and g are not valid.
|
64
|
+
|
65
|
+
Reference Circuit:
|
66
|
+
.. plot::
|
67
|
+
|
68
|
+
from qiskit.circuit.library import FourierChecking
|
69
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
70
|
+
f = [1, -1, -1, -1]
|
71
|
+
g = [1, 1, -1, -1]
|
72
|
+
circuit = FourierChecking(f, g)
|
73
|
+
_generate_circuit_library_visualization(circuit)
|
74
|
+
"""
|
75
|
+
num_qubits = math.log2(len(f))
|
76
|
+
|
77
|
+
if len(f) != len(g) or num_qubits == 0 or not num_qubits.is_integer():
|
78
|
+
raise CircuitError(
|
79
|
+
"The functions f and g must be given as truth "
|
80
|
+
"tables, each as a list of 2**n entries of "
|
81
|
+
"{1, -1}."
|
82
|
+
)
|
83
|
+
|
84
|
+
circuit = QuantumCircuit(num_qubits, name=f"fc: {f}, {g}")
|
85
|
+
|
86
|
+
circuit.h(circuit.qubits)
|
87
|
+
|
88
|
+
circuit.compose(Diagonal(f), inplace=True)
|
89
|
+
|
90
|
+
circuit.h(circuit.qubits)
|
91
|
+
|
92
|
+
circuit.compose(Diagonal(g), inplace=True)
|
93
|
+
|
94
|
+
circuit.h(circuit.qubits)
|
95
|
+
|
96
|
+
super().__init__(*circuit.qregs, name=circuit.name)
|
97
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|