qiskit 1.0.0b1__cp38-abi3-manylinux_2_17_aarch64.manylinux2014_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 +195 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_qasm2.abi3.so +0 -0
- qiskit/assembler/__init__.py +47 -0
- qiskit/assembler/assemble_circuits.py +408 -0
- qiskit/assembler/assemble_schedules.py +372 -0
- qiskit/assembler/disassemble.py +318 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +425 -0
- qiskit/circuit/_classical_resource_map.py +144 -0
- qiskit/circuit/_utils.py +170 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +188 -0
- qiskit/circuit/barrier.py +51 -0
- qiskit/circuit/bit.py +142 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +218 -0
- qiskit/circuit/classical/expr/constructors.py +473 -0
- qiskit/circuit/classical/expr/expr.py +356 -0
- qiskit/circuit/classical/expr/visitors.py +280 -0
- qiskit/circuit/classical/types/__init__.py +108 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +131 -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 +71 -0
- qiskit/circuit/commutation_checker.py +176 -0
- qiskit/circuit/controlflow/__init__.py +27 -0
- qiskit/circuit/controlflow/_builder_utils.py +199 -0
- qiskit/circuit/controlflow/break_loop.py +70 -0
- qiskit/circuit/controlflow/builder.py +651 -0
- qiskit/circuit/controlflow/continue_loop.py +72 -0
- qiskit/circuit/controlflow/control_flow.py +52 -0
- qiskit/circuit/controlflow/for_loop.py +232 -0
- qiskit/circuit/controlflow/if_else.py +517 -0
- qiskit/circuit/controlflow/switch_case.py +424 -0
- qiskit/circuit/controlflow/while_loop.py +177 -0
- qiskit/circuit/controlledgate.py +271 -0
- qiskit/circuit/delay.py +104 -0
- qiskit/circuit/duration.py +88 -0
- qiskit/circuit/equivalence.py +291 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +245 -0
- qiskit/circuit/instruction.py +655 -0
- qiskit/circuit/instructionset.py +191 -0
- qiskit/circuit/library/__init__.py +581 -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 +197 -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 +289 -0
- qiskit/circuit/library/blueprintcircuit.py +186 -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 +47 -0
- qiskit/circuit/library/data_preparation/initializer.py +96 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +296 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +526 -0
- qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +114 -0
- qiskit/circuit/library/evolved_operator_ansatz.py +245 -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 +164 -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 +573 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +302 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +138 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +254 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +190 -0
- qiskit/circuit/library/generalized_gates/rv.py +93 -0
- qiskit/circuit/library/generalized_gates/uc.py +304 -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 +198 -0
- qiskit/circuit/library/graph_state.py +86 -0
- qiskit/circuit/library/grover_operator.py +311 -0
- qiskit/circuit/library/hamiltonian_gate.py +146 -0
- qiskit/circuit/library/hidden_linear_function.py +98 -0
- qiskit/circuit/library/iqp.py +96 -0
- qiskit/circuit/library/n_local/__init__.py +31 -0
- qiskit/circuit/library/n_local/efficient_su2.py +162 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +176 -0
- qiskit/circuit/library/n_local/n_local.py +1044 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +131 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +288 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +189 -0
- qiskit/circuit/library/n_local/two_local.py +334 -0
- qiskit/circuit/library/overlap.py +111 -0
- qiskit/circuit/library/pauli_evolution.py +180 -0
- qiskit/circuit/library/phase_estimation.py +99 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +114 -0
- qiskit/circuit/library/standard_gates/__init__.py +116 -0
- qiskit/circuit/library/standard_gates/dcx.py +71 -0
- qiskit/circuit/library/standard_gates/ecr.py +114 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1677 -0
- qiskit/circuit/library/standard_gates/global_phase.py +63 -0
- qiskit/circuit/library/standard_gates/h.py +224 -0
- qiskit/circuit/library/standard_gates/i.py +60 -0
- qiskit/circuit/library/standard_gates/iswap.py +129 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +390 -0
- qiskit/circuit/library/standard_gates/p.py +364 -0
- qiskit/circuit/library/standard_gates/r.py +101 -0
- qiskit/circuit/library/standard_gates/rx.py +246 -0
- qiskit/circuit/library/standard_gates/rxx.py +128 -0
- qiskit/circuit/library/standard_gates/ry.py +241 -0
- qiskit/circuit/library/standard_gates/ryy.py +128 -0
- qiskit/circuit/library/standard_gates/rz.py +261 -0
- qiskit/circuit/library/standard_gates/rzx.py +174 -0
- qiskit/circuit/library/standard_gates/rzz.py +141 -0
- qiskit/circuit/library/standard_gates/s.py +303 -0
- qiskit/circuit/library/standard_gates/swap.py +246 -0
- qiskit/circuit/library/standard_gates/sx.py +268 -0
- qiskit/circuit/library/standard_gates/t.py +150 -0
- qiskit/circuit/library/standard_gates/u.py +338 -0
- qiskit/circuit/library/standard_gates/u1.py +383 -0
- qiskit/circuit/library/standard_gates/u2.py +132 -0
- qiskit/circuit/library/standard_gates/u3.py +358 -0
- qiskit/circuit/library/standard_gates/x.py +1370 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +179 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +180 -0
- qiskit/circuit/library/standard_gates/y.py +221 -0
- qiskit/circuit/library/standard_gates/z.py +294 -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 +41 -0
- qiskit/circuit/operation.py +62 -0
- qiskit/circuit/parameter.py +160 -0
- qiskit/circuit/parameterexpression.py +515 -0
- qiskit/circuit/parametertable.py +263 -0
- qiskit/circuit/parametervector.py +114 -0
- qiskit/circuit/qpy_serialization.py +28 -0
- qiskit/circuit/quantumcircuit.py +6074 -0
- qiskit/circuit/quantumcircuitdata.py +138 -0
- qiskit/circuit/quantumregister.py +90 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +209 -0
- qiskit/circuit/register.py +256 -0
- qiskit/circuit/reset.py +31 -0
- qiskit/circuit/singleton.py +604 -0
- qiskit/circuit/store.py +87 -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 +597 -0
- qiskit/compiler/scheduler.py +107 -0
- qiskit/compiler/sequencer.py +69 -0
- qiskit/compiler/transpiler.py +613 -0
- qiskit/converters/__init__.py +59 -0
- qiskit/converters/circuit_to_dag.py +96 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_gate.py +109 -0
- qiskit/converters/circuit_to_instruction.py +131 -0
- qiskit/converters/dag_to_circuit.py +77 -0
- qiskit/converters/dag_to_dagdependency.py +55 -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 +386 -0
- qiskit/dagcircuit/dagcircuit.py +2105 -0
- qiskit/dagcircuit/dagdependency.py +626 -0
- qiskit/dagcircuit/dagdepnode.py +157 -0
- qiskit/dagcircuit/dagnode.py +322 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +97 -0
- qiskit/execute_function.py +354 -0
- qiskit/extensions/__init__.py +70 -0
- qiskit/extensions/exceptions.py +31 -0
- qiskit/extensions/quantum_initializer/__init__.py +26 -0
- qiskit/extensions/quantum_initializer/squ.py +163 -0
- qiskit/extensions/simulator/__init__.py +15 -0
- qiskit/extensions/simulator/snapshot.py +70 -0
- qiskit/namespace.py +76 -0
- qiskit/passmanager/__init__.py +242 -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 +336 -0
- qiskit/passmanager/passmanager.py +317 -0
- qiskit/primitives/__init__.py +62 -0
- qiskit/primitives/backend_estimator.py +473 -0
- qiskit/primitives/backend_sampler.py +209 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +256 -0
- qiskit/primitives/base/base_primitive.py +74 -0
- qiskit/primitives/base/base_result.py +87 -0
- qiskit/primitives/base/base_sampler.py +202 -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/estimator.py +158 -0
- qiskit/primitives/primitive_job.py +73 -0
- qiskit/primitives/sampler.py +155 -0
- qiskit/primitives/utils.py +216 -0
- qiskit/providers/__init__.py +773 -0
- qiskit/providers/backend.py +653 -0
- qiskit/providers/backend_compat.py +347 -0
- qiskit/providers/basicaer/__init__.py +73 -0
- qiskit/providers/basicaer/basicaerjob.py +65 -0
- qiskit/providers/basicaer/basicaerprovider.py +127 -0
- qiskit/providers/basicaer/basicaertools.py +186 -0
- qiskit/providers/basicaer/exceptions.py +30 -0
- qiskit/providers/basicaer/qasm_simulator.py +678 -0
- qiskit/providers/basicaer/statevector_simulator.py +121 -0
- qiskit/providers/basicaer/unitary_simulator.py +395 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +267 -0
- qiskit/providers/fake_provider/backends/__init__.py +110 -0
- qiskit/providers/fake_provider/backends/almaden/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/almaden/conf_almaden.json +1 -0
- qiskit/providers/fake_provider/backends/almaden/fake_almaden.py +58 -0
- qiskit/providers/fake_provider/backends/almaden/props_almaden.json +1 -0
- qiskit/providers/fake_provider/backends/armonk/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/armonk/conf_armonk.json +1 -0
- qiskit/providers/fake_provider/backends/armonk/defs_armonk.json +1 -0
- qiskit/providers/fake_provider/backends/armonk/fake_armonk.py +48 -0
- qiskit/providers/fake_provider/backends/armonk/props_armonk.json +1 -0
- qiskit/providers/fake_provider/backends/athens/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/athens/conf_athens.json +1 -0
- qiskit/providers/fake_provider/backends/athens/defs_athens.json +1 -0
- qiskit/providers/fake_provider/backends/athens/fake_athens.py +38 -0
- qiskit/providers/fake_provider/backends/athens/props_athens.json +1 -0
- qiskit/providers/fake_provider/backends/auckland/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/auckland/conf_auckland.json +1 -0
- qiskit/providers/fake_provider/backends/auckland/defs_auckland.json +1 -0
- qiskit/providers/fake_provider/backends/auckland/fake_auckland.py +29 -0
- qiskit/providers/fake_provider/backends/auckland/props_auckland.json +1 -0
- qiskit/providers/fake_provider/backends/belem/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/belem/conf_belem.json +1 -0
- qiskit/providers/fake_provider/backends/belem/defs_belem.json +1 -0
- qiskit/providers/fake_provider/backends/belem/fake_belem.py +38 -0
- qiskit/providers/fake_provider/backends/belem/props_belem.json +1 -0
- qiskit/providers/fake_provider/backends/boeblingen/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/boeblingen/conf_boeblingen.json +1 -0
- qiskit/providers/fake_provider/backends/boeblingen/defs_boeblingen.json +1 -0
- qiskit/providers/fake_provider/backends/boeblingen/fake_boeblingen.py +60 -0
- qiskit/providers/fake_provider/backends/boeblingen/props_boeblingen.json +1 -0
- qiskit/providers/fake_provider/backends/bogota/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/bogota/conf_bogota.json +1 -0
- qiskit/providers/fake_provider/backends/bogota/defs_bogota.json +1 -0
- qiskit/providers/fake_provider/backends/bogota/fake_bogota.py +38 -0
- qiskit/providers/fake_provider/backends/bogota/props_bogota.json +1 -0
- qiskit/providers/fake_provider/backends/brooklyn/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/brooklyn/conf_brooklyn.json +1 -0
- qiskit/providers/fake_provider/backends/brooklyn/defs_brooklyn.json +1 -0
- qiskit/providers/fake_provider/backends/brooklyn/fake_brooklyn.py +38 -0
- qiskit/providers/fake_provider/backends/brooklyn/props_brooklyn.json +1 -0
- qiskit/providers/fake_provider/backends/burlington/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/burlington/conf_burlington.json +1 -0
- qiskit/providers/fake_provider/backends/burlington/fake_burlington.py +50 -0
- qiskit/providers/fake_provider/backends/burlington/props_burlington.json +1 -0
- qiskit/providers/fake_provider/backends/cairo/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/cairo/conf_cairo.json +1 -0
- qiskit/providers/fake_provider/backends/cairo/defs_cairo.json +1 -0
- qiskit/providers/fake_provider/backends/cairo/fake_cairo.py +38 -0
- qiskit/providers/fake_provider/backends/cairo/props_cairo.json +1 -0
- qiskit/providers/fake_provider/backends/cambridge/__init__.py +17 -0
- qiskit/providers/fake_provider/backends/cambridge/conf_cambridge.json +1 -0
- qiskit/providers/fake_provider/backends/cambridge/fake_cambridge.py +72 -0
- qiskit/providers/fake_provider/backends/cambridge/props_cambridge.json +1 -0
- qiskit/providers/fake_provider/backends/cambridge/props_cambridge_alt.json +1 -0
- qiskit/providers/fake_provider/backends/casablanca/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/casablanca/conf_casablanca.json +1 -0
- qiskit/providers/fake_provider/backends/casablanca/defs_casablanca.json +1 -0
- qiskit/providers/fake_provider/backends/casablanca/fake_casablanca.py +38 -0
- qiskit/providers/fake_provider/backends/casablanca/props_casablanca.json +1 -0
- qiskit/providers/fake_provider/backends/essex/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/essex/conf_essex.json +1 -0
- qiskit/providers/fake_provider/backends/essex/fake_essex.py +54 -0
- qiskit/providers/fake_provider/backends/essex/props_essex.json +1 -0
- qiskit/providers/fake_provider/backends/geneva/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/geneva/conf_geneva.json +1 -0
- qiskit/providers/fake_provider/backends/geneva/defs_geneva.json +1 -0
- qiskit/providers/fake_provider/backends/geneva/fake_geneva.py +29 -0
- qiskit/providers/fake_provider/backends/geneva/props_geneva.json +1 -0
- qiskit/providers/fake_provider/backends/guadalupe/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/guadalupe/conf_guadalupe.json +1 -0
- qiskit/providers/fake_provider/backends/guadalupe/defs_guadalupe.json +1 -0
- qiskit/providers/fake_provider/backends/guadalupe/fake_guadalupe.py +39 -0
- qiskit/providers/fake_provider/backends/guadalupe/props_guadalupe.json +1 -0
- qiskit/providers/fake_provider/backends/hanoi/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/hanoi/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends/hanoi/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends/hanoi/fake_hanoi.py +38 -0
- qiskit/providers/fake_provider/backends/hanoi/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends/jakarta/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/jakarta/conf_jakarta.json +1 -0
- qiskit/providers/fake_provider/backends/jakarta/defs_jakarta.json +1 -0
- qiskit/providers/fake_provider/backends/jakarta/fake_jakarta.py +38 -0
- qiskit/providers/fake_provider/backends/jakarta/props_jakarta.json +1 -0
- qiskit/providers/fake_provider/backends/johannesburg/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/johannesburg/conf_johannesburg.json +1 -0
- qiskit/providers/fake_provider/backends/johannesburg/fake_johannesburg.py +58 -0
- qiskit/providers/fake_provider/backends/johannesburg/props_johannesburg.json +1 -0
- qiskit/providers/fake_provider/backends/kolkata/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/kolkata/conf_kolkata.json +1 -0
- qiskit/providers/fake_provider/backends/kolkata/defs_kolkata.json +1 -0
- qiskit/providers/fake_provider/backends/kolkata/fake_kolkata.py +38 -0
- qiskit/providers/fake_provider/backends/kolkata/props_kolkata.json +1 -0
- qiskit/providers/fake_provider/backends/lagos/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/lagos/conf_lagos.json +1 -0
- qiskit/providers/fake_provider/backends/lagos/defs_lagos.json +1 -0
- qiskit/providers/fake_provider/backends/lagos/fake_lagos.py +38 -0
- qiskit/providers/fake_provider/backends/lagos/props_lagos.json +1 -0
- qiskit/providers/fake_provider/backends/lima/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/lima/conf_lima.json +1 -0
- qiskit/providers/fake_provider/backends/lima/defs_lima.json +1 -0
- qiskit/providers/fake_provider/backends/lima/fake_lima.py +38 -0
- qiskit/providers/fake_provider/backends/lima/props_lima.json +1 -0
- qiskit/providers/fake_provider/backends/london/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/london/conf_london.json +1 -0
- qiskit/providers/fake_provider/backends/london/fake_london.py +54 -0
- qiskit/providers/fake_provider/backends/london/props_london.json +1 -0
- qiskit/providers/fake_provider/backends/manhattan/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/manhattan/conf_manhattan.json +1 -0
- qiskit/providers/fake_provider/backends/manhattan/defs_manhattan.json +1 -0
- qiskit/providers/fake_provider/backends/manhattan/fake_manhattan.py +38 -0
- qiskit/providers/fake_provider/backends/manhattan/props_manhattan.json +1 -0
- qiskit/providers/fake_provider/backends/manila/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/manila/conf_manila.json +1 -0
- qiskit/providers/fake_provider/backends/manila/defs_manila.json +1 -0
- qiskit/providers/fake_provider/backends/manila/fake_manila.py +38 -0
- qiskit/providers/fake_provider/backends/manila/props_manila.json +1 -0
- qiskit/providers/fake_provider/backends/melbourne/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/melbourne/conf_melbourne.json +1 -0
- qiskit/providers/fake_provider/backends/melbourne/fake_melbourne.py +91 -0
- qiskit/providers/fake_provider/backends/melbourne/props_melbourne.json +1 -0
- qiskit/providers/fake_provider/backends/montreal/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/montreal/conf_montreal.json +1 -0
- qiskit/providers/fake_provider/backends/montreal/defs_montreal.json +1 -0
- qiskit/providers/fake_provider/backends/montreal/fake_montreal.py +38 -0
- qiskit/providers/fake_provider/backends/montreal/props_montreal.json +1 -0
- qiskit/providers/fake_provider/backends/mumbai/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/mumbai/conf_mumbai.json +1 -0
- qiskit/providers/fake_provider/backends/mumbai/defs_mumbai.json +1 -0
- qiskit/providers/fake_provider/backends/mumbai/fake_mumbai.py +38 -0
- qiskit/providers/fake_provider/backends/mumbai/props_mumbai.json +1 -0
- qiskit/providers/fake_provider/backends/nairobi/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/nairobi/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends/nairobi/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends/nairobi/fake_nairobi.py +38 -0
- qiskit/providers/fake_provider/backends/nairobi/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends/oslo/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/oslo/conf_oslo.json +1 -0
- qiskit/providers/fake_provider/backends/oslo/defs_oslo.json +1 -0
- qiskit/providers/fake_provider/backends/oslo/fake_oslo.py +29 -0
- qiskit/providers/fake_provider/backends/oslo/props_oslo.json +1 -0
- qiskit/providers/fake_provider/backends/ourense/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/ourense/conf_ourense.json +1 -0
- qiskit/providers/fake_provider/backends/ourense/fake_ourense.py +50 -0
- qiskit/providers/fake_provider/backends/ourense/props_ourense.json +1 -0
- qiskit/providers/fake_provider/backends/paris/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/paris/conf_paris.json +1 -0
- qiskit/providers/fake_provider/backends/paris/defs_paris.json +1 -0
- qiskit/providers/fake_provider/backends/paris/fake_paris.py +64 -0
- qiskit/providers/fake_provider/backends/paris/props_paris.json +1 -0
- qiskit/providers/fake_provider/backends/perth/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/perth/conf_perth.json +1 -0
- qiskit/providers/fake_provider/backends/perth/defs_perth.json +1 -0
- qiskit/providers/fake_provider/backends/perth/fake_perth.py +29 -0
- qiskit/providers/fake_provider/backends/perth/props_perth.json +1 -0
- qiskit/providers/fake_provider/backends/poughkeepsie/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/poughkeepsie/conf_poughkeepsie.json +1 -0
- qiskit/providers/fake_provider/backends/poughkeepsie/defs_poughkeepsie.json +1 -0
- qiskit/providers/fake_provider/backends/poughkeepsie/fake_poughkeepsie.py +124 -0
- qiskit/providers/fake_provider/backends/poughkeepsie/props_poughkeepsie.json +1 -0
- qiskit/providers/fake_provider/backends/prague/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/prague/conf_prague.json +1 -0
- qiskit/providers/fake_provider/backends/prague/fake_prague.py +28 -0
- qiskit/providers/fake_provider/backends/prague/props_prague.json +1 -0
- qiskit/providers/fake_provider/backends/quito/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/quito/conf_quito.json +1 -0
- qiskit/providers/fake_provider/backends/quito/defs_quito.json +1 -0
- qiskit/providers/fake_provider/backends/quito/fake_quito.py +38 -0
- qiskit/providers/fake_provider/backends/quito/props_quito.json +1 -0
- qiskit/providers/fake_provider/backends/rochester/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/rochester/conf_rochester.json +1 -0
- qiskit/providers/fake_provider/backends/rochester/fake_rochester.py +36 -0
- qiskit/providers/fake_provider/backends/rochester/props_rochester.json +1 -0
- qiskit/providers/fake_provider/backends/rome/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/rome/conf_rome.json +1 -0
- qiskit/providers/fake_provider/backends/rome/defs_rome.json +1 -0
- qiskit/providers/fake_provider/backends/rome/fake_rome.py +38 -0
- qiskit/providers/fake_provider/backends/rome/props_rome.json +1 -0
- qiskit/providers/fake_provider/backends/rueschlikon/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/rueschlikon/fake_rueschlikon.py +74 -0
- qiskit/providers/fake_provider/backends/santiago/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/santiago/conf_santiago.json +1 -0
- qiskit/providers/fake_provider/backends/santiago/defs_santiago.json +1 -0
- qiskit/providers/fake_provider/backends/santiago/fake_santiago.py +38 -0
- qiskit/providers/fake_provider/backends/santiago/props_santiago.json +1 -0
- qiskit/providers/fake_provider/backends/sherbrooke/__init__.py +17 -0
- qiskit/providers/fake_provider/backends/sherbrooke/conf_sherbrooke.json +1 -0
- qiskit/providers/fake_provider/backends/sherbrooke/defs_sherbrooke.json +1 -0
- qiskit/providers/fake_provider/backends/sherbrooke/fake_sherbrooke.py +28 -0
- qiskit/providers/fake_provider/backends/sherbrooke/props_sherbrooke.json +1 -0
- qiskit/providers/fake_provider/backends/singapore/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/singapore/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends/singapore/fake_singapore.py +58 -0
- qiskit/providers/fake_provider/backends/singapore/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends/sydney/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/sydney/conf_sydney.json +1 -0
- qiskit/providers/fake_provider/backends/sydney/defs_sydney.json +1 -0
- qiskit/providers/fake_provider/backends/sydney/fake_sydney.py +38 -0
- qiskit/providers/fake_provider/backends/sydney/props_sydney.json +1 -0
- qiskit/providers/fake_provider/backends/tenerife/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/tenerife/fake_tenerife.py +64 -0
- qiskit/providers/fake_provider/backends/tenerife/props_tenerife.json +1 -0
- qiskit/providers/fake_provider/backends/tokyo/__init__.py +15 -0
- qiskit/providers/fake_provider/backends/tokyo/fake_tokyo.py +137 -0
- qiskit/providers/fake_provider/backends/tokyo/props_tokyo.json +1 -0
- qiskit/providers/fake_provider/backends/toronto/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/toronto/conf_toronto.json +1 -0
- qiskit/providers/fake_provider/backends/toronto/defs_toronto.json +1 -0
- qiskit/providers/fake_provider/backends/toronto/fake_toronto.py +38 -0
- qiskit/providers/fake_provider/backends/toronto/props_toronto.json +1 -0
- qiskit/providers/fake_provider/backends/valencia/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/valencia/conf_valencia.json +1 -0
- qiskit/providers/fake_provider/backends/valencia/defs_valencia.json +1 -0
- qiskit/providers/fake_provider/backends/valencia/fake_valencia.py +38 -0
- qiskit/providers/fake_provider/backends/valencia/props_valencia.json +1 -0
- qiskit/providers/fake_provider/backends/vigo/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/vigo/conf_vigo.json +1 -0
- qiskit/providers/fake_provider/backends/vigo/fake_vigo.py +50 -0
- qiskit/providers/fake_provider/backends/vigo/props_vigo.json +1 -0
- qiskit/providers/fake_provider/backends/washington/__init__.py +18 -0
- qiskit/providers/fake_provider/backends/washington/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends/washington/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends/washington/fake_washington.py +38 -0
- qiskit/providers/fake_provider/backends/washington/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends/yorktown/__init__.py +16 -0
- qiskit/providers/fake_provider/backends/yorktown/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends/yorktown/fake_yorktown.py +54 -0
- qiskit/providers/fake_provider/backends/yorktown/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +572 -0
- qiskit/providers/fake_provider/fake_backend_v2.py +217 -0
- qiskit/providers/fake_provider/fake_job.py +81 -0
- qiskit/providers/fake_provider/fake_mumbai_v2.py +637 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +342 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +332 -0
- qiskit/providers/fake_provider/fake_provider.py +214 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +43 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +72 -0
- qiskit/providers/fake_provider/fake_qasm_simulator.py +48 -0
- qiskit/providers/fake_provider/fake_qobj.py +44 -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/configurable_backend.py +360 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +142 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +52 -0
- qiskit/providers/models/backendconfiguration.py +994 -0
- qiskit/providers/models/backendproperties.py +490 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +304 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +79 -0
- qiskit/providers/providerutils.py +99 -0
- qiskit/pulse/__init__.py +170 -0
- qiskit/pulse/builder.py +2733 -0
- qiskit/pulse/calibration_entries.py +357 -0
- qiskit/pulse/channels.py +221 -0
- qiskit/pulse/configuration.py +244 -0
- qiskit/pulse/exceptions.py +43 -0
- qiskit/pulse/filters.py +302 -0
- qiskit/pulse/instruction_schedule_map.py +406 -0
- qiskit/pulse/instructions/__init__.py +69 -0
- qiskit/pulse/instructions/acquire.py +150 -0
- qiskit/pulse/instructions/call.py +176 -0
- qiskit/pulse/instructions/delay.py +69 -0
- qiskit/pulse/instructions/directives.py +145 -0
- qiskit/pulse/instructions/frequency.py +132 -0
- qiskit/pulse/instructions/instruction.py +266 -0
- qiskit/pulse/instructions/phase.py +149 -0
- qiskit/pulse/instructions/play.py +96 -0
- qiskit/pulse/instructions/reference.py +99 -0
- qiskit/pulse/instructions/snapshot.py +80 -0
- qiskit/pulse/library/__init__.py +99 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/parametric_pulses.py +629 -0
- qiskit/pulse/library/pulse.py +137 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +299 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1962 -0
- qiskit/pulse/library/waveform.py +134 -0
- qiskit/pulse/macros.py +256 -0
- qiskit/pulse/parameter_manager.py +432 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +2002 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +406 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +514 -0
- qiskit/pulse/transforms/dag.py +107 -0
- qiskit/pulse/utils.py +109 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +75 -0
- qiskit/qasm2/__init__.py +658 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +374 -0
- qiskit/qasm2/parse.py +403 -0
- qiskit/qasm3/__init__.py +255 -0
- qiskit/qasm3/ast.py +606 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +30 -0
- qiskit/qasm3/exporter.py +1079 -0
- qiskit/qasm3/printer.py +545 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +71 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +168 -0
- qiskit/qobj/converters/pulse_instruction.py +1070 -0
- qiskit/qobj/pulse_qobj.py +655 -0
- qiskit/qobj/qasm_qobj.py +656 -0
- qiskit/qobj/utils.py +37 -0
- qiskit/qpy/__init__.py +1348 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1212 -0
- qiskit/qpy/binary_io/schedules.py +619 -0
- qiskit/qpy/binary_io/value.py +549 -0
- qiskit/qpy/common.py +305 -0
- qiskit/qpy/exceptions.py +28 -0
- qiskit/qpy/formats.py +360 -0
- qiskit/qpy/interface.py +308 -0
- qiskit/qpy/type_keys.py +544 -0
- qiskit/quantum_info/__init__.py +173 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +101 -0
- qiskit/quantum_info/analysis/make_observable.py +43 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +483 -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 +190 -0
- qiskit/quantum_info/operators/channel/choi.py +217 -0
- qiskit/quantum_info/operators/channel/kraus.py +336 -0
- qiskit/quantum_info/operators/channel/ptm.py +203 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +350 -0
- qiskit/quantum_info/operators/channel/stinespring.py +295 -0
- qiskit/quantum_info/operators/channel/superop.py +376 -0
- qiskit/quantum_info/operators/channel/transformations.py +467 -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 +508 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +218 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +61 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +423 -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 +533 -0
- qiskit/quantum_info/operators/operator.py +778 -0
- qiskit/quantum_info/operators/predicates.py +170 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +253 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +720 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1022 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +699 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1209 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +264 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1156 -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/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +848 -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 +638 -0
- qiskit/quantum_info/states/statevector.py +961 -0
- qiskit/quantum_info/states/utils.py +245 -0
- qiskit/quantum_info/synthesis/__init__.py +20 -0
- qiskit/quantum_info/synthesis/clifford_decompose.py +69 -0
- qiskit/quantum_info/synthesis/cnotdihedral_decompose.py +50 -0
- qiskit/quantum_info/synthesis/ion_decompose.py +55 -0
- qiskit/quantum_info/synthesis/local_invariance.py +93 -0
- qiskit/quantum_info/synthesis/one_qubit_decompose.py +284 -0
- qiskit/quantum_info/synthesis/qsd.py +269 -0
- qiskit/quantum_info/synthesis/quaternion.py +156 -0
- qiskit/quantum_info/synthesis/two_qubit_decompose.py +1567 -0
- qiskit/quantum_info/synthesis/weyl.py +98 -0
- qiskit/quantum_info/synthesis/xx_decompose/__init__.py +19 -0
- qiskit/quantum_info/synthesis/xx_decompose/circuits.py +299 -0
- qiskit/quantum_info/synthesis/xx_decompose/decomposer.py +314 -0
- qiskit/quantum_info/synthesis/xx_decompose/embodiments.py +163 -0
- qiskit/quantum_info/synthesis/xx_decompose/paths.py +412 -0
- qiskit/quantum_info/synthesis/xx_decompose/polytopes.py +264 -0
- qiskit/quantum_info/synthesis/xx_decompose/utilities.py +40 -0
- qiskit/quantum_info/synthesis/xx_decompose/weyl.py +133 -0
- qiskit/result/__init__.py +67 -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 +268 -0
- qiskit/result/mitigation/local_readout_mitigator.py +319 -0
- qiskit/result/mitigation/utils.py +161 -0
- qiskit/result/models.py +233 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +397 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +31 -0
- qiskit/scheduler/config.py +35 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +22 -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 +122 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +176 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +276 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +61 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +347 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +443 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +46 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +140 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +264 -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 +207 -0
- qiskit/synthesis/evolution/__init__.py +20 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +46 -0
- qiskit/synthesis/evolution/lie_trotter.py +123 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/product_formula.py +328 -0
- qiskit/synthesis/evolution/qdrift.py +102 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +145 -0
- qiskit/synthesis/linear/__init__.py +25 -0
- qiskit/synthesis/linear/cnot_synth.py +141 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +127 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +275 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +175 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +203 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +206 -0
- qiskit/synthesis/permutation/__init__.py +17 -0
- qiskit/synthesis/permutation/permutation_full.py +90 -0
- qiskit/synthesis/permutation/permutation_lnn.py +68 -0
- qiskit/synthesis/permutation/permutation_utils.py +73 -0
- qiskit/synthesis/stabilizer/__init__.py +15 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +188 -0
- qiskit/test/__init__.py +18 -0
- qiskit/test/_canonical.py +125 -0
- qiskit/test/base.py +331 -0
- qiskit/test/decorators.py +308 -0
- qiskit/test/ibmq_mock.py +45 -0
- qiskit/test/mock/__init__.py +40 -0
- qiskit/test/mock/backends/__init__.py +32 -0
- qiskit/test/mock/backends/almaden/__init__.py +32 -0
- qiskit/test/mock/backends/armonk/__init__.py +32 -0
- qiskit/test/mock/backends/athens/__init__.py +32 -0
- qiskit/test/mock/backends/belem/__init__.py +32 -0
- qiskit/test/mock/backends/boeblingen/__init__.py +32 -0
- qiskit/test/mock/backends/bogota/__init__.py +32 -0
- qiskit/test/mock/backends/brooklyn/__init__.py +32 -0
- qiskit/test/mock/backends/burlington/__init__.py +32 -0
- qiskit/test/mock/backends/cairo/__init__.py +32 -0
- qiskit/test/mock/backends/cambridge/__init__.py +32 -0
- qiskit/test/mock/backends/casablanca/__init__.py +32 -0
- qiskit/test/mock/backends/essex/__init__.py +32 -0
- qiskit/test/mock/backends/guadalupe/__init__.py +32 -0
- qiskit/test/mock/backends/hanoi/__init__.py +32 -0
- qiskit/test/mock/backends/jakarta/__init__.py +32 -0
- qiskit/test/mock/backends/johannesburg/__init__.py +32 -0
- qiskit/test/mock/backends/kolkata/__init__.py +32 -0
- qiskit/test/mock/backends/lagos/__init__.py +32 -0
- qiskit/test/mock/backends/lima/__init__.py +32 -0
- qiskit/test/mock/backends/london/__init__.py +32 -0
- qiskit/test/mock/backends/manhattan/__init__.py +32 -0
- qiskit/test/mock/backends/manila/__init__.py +32 -0
- qiskit/test/mock/backends/melbourne/__init__.py +32 -0
- qiskit/test/mock/backends/montreal/__init__.py +32 -0
- qiskit/test/mock/backends/mumbai/__init__.py +32 -0
- qiskit/test/mock/backends/nairobi/__init__.py +32 -0
- qiskit/test/mock/backends/ourense/__init__.py +32 -0
- qiskit/test/mock/backends/paris/__init__.py +32 -0
- qiskit/test/mock/backends/poughkeepsie/__init__.py +32 -0
- qiskit/test/mock/backends/quito/__init__.py +32 -0
- qiskit/test/mock/backends/rochester/__init__.py +32 -0
- qiskit/test/mock/backends/rome/__init__.py +32 -0
- qiskit/test/mock/backends/rueschlikon/__init__.py +32 -0
- qiskit/test/mock/backends/santiago/__init__.py +32 -0
- qiskit/test/mock/backends/singapore/__init__.py +32 -0
- qiskit/test/mock/backends/sydney/__init__.py +32 -0
- qiskit/test/mock/backends/tenerife/__init__.py +32 -0
- qiskit/test/mock/backends/tokyo/__init__.py +32 -0
- qiskit/test/mock/backends/toronto/__init__.py +32 -0
- qiskit/test/mock/backends/valencia/__init__.py +32 -0
- qiskit/test/mock/backends/vigo/__init__.py +32 -0
- qiskit/test/mock/backends/washington/__init__.py +32 -0
- qiskit/test/mock/backends/yorktown/__init__.py +32 -0
- qiskit/test/providers/__init__.py +16 -0
- qiskit/test/providers/backend.py +75 -0
- qiskit/test/providers/provider.py +59 -0
- qiskit/test/reference_circuits.py +41 -0
- qiskit/test/testing_options.py +93 -0
- qiskit/test/utils.py +87 -0
- qiskit/tools/__init__.py +44 -0
- qiskit/tools/events/__init__.py +25 -0
- qiskit/tools/events/progressbar.py +195 -0
- qiskit/tools/events/pubsub.py +158 -0
- qiskit/tools/jupyter/__init__.py +138 -0
- qiskit/tools/jupyter/backend_monitor.py +588 -0
- qiskit/tools/jupyter/backend_overview.py +322 -0
- qiskit/tools/jupyter/copyright.py +42 -0
- qiskit/tools/jupyter/job_watcher.py +167 -0
- qiskit/tools/jupyter/job_widgets.py +160 -0
- qiskit/tools/jupyter/jupyter_magics.py +190 -0
- qiskit/tools/jupyter/library.py +189 -0
- qiskit/tools/jupyter/monospace.py +29 -0
- qiskit/tools/jupyter/progressbar.py +122 -0
- qiskit/tools/jupyter/version_table.py +67 -0
- qiskit/tools/jupyter/watcher_monitor.py +74 -0
- qiskit/tools/monitor/__init__.py +16 -0
- qiskit/tools/monitor/job_monitor.py +107 -0
- qiskit/tools/monitor/overview.py +247 -0
- qiskit/tools/parallel.py +198 -0
- qiskit/tools/visualization.py +16 -0
- qiskit/transpiler/__init__.py +1287 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +55 -0
- qiskit/transpiler/fencedobjs.py +78 -0
- qiskit/transpiler/instruction_durations.py +278 -0
- qiskit/transpiler/layout.py +658 -0
- qiskit/transpiler/passes/__init__.py +296 -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 +20 -0
- qiskit/transpiler/passes/basis/basis_translator.py +697 -0
- qiskit/transpiler/passes/basis/decompose.py +98 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +177 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +86 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +107 -0
- qiskit/transpiler/passes/basis/unroller.py +145 -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 +394 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
- qiskit/transpiler/passes/layout/__init__.py +27 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +108 -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 +205 -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/noise_adaptive_layout.py +311 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +468 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +217 -0
- qiskit/transpiler/passes/layout/set_layout.py +64 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +257 -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 +38 -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 +97 -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 +93 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +207 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +97 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +219 -0
- qiskit/transpiler/passes/optimization/crosstalk_adaptive_schedule.py +732 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +55 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +416 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +177 -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 +263 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -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 +69 -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/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 +454 -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 +629 -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 +155 -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 +387 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +141 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +118 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +384 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +430 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +512 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +155 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +256 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +75 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +97 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +241 -0
- qiskit/transpiler/passes/scheduling/asap.py +177 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +289 -0
- qiskit/transpiler/passes/scheduling/calibration_creators.py +27 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +285 -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 +408 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
- qiskit/transpiler/passes/scheduling/rzx_templates.py +28 -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 +89 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +135 -0
- qiskit/transpiler/passes/synthesis/__init__.py +19 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +637 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +63 -0
- qiskit/transpiler/passes/synthesis/plugin.py +597 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +289 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +895 -0
- qiskit/transpiler/passes/utils/__init__.py +34 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
- qiskit/transpiler/passes/utils/block_to_matrix.py +47 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +87 -0
- qiskit/transpiler/passes/utils/check_map.py +94 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +61 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +89 -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 +347 -0
- qiskit/transpiler/passes/utils/gates_basis.py +75 -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 +617 -0
- qiskit/transpiler/passmanager_config.py +193 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +280 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +971 -0
- qiskit/transpiler/preset_passmanagers/common.py +651 -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 +345 -0
- qiskit/transpiler/propertyset.py +19 -0
- qiskit/transpiler/runningpassmanager.py +174 -0
- qiskit/transpiler/synthesis/__init__.py +16 -0
- qiskit/transpiler/synthesis/aqc/__init__.py +178 -0
- qiskit/transpiler/synthesis/aqc/approximate.py +116 -0
- qiskit/transpiler/synthesis/aqc/aqc.py +170 -0
- qiskit/transpiler/synthesis/aqc/aqc_plugin.py +146 -0
- qiskit/transpiler/synthesis/aqc/cnot_structures.py +299 -0
- qiskit/transpiler/synthesis/aqc/cnot_unit_circuit.py +103 -0
- qiskit/transpiler/synthesis/aqc/cnot_unit_objective.py +299 -0
- qiskit/transpiler/synthesis/aqc/elementary_operations.py +108 -0
- qiskit/transpiler/synthesis/aqc/fast_gradient/__init__.py +164 -0
- qiskit/transpiler/synthesis/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/transpiler/synthesis/aqc/fast_gradient/fast_gradient.py +225 -0
- qiskit/transpiler/synthesis/aqc/fast_gradient/layer.py +370 -0
- qiskit/transpiler/synthesis/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/transpiler/synthesis/graysynth.py +114 -0
- qiskit/transpiler/target.py +1540 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +239 -0
- qiskit/utils/__init__.py +66 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +489 -0
- qiskit/utils/lazy_tester.py +334 -0
- qiskit/utils/multiprocessing.py +48 -0
- qiskit/utils/optionals.py +320 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +289 -0
- qiskit/visualization/array.py +204 -0
- qiskit/visualization/bloch.py +741 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +633 -0
- qiskit/visualization/circuit/circuit_visualization.py +717 -0
- qiskit/visualization/circuit/latex.py +659 -0
- qiskit/visualization/circuit/matplotlib.py +1975 -0
- qiskit/visualization/circuit/qcstyle.py +420 -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 +1802 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +496 -0
- qiskit/visualization/dag_visualization.py +224 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1461 -0
- qiskit/visualization/pass_manager_visualization.py +281 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +905 -0
- qiskit/visualization/pulse_v2/device_info.py +146 -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 +437 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +649 -0
- qiskit/visualization/pulse_v2/interface.py +452 -0
- qiskit/visualization/pulse_v2/layouts.py +395 -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 +202 -0
- qiskit/visualization/pulse_v2/stylesheet.py +322 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/qcstyle.py +17 -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 +414 -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 +193 -0
- qiskit/visualization/timeline/stylesheet.py +311 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +364 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-1.0.0b1.dist-info/LICENSE.txt +203 -0
- qiskit-1.0.0b1.dist-info/METADATA +430 -0
- qiskit-1.0.0b1.dist-info/RECORD +1095 -0
- qiskit-1.0.0b1.dist-info/WHEEL +6 -0
- qiskit-1.0.0b1.dist-info/entry_points.txt +49 -0
- qiskit-1.0.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,526 @@
|
|
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, Qubit
|
22
|
+
from qiskit.circuit.gate import Gate
|
23
|
+
from qiskit.circuit.library.standard_gates.x import CXGate, 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.standard_gates.ry import RYGate
|
27
|
+
from qiskit.circuit.library.standard_gates.rz import RZGate
|
28
|
+
from qiskit.circuit.exceptions import CircuitError
|
29
|
+
from qiskit.quantum_info.states.statevector import Statevector # pylint: disable=cyclic-import
|
30
|
+
|
31
|
+
_EPS = 1e-10 # global variable used to chop very small numbers to zero
|
32
|
+
|
33
|
+
|
34
|
+
class StatePreparation(Gate):
|
35
|
+
"""Complex amplitude state preparation.
|
36
|
+
|
37
|
+
Class that implements the (complex amplitude) state preparation of some
|
38
|
+
flexible collection of qubit registers.
|
39
|
+
"""
|
40
|
+
|
41
|
+
def __init__(
|
42
|
+
self,
|
43
|
+
params: Union[str, list, int, Statevector],
|
44
|
+
num_qubits: Optional[int] = None,
|
45
|
+
inverse: bool = False,
|
46
|
+
label: Optional[str] = None,
|
47
|
+
normalize: bool = False,
|
48
|
+
):
|
49
|
+
r"""
|
50
|
+
Args:
|
51
|
+
params:
|
52
|
+
* Statevector: Statevector to initialize to.
|
53
|
+
* list: vector of complex amplitudes to initialize to.
|
54
|
+
* string: labels of basis states of the Pauli eigenstates Z, X, Y. See
|
55
|
+
:meth:`.Statevector.from_label`.
|
56
|
+
Notice the order of the labels is reversed with respect to the qubit index to
|
57
|
+
be applied to. Example label '01' initializes the qubit zero to :math:`|1\rangle`
|
58
|
+
and the qubit one to :math:`|0\rangle`.
|
59
|
+
* int: an integer that is used as a bitmap indicating which qubits to initialize
|
60
|
+
to :math:`|1\rangle`. Example: setting params to 5 would initialize qubit 0 and qubit 2
|
61
|
+
to :math:`|1\rangle` and qubit 1 to :math:`|0\rangle`.
|
62
|
+
num_qubits: This parameter is only used if params is an int. Indicates the total
|
63
|
+
number of qubits in the `initialize` call. Example: `initialize` covers 5 qubits
|
64
|
+
and params is 3. This allows qubits 0 and 1 to be initialized to :math:`|1\rangle`
|
65
|
+
and the remaining 3 qubits to be initialized to :math:`|0\rangle`.
|
66
|
+
inverse: if True, the inverse state is constructed.
|
67
|
+
label: An optional label for the gate
|
68
|
+
normalize (bool): Whether to normalize an input array to a unit vector.
|
69
|
+
|
70
|
+
Raises:
|
71
|
+
QiskitError: ``num_qubits`` parameter used when ``params`` is not an integer
|
72
|
+
|
73
|
+
When a Statevector argument is passed the state is prepared using a recursive
|
74
|
+
initialization algorithm, including optimizations, from [1], as well
|
75
|
+
as some additional optimizations including removing zero rotations and double cnots.
|
76
|
+
|
77
|
+
**References:**
|
78
|
+
[1] Shende, Bullock, Markov. Synthesis of Quantum Logic Circuits (2004)
|
79
|
+
[`https://arxiv.org/abs/quant-ph/0406176v5`]
|
80
|
+
|
81
|
+
"""
|
82
|
+
self._params_arg = params
|
83
|
+
self._inverse = inverse
|
84
|
+
self._name = "state_preparation_dg" if self._inverse else "state_preparation"
|
85
|
+
|
86
|
+
if label is None:
|
87
|
+
self._label = "State Preparation Dg" if self._inverse else "State Preparation"
|
88
|
+
else:
|
89
|
+
self._label = f"{label} Dg" if self._inverse else label
|
90
|
+
|
91
|
+
if isinstance(params, Statevector):
|
92
|
+
params = params.data
|
93
|
+
|
94
|
+
if not isinstance(params, int) and num_qubits is not None:
|
95
|
+
raise QiskitError(
|
96
|
+
"The num_qubits parameter to StatePreparation should only be"
|
97
|
+
" used when params is an integer"
|
98
|
+
)
|
99
|
+
self._from_label = isinstance(params, str)
|
100
|
+
self._from_int = isinstance(params, int)
|
101
|
+
|
102
|
+
# if initialized from a vector, check that the parameters are normalized
|
103
|
+
if not self._from_label and not self._from_int:
|
104
|
+
norm = np.linalg.norm(params)
|
105
|
+
if normalize:
|
106
|
+
params = np.array(params, dtype=np.complex128) / norm
|
107
|
+
elif not math.isclose(norm, 1.0, abs_tol=_EPS):
|
108
|
+
raise QiskitError(f"Sum of amplitudes-squared is not 1, but {norm}.")
|
109
|
+
|
110
|
+
num_qubits = self._get_num_qubits(num_qubits, params)
|
111
|
+
params = [params] if isinstance(params, int) else params
|
112
|
+
|
113
|
+
super().__init__(self._name, num_qubits, params, label=self._label)
|
114
|
+
|
115
|
+
def _define(self):
|
116
|
+
if self._from_label:
|
117
|
+
self.definition = self._define_from_label()
|
118
|
+
elif self._from_int:
|
119
|
+
self.definition = self._define_from_int()
|
120
|
+
else:
|
121
|
+
self.definition = self._define_synthesis()
|
122
|
+
|
123
|
+
def _define_from_label(self):
|
124
|
+
q = QuantumRegister(self.num_qubits, "q")
|
125
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
126
|
+
|
127
|
+
for qubit, param in enumerate(reversed(self.params)):
|
128
|
+
if param == "1":
|
129
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
130
|
+
elif param == "+":
|
131
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
132
|
+
elif param == "-":
|
133
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
134
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
135
|
+
elif param == "r": # |+i>
|
136
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
137
|
+
initialize_circuit.append(SGate(), [q[qubit]])
|
138
|
+
elif param == "l": # |-i>
|
139
|
+
initialize_circuit.append(HGate(), [q[qubit]])
|
140
|
+
initialize_circuit.append(SdgGate(), [q[qubit]])
|
141
|
+
|
142
|
+
if self._inverse:
|
143
|
+
initialize_circuit = initialize_circuit.inverse()
|
144
|
+
|
145
|
+
return initialize_circuit
|
146
|
+
|
147
|
+
def _define_from_int(self):
|
148
|
+
q = QuantumRegister(self.num_qubits, "q")
|
149
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
150
|
+
|
151
|
+
# Convert to int since QuantumCircuit converted to complex
|
152
|
+
# and make a bit string and reverse it
|
153
|
+
intstr = f"{int(np.real(self.params[0])):0{self.num_qubits}b}"[::-1]
|
154
|
+
|
155
|
+
# Raise if number of bits is greater than num_qubits
|
156
|
+
if len(intstr) > self.num_qubits:
|
157
|
+
raise QiskitError(
|
158
|
+
"StatePreparation integer has %s bits, but this exceeds the"
|
159
|
+
" number of qubits in the circuit, %s." % (len(intstr), self.num_qubits)
|
160
|
+
)
|
161
|
+
|
162
|
+
for qubit, bit in enumerate(intstr):
|
163
|
+
if bit == "1":
|
164
|
+
initialize_circuit.append(XGate(), [q[qubit]])
|
165
|
+
|
166
|
+
# note: X is it's own inverse, so even if self._inverse is True,
|
167
|
+
# we don't need to invert anything
|
168
|
+
return initialize_circuit
|
169
|
+
|
170
|
+
def _define_synthesis(self):
|
171
|
+
"""Calculate a subcircuit that implements this initialization
|
172
|
+
|
173
|
+
Implements a recursive initialization algorithm, including optimizations,
|
174
|
+
from "Synthesis of Quantum Logic Circuits" Shende, Bullock, Markov
|
175
|
+
https://arxiv.org/abs/quant-ph/0406176v5
|
176
|
+
|
177
|
+
Additionally implements some extra optimizations: remove zero rotations and
|
178
|
+
double cnots.
|
179
|
+
"""
|
180
|
+
# call to generate the circuit that takes the desired vector to zero
|
181
|
+
disentangling_circuit = self._gates_to_uncompute()
|
182
|
+
|
183
|
+
# invert the circuit to create the desired vector from zero (assuming
|
184
|
+
# the qubits are in the zero state)
|
185
|
+
if self._inverse is False:
|
186
|
+
initialize_instr = disentangling_circuit.to_instruction().inverse()
|
187
|
+
else:
|
188
|
+
initialize_instr = disentangling_circuit.to_instruction()
|
189
|
+
|
190
|
+
q = QuantumRegister(self.num_qubits, "q")
|
191
|
+
initialize_circuit = QuantumCircuit(q, name="init_def")
|
192
|
+
initialize_circuit.append(initialize_instr, q[:])
|
193
|
+
|
194
|
+
return initialize_circuit
|
195
|
+
|
196
|
+
def _get_num_qubits(self, num_qubits, params):
|
197
|
+
"""Get number of qubits needed for state preparation"""
|
198
|
+
if isinstance(params, str):
|
199
|
+
num_qubits = len(params)
|
200
|
+
elif isinstance(params, int):
|
201
|
+
if num_qubits is None:
|
202
|
+
num_qubits = int(math.log2(params)) + 1
|
203
|
+
else:
|
204
|
+
num_qubits = math.log2(len(params))
|
205
|
+
|
206
|
+
# Check if param is a power of 2
|
207
|
+
if num_qubits == 0 or not num_qubits.is_integer():
|
208
|
+
raise QiskitError("Desired statevector length not a positive power of 2.")
|
209
|
+
|
210
|
+
num_qubits = int(num_qubits)
|
211
|
+
return num_qubits
|
212
|
+
|
213
|
+
def inverse(self):
|
214
|
+
"""Return inverted StatePreparation"""
|
215
|
+
|
216
|
+
label = (
|
217
|
+
None if self._label in ("State Preparation", "State Preparation Dg") else self._label
|
218
|
+
)
|
219
|
+
|
220
|
+
return StatePreparation(self._params_arg, inverse=not self._inverse, label=label)
|
221
|
+
|
222
|
+
def broadcast_arguments(self, qargs, cargs):
|
223
|
+
flat_qargs = [qarg for sublist in qargs for qarg in sublist]
|
224
|
+
|
225
|
+
if self.num_qubits != len(flat_qargs):
|
226
|
+
raise QiskitError(
|
227
|
+
"StatePreparation parameter vector has %d elements, therefore expects %s "
|
228
|
+
"qubits. However, %s were provided."
|
229
|
+
% (2**self.num_qubits, self.num_qubits, len(flat_qargs))
|
230
|
+
)
|
231
|
+
yield flat_qargs, []
|
232
|
+
|
233
|
+
def validate_parameter(self, parameter):
|
234
|
+
"""StatePreparation instruction parameter can be str, int, float, and complex."""
|
235
|
+
|
236
|
+
# StatePreparation instruction parameter can be str
|
237
|
+
if isinstance(parameter, str):
|
238
|
+
if parameter in ["0", "1", "+", "-", "l", "r"]:
|
239
|
+
return parameter
|
240
|
+
raise CircuitError(
|
241
|
+
"invalid param label {} for instruction {}. Label should be "
|
242
|
+
"0, 1, +, -, l, or r ".format(type(parameter), self.name)
|
243
|
+
)
|
244
|
+
|
245
|
+
# StatePreparation instruction parameter can be int, float, and complex.
|
246
|
+
if isinstance(parameter, (int, float, complex)):
|
247
|
+
return complex(parameter)
|
248
|
+
elif isinstance(parameter, np.number):
|
249
|
+
return complex(parameter.item())
|
250
|
+
else:
|
251
|
+
raise CircuitError(f"invalid param type {type(parameter)} for instruction {self.name}")
|
252
|
+
|
253
|
+
def _return_repeat(self, exponent: float) -> "Gate":
|
254
|
+
return Gate(name=f"{self.name}*{exponent}", num_qubits=self.num_qubits, params=[])
|
255
|
+
|
256
|
+
def _gates_to_uncompute(self):
|
257
|
+
"""Call to create a circuit with gates that take the desired vector to zero.
|
258
|
+
|
259
|
+
Returns:
|
260
|
+
QuantumCircuit: circuit to take self.params vector to :math:`|{00\\ldots0}\\rangle`
|
261
|
+
"""
|
262
|
+
q = QuantumRegister(self.num_qubits)
|
263
|
+
circuit = QuantumCircuit(q, name="disentangler")
|
264
|
+
|
265
|
+
# kick start the peeling loop, and disentangle one-by-one from LSB to MSB
|
266
|
+
remaining_param = self.params
|
267
|
+
|
268
|
+
for i in range(self.num_qubits):
|
269
|
+
# work out which rotations must be done to disentangle the LSB
|
270
|
+
# qubit (we peel away one qubit at a time)
|
271
|
+
(remaining_param, thetas, phis) = StatePreparation._rotations_to_disentangle(
|
272
|
+
remaining_param
|
273
|
+
)
|
274
|
+
|
275
|
+
# perform the required rotations to decouple the LSB qubit (so that
|
276
|
+
# it can be "factored" out, leaving a shorter amplitude vector to peel away)
|
277
|
+
|
278
|
+
add_last_cnot = True
|
279
|
+
if np.linalg.norm(phis) != 0 and np.linalg.norm(thetas) != 0:
|
280
|
+
add_last_cnot = False
|
281
|
+
|
282
|
+
if np.linalg.norm(phis) != 0:
|
283
|
+
rz_mult = self._multiplex(RZGate, phis, last_cnot=add_last_cnot)
|
284
|
+
circuit.append(rz_mult.to_instruction(), q[i : self.num_qubits])
|
285
|
+
|
286
|
+
if np.linalg.norm(thetas) != 0:
|
287
|
+
ry_mult = self._multiplex(RYGate, thetas, last_cnot=add_last_cnot)
|
288
|
+
circuit.append(ry_mult.to_instruction().reverse_ops(), q[i : self.num_qubits])
|
289
|
+
circuit.global_phase -= np.angle(sum(remaining_param))
|
290
|
+
return circuit
|
291
|
+
|
292
|
+
@staticmethod
|
293
|
+
def _rotations_to_disentangle(local_param):
|
294
|
+
"""
|
295
|
+
Static internal method to work out Ry and Rz rotation angles used
|
296
|
+
to disentangle the LSB qubit.
|
297
|
+
These rotations make up the block diagonal matrix U (i.e. multiplexor)
|
298
|
+
that disentangles the LSB.
|
299
|
+
|
300
|
+
[[Ry(theta_1).Rz(phi_1) 0 . . 0],
|
301
|
+
[0 Ry(theta_2).Rz(phi_2) . 0],
|
302
|
+
.
|
303
|
+
.
|
304
|
+
0 0 Ry(theta_2^n).Rz(phi_2^n)]]
|
305
|
+
"""
|
306
|
+
remaining_vector = []
|
307
|
+
thetas = []
|
308
|
+
phis = []
|
309
|
+
|
310
|
+
param_len = len(local_param)
|
311
|
+
|
312
|
+
for i in range(param_len // 2):
|
313
|
+
# Ry and Rz rotations to move bloch vector from 0 to "imaginary"
|
314
|
+
# qubit
|
315
|
+
# (imagine a qubit state signified by the amplitudes at index 2*i
|
316
|
+
# and 2*(i+1), corresponding to the select qubits of the
|
317
|
+
# multiplexor being in state |i>)
|
318
|
+
(remains, add_theta, add_phi) = StatePreparation._bloch_angles(
|
319
|
+
local_param[2 * i : 2 * (i + 1)]
|
320
|
+
)
|
321
|
+
|
322
|
+
remaining_vector.append(remains)
|
323
|
+
|
324
|
+
# rotations for all imaginary qubits of the full vector
|
325
|
+
# to move from where it is to zero, hence the negative sign
|
326
|
+
thetas.append(-add_theta)
|
327
|
+
phis.append(-add_phi)
|
328
|
+
|
329
|
+
return remaining_vector, thetas, phis
|
330
|
+
|
331
|
+
@staticmethod
|
332
|
+
def _bloch_angles(pair_of_complex):
|
333
|
+
"""
|
334
|
+
Static internal method to work out rotation to create the passed-in
|
335
|
+
qubit from the zero vector.
|
336
|
+
"""
|
337
|
+
[a_complex, b_complex] = pair_of_complex
|
338
|
+
# Force a and b to be complex, as otherwise numpy.angle might fail.
|
339
|
+
a_complex = complex(a_complex)
|
340
|
+
b_complex = complex(b_complex)
|
341
|
+
mag_a = abs(a_complex)
|
342
|
+
final_r = np.sqrt(mag_a**2 + np.absolute(b_complex) ** 2)
|
343
|
+
if final_r < _EPS:
|
344
|
+
theta = 0
|
345
|
+
phi = 0
|
346
|
+
final_r = 0
|
347
|
+
final_t = 0
|
348
|
+
else:
|
349
|
+
theta = 2 * np.arccos(mag_a / final_r)
|
350
|
+
a_arg = np.angle(a_complex)
|
351
|
+
b_arg = np.angle(b_complex)
|
352
|
+
final_t = a_arg + b_arg
|
353
|
+
phi = b_arg - a_arg
|
354
|
+
|
355
|
+
return final_r * np.exp(1.0j * final_t / 2), theta, phi
|
356
|
+
|
357
|
+
def _multiplex(self, target_gate, list_of_angles, last_cnot=True):
|
358
|
+
"""
|
359
|
+
Return a recursive implementation of a multiplexor circuit,
|
360
|
+
where each instruction itself has a decomposition based on
|
361
|
+
smaller multiplexors.
|
362
|
+
|
363
|
+
The LSB is the multiplexor "data" and the other bits are multiplexor "select".
|
364
|
+
|
365
|
+
Args:
|
366
|
+
target_gate (Gate): Ry or Rz gate to apply to target qubit, multiplexed
|
367
|
+
over all other "select" qubits
|
368
|
+
list_of_angles (list[float]): list of rotation angles to apply Ry and Rz
|
369
|
+
last_cnot (bool): add the last cnot if last_cnot = True
|
370
|
+
|
371
|
+
Returns:
|
372
|
+
DAGCircuit: the circuit implementing the multiplexor's action
|
373
|
+
"""
|
374
|
+
list_len = len(list_of_angles)
|
375
|
+
local_num_qubits = int(math.log2(list_len)) + 1
|
376
|
+
|
377
|
+
q = QuantumRegister(local_num_qubits)
|
378
|
+
circuit = QuantumCircuit(q, name="multiplex" + str(local_num_qubits))
|
379
|
+
|
380
|
+
lsb = q[0]
|
381
|
+
msb = q[local_num_qubits - 1]
|
382
|
+
|
383
|
+
# case of no multiplexing: base case for recursion
|
384
|
+
if local_num_qubits == 1:
|
385
|
+
circuit.append(target_gate(list_of_angles[0]), [q[0]])
|
386
|
+
return circuit
|
387
|
+
|
388
|
+
# calc angle weights, assuming recursion (that is the lower-level
|
389
|
+
# requested angles have been correctly implemented by recursion
|
390
|
+
angle_weight = np.kron([[0.5, 0.5], [0.5, -0.5]], np.identity(2 ** (local_num_qubits - 2)))
|
391
|
+
|
392
|
+
# calc the combo angles
|
393
|
+
list_of_angles = angle_weight.dot(np.array(list_of_angles)).tolist()
|
394
|
+
|
395
|
+
# recursive step on half the angles fulfilling the above assumption
|
396
|
+
multiplex_1 = self._multiplex(target_gate, list_of_angles[0 : (list_len // 2)], False)
|
397
|
+
circuit.append(multiplex_1.to_instruction(), q[0:-1])
|
398
|
+
|
399
|
+
# attach CNOT as follows, thereby flipping the LSB qubit
|
400
|
+
circuit.append(CXGate(), [msb, lsb])
|
401
|
+
|
402
|
+
# implement extra efficiency from the paper of cancelling adjacent
|
403
|
+
# CNOTs (by leaving out last CNOT and reversing (NOT inverting) the
|
404
|
+
# second lower-level multiplex)
|
405
|
+
multiplex_2 = self._multiplex(target_gate, list_of_angles[(list_len // 2) :], False)
|
406
|
+
if list_len > 1:
|
407
|
+
circuit.append(multiplex_2.to_instruction().reverse_ops(), q[0:-1])
|
408
|
+
else:
|
409
|
+
circuit.append(multiplex_2.to_instruction(), q[0:-1])
|
410
|
+
|
411
|
+
# attach a final CNOT
|
412
|
+
if last_cnot:
|
413
|
+
circuit.append(CXGate(), [msb, lsb])
|
414
|
+
|
415
|
+
return circuit
|
416
|
+
|
417
|
+
|
418
|
+
def prepare_state(self, state, qubits=None, label=None, normalize=False):
|
419
|
+
r"""Prepare qubits in a specific state.
|
420
|
+
|
421
|
+
This class implements a state preparing unitary. Unlike
|
422
|
+
:class:`qiskit.extensions.Initialize` it does not reset the qubits first.
|
423
|
+
|
424
|
+
Args:
|
425
|
+
state (str or list or int or Statevector):
|
426
|
+
* Statevector: Statevector to initialize to.
|
427
|
+
* str: labels of basis states of the Pauli eigenstates Z, X, Y. See
|
428
|
+
:meth:`.Statevector.from_label`. Notice the order of the labels is reversed with respect
|
429
|
+
to the qubit index to be applied to. Example label '01' initializes the qubit zero to
|
430
|
+
:math:`|1\rangle` and the qubit one to :math:`|0\rangle`.
|
431
|
+
* list: vector of complex amplitudes to initialize to.
|
432
|
+
* int: an integer that is used as a bitmap indicating which qubits to initialize
|
433
|
+
to :math:`|1\rangle`. Example: setting params to 5 would initialize qubit 0 and qubit 2
|
434
|
+
to :math:`|1\rangle` and qubit 1 to :math:`|0\rangle`.
|
435
|
+
|
436
|
+
qubits (QuantumRegister or Qubit or int):
|
437
|
+
* QuantumRegister: A list of qubits to be initialized [Default: None].
|
438
|
+
* Qubit: Single qubit to be initialized [Default: None].
|
439
|
+
* int: Index of qubit to be initialized [Default: None].
|
440
|
+
* list: Indexes of qubits to be initialized [Default: None].
|
441
|
+
label (str): An optional label for the gate
|
442
|
+
normalize (bool): Whether to normalize an input array to a unit vector.
|
443
|
+
|
444
|
+
Returns:
|
445
|
+
qiskit.circuit.Instruction: a handle to the instruction that was just initialized
|
446
|
+
|
447
|
+
Examples:
|
448
|
+
Prepare a qubit in the state :math:`(|0\rangle - |1\rangle) / \sqrt{2}`.
|
449
|
+
|
450
|
+
.. code-block::
|
451
|
+
|
452
|
+
import numpy as np
|
453
|
+
from qiskit import QuantumCircuit
|
454
|
+
|
455
|
+
circuit = QuantumCircuit(1)
|
456
|
+
circuit.prepare_state([1/np.sqrt(2), -1/np.sqrt(2)], 0)
|
457
|
+
circuit.draw()
|
458
|
+
|
459
|
+
output:
|
460
|
+
|
461
|
+
.. parsed-literal::
|
462
|
+
|
463
|
+
┌─────────────────────────────────────┐
|
464
|
+
q_0: ┤ State Preparation(0.70711,-0.70711) ├
|
465
|
+
└─────────────────────────────────────┘
|
466
|
+
|
467
|
+
|
468
|
+
Prepare from a string two qubits in the state :math:`|10\rangle`.
|
469
|
+
The order of the labels is reversed with respect to qubit index.
|
470
|
+
More information about labels for basis states are in
|
471
|
+
:meth:`.Statevector.from_label`.
|
472
|
+
|
473
|
+
.. code-block::
|
474
|
+
|
475
|
+
import numpy as np
|
476
|
+
from qiskit import QuantumCircuit
|
477
|
+
|
478
|
+
circuit = QuantumCircuit(2)
|
479
|
+
circuit.prepare_state('01', circuit.qubits)
|
480
|
+
circuit.draw()
|
481
|
+
|
482
|
+
output:
|
483
|
+
|
484
|
+
.. parsed-literal::
|
485
|
+
|
486
|
+
┌─────────────────────────┐
|
487
|
+
q_0: ┤0 ├
|
488
|
+
│ State Preparation(0,1) │
|
489
|
+
q_1: ┤1 ├
|
490
|
+
└─────────────────────────┘
|
491
|
+
|
492
|
+
|
493
|
+
Initialize two qubits from an array of complex amplitudes
|
494
|
+
.. code-block::
|
495
|
+
|
496
|
+
import numpy as np
|
497
|
+
from qiskit import QuantumCircuit
|
498
|
+
|
499
|
+
circuit = QuantumCircuit(2)
|
500
|
+
circuit.prepare_state([0, 1/np.sqrt(2), -1.j/np.sqrt(2), 0], circuit.qubits)
|
501
|
+
circuit.draw()
|
502
|
+
|
503
|
+
output:
|
504
|
+
|
505
|
+
.. parsed-literal::
|
506
|
+
|
507
|
+
┌───────────────────────────────────────────┐
|
508
|
+
q_0: ┤0 ├
|
509
|
+
│ State Preparation(0,0.70711,-0.70711j,0) │
|
510
|
+
q_1: ┤1 ├
|
511
|
+
└───────────────────────────────────────────┘
|
512
|
+
"""
|
513
|
+
|
514
|
+
if qubits is None:
|
515
|
+
qubits = self.qubits
|
516
|
+
elif isinstance(qubits, (int, np.integer, slice, Qubit)):
|
517
|
+
qubits = [qubits]
|
518
|
+
|
519
|
+
num_qubits = len(qubits) if isinstance(state, int) else None
|
520
|
+
|
521
|
+
return self.append(
|
522
|
+
StatePreparation(state, num_qubits, label=label, normalize=normalize), qubits
|
523
|
+
)
|
524
|
+
|
525
|
+
|
526
|
+
QuantumCircuit.prepare_state = prepare_state
|
@@ -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
|
+
)
|