qiskit 1.3.0__cp39-abi3-win_amd64.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.pyd +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,556 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2023.
|
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
|
+
"""User-space constructor functions for the expression tree, which do some of the inference and
|
14
|
+
lifting boilerplate work."""
|
15
|
+
|
16
|
+
# pylint: disable=redefined-builtin,redefined-outer-name
|
17
|
+
|
18
|
+
from __future__ import annotations
|
19
|
+
|
20
|
+
__all__ = [
|
21
|
+
"lift",
|
22
|
+
"bit_not",
|
23
|
+
"logic_not",
|
24
|
+
"bit_and",
|
25
|
+
"bit_or",
|
26
|
+
"bit_xor",
|
27
|
+
"logic_and",
|
28
|
+
"logic_or",
|
29
|
+
"equal",
|
30
|
+
"not_equal",
|
31
|
+
"less",
|
32
|
+
"less_equal",
|
33
|
+
"greater",
|
34
|
+
"greater_equal",
|
35
|
+
"lift_legacy_condition",
|
36
|
+
]
|
37
|
+
|
38
|
+
import typing
|
39
|
+
|
40
|
+
from .expr import Expr, Var, Value, Unary, Binary, Cast, Index
|
41
|
+
from ..types import CastKind, cast_kind
|
42
|
+
from .. import types
|
43
|
+
|
44
|
+
if typing.TYPE_CHECKING:
|
45
|
+
import qiskit
|
46
|
+
|
47
|
+
|
48
|
+
def _coerce_lossless(expr: Expr, type: types.Type) -> Expr:
|
49
|
+
"""Coerce ``expr`` to ``type`` by inserting a suitable :class:`Cast` node, if the cast is
|
50
|
+
lossless. Otherwise, raise a ``TypeError``."""
|
51
|
+
kind = cast_kind(expr.type, type)
|
52
|
+
if kind is CastKind.EQUAL:
|
53
|
+
return expr
|
54
|
+
if kind is CastKind.IMPLICIT:
|
55
|
+
return Cast(expr, type, implicit=True)
|
56
|
+
if kind is CastKind.LOSSLESS:
|
57
|
+
return Cast(expr, type, implicit=False)
|
58
|
+
if kind is CastKind.DANGEROUS:
|
59
|
+
raise TypeError(f"cannot cast '{expr}' to '{type}' without loss of precision")
|
60
|
+
raise TypeError(f"no cast is defined to take '{expr}' to '{type}'")
|
61
|
+
|
62
|
+
|
63
|
+
def lift_legacy_condition(
|
64
|
+
condition: tuple[qiskit.circuit.Clbit | qiskit.circuit.ClassicalRegister, int], /
|
65
|
+
) -> Expr:
|
66
|
+
"""Lift a legacy two-tuple equality condition into a new-style :class:`Expr`.
|
67
|
+
|
68
|
+
Examples:
|
69
|
+
Taking an old-style conditional instruction and getting an :class:`Expr` from its
|
70
|
+
condition::
|
71
|
+
|
72
|
+
from qiskit.circuit import ClassicalRegister
|
73
|
+
from qiskit.circuit.library import HGate
|
74
|
+
from qiskit.circuit.classical import expr
|
75
|
+
|
76
|
+
cr = ClassicalRegister(2)
|
77
|
+
instr = HGate().c_if(cr, 3)
|
78
|
+
|
79
|
+
lifted = expr.lift_legacy_condition(instr.condition)
|
80
|
+
"""
|
81
|
+
from qiskit.circuit import Clbit # pylint: disable=cyclic-import
|
82
|
+
|
83
|
+
target, value = condition
|
84
|
+
if isinstance(target, Clbit):
|
85
|
+
bool_ = types.Bool()
|
86
|
+
return Var(target, bool_) if value else Unary(Unary.Op.LOGIC_NOT, Var(target, bool_), bool_)
|
87
|
+
left = Var(target, types.Uint(width=target.size))
|
88
|
+
if value.bit_length() > target.size:
|
89
|
+
left = Cast(left, types.Uint(width=value.bit_length()), implicit=True)
|
90
|
+
right = Value(value, left.type)
|
91
|
+
return Binary(Binary.Op.EQUAL, left, right, types.Bool())
|
92
|
+
|
93
|
+
|
94
|
+
def lift(value: typing.Any, /, type: types.Type | None = None) -> Expr:
|
95
|
+
"""Lift the given Python ``value`` to a :class:`~.expr.Value` or :class:`~.expr.Var`.
|
96
|
+
|
97
|
+
If an explicit ``type`` is given, the typing in the output will reflect that.
|
98
|
+
|
99
|
+
Examples:
|
100
|
+
Lifting simple circuit objects to be :class:`~.expr.Var` instances::
|
101
|
+
|
102
|
+
>>> from qiskit.circuit import Clbit, ClassicalRegister
|
103
|
+
>>> from qiskit.circuit.classical import expr
|
104
|
+
>>> expr.lift(Clbit())
|
105
|
+
Var(<clbit>, Bool())
|
106
|
+
>>> expr.lift(ClassicalRegister(3, "c"))
|
107
|
+
Var(ClassicalRegister(3, "c"), Uint(3))
|
108
|
+
|
109
|
+
The type of the return value can be influenced, if the given value could be interpreted
|
110
|
+
losslessly as the given type (use :func:`cast` to perform a full set of casting
|
111
|
+
operations, include lossy ones)::
|
112
|
+
|
113
|
+
>>> from qiskit.circuit import ClassicalRegister
|
114
|
+
>>> from qiskit.circuit.classical import expr, types
|
115
|
+
>>> expr.lift(ClassicalRegister(3, "c"), types.Uint(5))
|
116
|
+
Var(ClassicalRegister(3, "c"), Uint(5))
|
117
|
+
>>> expr.lift(5, types.Uint(4))
|
118
|
+
Value(5, Uint(4))
|
119
|
+
"""
|
120
|
+
if isinstance(value, Expr):
|
121
|
+
if type is not None:
|
122
|
+
raise ValueError("use 'cast' to cast existing expressions, not 'lift'")
|
123
|
+
return value
|
124
|
+
from qiskit.circuit import Clbit, ClassicalRegister # pylint: disable=cyclic-import
|
125
|
+
|
126
|
+
inferred: types.Type
|
127
|
+
if value is True or value is False or isinstance(value, Clbit):
|
128
|
+
inferred = types.Bool()
|
129
|
+
constructor = Value if value is True or value is False else Var
|
130
|
+
elif isinstance(value, ClassicalRegister):
|
131
|
+
inferred = types.Uint(width=value.size)
|
132
|
+
constructor = Var
|
133
|
+
elif isinstance(value, int):
|
134
|
+
if value < 0:
|
135
|
+
raise ValueError("cannot represent a negative value")
|
136
|
+
inferred = types.Uint(width=value.bit_length() or 1)
|
137
|
+
constructor = Value
|
138
|
+
else:
|
139
|
+
raise TypeError(f"failed to infer a type for '{value}'")
|
140
|
+
if type is None:
|
141
|
+
type = inferred
|
142
|
+
if types.is_supertype(type, inferred):
|
143
|
+
return constructor(value, type)
|
144
|
+
raise TypeError(
|
145
|
+
f"the explicit type '{type}' is not suitable for representing '{value}';"
|
146
|
+
f" it must be non-strict supertype of '{inferred}'"
|
147
|
+
)
|
148
|
+
|
149
|
+
|
150
|
+
def cast(operand: typing.Any, type: types.Type, /) -> Expr:
|
151
|
+
"""Create an explicit cast from the given value to the given type.
|
152
|
+
|
153
|
+
Examples:
|
154
|
+
Add an explicit cast node that explicitly casts a higher precision type to a lower precision
|
155
|
+
one::
|
156
|
+
|
157
|
+
>>> from qiskit.circuit.classical import expr, types
|
158
|
+
>>> value = expr.value(5, types.Uint(32))
|
159
|
+
>>> expr.cast(value, types.Uint(8))
|
160
|
+
Cast(Value(5, types.Uint(32)), types.Uint(8), implicit=False)
|
161
|
+
"""
|
162
|
+
operand = lift(operand)
|
163
|
+
if cast_kind(operand.type, type) is CastKind.NONE:
|
164
|
+
raise TypeError(f"cannot cast '{operand}' to '{type}'")
|
165
|
+
return Cast(operand, type)
|
166
|
+
|
167
|
+
|
168
|
+
def bit_not(operand: typing.Any, /) -> Expr:
|
169
|
+
"""Create a bitwise 'not' expression node from the given value, resolving any implicit casts and
|
170
|
+
lifting the value into a :class:`Value` node if required.
|
171
|
+
|
172
|
+
Examples:
|
173
|
+
Bitwise negation of a :class:`.ClassicalRegister`::
|
174
|
+
|
175
|
+
>>> from qiskit.circuit import ClassicalRegister
|
176
|
+
>>> from qiskit.circuit.classical import expr
|
177
|
+
>>> expr.bit_not(ClassicalRegister(3, "c"))
|
178
|
+
Unary(Unary.Op.BIT_NOT, Var(ClassicalRegister(3, 'c'), Uint(3)), Uint(3))
|
179
|
+
"""
|
180
|
+
operand = lift(operand)
|
181
|
+
if operand.type.kind not in (types.Bool, types.Uint):
|
182
|
+
raise TypeError(f"cannot apply '{Unary.Op.BIT_NOT}' to type '{operand.type}'")
|
183
|
+
return Unary(Unary.Op.BIT_NOT, operand, operand.type)
|
184
|
+
|
185
|
+
|
186
|
+
def logic_not(operand: typing.Any, /) -> Expr:
|
187
|
+
"""Create a logical 'not' expression node from the given value, resolving any implicit casts and
|
188
|
+
lifting the value into a :class:`Value` node if required.
|
189
|
+
|
190
|
+
Examples:
|
191
|
+
Logical negation of a :class:`.ClassicalRegister`::
|
192
|
+
|
193
|
+
>>> from qiskit.circuit import ClassicalRegister
|
194
|
+
>>> from qiskit.circuit.classical import expr
|
195
|
+
>>> expr.logic_not(ClassicalRegister(3, "c"))
|
196
|
+
Unary(\
|
197
|
+
Unary.Op.LOGIC_NOT, \
|
198
|
+
Cast(Var(ClassicalRegister(3, 'c'), Uint(3)), Bool(), implicit=True), \
|
199
|
+
Bool())
|
200
|
+
"""
|
201
|
+
operand = _coerce_lossless(lift(operand), types.Bool())
|
202
|
+
return Unary(Unary.Op.LOGIC_NOT, operand, operand.type)
|
203
|
+
|
204
|
+
|
205
|
+
def _lift_binary_operands(left: typing.Any, right: typing.Any) -> tuple[Expr, Expr]:
|
206
|
+
"""Lift two binary operands simultaneously, inferring the widths of integer literals in either
|
207
|
+
position to match the other operand."""
|
208
|
+
left_int = isinstance(left, int) and not isinstance(left, bool)
|
209
|
+
right_int = isinstance(right, int) and not isinstance(right, bool)
|
210
|
+
if not (left_int or right_int):
|
211
|
+
left = lift(left)
|
212
|
+
right = lift(right)
|
213
|
+
elif not right_int:
|
214
|
+
right = lift(right)
|
215
|
+
if right.type.kind is types.Uint:
|
216
|
+
if left.bit_length() > right.type.width:
|
217
|
+
raise TypeError(
|
218
|
+
f"integer literal '{left}' is wider than the other operand '{right}'"
|
219
|
+
)
|
220
|
+
left = Value(left, right.type)
|
221
|
+
else:
|
222
|
+
left = lift(left)
|
223
|
+
elif not left_int:
|
224
|
+
left = lift(left)
|
225
|
+
if left.type.kind is types.Uint:
|
226
|
+
if right.bit_length() > left.type.width:
|
227
|
+
raise TypeError(
|
228
|
+
f"integer literal '{right}' is wider than the other operand '{left}'"
|
229
|
+
)
|
230
|
+
right = Value(right, left.type)
|
231
|
+
else:
|
232
|
+
right = lift(right)
|
233
|
+
else:
|
234
|
+
# Both are `int`, so we take our best case to make things work.
|
235
|
+
uint = types.Uint(max(left.bit_length(), right.bit_length(), 1))
|
236
|
+
left = Value(left, uint)
|
237
|
+
right = Value(right, uint)
|
238
|
+
return left, right
|
239
|
+
|
240
|
+
|
241
|
+
def _binary_bitwise(op: Binary.Op, left: typing.Any, right: typing.Any) -> Expr:
|
242
|
+
left, right = _lift_binary_operands(left, right)
|
243
|
+
type: types.Type
|
244
|
+
if left.type.kind is right.type.kind is types.Bool:
|
245
|
+
type = types.Bool()
|
246
|
+
elif left.type.kind is types.Uint and right.type.kind is types.Uint:
|
247
|
+
if left.type != right.type:
|
248
|
+
raise TypeError(
|
249
|
+
"binary bitwise operations are defined between unsigned integers of the same width,"
|
250
|
+
f" but got {left.type.width} and {right.type.width}."
|
251
|
+
)
|
252
|
+
type = left.type
|
253
|
+
else:
|
254
|
+
raise TypeError(f"invalid types for '{op}': '{left.type}' and '{right.type}'")
|
255
|
+
return Binary(op, left, right, type)
|
256
|
+
|
257
|
+
|
258
|
+
def bit_and(left: typing.Any, right: typing.Any, /) -> Expr:
|
259
|
+
"""Create a bitwise 'and' expression node from the given value, resolving any implicit casts and
|
260
|
+
lifting the values into :class:`Value` nodes if required.
|
261
|
+
|
262
|
+
Examples:
|
263
|
+
Bitwise 'and' of a classical register and an integer literal::
|
264
|
+
|
265
|
+
>>> from qiskit.circuit import ClassicalRegister
|
266
|
+
>>> from qiskit.circuit.classical import expr
|
267
|
+
>>> expr.bit_and(ClassicalRegister(3, "c"), 0b111)
|
268
|
+
Binary(\
|
269
|
+
Binary.Op.BIT_AND, \
|
270
|
+
Var(ClassicalRegister(3, 'c'), Uint(3)), \
|
271
|
+
Value(7, Uint(3)), \
|
272
|
+
Uint(3))
|
273
|
+
"""
|
274
|
+
return _binary_bitwise(Binary.Op.BIT_AND, left, right)
|
275
|
+
|
276
|
+
|
277
|
+
def bit_or(left: typing.Any, right: typing.Any, /) -> Expr:
|
278
|
+
"""Create a bitwise 'or' expression node from the given value, resolving any implicit casts and
|
279
|
+
lifting the values into :class:`Value` nodes if required.
|
280
|
+
|
281
|
+
Examples:
|
282
|
+
Bitwise 'or' of a classical register and an integer literal::
|
283
|
+
|
284
|
+
>>> from qiskit.circuit import ClassicalRegister
|
285
|
+
>>> from qiskit.circuit.classical import expr
|
286
|
+
>>> expr.bit_or(ClassicalRegister(3, "c"), 0b101)
|
287
|
+
Binary(\
|
288
|
+
Binary.Op.BIT_OR, \
|
289
|
+
Var(ClassicalRegister(3, 'c'), Uint(3)), \
|
290
|
+
Value(5, Uint(3)), \
|
291
|
+
Uint(3))
|
292
|
+
"""
|
293
|
+
return _binary_bitwise(Binary.Op.BIT_OR, left, right)
|
294
|
+
|
295
|
+
|
296
|
+
def bit_xor(left: typing.Any, right: typing.Any, /) -> Expr:
|
297
|
+
"""Create a bitwise 'exclusive or' expression node from the given value, resolving any implicit
|
298
|
+
casts and lifting the values into :class:`Value` nodes if required.
|
299
|
+
|
300
|
+
Examples:
|
301
|
+
Bitwise 'exclusive or' of a classical register and an integer literal::
|
302
|
+
|
303
|
+
>>> from qiskit.circuit import ClassicalRegister
|
304
|
+
>>> from qiskit.circuit.classical import expr
|
305
|
+
>>> expr.bit_xor(ClassicalRegister(3, "c"), 0b101)
|
306
|
+
Binary(\
|
307
|
+
Binary.Op.BIT_XOR, \
|
308
|
+
Var(ClassicalRegister(3, 'c'), Uint(3)), \
|
309
|
+
Value(5, Uint(3)), \
|
310
|
+
Uint(3))
|
311
|
+
"""
|
312
|
+
return _binary_bitwise(Binary.Op.BIT_XOR, left, right)
|
313
|
+
|
314
|
+
|
315
|
+
def _binary_logical(op: Binary.Op, left: typing.Any, right: typing.Any) -> Expr:
|
316
|
+
bool_ = types.Bool()
|
317
|
+
left = _coerce_lossless(lift(left), bool_)
|
318
|
+
right = _coerce_lossless(lift(right), bool_)
|
319
|
+
return Binary(op, left, right, bool_)
|
320
|
+
|
321
|
+
|
322
|
+
def logic_and(left: typing.Any, right: typing.Any, /) -> Expr:
|
323
|
+
"""Create a logical 'and' expression node from the given value, resolving any implicit casts and
|
324
|
+
lifting the values into :class:`Value` nodes if required.
|
325
|
+
|
326
|
+
Examples:
|
327
|
+
Logical 'and' of two classical bits::
|
328
|
+
|
329
|
+
>>> from qiskit.circuit import Clbit
|
330
|
+
>>> from qiskit.circuit.classical import expr
|
331
|
+
>>> expr.logical_and(Clbit(), Clbit())
|
332
|
+
Binary(Binary.Op.LOGIC_AND, Var(<clbit 0>, Bool()), Var(<clbit 1>, Bool()), Bool())
|
333
|
+
"""
|
334
|
+
return _binary_logical(Binary.Op.LOGIC_AND, left, right)
|
335
|
+
|
336
|
+
|
337
|
+
def logic_or(left: typing.Any, right: typing.Any, /) -> Expr:
|
338
|
+
"""Create a logical 'or' expression node from the given value, resolving any implicit casts and
|
339
|
+
lifting the values into :class:`Value` nodes if required.
|
340
|
+
|
341
|
+
Examples:
|
342
|
+
Logical 'or' of two classical bits
|
343
|
+
|
344
|
+
>>> from qiskit.circuit import Clbit
|
345
|
+
>>> from qiskit.circuit.classical import expr
|
346
|
+
>>> expr.logical_and(Clbit(), Clbit())
|
347
|
+
Binary(Binary.Op.LOGIC_OR, Var(<clbit 0>, Bool()), Var(<clbit 1>, Bool()), Bool())
|
348
|
+
"""
|
349
|
+
return _binary_logical(Binary.Op.LOGIC_OR, left, right)
|
350
|
+
|
351
|
+
|
352
|
+
def _equal_like(op: Binary.Op, left: typing.Any, right: typing.Any) -> Expr:
|
353
|
+
left, right = _lift_binary_operands(left, right)
|
354
|
+
if left.type.kind is not right.type.kind:
|
355
|
+
raise TypeError(f"invalid types for '{op}': '{left.type}' and '{right.type}'")
|
356
|
+
type = types.greater(left.type, right.type)
|
357
|
+
return Binary(op, _coerce_lossless(left, type), _coerce_lossless(right, type), types.Bool())
|
358
|
+
|
359
|
+
|
360
|
+
def equal(left: typing.Any, right: typing.Any, /) -> Expr:
|
361
|
+
"""Create an 'equal' expression node from the given value, resolving any implicit casts and
|
362
|
+
lifting the values into :class:`Value` nodes if required.
|
363
|
+
|
364
|
+
Examples:
|
365
|
+
Equality between a classical register and an integer::
|
366
|
+
|
367
|
+
>>> from qiskit.circuit import ClassicalRegister
|
368
|
+
>>> from qiskit.circuit.classical import expr
|
369
|
+
>>> expr.equal(ClassicalRegister(3, "c"), 7)
|
370
|
+
Binary(Binary.Op.EQUAL, \
|
371
|
+
Var(ClassicalRegister(3, "c"), Uint(3)), \
|
372
|
+
Value(7, Uint(3)), \
|
373
|
+
Uint(3))
|
374
|
+
"""
|
375
|
+
return _equal_like(Binary.Op.EQUAL, left, right)
|
376
|
+
|
377
|
+
|
378
|
+
def not_equal(left: typing.Any, right: typing.Any, /) -> Expr:
|
379
|
+
"""Create a 'not equal' expression node from the given value, resolving any implicit casts and
|
380
|
+
lifting the values into :class:`Value` nodes if required.
|
381
|
+
|
382
|
+
Examples:
|
383
|
+
Inequality between a classical register and an integer::
|
384
|
+
|
385
|
+
>>> from qiskit.circuit import ClassicalRegister
|
386
|
+
>>> from qiskit.circuit.classical import expr
|
387
|
+
>>> expr.not_equal(ClassicalRegister(3, "c"), 7)
|
388
|
+
Binary(Binary.Op.NOT_EQUAL, \
|
389
|
+
Var(ClassicalRegister(3, "c"), Uint(3)), \
|
390
|
+
Value(7, Uint(3)), \
|
391
|
+
Uint(3))
|
392
|
+
"""
|
393
|
+
return _equal_like(Binary.Op.NOT_EQUAL, left, right)
|
394
|
+
|
395
|
+
|
396
|
+
def _binary_relation(op: Binary.Op, left: typing.Any, right: typing.Any) -> Expr:
|
397
|
+
left, right = _lift_binary_operands(left, right)
|
398
|
+
if left.type.kind is not right.type.kind or left.type.kind is types.Bool:
|
399
|
+
raise TypeError(f"invalid types for '{op}': '{left.type}' and '{right.type}'")
|
400
|
+
type = types.greater(left.type, right.type)
|
401
|
+
return Binary(op, _coerce_lossless(left, type), _coerce_lossless(right, type), types.Bool())
|
402
|
+
|
403
|
+
|
404
|
+
def less(left: typing.Any, right: typing.Any, /) -> Expr:
|
405
|
+
"""Create a 'less than' expression node from the given value, resolving any implicit casts and
|
406
|
+
lifting the values into :class:`Value` nodes if required.
|
407
|
+
|
408
|
+
Examples:
|
409
|
+
Query if a classical register is less than an integer::
|
410
|
+
|
411
|
+
>>> from qiskit.circuit import ClassicalRegister
|
412
|
+
>>> from qiskit.circuit.classical import expr
|
413
|
+
>>> expr.less(ClassicalRegister(3, "c"), 5)
|
414
|
+
Binary(Binary.Op.LESS, \
|
415
|
+
Var(ClassicalRegister(3, "c"), Uint(3)), \
|
416
|
+
Value(5, Uint(3)), \
|
417
|
+
Uint(3))
|
418
|
+
"""
|
419
|
+
return _binary_relation(Binary.Op.LESS, left, right)
|
420
|
+
|
421
|
+
|
422
|
+
def less_equal(left: typing.Any, right: typing.Any, /) -> Expr:
|
423
|
+
"""Create a 'less than or equal to' expression node from the given value, resolving any implicit
|
424
|
+
casts and lifting the values into :class:`Value` nodes if required.
|
425
|
+
|
426
|
+
Examples:
|
427
|
+
Query if a classical register is less than or equal to another::
|
428
|
+
|
429
|
+
>>> from qiskit.circuit import ClassicalRegister
|
430
|
+
>>> from qiskit.circuit.classical import expr
|
431
|
+
>>> expr.less(ClassicalRegister(3, "a"), ClassicalRegister(3, "b"))
|
432
|
+
Binary(Binary.Op.LESS_EQUAL, \
|
433
|
+
Var(ClassicalRegister(3, "a"), Uint(3)), \
|
434
|
+
Var(ClassicalRegister(3, "b"), Uint(3)), \
|
435
|
+
Uint(3))
|
436
|
+
"""
|
437
|
+
return _binary_relation(Binary.Op.LESS_EQUAL, left, right)
|
438
|
+
|
439
|
+
|
440
|
+
def greater(left: typing.Any, right: typing.Any, /) -> Expr:
|
441
|
+
"""Create a 'greater than' expression node from the given value, resolving any implicit casts
|
442
|
+
and lifting the values into :class:`Value` nodes if required.
|
443
|
+
|
444
|
+
Examples:
|
445
|
+
Query if a classical register is greater than an integer::
|
446
|
+
|
447
|
+
>>> from qiskit.circuit import ClassicalRegister
|
448
|
+
>>> from qiskit.circuit.classical import expr
|
449
|
+
>>> expr.less(ClassicalRegister(3, "c"), 5)
|
450
|
+
Binary(Binary.Op.GREATER, \
|
451
|
+
Var(ClassicalRegister(3, "c"), Uint(3)), \
|
452
|
+
Value(5, Uint(3)), \
|
453
|
+
Uint(3))
|
454
|
+
"""
|
455
|
+
return _binary_relation(Binary.Op.GREATER, left, right)
|
456
|
+
|
457
|
+
|
458
|
+
def greater_equal(left: typing.Any, right: typing.Any, /) -> Expr:
|
459
|
+
"""Create a 'greater than or equal to' expression node from the given value, resolving any
|
460
|
+
implicit casts and lifting the values into :class:`Value` nodes if required.
|
461
|
+
|
462
|
+
Examples:
|
463
|
+
Query if a classical register is greater than or equal to another::
|
464
|
+
|
465
|
+
>>> from qiskit.circuit import ClassicalRegister
|
466
|
+
>>> from qiskit.circuit.classical import expr
|
467
|
+
>>> expr.less(ClassicalRegister(3, "a"), ClassicalRegister(3, "b"))
|
468
|
+
Binary(Binary.Op.GREATER_EQUAL, \
|
469
|
+
Var(ClassicalRegister(3, "a"), Uint(3)), \
|
470
|
+
Var(ClassicalRegister(3, "b"), Uint(3)), \
|
471
|
+
Uint(3))
|
472
|
+
"""
|
473
|
+
return _binary_relation(Binary.Op.GREATER_EQUAL, left, right)
|
474
|
+
|
475
|
+
|
476
|
+
def _shift_like(
|
477
|
+
op: Binary.Op, left: typing.Any, right: typing.Any, type: types.Type | None
|
478
|
+
) -> Expr:
|
479
|
+
if type is not None and type.kind is not types.Uint:
|
480
|
+
raise TypeError(f"type '{type}' is not a valid bitshift operand type")
|
481
|
+
if isinstance(left, Expr):
|
482
|
+
left = _coerce_lossless(left, type) if type is not None else left
|
483
|
+
else:
|
484
|
+
left = lift(left, type)
|
485
|
+
right = lift(right)
|
486
|
+
if left.type.kind != types.Uint or right.type.kind != types.Uint:
|
487
|
+
raise TypeError(f"invalid types for '{op}': '{left.type}' and '{right.type}'")
|
488
|
+
return Binary(op, left, right, left.type)
|
489
|
+
|
490
|
+
|
491
|
+
def shift_left(left: typing.Any, right: typing.Any, /, type: types.Type | None = None) -> Expr:
|
492
|
+
"""Create a 'bitshift left' expression node from the given two values, resolving any implicit
|
493
|
+
casts and lifting the values into :class:`Value` nodes if required.
|
494
|
+
|
495
|
+
If ``type`` is given, the ``left`` operand will be coerced to it (if possible).
|
496
|
+
|
497
|
+
Examples:
|
498
|
+
Shift the value of a standalone variable left by some amount::
|
499
|
+
|
500
|
+
>>> from qiskit.circuit.classical import expr, types
|
501
|
+
>>> a = expr.Var.new("a", types.Uint(8))
|
502
|
+
>>> expr.shift_left(a, 4)
|
503
|
+
Binary(Binary.Op.SHIFT_LEFT, \
|
504
|
+
Var(<UUID>, Uint(8), name='a'), \
|
505
|
+
Value(4, Uint(3)), \
|
506
|
+
Uint(8))
|
507
|
+
|
508
|
+
Shift an integer literal by a variable amount, coercing the type of the literal::
|
509
|
+
|
510
|
+
>>> expr.shift_left(3, a, types.Uint(16))
|
511
|
+
Binary(Binary.Op.SHIFT_LEFT, \
|
512
|
+
Value(3, Uint(16)), \
|
513
|
+
Var(<UUID>, Uint(8), name='a'), \
|
514
|
+
Uint(16))
|
515
|
+
"""
|
516
|
+
return _shift_like(Binary.Op.SHIFT_LEFT, left, right, type)
|
517
|
+
|
518
|
+
|
519
|
+
def shift_right(left: typing.Any, right: typing.Any, /, type: types.Type | None = None) -> Expr:
|
520
|
+
"""Create a 'bitshift right' expression node from the given values, resolving any implicit casts
|
521
|
+
and lifting the values into :class:`Value` nodes if required.
|
522
|
+
|
523
|
+
If ``type`` is given, the ``left`` operand will be coerced to it (if possible).
|
524
|
+
|
525
|
+
Examples:
|
526
|
+
Shift the value of a classical register right by some amount::
|
527
|
+
|
528
|
+
>>> from qiskit.circuit import ClassicalRegister
|
529
|
+
>>> from qiskit.circuit.classical import expr
|
530
|
+
>>> expr.shift_right(ClassicalRegister(8, "a"), 4)
|
531
|
+
Binary(Binary.Op.SHIFT_RIGHT, \
|
532
|
+
Var(ClassicalRegister(8, "a"), Uint(8)), \
|
533
|
+
Value(4, Uint(3)), \
|
534
|
+
Uint(8))
|
535
|
+
"""
|
536
|
+
return _shift_like(Binary.Op.SHIFT_RIGHT, left, right, type)
|
537
|
+
|
538
|
+
|
539
|
+
def index(target: typing.Any, index: typing.Any, /) -> Expr:
|
540
|
+
"""Index into the ``target`` with the given integer ``index``, lifting the values into
|
541
|
+
:class:`Value` nodes if required.
|
542
|
+
|
543
|
+
This can be used as the target of a :class:`.Store`, if the ``target`` is itself an lvalue.
|
544
|
+
|
545
|
+
Examples:
|
546
|
+
Index into a classical register with a literal::
|
547
|
+
|
548
|
+
>>> from qiskit.circuit import ClassicalRegister
|
549
|
+
>>> from qiskit.circuit.classical import expr
|
550
|
+
>>> expr.index(ClassicalRegister(8, "a"), 3)
|
551
|
+
Index(Var(ClassicalRegister(8, "a"), Uint(8)), Value(3, Uint(2)), Bool())
|
552
|
+
"""
|
553
|
+
target, index = lift(target), lift(index)
|
554
|
+
if target.type.kind is not types.Uint or index.type.kind is not types.Uint:
|
555
|
+
raise TypeError(f"invalid types for indexing: '{target.type}' and '{index.type}'")
|
556
|
+
return Index(target, index, types.Bool())
|