qiskit 1.3.0b1__cp39-abi3-macosx_10_9_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -0
- qiskit/__init__.py +127 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +42 -0
- qiskit/assembler/assemble_circuits.py +451 -0
- qiskit/assembler/assemble_schedules.py +365 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1270 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3264 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +48 -0
- qiskit/circuit/bit.py +94 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +238 -0
- qiskit/circuit/classical/expr/constructors.py +556 -0
- qiskit/circuit/classical/expr/expr.py +397 -0
- qiskit/circuit/classical/expr/visitors.py +300 -0
- qiskit/circuit/classical/types/__init__.py +109 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +140 -0
- qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
- qiskit/circuit/classicalfunction/classical_element.py +54 -0
- qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
- qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
- qiskit/circuit/classicalfunction/exceptions.py +35 -0
- qiskit/circuit/classicalfunction/types.py +18 -0
- qiskit/circuit/classicalfunction/utils.py +91 -0
- qiskit/circuit/classicalregister.py +57 -0
- qiskit/circuit/commutation_checker.py +106 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +28 -0
- qiskit/circuit/controlflow/_builder_utils.py +207 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +691 -0
- qiskit/circuit/controlflow/continue_loop.py +58 -0
- qiskit/circuit/controlflow/control_flow.py +84 -0
- qiskit/circuit/controlflow/for_loop.py +217 -0
- qiskit/circuit/controlflow/if_else.py +503 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +163 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +106 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +295 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +676 -0
- qiskit/circuit/instructionset.py +177 -0
- qiskit/circuit/library/__init__.py +572 -0
- qiskit/circuit/library/arithmetic/__init__.py +27 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +58 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +159 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +116 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +165 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +16 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +138 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +331 -0
- qiskit/circuit/library/blueprintcircuit.py +216 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +78 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +97 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +98 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +71 -0
- qiskit/circuit/library/data_preparation/__init__.py +54 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +343 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +97 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +165 -0
- qiskit/circuit/library/generalized_gates/gms.py +121 -0
- qiskit/circuit/library/generalized_gates/gr.py +215 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +312 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +256 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +192 -0
- qiskit/circuit/library/generalized_gates/rv.py +97 -0
- qiskit/circuit/library/generalized_gates/uc.py +213 -0
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
- qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
- qiskit/circuit/library/generalized_gates/ucry.py +32 -0
- qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
- qiskit/circuit/library/generalized_gates/unitary.py +215 -0
- qiskit/circuit/library/graph_state.py +86 -0
- qiskit/circuit/library/grover_operator.py +311 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +98 -0
- qiskit/circuit/library/iqp.py +96 -0
- qiskit/circuit/library/n_local/__init__.py +33 -0
- qiskit/circuit/library/n_local/efficient_su2.py +164 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +256 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +173 -0
- qiskit/circuit/library/n_local/n_local.py +1071 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +141 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +287 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +186 -0
- qiskit/circuit/library/n_local/two_local.py +282 -0
- qiskit/circuit/library/overlap.py +117 -0
- qiskit/circuit/library/pauli_evolution.py +184 -0
- qiskit/circuit/library/phase_estimation.py +99 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +115 -0
- qiskit/circuit/library/standard_gates/__init__.py +123 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +130 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +85 -0
- qiskit/circuit/library/standard_gates/h.py +257 -0
- qiskit/circuit/library/standard_gates/i.py +75 -0
- qiskit/circuit/library/standard_gates/iswap.py +134 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
- qiskit/circuit/library/standard_gates/p.py +433 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +302 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +297 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +318 -0
- qiskit/circuit/library/standard_gates/rzx.py +229 -0
- qiskit/circuit/library/standard_gates/rzz.py +196 -0
- qiskit/circuit/library/standard_gates/s.py +428 -0
- qiskit/circuit/library/standard_gates/swap.py +288 -0
- qiskit/circuit/library/standard_gates/sx.py +314 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +451 -0
- qiskit/circuit/library/standard_gates/u2.py +146 -0
- qiskit/circuit/library/standard_gates/u3.py +408 -0
- qiskit/circuit/library/standard_gates/x.py +1527 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
- qiskit/circuit/library/standard_gates/y.py +261 -0
- qiskit/circuit/library/standard_gates/z.py +348 -0
- qiskit/circuit/library/templates/__init__.py +92 -0
- qiskit/circuit/library/templates/clifford/__init__.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +32 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +40 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +32 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +33 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +42 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +46 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +53 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +43 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +67 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +58 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +57 -0
- qiskit/circuit/measure.py +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +174 -0
- qiskit/circuit/parameterexpression.py +559 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6793 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/quantumregister.py +75 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +358 -0
- qiskit/circuit/register.py +233 -0
- qiskit/circuit/reset.py +34 -0
- qiskit/circuit/singleton.py +604 -0
- qiskit/circuit/store.py +95 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +668 -0
- qiskit/compiler/scheduler.py +107 -0
- qiskit/compiler/sequencer.py +69 -0
- qiskit/compiler/transpiler.py +478 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +78 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +155 -0
- qiskit/converters/dag_to_circuit.py +77 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +42 -0
- qiskit/converters/dagdependency_to_dag.py +49 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +633 -0
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +176 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +240 -0
- qiskit/passmanager/base_tasks.py +230 -0
- qiskit/passmanager/compilation_status.py +74 -0
- qiskit/passmanager/exceptions.py +19 -0
- qiskit/passmanager/flow_controllers.py +116 -0
- qiskit/passmanager/passmanager.py +333 -0
- qiskit/primitives/__init__.py +481 -0
- qiskit/primitives/backend_estimator.py +483 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +296 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +252 -0
- qiskit/primitives/base/base_primitive.py +45 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_result.py +65 -0
- qiskit/primitives/base/base_sampler.py +204 -0
- qiskit/primitives/base/estimator_result.py +46 -0
- qiskit/primitives/base/sampler_result.py +45 -0
- qiskit/primitives/base/validation.py +231 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +389 -0
- qiskit/primitives/containers/bit_array.py +741 -0
- qiskit/primitives/containers/data_bin.py +165 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +279 -0
- qiskit/primitives/containers/primitive_result.py +53 -0
- qiskit/primitives/containers/pub_result.py +51 -0
- qiskit/primitives/containers/sampler_pub.py +193 -0
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +129 -0
- qiskit/primitives/estimator.py +172 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/sampler.py +162 -0
- qiskit/primitives/statevector_estimator.py +174 -0
- qiskit/primitives/statevector_sampler.py +292 -0
- qiskit/primitives/utils.py +247 -0
- qiskit/providers/__init__.py +803 -0
- qiskit/providers/backend.py +656 -0
- qiskit/providers/backend_compat.py +452 -0
- qiskit/providers/basic_provider/__init__.py +45 -0
- qiskit/providers/basic_provider/basic_provider.py +101 -0
- qiskit/providers/basic_provider/basic_provider_job.py +65 -0
- qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
- qiskit/providers/basic_provider/basic_simulator.py +811 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +105 -0
- qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +165 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +44 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1019 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +89 -0
- qiskit/providers/models/backendconfiguration.py +1040 -0
- qiskit/providers/models/backendproperties.py +517 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +303 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +95 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/pulse/__init__.py +158 -0
- qiskit/pulse/builder.py +2213 -0
- qiskit/pulse/calibration_entries.py +378 -0
- qiskit/pulse/channels.py +225 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +43 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +409 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +148 -0
- qiskit/pulse/instructions/delay.py +69 -0
- qiskit/pulse/instructions/directives.py +146 -0
- qiskit/pulse/instructions/frequency.py +132 -0
- qiskit/pulse/instructions/instruction.py +268 -0
- qiskit/pulse/instructions/phase.py +149 -0
- qiskit/pulse/instructions/play.py +97 -0
- qiskit/pulse/instructions/reference.py +98 -0
- qiskit/pulse/instructions/snapshot.py +80 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +146 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +295 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1960 -0
- qiskit/pulse/library/waveform.py +134 -0
- qiskit/pulse/macros.py +262 -0
- qiskit/pulse/parameter_manager.py +445 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +1855 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +404 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +498 -0
- qiskit/pulse/transforms/dag.py +115 -0
- qiskit/pulse/utils.py +149 -0
- qiskit/qasm/libs/dummy/stdgates.inc +75 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +82 -0
- qiskit/qasm2/__init__.py +654 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +370 -0
- qiskit/qasm2/parse.py +408 -0
- qiskit/qasm3/__init__.py +366 -0
- qiskit/qasm3/ast.py +630 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1273 -0
- qiskit/qasm3/printer.py +577 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +81 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +177 -0
- qiskit/qobj/converters/pulse_instruction.py +895 -0
- qiskit/qobj/pulse_qobj.py +709 -0
- qiskit/qobj/qasm_qobj.py +708 -0
- qiskit/qobj/utils.py +46 -0
- qiskit/qpy/__init__.py +1641 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1460 -0
- qiskit/qpy/binary_io/schedules.py +636 -0
- qiskit/qpy/binary_io/value.py +728 -0
- qiskit/qpy/common.py +306 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +394 -0
- qiskit/qpy/interface.py +341 -0
- qiskit/qpy/type_keys.py +572 -0
- qiskit/quantum_info/__init__.py +158 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +102 -0
- qiskit/quantum_info/analysis/make_observable.py +44 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
- qiskit/quantum_info/operators/__init__.py +28 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +377 -0
- qiskit/quantum_info/operators/channel/transformations.py +468 -0
- qiskit/quantum_info/operators/custom_iterator.py +48 -0
- qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
- qiskit/quantum_info/operators/dihedral/dihedral.py +509 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +64 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +418 -0
- qiskit/quantum_info/operators/mixins/__init__.py +52 -0
- qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
- qiskit/quantum_info/operators/mixins/group.py +171 -0
- qiskit/quantum_info/operators/mixins/linear.py +84 -0
- qiskit/quantum_info/operators/mixins/multiply.py +62 -0
- qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
- qiskit/quantum_info/operators/op_shape.py +525 -0
- qiskit/quantum_info/operators/operator.py +819 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +727 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +751 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +117 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1175 -0
- qiskit/quantum_info/operators/utils/__init__.py +20 -0
- qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
- qiskit/quantum_info/operators/utils/commutator.py +36 -0
- qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
- qiskit/quantum_info/quaternion.py +156 -0
- qiskit/quantum_info/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +845 -0
- qiskit/quantum_info/states/measures.py +288 -0
- qiskit/quantum_info/states/quantum_state.py +503 -0
- qiskit/quantum_info/states/random.py +157 -0
- qiskit/quantum_info/states/stabilizerstate.py +773 -0
- qiskit/quantum_info/states/statevector.py +958 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +73 -0
- qiskit/result/counts.py +189 -0
- qiskit/result/distributions/__init__.py +17 -0
- qiskit/result/distributions/probability.py +100 -0
- qiskit/result/distributions/quasi.py +154 -0
- qiskit/result/exceptions.py +40 -0
- qiskit/result/mitigation/__init__.py +13 -0
- qiskit/result/mitigation/base_readout_mitigator.py +79 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +269 -0
- qiskit/result/mitigation/local_readout_mitigator.py +320 -0
- qiskit/result/mitigation/utils.py +160 -0
- qiskit/result/models.py +234 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +392 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +40 -0
- qiskit/scheduler/config.py +35 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +137 -0
- qiskit/scheduler/schedule_circuit.py +67 -0
- qiskit/scheduler/sequence.py +102 -0
- qiskit/synthesis/__init__.py +195 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +47 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +57 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +446 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
- qiskit/synthesis/evolution/__init__.py +20 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +143 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/product_formula.py +384 -0
- qiskit/synthesis/evolution/qdrift.py +131 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +155 -0
- qiskit/synthesis/linear/__init__.py +26 -0
- qiskit/synthesis/linear/cnot_synth.py +69 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +276 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +23 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -0
- qiskit/synthesis/one_qubit/__init__.py +15 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
- qiskit/synthesis/permutation/__init__.py +18 -0
- qiskit/synthesis/permutation/permutation_full.py +78 -0
- qiskit/synthesis/permutation/permutation_lnn.py +54 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
- qiskit/synthesis/permutation/permutation_utils.py +16 -0
- qiskit/synthesis/qft/__init__.py +16 -0
- qiskit/synthesis/qft/qft_decompose_full.py +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +78 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +193 -0
- qiskit/synthesis/two_qubit/__init__.py +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +759 -0
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
- qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
- qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
- qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
- qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
- qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
- qiskit/synthesis/unitary/__init__.py +13 -0
- qiskit/synthesis/unitary/aqc/__init__.py +177 -0
- qiskit/synthesis/unitary/aqc/approximate.py +116 -0
- qiskit/synthesis/unitary/aqc/aqc.py +175 -0
- qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
- qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/synthesis/unitary/qsd.py +288 -0
- qiskit/transpiler/__init__.py +1283 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +737 -0
- qiskit/transpiler/passes/__init__.py +310 -0
- qiskit/transpiler/passes/analysis/__init__.py +23 -0
- qiskit/transpiler/passes/analysis/count_ops.py +30 -0
- qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
- qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
- qiskit/transpiler/passes/analysis/depth.py +33 -0
- qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
- qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
- qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
- qiskit/transpiler/passes/analysis/size.py +36 -0
- qiskit/transpiler/passes/analysis/width.py +27 -0
- qiskit/transpiler/passes/basis/__init__.py +19 -0
- qiskit/transpiler/passes/basis/basis_translator.py +693 -0
- qiskit/transpiler/passes/basis/decompose.py +98 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
- qiskit/transpiler/passes/calibration/__init__.py +17 -0
- qiskit/transpiler/passes/calibration/base_builder.py +79 -0
- qiskit/transpiler/passes/calibration/builders.py +20 -0
- qiskit/transpiler/passes/calibration/exceptions.py +22 -0
- qiskit/transpiler/passes/calibration/pulse_gate.py +98 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +160 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +395 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
- qiskit/transpiler/passes/layout/__init__.py +26 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +123 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +202 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +217 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +482 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +220 -0
- qiskit/transpiler/passes/layout/set_layout.py +69 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +263 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
- qiskit/transpiler/passes/optimization/__init__.py +42 -0
- qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
- qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
- qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +88 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +232 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +93 -0
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +260 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -0
- qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
- qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -0
- qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
- qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
- qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +638 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +22 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +166 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +395 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +443 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +153 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +105 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
- qiskit/transpiler/passes/scheduling/asap.py +175 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +308 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +307 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +441 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +160 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +691 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +928 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1055 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +52 -0
- qiskit/transpiler/passes/utils/check_map.py +78 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +65 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +88 -0
- qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
- qiskit/transpiler/passes/utils/error.py +69 -0
- qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +349 -0
- qiskit/transpiler/passes/utils/gates_basis.py +74 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +162 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +490 -0
- qiskit/transpiler/passmanager_config.py +198 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1019 -0
- qiskit/transpiler/preset_passmanagers/common.py +647 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +543 -0
- qiskit/transpiler/preset_passmanagers/level0.py +113 -0
- qiskit/transpiler/preset_passmanagers/level1.py +120 -0
- qiskit/transpiler/preset_passmanagers/level2.py +119 -0
- qiskit/transpiler/preset_passmanagers/level3.py +119 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
- qiskit/transpiler/target.py +1261 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +262 -0
- qiskit/utils/__init__.py +89 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +490 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/multiprocessing.py +56 -0
- qiskit/utils/optionals.py +347 -0
- qiskit/utils/parallel.py +191 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +288 -0
- qiskit/visualization/array.py +204 -0
- qiskit/visualization/bloch.py +778 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +675 -0
- qiskit/visualization/circuit/circuit_visualization.py +726 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2029 -0
- qiskit/visualization/circuit/qcstyle.py +278 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1844 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +481 -0
- qiskit/visualization/dag_visualization.py +316 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1485 -0
- qiskit/visualization/library.py +37 -0
- qiskit/visualization/pass_manager_visualization.py +319 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +901 -0
- qiskit/visualization/pulse_v2/device_info.py +173 -0
- qiskit/visualization/pulse_v2/drawings.py +253 -0
- qiskit/visualization/pulse_v2/events.py +254 -0
- qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
- qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
- qiskit/visualization/pulse_v2/generators/chart.py +208 -0
- qiskit/visualization/pulse_v2/generators/frame.py +436 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
- qiskit/visualization/pulse_v2/interface.py +456 -0
- qiskit/visualization/pulse_v2/layouts.py +387 -0
- qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
- qiskit/visualization/pulse_v2/stylesheet.py +312 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/state_visualization.py +1518 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +457 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +424 -0
- qiskit/visualization/timeline/layouts.py +115 -0
- qiskit/visualization/timeline/plotters/__init__.py +16 -0
- qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
- qiskit/visualization/timeline/plotters/matplotlib.py +192 -0
- qiskit/visualization/timeline/stylesheet.py +301 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +369 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-1.3.0b1.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0b1.dist-info/METADATA +221 -0
- qiskit-1.3.0b1.dist-info/RECORD +825 -0
- qiskit-1.3.0b1.dist-info/WHEEL +5 -0
- qiskit-1.3.0b1.dist-info/entry_points.txt +57 -0
- qiskit-1.3.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,216 @@
|
|
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
|
+
"""Blueprint circuit object."""
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
from abc import ABC, abstractmethod
|
17
|
+
|
18
|
+
from qiskit._accelerate.circuit import CircuitData
|
19
|
+
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
|
20
|
+
from qiskit.circuit.parametertable import ParameterView
|
21
|
+
|
22
|
+
|
23
|
+
class BlueprintCircuit(QuantumCircuit, ABC):
|
24
|
+
"""Blueprint circuit object.
|
25
|
+
|
26
|
+
In many applications it is necessary to pass around the structure a circuit will have without
|
27
|
+
explicitly knowing e.g. its number of qubits, or other missing information. This can be solved
|
28
|
+
by having a circuit that knows how to construct itself, once all information is available.
|
29
|
+
|
30
|
+
This class provides an interface for such circuits. Before internal data of the circuit is
|
31
|
+
accessed, the ``_build`` method is called. There the configuration of the circuit is checked.
|
32
|
+
"""
|
33
|
+
|
34
|
+
def __init__(self, *regs, name: str | None = None) -> None:
|
35
|
+
"""Create a new blueprint circuit."""
|
36
|
+
self._is_initialized = False
|
37
|
+
super().__init__(*regs, name=name)
|
38
|
+
self._qregs: list[QuantumRegister] = []
|
39
|
+
self._cregs: list[ClassicalRegister] = []
|
40
|
+
self._qubit_indices = {}
|
41
|
+
self._is_built = False
|
42
|
+
self._is_initialized = True
|
43
|
+
|
44
|
+
@abstractmethod
|
45
|
+
def _check_configuration(self, raise_on_failure: bool = True) -> bool:
|
46
|
+
"""Check if the current configuration allows the circuit to be built.
|
47
|
+
|
48
|
+
Args:
|
49
|
+
raise_on_failure: If True, raise if the configuration is invalid. If False, return
|
50
|
+
False if the configuration is invalid.
|
51
|
+
|
52
|
+
Returns:
|
53
|
+
True, if the configuration is valid. Otherwise, depending on the value of
|
54
|
+
``raise_on_failure`` an error is raised or False is returned.
|
55
|
+
"""
|
56
|
+
raise NotImplementedError
|
57
|
+
|
58
|
+
@abstractmethod
|
59
|
+
def _build(self) -> None:
|
60
|
+
"""Build the circuit."""
|
61
|
+
if self._is_built:
|
62
|
+
return
|
63
|
+
|
64
|
+
# check whether the configuration is valid
|
65
|
+
self._check_configuration()
|
66
|
+
self._is_built = True
|
67
|
+
|
68
|
+
def _invalidate(self) -> None:
|
69
|
+
"""Invalidate the current circuit build."""
|
70
|
+
self._data = CircuitData(self._data.qubits, self._data.clbits)
|
71
|
+
self.global_phase = 0
|
72
|
+
self._is_built = False
|
73
|
+
|
74
|
+
@property
|
75
|
+
def qregs(self):
|
76
|
+
"""A list of the quantum registers associated with the circuit."""
|
77
|
+
return self._qregs
|
78
|
+
|
79
|
+
@qregs.setter
|
80
|
+
def qregs(self, qregs):
|
81
|
+
"""Set the quantum registers associated with the circuit."""
|
82
|
+
if not self._is_initialized:
|
83
|
+
# Workaround to ignore calls from QuantumCircuit.__init__() which
|
84
|
+
# doesn't expect 'qregs' to be an overridden property!
|
85
|
+
return
|
86
|
+
self._qregs = []
|
87
|
+
self._ancillas = []
|
88
|
+
self._qubit_indices = {}
|
89
|
+
self._data = CircuitData(clbits=self._data.clbits)
|
90
|
+
self.global_phase = 0
|
91
|
+
self._is_built = False
|
92
|
+
|
93
|
+
self.add_register(*qregs)
|
94
|
+
|
95
|
+
@property
|
96
|
+
def data(self):
|
97
|
+
if not self._is_built:
|
98
|
+
self._build()
|
99
|
+
return super().data
|
100
|
+
|
101
|
+
def decompose(self, gates_to_decompose=None, reps=1):
|
102
|
+
if not self._is_built:
|
103
|
+
self._build()
|
104
|
+
return super().decompose(gates_to_decompose, reps)
|
105
|
+
|
106
|
+
def draw(self, *args, **kwargs):
|
107
|
+
if not self._is_built:
|
108
|
+
self._build()
|
109
|
+
return super().draw(*args, **kwargs)
|
110
|
+
|
111
|
+
@property
|
112
|
+
def num_parameters(self) -> int:
|
113
|
+
if not self._is_built:
|
114
|
+
self._build()
|
115
|
+
return super().num_parameters
|
116
|
+
|
117
|
+
@property
|
118
|
+
def parameters(self) -> ParameterView:
|
119
|
+
if not self._is_built:
|
120
|
+
self._build()
|
121
|
+
return super().parameters
|
122
|
+
|
123
|
+
def _append(self, instruction, _qargs=None, _cargs=None, *, _standard_gate=False):
|
124
|
+
if not self._is_built:
|
125
|
+
self._build()
|
126
|
+
return super()._append(instruction, _qargs, _cargs, _standard_gate=_standard_gate)
|
127
|
+
|
128
|
+
def compose(
|
129
|
+
self,
|
130
|
+
other,
|
131
|
+
qubits=None,
|
132
|
+
clbits=None,
|
133
|
+
front=False,
|
134
|
+
inplace=False,
|
135
|
+
wrap=False,
|
136
|
+
*,
|
137
|
+
copy=True,
|
138
|
+
var_remap=None,
|
139
|
+
inline_captures=False,
|
140
|
+
):
|
141
|
+
if not self._is_built:
|
142
|
+
self._build()
|
143
|
+
return super().compose(
|
144
|
+
other,
|
145
|
+
qubits,
|
146
|
+
clbits,
|
147
|
+
front,
|
148
|
+
inplace,
|
149
|
+
wrap,
|
150
|
+
copy=copy,
|
151
|
+
var_remap=var_remap,
|
152
|
+
inline_captures=False,
|
153
|
+
)
|
154
|
+
|
155
|
+
def inverse(self, annotated: bool = False):
|
156
|
+
if not self._is_built:
|
157
|
+
self._build()
|
158
|
+
return super().inverse(annotated=annotated)
|
159
|
+
|
160
|
+
def __len__(self):
|
161
|
+
return len(self.data)
|
162
|
+
|
163
|
+
def __getitem__(self, item):
|
164
|
+
return self.data[item]
|
165
|
+
|
166
|
+
def size(self, *args, **kwargs):
|
167
|
+
if not self._is_built:
|
168
|
+
self._build()
|
169
|
+
return super().size(*args, **kwargs)
|
170
|
+
|
171
|
+
def to_instruction(self, parameter_map=None, label=None):
|
172
|
+
if not self._is_built:
|
173
|
+
self._build()
|
174
|
+
return super().to_instruction(parameter_map, label=label)
|
175
|
+
|
176
|
+
def to_gate(self, parameter_map=None, label=None):
|
177
|
+
if not self._is_built:
|
178
|
+
self._build()
|
179
|
+
return super().to_gate(parameter_map, label=label)
|
180
|
+
|
181
|
+
def depth(self, *args, **kwargs):
|
182
|
+
if not self._is_built:
|
183
|
+
self._build()
|
184
|
+
return super().depth(*args, **kwargs)
|
185
|
+
|
186
|
+
def count_ops(self):
|
187
|
+
if not self._is_built:
|
188
|
+
self._build()
|
189
|
+
return super().count_ops()
|
190
|
+
|
191
|
+
def num_nonlocal_gates(self):
|
192
|
+
if not self._is_built:
|
193
|
+
self._build()
|
194
|
+
return super().num_nonlocal_gates()
|
195
|
+
|
196
|
+
def num_connected_components(self, unitary_only=False):
|
197
|
+
if not self._is_built:
|
198
|
+
self._build()
|
199
|
+
return super().num_connected_components(unitary_only=unitary_only)
|
200
|
+
|
201
|
+
def copy_empty_like(self, name=None, *, vars_mode="alike"):
|
202
|
+
if not self._is_built:
|
203
|
+
self._build()
|
204
|
+
cpy = super().copy_empty_like(name=name, vars_mode=vars_mode)
|
205
|
+
# The base `copy_empty_like` will typically trigger code that `BlueprintCircuit` treats as
|
206
|
+
# an "invalidation", so we have to manually restore properties deleted by that that
|
207
|
+
# `copy_empty_like` is supposed to propagate.
|
208
|
+
cpy.global_phase = self.global_phase
|
209
|
+
return cpy
|
210
|
+
|
211
|
+
def copy(self, name=None):
|
212
|
+
if not self._is_built:
|
213
|
+
self._build()
|
214
|
+
circuit_copy = super().copy(name=name)
|
215
|
+
circuit_copy._is_built = self._is_built
|
216
|
+
return circuit_copy
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""The Boolean logic circuit library."""
|
14
|
+
|
15
|
+
from .quantum_and import AND
|
16
|
+
from .quantum_or import OR
|
17
|
+
from .quantum_xor import XOR
|
18
|
+
from .inner_product import InnerProduct
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
|
14
|
+
"""InnerProduct circuit."""
|
15
|
+
|
16
|
+
|
17
|
+
from qiskit.circuit import QuantumRegister, QuantumCircuit
|
18
|
+
|
19
|
+
|
20
|
+
class InnerProduct(QuantumCircuit):
|
21
|
+
r"""A 2n-qubit Boolean function that computes the inner product of
|
22
|
+
two n-qubit vectors over :math:`F_2`.
|
23
|
+
|
24
|
+
This implementation is a phase oracle which computes the following transform.
|
25
|
+
|
26
|
+
.. math::
|
27
|
+
|
28
|
+
\mathcal{IP}_{2n} : F_2^{2n} \rightarrow {-1, 1}
|
29
|
+
\mathcal{IP}_{2n}(x_1, \cdots, x_n, y_1, \cdots, y_n) = (-1)^{x.y}
|
30
|
+
|
31
|
+
The corresponding unitary is a diagonal, which induces a -1 phase on any inputs
|
32
|
+
where the inner product of the top and bottom registers is 1. Otherwise it keeps
|
33
|
+
the input intact.
|
34
|
+
|
35
|
+
.. parsed-literal::
|
36
|
+
|
37
|
+
|
38
|
+
q0_0: ─■──────────
|
39
|
+
│
|
40
|
+
q0_1: ─┼──■───────
|
41
|
+
│ │
|
42
|
+
q0_2: ─┼──┼──■────
|
43
|
+
│ │ │
|
44
|
+
q0_3: ─┼──┼──┼──■─
|
45
|
+
│ │ │ │
|
46
|
+
q1_0: ─■──┼──┼──┼─
|
47
|
+
│ │ │
|
48
|
+
q1_1: ────■──┼──┼─
|
49
|
+
│ │
|
50
|
+
q1_2: ───────■──┼─
|
51
|
+
│
|
52
|
+
q1_3: ──────────■─
|
53
|
+
|
54
|
+
|
55
|
+
Reference Circuit:
|
56
|
+
.. plot::
|
57
|
+
|
58
|
+
from qiskit.circuit.library import InnerProduct
|
59
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
60
|
+
circuit = InnerProduct(4)
|
61
|
+
_generate_circuit_library_visualization(circuit)
|
62
|
+
"""
|
63
|
+
|
64
|
+
def __init__(self, num_qubits: int) -> None:
|
65
|
+
"""Return a circuit to compute the inner product of 2 n-qubit registers.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
num_qubits: width of top and bottom registers (half total circuit width)
|
69
|
+
"""
|
70
|
+
qr_a = QuantumRegister(num_qubits)
|
71
|
+
qr_b = QuantumRegister(num_qubits)
|
72
|
+
inner = QuantumCircuit(qr_a, qr_b, name="inner_product")
|
73
|
+
|
74
|
+
for i in range(num_qubits):
|
75
|
+
inner.cz(qr_a[i], qr_b[i])
|
76
|
+
|
77
|
+
super().__init__(*inner.qregs, name="inner_product")
|
78
|
+
self.compose(inner.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
|
14
|
+
"""Implementations of boolean logic quantum circuits."""
|
15
|
+
from __future__ import annotations
|
16
|
+
|
17
|
+
from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister
|
18
|
+
from qiskit.circuit.library.standard_gates import MCXGate
|
19
|
+
|
20
|
+
|
21
|
+
class AND(QuantumCircuit):
|
22
|
+
r"""A circuit implementing the logical AND operation on a number of qubits.
|
23
|
+
|
24
|
+
For the AND operation the state :math:`|1\rangle` is interpreted as ``True``. The result
|
25
|
+
qubit is flipped, if the state of all variable qubits is ``True``. In this format, the AND
|
26
|
+
operation equals a multi-controlled X gate, which is controlled on all variable qubits.
|
27
|
+
Using a list of flags however, qubits can be skipped or negated. Practically, the flags
|
28
|
+
allow to skip controls or to apply pre- and post-X gates to the negated qubits.
|
29
|
+
|
30
|
+
The AND gate without special flags equals the multi-controlled-X gate:
|
31
|
+
|
32
|
+
.. plot::
|
33
|
+
|
34
|
+
from qiskit.circuit.library import AND
|
35
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
36
|
+
circuit = AND(5)
|
37
|
+
_generate_circuit_library_visualization(circuit)
|
38
|
+
|
39
|
+
Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
|
40
|
+
return ``True`` if the first qubit is ``False`` and the last two are ``True`` we use the flags
|
41
|
+
``[-1, 0, 0, 1, 1]``.
|
42
|
+
|
43
|
+
.. plot::
|
44
|
+
|
45
|
+
from qiskit.circuit.library import AND
|
46
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
47
|
+
circuit = AND(5, flags=[-1, 0, 0, 1, 1])
|
48
|
+
_generate_circuit_library_visualization(circuit)
|
49
|
+
|
50
|
+
"""
|
51
|
+
|
52
|
+
def __init__(
|
53
|
+
self,
|
54
|
+
num_variable_qubits: int,
|
55
|
+
flags: list[int] | None = None,
|
56
|
+
mcx_mode: str = "noancilla",
|
57
|
+
) -> None:
|
58
|
+
"""Create a new logical AND circuit.
|
59
|
+
|
60
|
+
Args:
|
61
|
+
num_variable_qubits: The qubits of which the OR is computed. The result will be written
|
62
|
+
into an additional result qubit.
|
63
|
+
flags: A list of +1/0/-1 marking negations or omissions of qubits.
|
64
|
+
mcx_mode: The mode to be used to implement the multi-controlled X gate.
|
65
|
+
"""
|
66
|
+
self.num_variable_qubits = num_variable_qubits
|
67
|
+
self.flags = flags
|
68
|
+
|
69
|
+
# add registers
|
70
|
+
qr_variable = QuantumRegister(num_variable_qubits, name="variable")
|
71
|
+
qr_result = QuantumRegister(1, name="result")
|
72
|
+
|
73
|
+
circuit = QuantumCircuit(qr_variable, qr_result, name="and")
|
74
|
+
|
75
|
+
# determine the control qubits: all that have a nonzero flag
|
76
|
+
flags = flags or [1] * num_variable_qubits
|
77
|
+
control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
|
78
|
+
|
79
|
+
# determine the qubits that need to be flipped (if a flag is < 0)
|
80
|
+
flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag < 0]
|
81
|
+
|
82
|
+
# determine the number of ancillas
|
83
|
+
num_ancillas = MCXGate.get_num_ancilla_qubits(len(control_qubits), mode=mcx_mode)
|
84
|
+
if num_ancillas > 0:
|
85
|
+
qr_ancilla = AncillaRegister(num_ancillas, "ancilla")
|
86
|
+
circuit.add_register(qr_ancilla)
|
87
|
+
else:
|
88
|
+
qr_ancilla = AncillaRegister(0)
|
89
|
+
|
90
|
+
if len(flip_qubits) > 0:
|
91
|
+
circuit.x(flip_qubits)
|
92
|
+
circuit.mcx(control_qubits, qr_result[:], qr_ancilla[:], mode=mcx_mode)
|
93
|
+
if len(flip_qubits) > 0:
|
94
|
+
circuit.x(flip_qubits)
|
95
|
+
|
96
|
+
super().__init__(*circuit.qregs, name="and")
|
97
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
|
14
|
+
"""Implementations of boolean logic quantum circuits."""
|
15
|
+
from __future__ import annotations
|
16
|
+
from typing import List, Optional
|
17
|
+
|
18
|
+
from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister
|
19
|
+
from qiskit.circuit.library.standard_gates import MCXGate
|
20
|
+
|
21
|
+
|
22
|
+
class OR(QuantumCircuit):
|
23
|
+
r"""A circuit implementing the logical OR operation on a number of qubits.
|
24
|
+
|
25
|
+
For the OR operation the state :math:`|1\rangle` is interpreted as ``True``. The result
|
26
|
+
qubit is flipped, if the state of any variable qubit is ``True``. The OR is implemented using
|
27
|
+
a multi-open-controlled X gate (i.e. flips if the state is :math:`|0\rangle`) and
|
28
|
+
applying an X gate on the result qubit.
|
29
|
+
Using a list of flags, qubits can be skipped or negated.
|
30
|
+
|
31
|
+
The OR gate without special flags:
|
32
|
+
|
33
|
+
.. plot::
|
34
|
+
|
35
|
+
from qiskit.circuit.library import OR
|
36
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
37
|
+
circuit = OR(5)
|
38
|
+
_generate_circuit_library_visualization(circuit)
|
39
|
+
|
40
|
+
Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
|
41
|
+
return ``True`` if the first qubit is ``False`` or one of the last two are ``True`` we use the
|
42
|
+
flags ``[-1, 0, 0, 1, 1]``.
|
43
|
+
|
44
|
+
.. plot::
|
45
|
+
|
46
|
+
from qiskit.circuit.library import OR
|
47
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
48
|
+
circuit = OR(5, flags=[-1, 0, 0, 1, 1])
|
49
|
+
_generate_circuit_library_visualization(circuit)
|
50
|
+
|
51
|
+
"""
|
52
|
+
|
53
|
+
def __init__(
|
54
|
+
self,
|
55
|
+
num_variable_qubits: int,
|
56
|
+
flags: Optional[List[int]] = None,
|
57
|
+
mcx_mode: str = "noancilla",
|
58
|
+
) -> None:
|
59
|
+
"""Create a new logical OR circuit.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
num_variable_qubits: The qubits of which the OR is computed. The result will be written
|
63
|
+
into an additional result qubit.
|
64
|
+
flags: A list of +1/0/-1 marking negations or omissions of qubits.
|
65
|
+
mcx_mode: The mode to be used to implement the multi-controlled X gate.
|
66
|
+
"""
|
67
|
+
self.num_variable_qubits = num_variable_qubits
|
68
|
+
self.flags = flags
|
69
|
+
|
70
|
+
# add registers
|
71
|
+
qr_variable = QuantumRegister(num_variable_qubits, name="variable")
|
72
|
+
qr_result = QuantumRegister(1, name="result")
|
73
|
+
circuit = QuantumCircuit(qr_variable, qr_result, name="or")
|
74
|
+
|
75
|
+
# determine the control qubits: all that have a nonzero flag
|
76
|
+
flags = flags or [1] * num_variable_qubits
|
77
|
+
control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
|
78
|
+
|
79
|
+
# determine the qubits that need to be flipped (if a flag is > 0)
|
80
|
+
flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag > 0]
|
81
|
+
|
82
|
+
# determine the number of ancillas
|
83
|
+
num_ancillas = MCXGate.get_num_ancilla_qubits(len(control_qubits), mode=mcx_mode)
|
84
|
+
if num_ancillas > 0:
|
85
|
+
qr_ancilla = AncillaRegister(num_ancillas, "ancilla")
|
86
|
+
circuit.add_register(qr_ancilla)
|
87
|
+
else:
|
88
|
+
qr_ancilla = AncillaRegister(0)
|
89
|
+
|
90
|
+
circuit.x(qr_result)
|
91
|
+
if len(flip_qubits) > 0:
|
92
|
+
circuit.x(flip_qubits)
|
93
|
+
circuit.mcx(control_qubits, qr_result[:], qr_ancilla[:], mode=mcx_mode)
|
94
|
+
if len(flip_qubits) > 0:
|
95
|
+
circuit.x(flip_qubits)
|
96
|
+
|
97
|
+
super().__init__(*circuit.qregs, name="or")
|
98
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
|
14
|
+
"""XOR circuit."""
|
15
|
+
|
16
|
+
from typing import Optional
|
17
|
+
|
18
|
+
import numpy as np
|
19
|
+
from qiskit.circuit import QuantumCircuit
|
20
|
+
from qiskit.circuit.exceptions import CircuitError
|
21
|
+
|
22
|
+
|
23
|
+
class XOR(QuantumCircuit):
|
24
|
+
"""An n_qubit circuit for bitwise xor-ing the input with some integer ``amount``.
|
25
|
+
|
26
|
+
The ``amount`` is xor-ed in bitstring form with the input.
|
27
|
+
|
28
|
+
This circuit can also represent addition by ``amount`` over the finite field GF(2).
|
29
|
+
"""
|
30
|
+
|
31
|
+
def __init__(
|
32
|
+
self,
|
33
|
+
num_qubits: int,
|
34
|
+
amount: Optional[int] = None,
|
35
|
+
seed: Optional[int] = None,
|
36
|
+
) -> None:
|
37
|
+
"""Return a circuit implementing bitwise xor.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
num_qubits: the width of circuit.
|
41
|
+
amount: the xor amount in decimal form.
|
42
|
+
seed: random seed in case a random xor is requested.
|
43
|
+
|
44
|
+
Raises:
|
45
|
+
CircuitError: if the xor bitstring exceeds available qubits.
|
46
|
+
|
47
|
+
Reference Circuit:
|
48
|
+
.. plot::
|
49
|
+
|
50
|
+
from qiskit.circuit.library import XOR
|
51
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
52
|
+
circuit = XOR(5, seed=42)
|
53
|
+
_generate_circuit_library_visualization(circuit)
|
54
|
+
"""
|
55
|
+
circuit = QuantumCircuit(num_qubits, name="xor")
|
56
|
+
|
57
|
+
if amount is not None:
|
58
|
+
if len(bin(amount)[2:]) > num_qubits:
|
59
|
+
raise CircuitError("Bits in 'amount' exceed circuit width")
|
60
|
+
else:
|
61
|
+
rng = np.random.default_rng(seed)
|
62
|
+
amount = rng.integers(0, 2**num_qubits)
|
63
|
+
|
64
|
+
for i in range(num_qubits):
|
65
|
+
bit = amount & 1
|
66
|
+
amount = amount >> 1
|
67
|
+
if bit == 1:
|
68
|
+
circuit.x(i)
|
69
|
+
|
70
|
+
super().__init__(*circuit.qregs, name="xor")
|
71
|
+
self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Data-encoding circuits
|
15
|
+
======================
|
16
|
+
|
17
|
+
In machine learning, pattern recognition and image processing, a **data-encoding circuit**
|
18
|
+
starts from an initial set of measured data and builds derived values (also known as
|
19
|
+
**features**) intended to be informative and non-redundant, facilitating the subsequent
|
20
|
+
learning and generalization steps, and in some cases leading to better human
|
21
|
+
interpretations.
|
22
|
+
|
23
|
+
A feature map is related to **dimensionality reduction**; it involves reducing the amount of
|
24
|
+
resources required to describe a large set of data. When performing analysis of complex data,
|
25
|
+
one of the major problems stems from the number of variables involved. Analysis with a large
|
26
|
+
number of variables generally requires a large amount of memory and computation power, and may
|
27
|
+
even cause a classification algorithm to overfit to training samples and generalize poorly to new
|
28
|
+
samples.
|
29
|
+
|
30
|
+
When the input data to an algorithm is too large to be processed and is suspected to be redundant
|
31
|
+
(for example, the same measurement is provided in both pounds and kilograms), then it can be
|
32
|
+
transformed into a reduced set of features, named a **feature vector**.
|
33
|
+
|
34
|
+
The process of determining a subset of the initial features is called **feature selection**.
|
35
|
+
The selected features are expected to contain the relevant information from the input data,
|
36
|
+
so that the desired task can be performed by using the reduced representation instead
|
37
|
+
of the complete initial data.
|
38
|
+
|
39
|
+
"""
|
40
|
+
|
41
|
+
from .pauli_feature_map import PauliFeatureMap
|
42
|
+
from .z_feature_map import ZFeatureMap
|
43
|
+
from .zz_feature_map import ZZFeatureMap
|
44
|
+
from .state_preparation import StatePreparation, UniformSuperpositionGate
|
45
|
+
from .initializer import Initialize
|
46
|
+
|
47
|
+
__all__ = [
|
48
|
+
"PauliFeatureMap",
|
49
|
+
"ZFeatureMap",
|
50
|
+
"ZZFeatureMap",
|
51
|
+
"StatePreparation",
|
52
|
+
"UniformSuperpositionGate",
|
53
|
+
"Initialize",
|
54
|
+
]
|