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,311 @@
|
|
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
|
+
"""The Grover operator."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
from typing import List, Optional, Union
|
17
|
+
import numpy
|
18
|
+
|
19
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister, AncillaRegister
|
20
|
+
from qiskit.exceptions import QiskitError
|
21
|
+
from qiskit.quantum_info import Statevector, Operator, DensityMatrix
|
22
|
+
from .standard_gates import MCXGate
|
23
|
+
|
24
|
+
|
25
|
+
class GroverOperator(QuantumCircuit):
|
26
|
+
r"""The Grover operator.
|
27
|
+
|
28
|
+
Grover's search algorithm [1, 2] consists of repeated applications of the so-called
|
29
|
+
Grover operator used to amplify the amplitudes of the desired output states.
|
30
|
+
This operator, :math:`\mathcal{Q}`, consists of the phase oracle, :math:`\mathcal{S}_f`,
|
31
|
+
zero phase-shift or zero reflection, :math:`\mathcal{S}_0`, and an
|
32
|
+
input state preparation :math:`\mathcal{A}`:
|
33
|
+
|
34
|
+
.. math::
|
35
|
+
\mathcal{Q} = \mathcal{A} \mathcal{S}_0 \mathcal{A}^\dagger \mathcal{S}_f
|
36
|
+
|
37
|
+
In the standard Grover search we have :math:`\mathcal{A} = H^{\otimes n}`:
|
38
|
+
|
39
|
+
.. math::
|
40
|
+
\mathcal{Q} = H^{\otimes n} \mathcal{S}_0 H^{\otimes n} \mathcal{S}_f
|
41
|
+
= D \mathcal{S_f}
|
42
|
+
|
43
|
+
The operation :math:`D = H^{\otimes n} \mathcal{S}_0 H^{\otimes n}` is also referred to as
|
44
|
+
diffusion operator. In this formulation we can see that Grover's operator consists of two
|
45
|
+
steps: first, the phase oracle multiplies the good states by -1 (with :math:`\mathcal{S}_f`)
|
46
|
+
and then the whole state is reflected around the mean (with :math:`D`).
|
47
|
+
|
48
|
+
This class allows setting a different state preparation, as in quantum amplitude
|
49
|
+
amplification (a generalization of Grover's algorithm), :math:`\mathcal{A}` might not be
|
50
|
+
a layer of Hardamard gates [3].
|
51
|
+
|
52
|
+
The action of the phase oracle :math:`\mathcal{S}_f` is defined as
|
53
|
+
|
54
|
+
.. math::
|
55
|
+
\mathcal{S}_f: |x\rangle \mapsto (-1)^{f(x)}|x\rangle
|
56
|
+
|
57
|
+
where :math:`f(x) = 1` if :math:`x` is a good state and 0 otherwise. To highlight the fact
|
58
|
+
that this oracle flips the phase of the good states and does not flip the state of a result
|
59
|
+
qubit, we call :math:`\mathcal{S}_f` a phase oracle.
|
60
|
+
|
61
|
+
Note that you can easily construct a phase oracle from a bitflip oracle by sandwiching the
|
62
|
+
controlled X gate on the result qubit by a X and H gate. For instance
|
63
|
+
|
64
|
+
.. parsed-literal::
|
65
|
+
|
66
|
+
Bitflip oracle Phaseflip oracle
|
67
|
+
q_0: ──■── q_0: ────────────■────────────
|
68
|
+
┌─┴─┐ ┌───┐┌───┐┌─┴─┐┌───┐┌───┐
|
69
|
+
out: ┤ X ├ out: ┤ X ├┤ H ├┤ X ├┤ H ├┤ X ├
|
70
|
+
└───┘ └───┘└───┘└───┘└───┘└───┘
|
71
|
+
|
72
|
+
There is some flexibility in defining the oracle and :math:`\mathcal{A}` operator. Before the
|
73
|
+
Grover operator is applied in Grover's algorithm, the qubits are first prepared with one
|
74
|
+
application of the :math:`\mathcal{A}` operator (or Hadamard gates in the standard formulation).
|
75
|
+
Thus, we always have operation of the form
|
76
|
+
:math:`\mathcal{A} \mathcal{S}_f \mathcal{A}^\dagger`. Therefore it is possible to move
|
77
|
+
bitflip logic into :math:`\mathcal{A}` and leaving the oracle only to do phaseflips via Z gates
|
78
|
+
based on the bitflips. One possible use-case for this are oracles that do not uncompute the
|
79
|
+
state qubits.
|
80
|
+
|
81
|
+
The zero reflection :math:`\mathcal{S}_0` is usually defined as
|
82
|
+
|
83
|
+
.. math::
|
84
|
+
\mathcal{S}_0 = 2 |0\rangle^{\otimes n} \langle 0|^{\otimes n} - \mathbb{I}_n
|
85
|
+
|
86
|
+
where :math:`\mathbb{I}_n` is the identity on :math:`n` qubits.
|
87
|
+
By default, this class implements the negative version
|
88
|
+
:math:`2 |0\rangle^{\otimes n} \langle 0|^{\otimes n} - \mathbb{I}_n`, since this can simply
|
89
|
+
be implemented with a multi-controlled Z sandwiched by X gates on the target qubit and the
|
90
|
+
introduced global phase does not matter for Grover's algorithm.
|
91
|
+
|
92
|
+
Examples:
|
93
|
+
>>> from qiskit.circuit import QuantumCircuit
|
94
|
+
>>> from qiskit.circuit.library import GroverOperator
|
95
|
+
>>> oracle = QuantumCircuit(2)
|
96
|
+
>>> oracle.z(0) # good state = first qubit is |1>
|
97
|
+
>>> grover_op = GroverOperator(oracle, insert_barriers=True)
|
98
|
+
>>> grover_op.decompose().draw()
|
99
|
+
┌───┐ ░ ┌───┐ ░ ┌───┐ ┌───┐ ░ ┌───┐
|
100
|
+
state_0: ┤ Z ├─░─┤ H ├─░─┤ X ├───────■──┤ X ├──────░─┤ H ├
|
101
|
+
└───┘ ░ ├───┤ ░ ├───┤┌───┐┌─┴─┐├───┤┌───┐ ░ ├───┤
|
102
|
+
state_1: ──────░─┤ H ├─░─┤ X ├┤ H ├┤ X ├┤ H ├┤ X ├─░─┤ H ├
|
103
|
+
░ └───┘ ░ └───┘└───┘└───┘└───┘└───┘ ░ └───┘
|
104
|
+
|
105
|
+
>>> oracle = QuantumCircuit(1)
|
106
|
+
>>> oracle.z(0) # the qubit state |1> is the good state
|
107
|
+
>>> state_preparation = QuantumCircuit(1)
|
108
|
+
>>> state_preparation.ry(0.2, 0) # non-uniform state preparation
|
109
|
+
>>> grover_op = GroverOperator(oracle, state_preparation)
|
110
|
+
>>> grover_op.decompose().draw()
|
111
|
+
┌───┐┌──────────┐┌───┐┌───┐┌───┐┌─────────┐
|
112
|
+
state_0: ┤ Z ├┤ RY(-0.2) ├┤ X ├┤ Z ├┤ X ├┤ RY(0.2) ├
|
113
|
+
└───┘└──────────┘└───┘└───┘└───┘└─────────┘
|
114
|
+
|
115
|
+
>>> oracle = QuantumCircuit(4)
|
116
|
+
>>> oracle.z(3)
|
117
|
+
>>> reflection_qubits = [0, 3]
|
118
|
+
>>> state_preparation = QuantumCircuit(4)
|
119
|
+
>>> state_preparation.cry(0.1, 0, 3)
|
120
|
+
>>> state_preparation.ry(0.5, 3)
|
121
|
+
>>> grover_op = GroverOperator(oracle, state_preparation,
|
122
|
+
... reflection_qubits=reflection_qubits)
|
123
|
+
>>> grover_op.decompose().draw()
|
124
|
+
┌───┐ ┌───┐
|
125
|
+
state_0: ──────────────────────■──────┤ X ├───────■──┤ X ├──────────■────────────────
|
126
|
+
│ └───┘ │ └───┘ │
|
127
|
+
state_1: ──────────────────────┼──────────────────┼─────────────────┼────────────────
|
128
|
+
│ │ │
|
129
|
+
state_2: ──────────────────────┼──────────────────┼─────────────────┼────────────────
|
130
|
+
┌───┐┌──────────┐┌────┴─────┐┌───┐┌───┐┌─┴─┐┌───┐┌───┐┌────┴────┐┌─────────┐
|
131
|
+
state_3: ┤ Z ├┤ RY(-0.5) ├┤ RY(-0.1) ├┤ X ├┤ H ├┤ X ├┤ H ├┤ X ├┤ RY(0.1) ├┤ RY(0.5) ├
|
132
|
+
└───┘└──────────┘└──────────┘└───┘└───┘└───┘└───┘└───┘└─────────┘└─────────┘
|
133
|
+
|
134
|
+
>>> mark_state = Statevector.from_label('011')
|
135
|
+
>>> diffuse_operator = 2 * DensityMatrix.from_label('000') - Operator.from_label('III')
|
136
|
+
>>> grover_op = GroverOperator(oracle=mark_state, zero_reflection=diffuse_operator)
|
137
|
+
>>> grover_op.decompose().draw(fold=70)
|
138
|
+
┌─────────────────┐ ┌───┐ »
|
139
|
+
state_0: ┤0 ├──────┤ H ├──────────────────────────»
|
140
|
+
│ │┌─────┴───┴─────┐ ┌───┐ »
|
141
|
+
state_1: ┤1 UCRZ(0,pi,0,0) ├┤0 ├─────┤ H ├──────────»
|
142
|
+
│ ││ UCRZ(pi/2,0) │┌────┴───┴────┐┌───┐»
|
143
|
+
state_2: ┤2 ├┤1 ├┤ UCRZ(-pi/4) ├┤ H ├»
|
144
|
+
└─────────────────┘└───────────────┘└─────────────┘└───┘»
|
145
|
+
« ┌─────────────────┐ ┌───┐
|
146
|
+
«state_0: ┤0 ├──────┤ H ├─────────────────────────
|
147
|
+
« │ │┌─────┴───┴─────┐ ┌───┐
|
148
|
+
«state_1: ┤1 UCRZ(pi,0,0,0) ├┤0 ├────┤ H ├──────────
|
149
|
+
« │ ││ UCRZ(pi/2,0) │┌───┴───┴────┐┌───┐
|
150
|
+
«state_2: ┤2 ├┤1 ├┤ UCRZ(pi/4) ├┤ H ├
|
151
|
+
« └─────────────────┘└───────────────┘└────────────┘└───┘
|
152
|
+
|
153
|
+
References:
|
154
|
+
[1]: L. K. Grover (1996), A fast quantum mechanical algorithm for database search,
|
155
|
+
`arXiv:quant-ph/9605043 <https://arxiv.org/abs/quant-ph/9605043>`_.
|
156
|
+
[2]: I. Chuang & M. Nielsen, Quantum Computation and Quantum Information,
|
157
|
+
Cambridge: Cambridge University Press, 2000. Chapter 6.1.2.
|
158
|
+
[3]: Brassard, G., Hoyer, P., Mosca, M., & Tapp, A. (2000).
|
159
|
+
Quantum Amplitude Amplification and Estimation.
|
160
|
+
`arXiv:quant-ph/0005055 <http://arxiv.org/abs/quant-ph/0005055>`_.
|
161
|
+
"""
|
162
|
+
|
163
|
+
def __init__(
|
164
|
+
self,
|
165
|
+
oracle: Union[QuantumCircuit, Statevector],
|
166
|
+
state_preparation: Optional[QuantumCircuit] = None,
|
167
|
+
zero_reflection: Optional[Union[QuantumCircuit, DensityMatrix, Operator]] = None,
|
168
|
+
reflection_qubits: Optional[List[int]] = None,
|
169
|
+
insert_barriers: bool = False,
|
170
|
+
mcx_mode: str = "noancilla",
|
171
|
+
name: str = "Q",
|
172
|
+
) -> None:
|
173
|
+
r"""
|
174
|
+
Args:
|
175
|
+
oracle: The phase oracle implementing a reflection about the bad state. Note that this
|
176
|
+
is not a bitflip oracle, see the docstring for more information.
|
177
|
+
state_preparation: The operator preparing the good and bad state.
|
178
|
+
For Grover's algorithm, this is a n-qubit Hadamard gate and for amplitude
|
179
|
+
amplification or estimation the operator :math:`\mathcal{A}`.
|
180
|
+
zero_reflection: The reflection about the zero state, :math:`\mathcal{S}_0`.
|
181
|
+
reflection_qubits: Qubits on which the zero reflection acts on.
|
182
|
+
insert_barriers: Whether barriers should be inserted between the reflections and A.
|
183
|
+
mcx_mode: The mode to use for building the default zero reflection.
|
184
|
+
name: The name of the circuit.
|
185
|
+
"""
|
186
|
+
super().__init__(name=name)
|
187
|
+
|
188
|
+
# store inputs
|
189
|
+
if isinstance(oracle, Statevector):
|
190
|
+
from qiskit.circuit.library import Diagonal # pylint: disable=cyclic-import
|
191
|
+
|
192
|
+
oracle = Diagonal((-1) ** oracle.data)
|
193
|
+
self._oracle = oracle
|
194
|
+
|
195
|
+
if isinstance(zero_reflection, (Operator, DensityMatrix)):
|
196
|
+
from qiskit.circuit.library import Diagonal # pylint: disable=cyclic-import
|
197
|
+
|
198
|
+
zero_reflection = Diagonal(zero_reflection.data.diagonal())
|
199
|
+
self._zero_reflection = zero_reflection
|
200
|
+
|
201
|
+
self._reflection_qubits = reflection_qubits
|
202
|
+
self._state_preparation = state_preparation
|
203
|
+
self._insert_barriers = insert_barriers
|
204
|
+
self._mcx_mode = mcx_mode
|
205
|
+
|
206
|
+
# build circuit
|
207
|
+
self._build()
|
208
|
+
|
209
|
+
@property
|
210
|
+
def reflection_qubits(self):
|
211
|
+
"""Reflection qubits, on which S0 is applied (if S0 is not user-specified)."""
|
212
|
+
if self._reflection_qubits is not None:
|
213
|
+
return self._reflection_qubits
|
214
|
+
|
215
|
+
num_state_qubits = self.oracle.num_qubits - self.oracle.num_ancillas
|
216
|
+
return list(range(num_state_qubits))
|
217
|
+
|
218
|
+
@property
|
219
|
+
def zero_reflection(self) -> QuantumCircuit:
|
220
|
+
"""The subcircuit implementing the reflection about 0."""
|
221
|
+
if self._zero_reflection is not None:
|
222
|
+
return self._zero_reflection
|
223
|
+
|
224
|
+
num_state_qubits = self.oracle.num_qubits - self.oracle.num_ancillas
|
225
|
+
return _zero_reflection(num_state_qubits, self.reflection_qubits, self._mcx_mode)
|
226
|
+
|
227
|
+
@property
|
228
|
+
def state_preparation(self) -> QuantumCircuit:
|
229
|
+
"""The subcircuit implementing the A operator or Hadamards."""
|
230
|
+
if self._state_preparation is not None:
|
231
|
+
return self._state_preparation
|
232
|
+
|
233
|
+
num_state_qubits = self.oracle.num_qubits - self.oracle.num_ancillas
|
234
|
+
hadamards = QuantumCircuit(num_state_qubits, name="H")
|
235
|
+
# apply Hadamards only on reflection qubits, rest will cancel out
|
236
|
+
hadamards.h(self.reflection_qubits)
|
237
|
+
return hadamards
|
238
|
+
|
239
|
+
@property
|
240
|
+
def oracle(self):
|
241
|
+
"""The oracle implementing a reflection about the bad state."""
|
242
|
+
return self._oracle
|
243
|
+
|
244
|
+
def _build(self):
|
245
|
+
num_state_qubits = self.oracle.num_qubits - self.oracle.num_ancillas
|
246
|
+
circuit = QuantumCircuit(QuantumRegister(num_state_qubits, name="state"), name="Q")
|
247
|
+
num_ancillas = numpy.max(
|
248
|
+
[
|
249
|
+
self.oracle.num_ancillas,
|
250
|
+
self.zero_reflection.num_ancillas,
|
251
|
+
self.state_preparation.num_ancillas,
|
252
|
+
]
|
253
|
+
)
|
254
|
+
if num_ancillas > 0:
|
255
|
+
circuit.add_register(AncillaRegister(num_ancillas, name="ancilla"))
|
256
|
+
|
257
|
+
circuit.compose(self.oracle, list(range(self.oracle.num_qubits)), inplace=True)
|
258
|
+
if self._insert_barriers:
|
259
|
+
circuit.barrier()
|
260
|
+
circuit.compose(
|
261
|
+
self.state_preparation.inverse(),
|
262
|
+
list(range(self.state_preparation.num_qubits)),
|
263
|
+
inplace=True,
|
264
|
+
)
|
265
|
+
if self._insert_barriers:
|
266
|
+
circuit.barrier()
|
267
|
+
circuit.compose(
|
268
|
+
self.zero_reflection, list(range(self.zero_reflection.num_qubits)), inplace=True
|
269
|
+
)
|
270
|
+
if self._insert_barriers:
|
271
|
+
circuit.barrier()
|
272
|
+
circuit.compose(
|
273
|
+
self.state_preparation, list(range(self.state_preparation.num_qubits)), inplace=True
|
274
|
+
)
|
275
|
+
|
276
|
+
# minus sign
|
277
|
+
circuit.global_phase = numpy.pi
|
278
|
+
|
279
|
+
self.add_register(*circuit.qregs)
|
280
|
+
try:
|
281
|
+
circuit_wrapped = circuit.to_gate()
|
282
|
+
except QiskitError:
|
283
|
+
circuit_wrapped = circuit.to_instruction()
|
284
|
+
|
285
|
+
self.compose(circuit_wrapped, qubits=self.qubits, inplace=True)
|
286
|
+
|
287
|
+
|
288
|
+
# TODO use the oracle compiler or the bit string oracle
|
289
|
+
def _zero_reflection(
|
290
|
+
num_state_qubits: int, qubits: List[int], mcx_mode: Optional[str] = None
|
291
|
+
) -> QuantumCircuit:
|
292
|
+
qr_state = QuantumRegister(num_state_qubits, "state")
|
293
|
+
reflection = QuantumCircuit(qr_state, name="S_0")
|
294
|
+
|
295
|
+
num_ancillas = MCXGate.get_num_ancilla_qubits(len(qubits) - 1, mcx_mode)
|
296
|
+
if num_ancillas > 0:
|
297
|
+
qr_ancilla = AncillaRegister(num_ancillas, "ancilla")
|
298
|
+
reflection.add_register(qr_ancilla)
|
299
|
+
else:
|
300
|
+
qr_ancilla = AncillaRegister(0)
|
301
|
+
|
302
|
+
reflection.x(qubits)
|
303
|
+
if len(qubits) == 1:
|
304
|
+
reflection.z(0) # MCX does not allow 0 control qubits, therefore this is separate
|
305
|
+
else:
|
306
|
+
reflection.h(qubits[-1])
|
307
|
+
reflection.mcx(qubits[:-1], qubits[-1], qr_ancilla[:], mode=mcx_mode)
|
308
|
+
reflection.h(qubits[-1])
|
309
|
+
reflection.x(qubits)
|
310
|
+
|
311
|
+
return reflection
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Gate described by the time evolution of a Hermitian Hamiltonian operator.
|
15
|
+
"""
|
16
|
+
|
17
|
+
from __future__ import annotations
|
18
|
+
import typing
|
19
|
+
|
20
|
+
from numbers import Number
|
21
|
+
import numpy as np
|
22
|
+
|
23
|
+
from qiskit.circuit.gate import Gate
|
24
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
25
|
+
from qiskit.circuit.quantumregister import QuantumRegister
|
26
|
+
from qiskit.circuit.parameterexpression import ParameterExpression
|
27
|
+
from qiskit.circuit.exceptions import CircuitError
|
28
|
+
from qiskit.quantum_info.operators.predicates import matrix_equal
|
29
|
+
from qiskit.quantum_info.operators.predicates import is_hermitian_matrix
|
30
|
+
from qiskit.utils.deprecation import deprecate_func
|
31
|
+
|
32
|
+
from .generalized_gates.unitary import UnitaryGate
|
33
|
+
|
34
|
+
if typing.TYPE_CHECKING:
|
35
|
+
from qiskit.quantum_info.operators.base_operator import BaseOperator
|
36
|
+
|
37
|
+
|
38
|
+
class HamiltonianGate(Gate):
|
39
|
+
r"""Class for representing evolution by a Hamiltonian operator as a gate.
|
40
|
+
|
41
|
+
This gate resolves to a :class:`~.library.UnitaryGate` as :math:`U(t) = \exp(-i t H)`,
|
42
|
+
which can be decomposed into basis gates if it is 2 qubits or less, or
|
43
|
+
simulated directly in Aer for more qubits.
|
44
|
+
"""
|
45
|
+
|
46
|
+
def __init__(
|
47
|
+
self,
|
48
|
+
data: np.ndarray | Gate | BaseOperator,
|
49
|
+
time: float | ParameterExpression,
|
50
|
+
label: str | None = None,
|
51
|
+
) -> None:
|
52
|
+
"""
|
53
|
+
Args:
|
54
|
+
data: A hermitian operator.
|
55
|
+
time: Time evolution parameter.
|
56
|
+
label: Unitary name for backend [Default: None].
|
57
|
+
|
58
|
+
Raises:
|
59
|
+
ValueError: if input data is not an N-qubit unitary operator.
|
60
|
+
"""
|
61
|
+
if hasattr(data, "to_matrix"):
|
62
|
+
# If input is Gate subclass or some other class object that has
|
63
|
+
# a to_matrix method this will call that method.
|
64
|
+
data = data.to_matrix()
|
65
|
+
elif hasattr(data, "to_operator"):
|
66
|
+
# If input is a BaseOperator subclass this attempts to convert
|
67
|
+
# the object to an Operator so that we can extract the underlying
|
68
|
+
# numpy matrix from `Operator.data`.
|
69
|
+
data = data.to_operator().data
|
70
|
+
# Convert to np array in case not already an array
|
71
|
+
data = np.array(data, dtype=complex)
|
72
|
+
# Check input is unitary
|
73
|
+
if not is_hermitian_matrix(data):
|
74
|
+
raise ValueError("Input matrix is not Hermitian.")
|
75
|
+
if isinstance(time, Number) and time != np.real(time):
|
76
|
+
raise ValueError("Evolution time is not real.")
|
77
|
+
# Check input is N-qubit matrix
|
78
|
+
input_dim, output_dim = data.shape
|
79
|
+
num_qubits = int(np.log2(input_dim))
|
80
|
+
if input_dim != output_dim or 2**num_qubits != input_dim:
|
81
|
+
raise ValueError("Input matrix is not an N-qubit operator.")
|
82
|
+
|
83
|
+
# Store instruction params
|
84
|
+
super().__init__("hamiltonian", num_qubits, [data, time], label=label)
|
85
|
+
|
86
|
+
def __eq__(self, other):
|
87
|
+
if not isinstance(other, HamiltonianGate):
|
88
|
+
return False
|
89
|
+
if self.label != other.label:
|
90
|
+
return False
|
91
|
+
operators_eq = matrix_equal(self.params[0], other.params[0], ignore_phase=False)
|
92
|
+
times_eq = self.params[1] == other.params[1]
|
93
|
+
return operators_eq and times_eq
|
94
|
+
|
95
|
+
def __array__(self, dtype=None):
|
96
|
+
"""Return matrix for the unitary."""
|
97
|
+
# pylint: disable=unused-argument
|
98
|
+
import scipy.linalg
|
99
|
+
|
100
|
+
try:
|
101
|
+
return scipy.linalg.expm(-1j * self.params[0] * float(self.params[1]))
|
102
|
+
except TypeError as ex:
|
103
|
+
raise TypeError(
|
104
|
+
"Unable to generate Unitary matrix for "
|
105
|
+
"unbound t parameter {}".format(self.params[1])
|
106
|
+
) from ex
|
107
|
+
|
108
|
+
def inverse(self):
|
109
|
+
"""Return the adjoint of the unitary."""
|
110
|
+
return self.adjoint()
|
111
|
+
|
112
|
+
def conjugate(self):
|
113
|
+
"""Return the conjugate of the Hamiltonian."""
|
114
|
+
return HamiltonianGate(np.conj(self.params[0]), -self.params[1])
|
115
|
+
|
116
|
+
def adjoint(self):
|
117
|
+
"""Return the adjoint of the unitary."""
|
118
|
+
return HamiltonianGate(self.params[0], -self.params[1])
|
119
|
+
|
120
|
+
def transpose(self):
|
121
|
+
"""Return the transpose of the Hamiltonian."""
|
122
|
+
return HamiltonianGate(np.transpose(self.params[0]), self.params[1])
|
123
|
+
|
124
|
+
def _define(self):
|
125
|
+
"""Calculate a subcircuit that implements this unitary."""
|
126
|
+
q = QuantumRegister(self.num_qubits, "q")
|
127
|
+
qc = QuantumCircuit(q, name=self.name)
|
128
|
+
qc._append(UnitaryGate(self.to_matrix()), q[:], [])
|
129
|
+
self.definition = qc
|
130
|
+
|
131
|
+
@deprecate_func(
|
132
|
+
since="0.25.0",
|
133
|
+
package_name="qiskit-terra",
|
134
|
+
)
|
135
|
+
def qasm(self):
|
136
|
+
"""Raise an error, as QASM is not defined for the HamiltonianGate."""
|
137
|
+
raise CircuitError("HamiltonianGate has no OpenQASM 2 definition.")
|
138
|
+
|
139
|
+
def validate_parameter(self, parameter):
|
140
|
+
"""Hamiltonian parameter has to be an ndarray, operator or float."""
|
141
|
+
if isinstance(parameter, (float, int, np.ndarray)):
|
142
|
+
return parameter
|
143
|
+
elif isinstance(parameter, ParameterExpression) and len(parameter.parameters) == 0:
|
144
|
+
return float(parameter)
|
145
|
+
else:
|
146
|
+
raise CircuitError(f"invalid param type {type(parameter)} for gate {self.name}")
|
@@ -0,0 +1,98 @@
|
|
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
|
+
"""Hidden Linear Function circuit."""
|
14
|
+
|
15
|
+
from typing import Union, List
|
16
|
+
|
17
|
+
import numpy as np
|
18
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
19
|
+
from qiskit.circuit.exceptions import CircuitError
|
20
|
+
|
21
|
+
|
22
|
+
class HiddenLinearFunction(QuantumCircuit):
|
23
|
+
r"""Circuit to solve the hidden linear function problem.
|
24
|
+
|
25
|
+
The 2D Hidden Linear Function problem is determined by a 2D adjacency
|
26
|
+
matrix A, where only elements that are nearest-neighbor on a grid have
|
27
|
+
non-zero entries. Each row/column corresponds to one binary variable
|
28
|
+
:math:`x_i`.
|
29
|
+
|
30
|
+
The hidden linear function problem is as follows:
|
31
|
+
|
32
|
+
Consider the quadratic form
|
33
|
+
|
34
|
+
.. math::
|
35
|
+
|
36
|
+
q(x) = \sum_{i,j=1}^{n}{x_i x_j} ~(\mathrm{mod}~ 4)
|
37
|
+
|
38
|
+
and restrict :math:`q(x)` onto the nullspace of A. This results in a linear
|
39
|
+
function.
|
40
|
+
|
41
|
+
.. math::
|
42
|
+
|
43
|
+
2 \sum_{i=1}^{n}{z_i x_i} ~(\mathrm{mod}~ 4) \forall x \in \mathrm{Ker}(A)
|
44
|
+
|
45
|
+
and the goal is to recover this linear function (equivalently a vector
|
46
|
+
:math:`[z_0, ..., z_{n-1}]`). There can be multiple solutions.
|
47
|
+
|
48
|
+
In [1] it is shown that the present circuit solves this problem
|
49
|
+
on a quantum computer in constant depth, whereas any corresponding
|
50
|
+
solution on a classical computer would require circuits that grow
|
51
|
+
logarithmically with :math:`n`. Thus this circuit is an example
|
52
|
+
of quantum advantage with shallow circuits.
|
53
|
+
|
54
|
+
**Reference Circuit:**
|
55
|
+
|
56
|
+
.. plot::
|
57
|
+
|
58
|
+
from qiskit.circuit.library import HiddenLinearFunction
|
59
|
+
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
|
60
|
+
A = [[1, 1, 0], [1, 0, 1], [0, 1, 1]]
|
61
|
+
circuit = HiddenLinearFunction(A)
|
62
|
+
_generate_circuit_library_visualization(circuit)
|
63
|
+
|
64
|
+
**Reference:**
|
65
|
+
|
66
|
+
[1] S. Bravyi, D. Gosset, R. Koenig, Quantum Advantage with Shallow Circuits, 2017.
|
67
|
+
`arXiv:1704.00690 <https://arxiv.org/abs/1704.00690>`_
|
68
|
+
"""
|
69
|
+
|
70
|
+
def __init__(self, adjacency_matrix: Union[List[List[int]], np.ndarray]) -> None:
|
71
|
+
"""Create new HLF circuit.
|
72
|
+
|
73
|
+
Args:
|
74
|
+
adjacency_matrix: a symmetric n-by-n list of 0-1 lists.
|
75
|
+
n will be the number of qubits.
|
76
|
+
|
77
|
+
Raises:
|
78
|
+
CircuitError: If A is not symmetric.
|
79
|
+
"""
|
80
|
+
adjacency_matrix = np.asarray(adjacency_matrix)
|
81
|
+
if not np.allclose(adjacency_matrix, adjacency_matrix.transpose()):
|
82
|
+
raise CircuitError("The adjacency matrix must be symmetric.")
|
83
|
+
|
84
|
+
num_qubits = len(adjacency_matrix)
|
85
|
+
circuit = QuantumCircuit(num_qubits, name="hlf: %s" % adjacency_matrix)
|
86
|
+
|
87
|
+
circuit.h(range(num_qubits))
|
88
|
+
for i in range(num_qubits):
|
89
|
+
for j in range(i + 1, num_qubits):
|
90
|
+
if adjacency_matrix[i][j]:
|
91
|
+
circuit.cz(i, j)
|
92
|
+
for i in range(num_qubits):
|
93
|
+
if adjacency_matrix[i][i]:
|
94
|
+
circuit.s(i)
|
95
|
+
circuit.h(range(num_qubits))
|
96
|
+
|
97
|
+
super().__init__(*circuit.qregs, name=circuit.name)
|
98
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,96 @@
|
|
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
|
+
"""Instantaneous quantum polynomial circuit."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
import numpy as np
|
18
|
+
from qiskit.circuit import QuantumCircuit
|
19
|
+
from qiskit.circuit.exceptions import CircuitError
|
20
|
+
|
21
|
+
|
22
|
+
class IQP(QuantumCircuit):
|
23
|
+
r"""Instantaneous quantum polynomial (IQP) circuit.
|
24
|
+
|
25
|
+
The circuit consists of a column of Hadamard gates,
|
26
|
+
a column of powers of T gates,
|
27
|
+
a sequence of powers of CS gates (up to
|
28
|
+
:math:`\frac{n^2-n}{2}` of them),
|
29
|
+
and a final column of Hadamard gates, as introduced in [1].
|
30
|
+
|
31
|
+
The circuit is parameterized by an n x n interactions matrix.
|
32
|
+
The powers of each T gate are given by the diagonal elements
|
33
|
+
of the interactions matrix. The powers of the CS gates are
|
34
|
+
given by the upper triangle of the interactions matrix.
|
35
|
+
|
36
|
+
**Reference Circuit:**
|
37
|
+
|
38
|
+
.. plot::
|
39
|
+
|
40
|
+
from qiskit.circuit.library import IQP
|
41
|
+
A = [[6, 5, 3], [5, 4, 5], [3, 5, 1]]
|
42
|
+
circuit = IQP(A)
|
43
|
+
circuit.draw('mpl')
|
44
|
+
|
45
|
+
**Expanded Circuit:**
|
46
|
+
|
47
|
+
.. plot::
|
48
|
+
|
49
|
+
from qiskit.circuit.library import IQP
|
50
|
+
from qiskit.tools.jupyter.library import _generate_circuit_library_visualization
|
51
|
+
A = [[6, 5, 3], [5, 4, 5], [3, 5, 1]]
|
52
|
+
circuit = IQP(A)
|
53
|
+
_generate_circuit_library_visualization(circuit.decompose())
|
54
|
+
|
55
|
+
**References:**
|
56
|
+
|
57
|
+
[1] M. J. Bremner et al. Average-case complexity versus approximate
|
58
|
+
simulation of commuting quantum computations,
|
59
|
+
Phys. Rev. Lett. 117, 080501 (2016).
|
60
|
+
`arXiv:1504.07999 <https://arxiv.org/abs/1504.07999>`_
|
61
|
+
"""
|
62
|
+
|
63
|
+
def __init__(self, interactions: list | np.ndarray) -> None:
|
64
|
+
"""Create IQP circuit.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
interactions: input n-by-n symmetric matrix.
|
68
|
+
|
69
|
+
Raises:
|
70
|
+
CircuitError: if the inputs is not as symmetric matrix.
|
71
|
+
"""
|
72
|
+
num_qubits = len(interactions)
|
73
|
+
interactions = np.array(interactions)
|
74
|
+
if not np.allclose(interactions, interactions.transpose()):
|
75
|
+
raise CircuitError("The interactions matrix is not symmetric")
|
76
|
+
|
77
|
+
a_str = np.array_str(interactions)
|
78
|
+
a_str.replace("\n", ";")
|
79
|
+
name = "iqp:" + a_str.replace("\n", ";")
|
80
|
+
|
81
|
+
circuit = QuantumCircuit(num_qubits, name=name)
|
82
|
+
|
83
|
+
circuit.h(range(num_qubits))
|
84
|
+
for i in range(num_qubits):
|
85
|
+
for j in range(i + 1, num_qubits):
|
86
|
+
if interactions[i][j] % 4 != 0:
|
87
|
+
circuit.cp(interactions[i][j] * np.pi / 2, i, j)
|
88
|
+
|
89
|
+
for i in range(num_qubits):
|
90
|
+
if interactions[i][i] % 8 != 0:
|
91
|
+
circuit.p(interactions[i][i] * np.pi / 8, i)
|
92
|
+
|
93
|
+
circuit.h(range(num_qubits))
|
94
|
+
|
95
|
+
super().__init__(*circuit.qregs, name=circuit.name)
|
96
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,31 @@
|
|
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
|
+
"""The circuit library module containing N-local circuits."""
|
14
|
+
|
15
|
+
from .n_local import NLocal
|
16
|
+
from .two_local import TwoLocal
|
17
|
+
from .pauli_two_design import PauliTwoDesign
|
18
|
+
from .real_amplitudes import RealAmplitudes
|
19
|
+
from .efficient_su2 import EfficientSU2
|
20
|
+
from .excitation_preserving import ExcitationPreserving
|
21
|
+
from .qaoa_ansatz import QAOAAnsatz
|
22
|
+
|
23
|
+
__all__ = [
|
24
|
+
"NLocal",
|
25
|
+
"TwoLocal",
|
26
|
+
"RealAmplitudes",
|
27
|
+
"PauliTwoDesign",
|
28
|
+
"EfficientSU2",
|
29
|
+
"ExcitationPreserving",
|
30
|
+
"QAOAAnsatz",
|
31
|
+
]
|