qiskit 1.3.0__cp39-abi3-macosx_11_0_arm64.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 +146 -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 +367 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1313 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -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 +50 -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 +511 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +171 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +123 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +263 -0
- qiskit/circuit/instruction.py +697 -0
- qiskit/circuit/instructionset.py +179 -0
- qiskit/circuit/library/__init__.py +668 -0
- qiskit/circuit/library/arithmetic/__init__.py +34 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +210 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +123 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +129 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +95 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +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 +17 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +145 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +192 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -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 +313 -0
- qiskit/circuit/library/blueprintcircuit.py +280 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +155 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +200 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +202 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +165 -0
- qiskit/circuit/library/data_preparation/__init__.py +57 -0
- qiskit/circuit/library/data_preparation/_z_feature_map.py +115 -0
- qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +656 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/fourier_checking.py +158 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +159 -0
- qiskit/circuit/library/generalized_gates/gms.py +174 -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 +318 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +316 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +194 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -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 +169 -0
- qiskit/circuit/library/grover_operator.py +579 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +161 -0
- qiskit/circuit/library/iqp.py +175 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +277 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +515 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +297 -0
- qiskit/circuit/library/n_local/n_local.py +1472 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +243 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +366 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +306 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +182 -0
- qiskit/circuit/library/pauli_evolution.py +186 -0
- qiskit/circuit/library/phase_estimation.py +175 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +167 -0
- qiskit/circuit/library/standard_gates/__init__.py +142 -0
- qiskit/circuit/library/standard_gates/dcx.py +78 -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 +258 -0
- qiskit/circuit/library/standard_gates/i.py +76 -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 +441 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +303 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +298 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +319 -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 +315 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +403 -0
- qiskit/circuit/library/standard_gates/u1.py +501 -0
- qiskit/circuit/library/standard_gates/u2.py +149 -0
- qiskit/circuit/library/standard_gates/u3.py +436 -0
- qiskit/circuit/library/standard_gates/x.py +1529 -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 +262 -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 +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +35 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +38 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +40 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +42 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +41 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +34 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +40 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +45 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +44 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +44 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +47 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +54 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +45 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +69 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +59 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +59 -0
- qiskit/circuit/measure.py +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +178 -0
- qiskit/circuit/parameterexpression.py +692 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6829 -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 +606 -0
- qiskit/circuit/store.py +97 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +681 -0
- qiskit/compiler/scheduler.py +109 -0
- qiskit/compiler/sequencer.py +71 -0
- qiskit/compiler/transpiler.py +533 -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 +79 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +46 -0
- qiskit/converters/dagdependency_to_dag.py +54 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +646 -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 +486 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +339 -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 +173 -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 +667 -0
- qiskit/providers/backend_compat.py +472 -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 +821 -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 +49 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1035 -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 +305 -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 +2254 -0
- qiskit/pulse/calibration_entries.py +381 -0
- qiskit/pulse/channels.py +227 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +45 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +424 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +150 -0
- qiskit/pulse/instructions/delay.py +71 -0
- qiskit/pulse/instructions/directives.py +154 -0
- qiskit/pulse/instructions/frequency.py +135 -0
- qiskit/pulse/instructions/instruction.py +270 -0
- qiskit/pulse/instructions/phase.py +152 -0
- qiskit/pulse/instructions/play.py +99 -0
- qiskit/pulse/instructions/reference.py +100 -0
- qiskit/pulse/instructions/snapshot.py +82 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +148 -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 +1988 -0
- qiskit/pulse/library/waveform.py +136 -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 +1854 -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 +498 -0
- qiskit/pulse/transforms/dag.py +122 -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 +372 -0
- qiskit/qasm2/parse.py +452 -0
- qiskit/qasm3/__init__.py +367 -0
- qiskit/qasm3/ast.py +738 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1299 -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 +897 -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 +1822 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1475 -0
- qiskit/qpy/binary_io/schedules.py +635 -0
- qiskit/qpy/binary_io/value.py +1025 -0
- qiskit/qpy/common.py +350 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +401 -0
- qiskit/qpy/interface.py +377 -0
- qiskit/qpy/type_keys.py +572 -0
- qiskit/quantum_info/__init__.py +162 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +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 +475 -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 +865 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +719 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +753 -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 +1196 -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 +277 -0
- qiskit/result/mitigation/local_readout_mitigator.py +328 -0
- qiskit/result/mitigation/utils.py +217 -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 +37 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +140 -0
- qiskit/scheduler/schedule_circuit.py +69 -0
- qiskit/scheduler/sequence.py +104 -0
- qiskit/synthesis/__init__.py +220 -0
- qiskit/synthesis/arithmetic/__init__.py +16 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +46 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +58 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +447 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +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 +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +117 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +311 -0
- qiskit/synthesis/evolution/qdrift.py +138 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +215 -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 +24 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -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 +97 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +79 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +194 -0
- qiskit/synthesis/two_qubit/__init__.py +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +700 -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 +1290 -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 +312 -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 +137 -0
- qiskit/transpiler/passes/basis/decompose.py +131 -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 +100 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +164 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +411 -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 +219 -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 +487 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +225 -0
- qiskit/transpiler/passes/layout/set_layout.py +69 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +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 +43 -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 +104 -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 +149 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +162 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +91 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +95 -0
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +254 -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_identity_equiv.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/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 +447 -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 +107 -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 +310 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +312 -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 +452 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +82 -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 +94 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +165 -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 +854 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +1559 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1076 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -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 +93 -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 +86 -0
- qiskit/transpiler/passes/utils/gates_basis.py +51 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +163 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +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 +216 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1045 -0
- qiskit/transpiler/preset_passmanagers/common.py +649 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +626 -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 +1319 -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/deprecate_pulse.py +119 -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 +727 -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 +308 -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 +458 -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 +480 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +436 -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.0.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0.dist-info/METADATA +222 -0
- qiskit-1.3.0.dist-info/RECORD +836 -0
- qiskit-1.3.0.dist-info/WHEEL +5 -0
- qiskit-1.3.0.dist-info/entry_points.txt +76 -0
- qiskit-1.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,697 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
A generic quantum instruction.
|
15
|
+
|
16
|
+
Instructions can be implementable on hardware (u, cx, etc.) or in simulation
|
17
|
+
(snapshot, noise, etc.).
|
18
|
+
|
19
|
+
Instructions can be unitary (a.k.a Gate) or non-unitary.
|
20
|
+
|
21
|
+
Instructions are identified by the following:
|
22
|
+
|
23
|
+
name: A string to identify the type of instruction.
|
24
|
+
Used to request a specific instruction on the backend, or in visualizing circuits.
|
25
|
+
|
26
|
+
num_qubits, num_clbits: dimensions of the instruction.
|
27
|
+
|
28
|
+
params: List of parameters to specialize a specific instruction instance.
|
29
|
+
|
30
|
+
Instructions do not have any context about where they are in a circuit (which qubits/clbits).
|
31
|
+
The circuit itself keeps this context.
|
32
|
+
"""
|
33
|
+
|
34
|
+
from __future__ import annotations
|
35
|
+
|
36
|
+
import copy
|
37
|
+
import warnings
|
38
|
+
from itertools import zip_longest
|
39
|
+
import math
|
40
|
+
from typing import List, Type
|
41
|
+
|
42
|
+
import numpy
|
43
|
+
|
44
|
+
from qiskit.circuit.exceptions import CircuitError
|
45
|
+
from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
|
46
|
+
from qiskit.qobj.qasm_qobj import QasmQobjInstruction
|
47
|
+
from qiskit.circuit.parameter import ParameterExpression
|
48
|
+
from qiskit.circuit.operation import Operation
|
49
|
+
|
50
|
+
from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier
|
51
|
+
from qiskit.utils import deprecate_func
|
52
|
+
|
53
|
+
_CUTOFF_PRECISION = 1e-10
|
54
|
+
|
55
|
+
|
56
|
+
class Instruction(Operation):
|
57
|
+
"""Generic quantum instruction."""
|
58
|
+
|
59
|
+
# Class attribute to treat like barrier for transpiler, unroller, drawer
|
60
|
+
# NOTE: Using this attribute may change in the future (See issue # 5811)
|
61
|
+
_directive = False
|
62
|
+
_standard_gate = None
|
63
|
+
|
64
|
+
def __init__(self, name, num_qubits, num_clbits, params, duration=None, unit="dt", label=None):
|
65
|
+
"""Create a new instruction.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
name (str): instruction name
|
69
|
+
num_qubits (int): instruction's qubit width
|
70
|
+
num_clbits (int): instruction's clbit width
|
71
|
+
params (list[int|float|complex|str|ndarray|list|ParameterExpression]):
|
72
|
+
list of parameters
|
73
|
+
duration (int or float): instruction's duration. it must be integer if ``unit`` is 'dt'
|
74
|
+
unit (str): time unit of duration
|
75
|
+
label (str or None): An optional label for identifying the instruction.
|
76
|
+
|
77
|
+
Raises:
|
78
|
+
CircuitError: when the register is not in the correct format.
|
79
|
+
TypeError: when the optional label is provided, but it is not a string.
|
80
|
+
"""
|
81
|
+
if not isinstance(num_qubits, int) or not isinstance(num_clbits, int):
|
82
|
+
raise CircuitError("num_qubits and num_clbits must be integer.")
|
83
|
+
if num_qubits < 0 or num_clbits < 0:
|
84
|
+
raise CircuitError(
|
85
|
+
f"bad instruction dimensions: {num_qubits} qubits, {num_clbits} clbits."
|
86
|
+
)
|
87
|
+
self._name = name
|
88
|
+
self._num_qubits = num_qubits
|
89
|
+
self._num_clbits = num_clbits
|
90
|
+
|
91
|
+
self._params = [] # a list of gate params stored
|
92
|
+
# Custom instruction label
|
93
|
+
# NOTE: The conditional statement checking if the `_label` attribute is
|
94
|
+
# already set is a temporary work around that can be removed after
|
95
|
+
# the next stable qiskit-aer release
|
96
|
+
if not hasattr(self, "_label"):
|
97
|
+
if label is not None and not isinstance(label, str):
|
98
|
+
raise TypeError("label expects a string or None")
|
99
|
+
self._label = label
|
100
|
+
# tuple (ClassicalRegister, int), tuple (Clbit, bool) or tuple (Clbit, int)
|
101
|
+
# when the instruction has a conditional ("if")
|
102
|
+
self._condition = None
|
103
|
+
# list of instructions (and their contexts) that this instruction is composed of
|
104
|
+
# empty definition means opaque or fundamental instruction
|
105
|
+
self._definition = None
|
106
|
+
if duration is not None:
|
107
|
+
warnings.warn(
|
108
|
+
"Setting a custom duration per instruction is deprecated as of Qiskit "
|
109
|
+
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
110
|
+
"is defined in a backend's Target object.",
|
111
|
+
DeprecationWarning,
|
112
|
+
stacklevel=2,
|
113
|
+
)
|
114
|
+
self._duration = duration
|
115
|
+
if unit is not None and unit != "dt":
|
116
|
+
warnings.warn(
|
117
|
+
"Setting a custom unit for duration per instruction is deprecated as of Qiskit "
|
118
|
+
"1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
|
119
|
+
"is defined in a backend's Target object which has a fixed unit in seconds.",
|
120
|
+
DeprecationWarning,
|
121
|
+
stacklevel=2,
|
122
|
+
)
|
123
|
+
self._unit = unit
|
124
|
+
|
125
|
+
self.params = params # must be at last (other properties may be required for validation)
|
126
|
+
|
127
|
+
@property
|
128
|
+
def base_class(self) -> Type[Instruction]:
|
129
|
+
"""Get the base class of this instruction. This is guaranteed to be in the inheritance tree
|
130
|
+
of ``self``.
|
131
|
+
|
132
|
+
The "base class" of an instruction is the lowest class in its inheritance tree that the
|
133
|
+
object should be considered entirely compatible with for _all_ circuit applications. This
|
134
|
+
typically means that the subclass is defined purely to offer some sort of programmer
|
135
|
+
convenience over the base class, and the base class is the "true" class for a behavioral
|
136
|
+
perspective. In particular, you should *not* override :attr:`base_class` if you are
|
137
|
+
defining a custom version of an instruction that will be implemented differently by
|
138
|
+
hardware, such as an alternative measurement strategy, or a version of a parametrized gate
|
139
|
+
with a particular set of parameters for the purposes of distinguishing it in a
|
140
|
+
:class:`.Target` from the full parametrized gate.
|
141
|
+
|
142
|
+
This is often exactly equivalent to ``type(obj)``, except in the case of singleton instances
|
143
|
+
of standard-library instructions. These singleton instances are special subclasses of their
|
144
|
+
base class, and this property will return that base. For example::
|
145
|
+
|
146
|
+
>>> isinstance(XGate(), XGate)
|
147
|
+
True
|
148
|
+
>>> type(XGate()) is XGate
|
149
|
+
False
|
150
|
+
>>> XGate().base_class is XGate
|
151
|
+
True
|
152
|
+
|
153
|
+
In general, you should not rely on the precise class of an instruction; within a given
|
154
|
+
circuit, it is expected that :attr:`Instruction.name` should be a more suitable
|
155
|
+
discriminator in most situations.
|
156
|
+
"""
|
157
|
+
return type(self)
|
158
|
+
|
159
|
+
@property
|
160
|
+
def mutable(self) -> bool:
|
161
|
+
"""Is this instance is a mutable unique instance or not.
|
162
|
+
|
163
|
+
If this attribute is ``False`` the gate instance is a shared singleton
|
164
|
+
and is not mutable.
|
165
|
+
"""
|
166
|
+
return True
|
167
|
+
|
168
|
+
def to_mutable(self):
|
169
|
+
"""Return a mutable copy of this gate.
|
170
|
+
|
171
|
+
This method will return a new mutable copy of this gate instance.
|
172
|
+
If a singleton instance is being used this will be a new unique
|
173
|
+
instance that can be mutated. If the instance is already mutable it
|
174
|
+
will be a deepcopy of that instance.
|
175
|
+
"""
|
176
|
+
return self.copy()
|
177
|
+
|
178
|
+
@property
|
179
|
+
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
180
|
+
def condition(self):
|
181
|
+
"""The classical condition on the instruction."""
|
182
|
+
return self._condition
|
183
|
+
|
184
|
+
@condition.setter
|
185
|
+
def condition(self, condition):
|
186
|
+
self._condition = condition
|
187
|
+
|
188
|
+
def __eq__(self, other):
|
189
|
+
"""Two instructions are the same if they have the same name,
|
190
|
+
same dimensions, and same params.
|
191
|
+
|
192
|
+
Args:
|
193
|
+
other (instruction): other instruction
|
194
|
+
|
195
|
+
Returns:
|
196
|
+
bool: are self and other equal.
|
197
|
+
"""
|
198
|
+
if ( # pylint: disable=too-many-boolean-expressions
|
199
|
+
not isinstance(other, Instruction)
|
200
|
+
or self.base_class is not other.base_class
|
201
|
+
or self.name != other.name
|
202
|
+
or self.num_qubits != other.num_qubits
|
203
|
+
or self.num_clbits != other.num_clbits
|
204
|
+
or self.definition != other.definition
|
205
|
+
):
|
206
|
+
return False
|
207
|
+
|
208
|
+
for self_param, other_param in zip_longest(self.params, other.params):
|
209
|
+
if isinstance(self_param, numpy.ndarray):
|
210
|
+
if numpy.array_equal(self_param, other_param):
|
211
|
+
continue
|
212
|
+
else:
|
213
|
+
if self_param == other_param:
|
214
|
+
continue
|
215
|
+
|
216
|
+
try:
|
217
|
+
self_asarray = numpy.asarray(self_param)
|
218
|
+
other_asarray = numpy.asarray(other_param)
|
219
|
+
if numpy.shape(self_asarray) == numpy.shape(other_asarray) and numpy.allclose(
|
220
|
+
self_param, other_param, atol=_CUTOFF_PRECISION, rtol=0
|
221
|
+
):
|
222
|
+
continue
|
223
|
+
except (ValueError, TypeError):
|
224
|
+
pass
|
225
|
+
|
226
|
+
try:
|
227
|
+
if numpy.isclose(
|
228
|
+
float(self_param), float(other_param), atol=_CUTOFF_PRECISION, rtol=0
|
229
|
+
):
|
230
|
+
continue
|
231
|
+
except TypeError:
|
232
|
+
pass
|
233
|
+
|
234
|
+
return False
|
235
|
+
|
236
|
+
return True
|
237
|
+
|
238
|
+
def __repr__(self) -> str:
|
239
|
+
"""Generates a representation of the Instruction object instance
|
240
|
+
Returns:
|
241
|
+
str: A representation of the Instruction instance with the name,
|
242
|
+
number of qubits, classical bits and params( if any )
|
243
|
+
"""
|
244
|
+
return (
|
245
|
+
f"Instruction(name='{self.name}', num_qubits={self.num_qubits}, "
|
246
|
+
f"num_clbits={self.num_clbits}, params={self.params})"
|
247
|
+
)
|
248
|
+
|
249
|
+
def soft_compare(self, other: "Instruction") -> bool:
|
250
|
+
"""
|
251
|
+
Soft comparison between gates. Their names, number of qubits, and classical
|
252
|
+
bit numbers must match. The number of parameters must match. Each parameter
|
253
|
+
is compared. If one is a ParameterExpression then it is not taken into
|
254
|
+
account.
|
255
|
+
|
256
|
+
Args:
|
257
|
+
other (instruction): other instruction.
|
258
|
+
|
259
|
+
Returns:
|
260
|
+
bool: are self and other equal up to parameter expressions.
|
261
|
+
"""
|
262
|
+
if (
|
263
|
+
self.name != other.name
|
264
|
+
or self.num_qubits != other.num_qubits
|
265
|
+
or self.num_clbits != other.num_clbits
|
266
|
+
or len(self.params) != len(other.params)
|
267
|
+
):
|
268
|
+
return False
|
269
|
+
|
270
|
+
for self_param, other_param in zip_longest(self.params, other.params):
|
271
|
+
if isinstance(self_param, ParameterExpression) or isinstance(
|
272
|
+
other_param, ParameterExpression
|
273
|
+
):
|
274
|
+
continue
|
275
|
+
if isinstance(self_param, numpy.ndarray) and isinstance(other_param, numpy.ndarray):
|
276
|
+
if numpy.shape(self_param) == numpy.shape(other_param) and numpy.allclose(
|
277
|
+
self_param, other_param, atol=_CUTOFF_PRECISION
|
278
|
+
):
|
279
|
+
continue
|
280
|
+
else:
|
281
|
+
try:
|
282
|
+
if numpy.isclose(self_param, other_param, atol=_CUTOFF_PRECISION):
|
283
|
+
continue
|
284
|
+
except TypeError:
|
285
|
+
pass
|
286
|
+
|
287
|
+
return False
|
288
|
+
|
289
|
+
return True
|
290
|
+
|
291
|
+
def _define(self):
|
292
|
+
"""Populate the cached :attr:`_definition` field of this :class:`Instruction`.
|
293
|
+
|
294
|
+
Subclasses should implement this method to provide lazy construction of their public
|
295
|
+
:attr:`definition` attribute. A subclass can use its :attr:`params` at the time of the
|
296
|
+
call. The method should populate :attr:`_definition` with a :class:`.QuantumCircuit` and
|
297
|
+
not return a value."""
|
298
|
+
pass
|
299
|
+
|
300
|
+
@property
|
301
|
+
def params(self):
|
302
|
+
"""The parameters of this :class:`Instruction`. Ideally these will be gate angles."""
|
303
|
+
return self._params
|
304
|
+
|
305
|
+
@params.setter
|
306
|
+
def params(self, parameters):
|
307
|
+
self._params = []
|
308
|
+
for single_param in parameters:
|
309
|
+
if isinstance(single_param, ParameterExpression):
|
310
|
+
self._params.append(single_param)
|
311
|
+
else:
|
312
|
+
self._params.append(self.validate_parameter(single_param))
|
313
|
+
|
314
|
+
def validate_parameter(self, parameter):
|
315
|
+
"""Instruction parameters has no validation or normalization."""
|
316
|
+
return parameter
|
317
|
+
|
318
|
+
def is_parameterized(self):
|
319
|
+
"""Return whether the :class:`Instruction` contains :ref:`compile-time parameters
|
320
|
+
<circuit-compile-time-parameters>`."""
|
321
|
+
return any(
|
322
|
+
isinstance(param, ParameterExpression) and param.parameters for param in self._params
|
323
|
+
)
|
324
|
+
|
325
|
+
@property
|
326
|
+
def definition(self):
|
327
|
+
"""Return definition in terms of other basic gates."""
|
328
|
+
if self._definition is None:
|
329
|
+
self._define()
|
330
|
+
return self._definition
|
331
|
+
|
332
|
+
@definition.setter
|
333
|
+
def definition(self, array):
|
334
|
+
"""Set gate representation"""
|
335
|
+
self._definition = array
|
336
|
+
|
337
|
+
@property
|
338
|
+
def decompositions(self):
|
339
|
+
"""Get the decompositions of the instruction from the SessionEquivalenceLibrary."""
|
340
|
+
# pylint: disable=cyclic-import
|
341
|
+
from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
|
342
|
+
|
343
|
+
return sel.get_entry(self)
|
344
|
+
|
345
|
+
@decompositions.setter
|
346
|
+
def decompositions(self, decompositions):
|
347
|
+
"""Set the decompositions of the instruction from the SessionEquivalenceLibrary."""
|
348
|
+
# pylint: disable=cyclic-import
|
349
|
+
from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
|
350
|
+
|
351
|
+
sel.set_entry(self, decompositions)
|
352
|
+
|
353
|
+
def add_decomposition(self, decomposition):
|
354
|
+
"""Add a decomposition of the instruction to the SessionEquivalenceLibrary."""
|
355
|
+
# pylint: disable=cyclic-import
|
356
|
+
from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
|
357
|
+
|
358
|
+
sel.add_equivalence(self, decomposition)
|
359
|
+
|
360
|
+
@property
|
361
|
+
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
362
|
+
def duration(self):
|
363
|
+
"""Get the duration."""
|
364
|
+
return self._duration
|
365
|
+
|
366
|
+
@duration.setter
|
367
|
+
def duration(self, value):
|
368
|
+
"""Set the duration."""
|
369
|
+
self._duration = value
|
370
|
+
|
371
|
+
@property
|
372
|
+
@deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
|
373
|
+
def unit(self):
|
374
|
+
"""Get the time unit of duration."""
|
375
|
+
return self._unit
|
376
|
+
|
377
|
+
@unit.setter
|
378
|
+
def unit(self, value):
|
379
|
+
"""Set the time unit of duration."""
|
380
|
+
self._unit = value
|
381
|
+
|
382
|
+
@deprecate_func(
|
383
|
+
since="1.2",
|
384
|
+
removal_timeline="in the 2.0 release",
|
385
|
+
additional_msg="The `Qobj` class and related functionality are part of the deprecated "
|
386
|
+
"`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
|
387
|
+
"workflow requires `Qobj` it likely relies on deprecated functionality and "
|
388
|
+
"should be updated to use `BackendV2`.",
|
389
|
+
)
|
390
|
+
def assemble(self):
|
391
|
+
"""Assemble a QasmQobjInstruction"""
|
392
|
+
return self._assemble()
|
393
|
+
|
394
|
+
def _assemble(self):
|
395
|
+
with warnings.catch_warnings():
|
396
|
+
# The class QasmQobjInstruction is deprecated
|
397
|
+
warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
|
398
|
+
instruction = QasmQobjInstruction(name=self.name)
|
399
|
+
# Evaluate parameters
|
400
|
+
if self.params:
|
401
|
+
params = [x.evalf(x) if hasattr(x, "evalf") else x for x in self.params]
|
402
|
+
instruction.params = params
|
403
|
+
# Add placeholder for qarg and carg params
|
404
|
+
if self.num_qubits:
|
405
|
+
instruction.qubits = list(range(self.num_qubits))
|
406
|
+
if self.num_clbits:
|
407
|
+
instruction.memory = list(range(self.num_clbits))
|
408
|
+
# Add label if defined
|
409
|
+
if self.label:
|
410
|
+
instruction.label = self.label
|
411
|
+
# Add condition parameters for assembler. This is needed to convert
|
412
|
+
# to a qobj conditional instruction at assemble time and after
|
413
|
+
# conversion will be deleted by the assembler.
|
414
|
+
if self._condition:
|
415
|
+
instruction._condition = self._condition
|
416
|
+
return instruction
|
417
|
+
|
418
|
+
@property
|
419
|
+
def label(self) -> str:
|
420
|
+
"""Return instruction label"""
|
421
|
+
return self._label
|
422
|
+
|
423
|
+
@label.setter
|
424
|
+
def label(self, name: str):
|
425
|
+
"""Set instruction label to name
|
426
|
+
|
427
|
+
Args:
|
428
|
+
name (str or None): label to assign instruction
|
429
|
+
|
430
|
+
Raises:
|
431
|
+
TypeError: name is not string or None.
|
432
|
+
"""
|
433
|
+
if isinstance(name, (str, type(None))):
|
434
|
+
self._label = name
|
435
|
+
else:
|
436
|
+
raise TypeError("label expects a string or None")
|
437
|
+
|
438
|
+
def reverse_ops(self):
|
439
|
+
"""For a composite instruction, reverse the order of sub-instructions.
|
440
|
+
|
441
|
+
This is done by recursively reversing all sub-instructions.
|
442
|
+
It does not invert any gate.
|
443
|
+
|
444
|
+
Returns:
|
445
|
+
qiskit.circuit.Instruction: a new instruction with
|
446
|
+
sub-instructions reversed.
|
447
|
+
"""
|
448
|
+
# A single `Instruction` cannot really determine whether it is a "composite" instruction or
|
449
|
+
# not; it depends on greater context whether it needs to be decomposed. The `_definition`
|
450
|
+
# not existing is flaky; all that means is that nobody has _yet_ asked for its definition;
|
451
|
+
# for efficiency, most gates define this on-the-fly. The checks here are a very very
|
452
|
+
# approximate check for an "atomic" instruction, that are mostly just this way for
|
453
|
+
# historical consistency.
|
454
|
+
if not self._definition or not self.mutable:
|
455
|
+
return self.copy()
|
456
|
+
|
457
|
+
reverse_inst = self.copy(name=self.name + "_reverse")
|
458
|
+
reversed_definition = self._definition.copy_empty_like()
|
459
|
+
for inst in reversed(self._definition):
|
460
|
+
reversed_definition.append(inst.operation.reverse_ops(), inst.qubits, inst.clbits)
|
461
|
+
reverse_inst.definition = reversed_definition
|
462
|
+
return reverse_inst
|
463
|
+
|
464
|
+
def inverse(self, annotated: bool = False):
|
465
|
+
"""Invert this instruction.
|
466
|
+
|
467
|
+
If `annotated` is `False`, the inverse instruction is implemented as
|
468
|
+
a fresh instruction with the recursively inverted definition.
|
469
|
+
|
470
|
+
If `annotated` is `True`, the inverse instruction is implemented as
|
471
|
+
:class:`.AnnotatedOperation`, and corresponds to the given instruction
|
472
|
+
annotated with the "inverse modifier".
|
473
|
+
|
474
|
+
Special instructions inheriting from Instruction can
|
475
|
+
implement their own inverse (e.g. T and Tdg, Barrier, etc.)
|
476
|
+
In particular, they can choose how to handle the argument ``annotated``
|
477
|
+
which may include ignoring it and always returning a concrete gate class
|
478
|
+
if the inverse is defined as a standard gate.
|
479
|
+
|
480
|
+
Args:
|
481
|
+
annotated: if set to `True` the output inverse gate will be returned
|
482
|
+
as :class:`.AnnotatedOperation`.
|
483
|
+
|
484
|
+
Returns:
|
485
|
+
The inverse operation.
|
486
|
+
|
487
|
+
Raises:
|
488
|
+
CircuitError: if the instruction is not composite
|
489
|
+
and an inverse has not been implemented for it.
|
490
|
+
"""
|
491
|
+
if annotated:
|
492
|
+
return AnnotatedOperation(self, InverseModifier())
|
493
|
+
|
494
|
+
if self.definition is None:
|
495
|
+
raise CircuitError(f"inverse() not implemented for {self.name}.")
|
496
|
+
|
497
|
+
from qiskit.circuit import Gate # pylint: disable=cyclic-import
|
498
|
+
|
499
|
+
if self.name.endswith("_dg"):
|
500
|
+
name = self.name[:-3]
|
501
|
+
else:
|
502
|
+
name = self.name + "_dg"
|
503
|
+
if self.num_clbits:
|
504
|
+
inverse_gate = Instruction(
|
505
|
+
name=name,
|
506
|
+
num_qubits=self.num_qubits,
|
507
|
+
num_clbits=self.num_clbits,
|
508
|
+
params=self.params.copy(),
|
509
|
+
)
|
510
|
+
|
511
|
+
else:
|
512
|
+
inverse_gate = Gate(name=name, num_qubits=self.num_qubits, params=self.params.copy())
|
513
|
+
|
514
|
+
inverse_definition = self._definition.copy_empty_like()
|
515
|
+
inverse_definition.global_phase = -inverse_definition.global_phase
|
516
|
+
for inst in reversed(self._definition):
|
517
|
+
inverse_definition._append(inst.operation.inverse(), inst.qubits, inst.clbits)
|
518
|
+
inverse_gate.definition = inverse_definition
|
519
|
+
return inverse_gate
|
520
|
+
|
521
|
+
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
|
522
|
+
def c_if(self, classical, val):
|
523
|
+
"""Set a classical equality condition on this instruction between the register or cbit
|
524
|
+
``classical`` and value ``val``.
|
525
|
+
|
526
|
+
.. note::
|
527
|
+
|
528
|
+
This is a setter method, not an additive one. Calling this multiple times will silently
|
529
|
+
override any previously set condition; it does not stack.
|
530
|
+
"""
|
531
|
+
if not isinstance(classical, (ClassicalRegister, Clbit)):
|
532
|
+
raise CircuitError("c_if must be used with a classical register or classical bit")
|
533
|
+
if val < 0:
|
534
|
+
raise CircuitError("condition value should be non-negative")
|
535
|
+
if isinstance(classical, Clbit):
|
536
|
+
# Casting the conditional value as Boolean when
|
537
|
+
# the classical condition is on a classical bit.
|
538
|
+
val = bool(val)
|
539
|
+
self._condition = (classical, val)
|
540
|
+
return self
|
541
|
+
|
542
|
+
def copy(self, name=None):
|
543
|
+
"""
|
544
|
+
Copy of the instruction.
|
545
|
+
|
546
|
+
Args:
|
547
|
+
name (str): name to be given to the copied circuit, if ``None`` then the name stays the same.
|
548
|
+
|
549
|
+
Returns:
|
550
|
+
qiskit.circuit.Instruction: a copy of the current instruction, with the name updated if it
|
551
|
+
was provided
|
552
|
+
"""
|
553
|
+
cpy = self.__deepcopy__()
|
554
|
+
|
555
|
+
if name:
|
556
|
+
cpy.name = name
|
557
|
+
return cpy
|
558
|
+
|
559
|
+
def __deepcopy__(self, memo=None):
|
560
|
+
cpy = copy.copy(self)
|
561
|
+
cpy._params = copy.copy(self._params)
|
562
|
+
if self._definition:
|
563
|
+
cpy._definition = copy.deepcopy(self._definition, memo)
|
564
|
+
return cpy
|
565
|
+
|
566
|
+
def broadcast_arguments(self, qargs, cargs):
|
567
|
+
"""
|
568
|
+
Validation of the arguments.
|
569
|
+
|
570
|
+
Args:
|
571
|
+
qargs (List): List of quantum bit arguments.
|
572
|
+
cargs (List): List of classical bit arguments.
|
573
|
+
|
574
|
+
Yields:
|
575
|
+
Tuple(List, List): A tuple with single arguments.
|
576
|
+
|
577
|
+
Raises:
|
578
|
+
CircuitError: If the input is not valid. For example, the number of
|
579
|
+
arguments does not match the gate expectation.
|
580
|
+
"""
|
581
|
+
if len(qargs) != self.num_qubits:
|
582
|
+
raise CircuitError(
|
583
|
+
f"The amount of qubit arguments {len(qargs)} does not match"
|
584
|
+
f" the instruction expectation ({self.num_qubits})."
|
585
|
+
)
|
586
|
+
if len(cargs) != self.num_clbits:
|
587
|
+
raise CircuitError(
|
588
|
+
f"The amount of clbit arguments {len(cargs)} does not match"
|
589
|
+
f" the instruction expectation ({self.num_clbits})."
|
590
|
+
)
|
591
|
+
|
592
|
+
# [[q[0], q[1]], [c[0], c[1]]] -> [q[0], c[0]], [q[1], c[1]]
|
593
|
+
flat_qargs = [qarg for sublist in qargs for qarg in sublist]
|
594
|
+
flat_cargs = [carg for sublist in cargs for carg in sublist]
|
595
|
+
yield flat_qargs, flat_cargs
|
596
|
+
|
597
|
+
def _return_repeat(self, exponent):
|
598
|
+
return Instruction(
|
599
|
+
name=f"{self.name}*{exponent}",
|
600
|
+
num_qubits=self.num_qubits,
|
601
|
+
num_clbits=self.num_clbits,
|
602
|
+
params=self.params,
|
603
|
+
)
|
604
|
+
|
605
|
+
def repeat(self, n):
|
606
|
+
"""Creates an instruction with ``self`` repeated :math`n` times.
|
607
|
+
|
608
|
+
If this operation has a conditional, the output instruction will have the same conditional
|
609
|
+
and the inner repeated operations will be unconditional; instructions within a compound
|
610
|
+
definition cannot be conditioned on registers within Qiskit's data model. This means that
|
611
|
+
it is not valid to apply a repeated instruction to a clbit that it both writes to and reads
|
612
|
+
from in its condition.
|
613
|
+
|
614
|
+
Args:
|
615
|
+
n (int): Number of times to repeat the instruction
|
616
|
+
|
617
|
+
Returns:
|
618
|
+
qiskit.circuit.Instruction: Containing the definition.
|
619
|
+
|
620
|
+
Raises:
|
621
|
+
CircuitError: If n < 1.
|
622
|
+
"""
|
623
|
+
if int(n) != n or n < 1:
|
624
|
+
raise CircuitError("Repeat can only be called with strictly positive integer.")
|
625
|
+
|
626
|
+
n = int(n)
|
627
|
+
|
628
|
+
instruction = self._return_repeat(n)
|
629
|
+
if instruction.definition is None:
|
630
|
+
# pylint: disable=cyclic-import
|
631
|
+
from qiskit.circuit import QuantumCircuit, CircuitInstruction
|
632
|
+
|
633
|
+
qc = QuantumCircuit(self.num_qubits, self.num_clbits)
|
634
|
+
qargs = tuple(qc.qubits)
|
635
|
+
cargs = tuple(qc.clbits)
|
636
|
+
base = self.copy()
|
637
|
+
if self._condition:
|
638
|
+
# Condition is handled on the outer instruction.
|
639
|
+
base = base.to_mutable()
|
640
|
+
base.condition = None
|
641
|
+
for _ in [None] * n:
|
642
|
+
qc._append(CircuitInstruction(base, qargs, cargs))
|
643
|
+
|
644
|
+
instruction.definition = qc
|
645
|
+
if self._condition:
|
646
|
+
instruction = instruction.c_if(*self._condition)
|
647
|
+
return instruction
|
648
|
+
|
649
|
+
@property
|
650
|
+
@deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
|
651
|
+
def condition_bits(self) -> List[Clbit]:
|
652
|
+
"""Get Clbits in condition."""
|
653
|
+
from qiskit.circuit.controlflow import condition_resources # pylint: disable=cyclic-import
|
654
|
+
|
655
|
+
if self._condition is None:
|
656
|
+
return []
|
657
|
+
return list(condition_resources(self._condition).clbits)
|
658
|
+
|
659
|
+
@property
|
660
|
+
def name(self):
|
661
|
+
"""Return the name."""
|
662
|
+
return self._name
|
663
|
+
|
664
|
+
@name.setter
|
665
|
+
def name(self, name):
|
666
|
+
"""Set the name."""
|
667
|
+
self._name = name
|
668
|
+
|
669
|
+
@property
|
670
|
+
def num_qubits(self):
|
671
|
+
"""Return the number of qubits."""
|
672
|
+
return self._num_qubits
|
673
|
+
|
674
|
+
@num_qubits.setter
|
675
|
+
def num_qubits(self, num_qubits):
|
676
|
+
"""Set num_qubits."""
|
677
|
+
self._num_qubits = num_qubits
|
678
|
+
|
679
|
+
@property
|
680
|
+
def num_clbits(self):
|
681
|
+
"""Return the number of clbits."""
|
682
|
+
return self._num_clbits
|
683
|
+
|
684
|
+
@num_clbits.setter
|
685
|
+
def num_clbits(self, num_clbits):
|
686
|
+
"""Set num_clbits."""
|
687
|
+
self._num_clbits = num_clbits
|
688
|
+
|
689
|
+
def _compare_parameters(self, other):
|
690
|
+
for x, y in zip(self.params, other.params):
|
691
|
+
try:
|
692
|
+
if not math.isclose(x, y, rel_tol=0, abs_tol=1e-10):
|
693
|
+
return False
|
694
|
+
except TypeError:
|
695
|
+
if x != y:
|
696
|
+
return False
|
697
|
+
return True
|