qiskit 1.3.0b1__cp39-abi3-macosx_10_9_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -0
- qiskit/__init__.py +127 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +42 -0
- qiskit/assembler/assemble_circuits.py +451 -0
- qiskit/assembler/assemble_schedules.py +365 -0
- qiskit/assembler/disassemble.py +310 -0
- qiskit/assembler/run_config.py +77 -0
- qiskit/circuit/__init__.py +1270 -0
- qiskit/circuit/_classical_resource_map.py +148 -0
- qiskit/circuit/_standard_gates_commutations.py +3264 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/add_control.py +274 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +48 -0
- qiskit/circuit/bit.py +94 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +238 -0
- qiskit/circuit/classical/expr/constructors.py +556 -0
- qiskit/circuit/classical/expr/expr.py +397 -0
- qiskit/circuit/classical/expr/visitors.py +300 -0
- qiskit/circuit/classical/types/__init__.py +109 -0
- qiskit/circuit/classical/types/ordering.py +222 -0
- qiskit/circuit/classical/types/types.py +117 -0
- qiskit/circuit/classicalfunction/__init__.py +140 -0
- qiskit/circuit/classicalfunction/boolean_expression.py +129 -0
- qiskit/circuit/classicalfunction/classical_element.py +54 -0
- qiskit/circuit/classicalfunction/classical_function_visitor.py +155 -0
- qiskit/circuit/classicalfunction/classicalfunction.py +173 -0
- qiskit/circuit/classicalfunction/exceptions.py +35 -0
- qiskit/circuit/classicalfunction/types.py +18 -0
- qiskit/circuit/classicalfunction/utils.py +91 -0
- qiskit/circuit/classicalregister.py +57 -0
- qiskit/circuit/commutation_checker.py +106 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +28 -0
- qiskit/circuit/controlflow/_builder_utils.py +207 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +691 -0
- qiskit/circuit/controlflow/continue_loop.py +58 -0
- qiskit/circuit/controlflow/control_flow.py +84 -0
- qiskit/circuit/controlflow/for_loop.py +217 -0
- qiskit/circuit/controlflow/if_else.py +503 -0
- qiskit/circuit/controlflow/switch_case.py +417 -0
- qiskit/circuit/controlflow/while_loop.py +163 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +106 -0
- qiskit/circuit/duration.py +95 -0
- qiskit/circuit/equivalence.py +295 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +676 -0
- qiskit/circuit/instructionset.py +177 -0
- qiskit/circuit/library/__init__.py +572 -0
- qiskit/circuit/library/arithmetic/__init__.py +27 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +17 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +58 -0
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +159 -0
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +116 -0
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +165 -0
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +88 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +243 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +196 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +189 -0
- qiskit/circuit/library/arithmetic/multipliers/__init__.py +16 -0
- qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +138 -0
- qiskit/circuit/library/arithmetic/multipliers/multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +101 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +353 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +277 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +317 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +335 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +198 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +337 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +331 -0
- qiskit/circuit/library/blueprintcircuit.py +216 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +78 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +97 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +98 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +71 -0
- qiskit/circuit/library/data_preparation/__init__.py +54 -0
- qiskit/circuit/library/data_preparation/initializer.py +107 -0
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +343 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +336 -0
- qiskit/circuit/library/data_preparation/z_feature_map.py +104 -0
- qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
- qiskit/circuit/library/fourier_checking.py +97 -0
- qiskit/circuit/library/generalized_gates/__init__.py +30 -0
- qiskit/circuit/library/generalized_gates/diagonal.py +165 -0
- qiskit/circuit/library/generalized_gates/gms.py +121 -0
- qiskit/circuit/library/generalized_gates/gr.py +215 -0
- qiskit/circuit/library/generalized_gates/isometry.py +370 -0
- qiskit/circuit/library/generalized_gates/linear_function.py +312 -0
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +143 -0
- qiskit/circuit/library/generalized_gates/mcmt.py +256 -0
- qiskit/circuit/library/generalized_gates/pauli.py +85 -0
- qiskit/circuit/library/generalized_gates/permutation.py +192 -0
- qiskit/circuit/library/generalized_gates/rv.py +97 -0
- qiskit/circuit/library/generalized_gates/uc.py +213 -0
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +164 -0
- qiskit/circuit/library/generalized_gates/ucrx.py +32 -0
- qiskit/circuit/library/generalized_gates/ucry.py +32 -0
- qiskit/circuit/library/generalized_gates/ucrz.py +32 -0
- qiskit/circuit/library/generalized_gates/unitary.py +215 -0
- qiskit/circuit/library/graph_state.py +86 -0
- qiskit/circuit/library/grover_operator.py +311 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +98 -0
- qiskit/circuit/library/iqp.py +96 -0
- qiskit/circuit/library/n_local/__init__.py +33 -0
- qiskit/circuit/library/n_local/efficient_su2.py +164 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +256 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +173 -0
- qiskit/circuit/library/n_local/n_local.py +1071 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +141 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +287 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +186 -0
- qiskit/circuit/library/n_local/two_local.py +282 -0
- qiskit/circuit/library/overlap.py +117 -0
- qiskit/circuit/library/pauli_evolution.py +184 -0
- qiskit/circuit/library/phase_estimation.py +99 -0
- qiskit/circuit/library/phase_oracle.py +153 -0
- qiskit/circuit/library/quantum_volume.py +115 -0
- qiskit/circuit/library/standard_gates/__init__.py +123 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +130 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +85 -0
- qiskit/circuit/library/standard_gates/h.py +257 -0
- qiskit/circuit/library/standard_gates/i.py +75 -0
- qiskit/circuit/library/standard_gates/iswap.py +134 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +405 -0
- qiskit/circuit/library/standard_gates/p.py +433 -0
- qiskit/circuit/library/standard_gates/r.py +117 -0
- qiskit/circuit/library/standard_gates/rx.py +302 -0
- qiskit/circuit/library/standard_gates/rxx.py +183 -0
- qiskit/circuit/library/standard_gates/ry.py +297 -0
- qiskit/circuit/library/standard_gates/ryy.py +183 -0
- qiskit/circuit/library/standard_gates/rz.py +318 -0
- qiskit/circuit/library/standard_gates/rzx.py +229 -0
- qiskit/circuit/library/standard_gates/rzz.py +196 -0
- qiskit/circuit/library/standard_gates/s.py +428 -0
- qiskit/circuit/library/standard_gates/swap.py +288 -0
- qiskit/circuit/library/standard_gates/sx.py +314 -0
- qiskit/circuit/library/standard_gates/t.py +179 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +451 -0
- qiskit/circuit/library/standard_gates/u2.py +146 -0
- qiskit/circuit/library/standard_gates/u3.py +408 -0
- qiskit/circuit/library/standard_gates/x.py +1527 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +235 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +239 -0
- qiskit/circuit/library/standard_gates/y.py +261 -0
- qiskit/circuit/library/standard_gates/z.py +348 -0
- qiskit/circuit/library/templates/__init__.py +92 -0
- qiskit/circuit/library/templates/clifford/__init__.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_1.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_2_2.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_2_3.py +32 -0
- qiskit/circuit/library/templates/clifford/clifford_2_4.py +33 -0
- qiskit/circuit/library/templates/clifford/clifford_3_1.py +34 -0
- qiskit/circuit/library/templates/clifford/clifford_4_1.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_2.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_4_3.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_4_4.py +36 -0
- qiskit/circuit/library/templates/clifford/clifford_5_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_1.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_2.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_3.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_6_4.py +37 -0
- qiskit/circuit/library/templates/clifford/clifford_6_5.py +39 -0
- qiskit/circuit/library/templates/clifford/clifford_8_1.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_2.py +41 -0
- qiskit/circuit/library/templates/clifford/clifford_8_3.py +40 -0
- qiskit/circuit/library/templates/nct/__init__.py +67 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_1.py +32 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_2.py +33 -0
- qiskit/circuit/library/templates/nct/template_nct_2a_3.py +35 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4a_3.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_4b_2.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_2.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_3.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_5a_4.py +37 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_1.py +38 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_3.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6a_4.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6b_2.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_6c_1.py +39 -0
- qiskit/circuit/library/templates/nct/template_nct_7a_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7b_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_7e_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9a_1.py +43 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_11.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_12.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9c_9.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_1.py +41 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_10.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_2.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_3.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_4.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_5.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_6.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_7.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_8.py +42 -0
- qiskit/circuit/library/templates/nct/template_nct_9d_9.py +42 -0
- qiskit/circuit/library/templates/rzx/__init__.py +25 -0
- qiskit/circuit/library/templates/rzx/rzx_cy.py +46 -0
- qiskit/circuit/library/templates/rzx/rzx_xz.py +53 -0
- qiskit/circuit/library/templates/rzx/rzx_yz.py +43 -0
- qiskit/circuit/library/templates/rzx/rzx_zz1.py +67 -0
- qiskit/circuit/library/templates/rzx/rzx_zz2.py +58 -0
- qiskit/circuit/library/templates/rzx/rzx_zz3.py +57 -0
- qiskit/circuit/measure.py +44 -0
- qiskit/circuit/operation.py +67 -0
- qiskit/circuit/parameter.py +174 -0
- qiskit/circuit/parameterexpression.py +559 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +120 -0
- qiskit/circuit/quantumcircuit.py +6793 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/quantumregister.py +75 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +358 -0
- qiskit/circuit/register.py +233 -0
- qiskit/circuit/reset.py +34 -0
- qiskit/circuit/singleton.py +604 -0
- qiskit/circuit/store.py +95 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +190 -0
- qiskit/compiler/__init__.py +33 -0
- qiskit/compiler/assembler.py +668 -0
- qiskit/compiler/scheduler.py +107 -0
- qiskit/compiler/sequencer.py +69 -0
- qiskit/compiler/transpiler.py +478 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +78 -0
- qiskit/converters/circuit_to_dagdependency.py +51 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +155 -0
- qiskit/converters/dag_to_circuit.py +77 -0
- qiskit/converters/dag_to_dagdependency.py +55 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/converters/dagdependency_to_circuit.py +42 -0
- qiskit/converters/dagdependency_to_dag.py +49 -0
- qiskit/dagcircuit/__init__.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +391 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +633 -0
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +176 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +240 -0
- qiskit/passmanager/base_tasks.py +230 -0
- qiskit/passmanager/compilation_status.py +74 -0
- qiskit/passmanager/exceptions.py +19 -0
- qiskit/passmanager/flow_controllers.py +116 -0
- qiskit/passmanager/passmanager.py +333 -0
- qiskit/primitives/__init__.py +481 -0
- qiskit/primitives/backend_estimator.py +483 -0
- qiskit/primitives/backend_estimator_v2.py +434 -0
- qiskit/primitives/backend_sampler.py +222 -0
- qiskit/primitives/backend_sampler_v2.py +296 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +252 -0
- qiskit/primitives/base/base_primitive.py +45 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_result.py +65 -0
- qiskit/primitives/base/base_sampler.py +204 -0
- qiskit/primitives/base/estimator_result.py +46 -0
- qiskit/primitives/base/sampler_result.py +45 -0
- qiskit/primitives/base/validation.py +231 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +389 -0
- qiskit/primitives/containers/bit_array.py +741 -0
- qiskit/primitives/containers/data_bin.py +165 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +279 -0
- qiskit/primitives/containers/primitive_result.py +53 -0
- qiskit/primitives/containers/pub_result.py +51 -0
- qiskit/primitives/containers/sampler_pub.py +193 -0
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +129 -0
- qiskit/primitives/estimator.py +172 -0
- qiskit/primitives/primitive_job.py +81 -0
- qiskit/primitives/sampler.py +162 -0
- qiskit/primitives/statevector_estimator.py +174 -0
- qiskit/primitives/statevector_sampler.py +292 -0
- qiskit/primitives/utils.py +247 -0
- qiskit/providers/__init__.py +803 -0
- qiskit/providers/backend.py +656 -0
- qiskit/providers/backend_compat.py +452 -0
- qiskit/providers/basic_provider/__init__.py +45 -0
- qiskit/providers/basic_provider/basic_provider.py +101 -0
- qiskit/providers/basic_provider/basic_provider_job.py +65 -0
- qiskit/providers/basic_provider/basic_provider_tools.py +218 -0
- qiskit/providers/basic_provider/basic_simulator.py +811 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +45 -0
- qiskit/providers/fake_provider/__init__.py +105 -0
- qiskit/providers/fake_provider/backends_v1/__init__.py +22 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +37 -0
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +43 -0
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +50 -0
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +41 -0
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +18 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +1 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +44 -0
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +1 -0
- qiskit/providers/fake_provider/fake_1q.py +91 -0
- qiskit/providers/fake_provider/fake_backend.py +165 -0
- qiskit/providers/fake_provider/fake_openpulse_2q.py +391 -0
- qiskit/providers/fake_provider/fake_openpulse_3q.py +340 -0
- qiskit/providers/fake_provider/fake_pulse_backend.py +44 -0
- qiskit/providers/fake_provider/fake_qasm_backend.py +77 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +1019 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/fake_provider/utils/backend_converter.py +150 -0
- qiskit/providers/fake_provider/utils/json_decoder.py +109 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/models/__init__.py +89 -0
- qiskit/providers/models/backendconfiguration.py +1040 -0
- qiskit/providers/models/backendproperties.py +517 -0
- qiskit/providers/models/backendstatus.py +94 -0
- qiskit/providers/models/jobstatus.py +66 -0
- qiskit/providers/models/pulsedefaults.py +303 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/provider.py +95 -0
- qiskit/providers/providerutils.py +110 -0
- qiskit/pulse/__init__.py +158 -0
- qiskit/pulse/builder.py +2213 -0
- qiskit/pulse/calibration_entries.py +378 -0
- qiskit/pulse/channels.py +225 -0
- qiskit/pulse/configuration.py +245 -0
- qiskit/pulse/exceptions.py +43 -0
- qiskit/pulse/filters.py +309 -0
- qiskit/pulse/instruction_schedule_map.py +409 -0
- qiskit/pulse/instructions/__init__.py +67 -0
- qiskit/pulse/instructions/acquire.py +148 -0
- qiskit/pulse/instructions/delay.py +69 -0
- qiskit/pulse/instructions/directives.py +146 -0
- qiskit/pulse/instructions/frequency.py +132 -0
- qiskit/pulse/instructions/instruction.py +268 -0
- qiskit/pulse/instructions/phase.py +149 -0
- qiskit/pulse/instructions/play.py +97 -0
- qiskit/pulse/instructions/reference.py +98 -0
- qiskit/pulse/instructions/snapshot.py +80 -0
- qiskit/pulse/library/__init__.py +97 -0
- qiskit/pulse/library/continuous.py +430 -0
- qiskit/pulse/library/pulse.py +146 -0
- qiskit/pulse/library/samplers/__init__.py +15 -0
- qiskit/pulse/library/samplers/decorators.py +295 -0
- qiskit/pulse/library/samplers/strategies.py +71 -0
- qiskit/pulse/library/symbolic_pulses.py +1960 -0
- qiskit/pulse/library/waveform.py +134 -0
- qiskit/pulse/macros.py +262 -0
- qiskit/pulse/parameter_manager.py +445 -0
- qiskit/pulse/parser.py +314 -0
- qiskit/pulse/reference_manager.py +58 -0
- qiskit/pulse/schedule.py +1855 -0
- qiskit/pulse/transforms/__init__.py +106 -0
- qiskit/pulse/transforms/alignments.py +404 -0
- qiskit/pulse/transforms/base_transforms.py +71 -0
- qiskit/pulse/transforms/canonicalization.py +498 -0
- qiskit/pulse/transforms/dag.py +115 -0
- qiskit/pulse/utils.py +149 -0
- qiskit/qasm/libs/dummy/stdgates.inc +75 -0
- qiskit/qasm/libs/qelib1.inc +266 -0
- qiskit/qasm/libs/stdgates.inc +82 -0
- qiskit/qasm2/__init__.py +654 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +370 -0
- qiskit/qasm2/parse.py +408 -0
- qiskit/qasm3/__init__.py +366 -0
- qiskit/qasm3/ast.py +630 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1273 -0
- qiskit/qasm3/printer.py +577 -0
- qiskit/qobj/__init__.py +75 -0
- qiskit/qobj/common.py +81 -0
- qiskit/qobj/converters/__init__.py +18 -0
- qiskit/qobj/converters/lo_config.py +177 -0
- qiskit/qobj/converters/pulse_instruction.py +895 -0
- qiskit/qobj/pulse_qobj.py +709 -0
- qiskit/qobj/qasm_qobj.py +708 -0
- qiskit/qobj/utils.py +46 -0
- qiskit/qpy/__init__.py +1641 -0
- qiskit/qpy/binary_io/__init__.py +36 -0
- qiskit/qpy/binary_io/circuits.py +1460 -0
- qiskit/qpy/binary_io/schedules.py +636 -0
- qiskit/qpy/binary_io/value.py +728 -0
- qiskit/qpy/common.py +306 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +394 -0
- qiskit/qpy/interface.py +341 -0
- qiskit/qpy/type_keys.py +572 -0
- qiskit/quantum_info/__init__.py +158 -0
- qiskit/quantum_info/analysis/__init__.py +17 -0
- qiskit/quantum_info/analysis/average.py +47 -0
- qiskit/quantum_info/analysis/distance.py +102 -0
- qiskit/quantum_info/analysis/make_observable.py +44 -0
- qiskit/quantum_info/analysis/z2_symmetries.py +484 -0
- qiskit/quantum_info/operators/__init__.py +28 -0
- qiskit/quantum_info/operators/base_operator.py +145 -0
- qiskit/quantum_info/operators/channel/__init__.py +29 -0
- qiskit/quantum_info/operators/channel/chi.py +191 -0
- qiskit/quantum_info/operators/channel/choi.py +218 -0
- qiskit/quantum_info/operators/channel/kraus.py +337 -0
- qiskit/quantum_info/operators/channel/ptm.py +204 -0
- qiskit/quantum_info/operators/channel/quantum_channel.py +348 -0
- qiskit/quantum_info/operators/channel/stinespring.py +296 -0
- qiskit/quantum_info/operators/channel/superop.py +377 -0
- qiskit/quantum_info/operators/channel/transformations.py +468 -0
- qiskit/quantum_info/operators/custom_iterator.py +48 -0
- qiskit/quantum_info/operators/dihedral/__init__.py +18 -0
- qiskit/quantum_info/operators/dihedral/dihedral.py +509 -0
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +216 -0
- qiskit/quantum_info/operators/dihedral/polynomial.py +313 -0
- qiskit/quantum_info/operators/dihedral/random.py +64 -0
- qiskit/quantum_info/operators/linear_op.py +25 -0
- qiskit/quantum_info/operators/measures.py +418 -0
- qiskit/quantum_info/operators/mixins/__init__.py +52 -0
- qiskit/quantum_info/operators/mixins/adjoint.py +52 -0
- qiskit/quantum_info/operators/mixins/group.py +171 -0
- qiskit/quantum_info/operators/mixins/linear.py +84 -0
- qiskit/quantum_info/operators/mixins/multiply.py +62 -0
- qiskit/quantum_info/operators/mixins/tolerances.py +72 -0
- qiskit/quantum_info/operators/op_shape.py +525 -0
- qiskit/quantum_info/operators/operator.py +819 -0
- qiskit/quantum_info/operators/operator_utils.py +76 -0
- qiskit/quantum_info/operators/predicates.py +183 -0
- qiskit/quantum_info/operators/random.py +154 -0
- qiskit/quantum_info/operators/scalar_op.py +254 -0
- qiskit/quantum_info/operators/symplectic/__init__.py +23 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +727 -0
- qiskit/quantum_info/operators/symplectic/clifford.py +1030 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +751 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1230 -0
- qiskit/quantum_info/operators/symplectic/pauli_utils.py +40 -0
- qiskit/quantum_info/operators/symplectic/random.py +117 -0
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +1175 -0
- qiskit/quantum_info/operators/utils/__init__.py +20 -0
- qiskit/quantum_info/operators/utils/anti_commutator.py +36 -0
- qiskit/quantum_info/operators/utils/commutator.py +36 -0
- qiskit/quantum_info/operators/utils/double_commutator.py +76 -0
- qiskit/quantum_info/quaternion.py +156 -0
- qiskit/quantum_info/random.py +26 -0
- qiskit/quantum_info/states/__init__.py +28 -0
- qiskit/quantum_info/states/densitymatrix.py +845 -0
- qiskit/quantum_info/states/measures.py +288 -0
- qiskit/quantum_info/states/quantum_state.py +503 -0
- qiskit/quantum_info/states/random.py +157 -0
- qiskit/quantum_info/states/stabilizerstate.py +773 -0
- qiskit/quantum_info/states/statevector.py +958 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +73 -0
- qiskit/result/counts.py +189 -0
- qiskit/result/distributions/__init__.py +17 -0
- qiskit/result/distributions/probability.py +100 -0
- qiskit/result/distributions/quasi.py +154 -0
- qiskit/result/exceptions.py +40 -0
- qiskit/result/mitigation/__init__.py +13 -0
- qiskit/result/mitigation/base_readout_mitigator.py +79 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +269 -0
- qiskit/result/mitigation/local_readout_mitigator.py +320 -0
- qiskit/result/mitigation/utils.py +160 -0
- qiskit/result/models.py +234 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +392 -0
- qiskit/result/sampled_expval.py +75 -0
- qiskit/result/utils.py +295 -0
- qiskit/scheduler/__init__.py +40 -0
- qiskit/scheduler/config.py +35 -0
- qiskit/scheduler/lowering.py +187 -0
- qiskit/scheduler/methods/__init__.py +15 -0
- qiskit/scheduler/methods/basic.py +137 -0
- qiskit/scheduler/schedule_circuit.py +67 -0
- qiskit/scheduler/sequence.py +102 -0
- qiskit/synthesis/__init__.py +195 -0
- qiskit/synthesis/clifford/__init__.py +19 -0
- qiskit/synthesis/clifford/clifford_decompose_ag.py +178 -0
- qiskit/synthesis/clifford/clifford_decompose_bm.py +47 -0
- qiskit/synthesis/clifford/clifford_decompose_full.py +64 -0
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +57 -0
- qiskit/synthesis/clifford/clifford_decompose_layers.py +446 -0
- qiskit/synthesis/cnotdihedral/__init__.py +17 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +52 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +141 -0
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_two_qubits.py +266 -0
- qiskit/synthesis/discrete_basis/__init__.py +16 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +241 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +415 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +163 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +217 -0
- qiskit/synthesis/evolution/__init__.py +20 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +143 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/product_formula.py +384 -0
- qiskit/synthesis/evolution/qdrift.py +131 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +155 -0
- qiskit/synthesis/linear/__init__.py +26 -0
- qiskit/synthesis/linear/cnot_synth.py +69 -0
- qiskit/synthesis/linear/linear_circuits_utils.py +128 -0
- qiskit/synthesis/linear/linear_depth_lnn.py +276 -0
- qiskit/synthesis/linear/linear_matrix_utils.py +27 -0
- qiskit/synthesis/linear_phase/__init__.py +17 -0
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +206 -0
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +262 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +23 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +356 -0
- qiskit/synthesis/one_qubit/__init__.py +15 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +288 -0
- qiskit/synthesis/permutation/__init__.py +18 -0
- qiskit/synthesis/permutation/permutation_full.py +78 -0
- qiskit/synthesis/permutation/permutation_lnn.py +54 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +93 -0
- qiskit/synthesis/permutation/permutation_utils.py +16 -0
- qiskit/synthesis/qft/__init__.py +16 -0
- qiskit/synthesis/qft/qft_decompose_full.py +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +78 -0
- qiskit/synthesis/stabilizer/__init__.py +16 -0
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +149 -0
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +193 -0
- qiskit/synthesis/two_qubit/__init__.py +19 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +759 -0
- qiskit/synthesis/two_qubit/weyl.py +97 -0
- qiskit/synthesis/two_qubit/xx_decompose/__init__.py +19 -0
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +300 -0
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +324 -0
- qiskit/synthesis/two_qubit/xx_decompose/embodiments.py +163 -0
- qiskit/synthesis/two_qubit/xx_decompose/paths.py +412 -0
- qiskit/synthesis/two_qubit/xx_decompose/polytopes.py +262 -0
- qiskit/synthesis/two_qubit/xx_decompose/utilities.py +40 -0
- qiskit/synthesis/two_qubit/xx_decompose/weyl.py +133 -0
- qiskit/synthesis/unitary/__init__.py +13 -0
- qiskit/synthesis/unitary/aqc/__init__.py +177 -0
- qiskit/synthesis/unitary/aqc/approximate.py +116 -0
- qiskit/synthesis/unitary/aqc/aqc.py +175 -0
- qiskit/synthesis/unitary/aqc/cnot_structures.py +300 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_circuit.py +103 -0
- qiskit/synthesis/unitary/aqc/cnot_unit_objective.py +299 -0
- qiskit/synthesis/unitary/aqc/elementary_operations.py +108 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/__init__.py +164 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_grad_utils.py +237 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +226 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/layer.py +370 -0
- qiskit/synthesis/unitary/aqc/fast_gradient/pmatrix.py +312 -0
- qiskit/synthesis/unitary/qsd.py +288 -0
- qiskit/transpiler/__init__.py +1283 -0
- qiskit/transpiler/basepasses.py +221 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +737 -0
- qiskit/transpiler/passes/__init__.py +310 -0
- qiskit/transpiler/passes/analysis/__init__.py +23 -0
- qiskit/transpiler/passes/analysis/count_ops.py +30 -0
- qiskit/transpiler/passes/analysis/count_ops_longest_path.py +26 -0
- qiskit/transpiler/passes/analysis/dag_longest_path.py +24 -0
- qiskit/transpiler/passes/analysis/depth.py +33 -0
- qiskit/transpiler/passes/analysis/num_qubits.py +26 -0
- qiskit/transpiler/passes/analysis/num_tensor_factors.py +26 -0
- qiskit/transpiler/passes/analysis/resource_estimation.py +41 -0
- qiskit/transpiler/passes/analysis/size.py +36 -0
- qiskit/transpiler/passes/analysis/width.py +27 -0
- qiskit/transpiler/passes/basis/__init__.py +19 -0
- qiskit/transpiler/passes/basis/basis_translator.py +693 -0
- qiskit/transpiler/passes/basis/decompose.py +98 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +88 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +109 -0
- qiskit/transpiler/passes/calibration/__init__.py +17 -0
- qiskit/transpiler/passes/calibration/base_builder.py +79 -0
- qiskit/transpiler/passes/calibration/builders.py +20 -0
- qiskit/transpiler/passes/calibration/exceptions.py +22 -0
- qiskit/transpiler/passes/calibration/pulse_gate.py +98 -0
- qiskit/transpiler/passes/calibration/rx_builder.py +160 -0
- qiskit/transpiler/passes/calibration/rzx_builder.py +395 -0
- qiskit/transpiler/passes/calibration/rzx_templates.py +51 -0
- qiskit/transpiler/passes/layout/__init__.py +26 -0
- qiskit/transpiler/passes/layout/_csp_custom_solver.py +65 -0
- qiskit/transpiler/passes/layout/apply_layout.py +123 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +202 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +217 -0
- qiskit/transpiler/passes/layout/enlarge_with_ancilla.py +49 -0
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +117 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +482 -0
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +220 -0
- qiskit/transpiler/passes/layout/set_layout.py +69 -0
- qiskit/transpiler/passes/layout/trivial_layout.py +66 -0
- qiskit/transpiler/passes/layout/vf2_layout.py +263 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +419 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +260 -0
- qiskit/transpiler/passes/optimization/__init__.py +42 -0
- qiskit/transpiler/passes/optimization/_gate_extension.py +80 -0
- qiskit/transpiler/passes/optimization/collect_1q_runs.py +31 -0
- qiskit/transpiler/passes/optimization/collect_2q_blocks.py +35 -0
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +115 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +88 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +80 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +227 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +44 -0
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +82 -0
- qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +140 -0
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +232 -0
- qiskit/transpiler/passes/optimization/cx_cancellation.py +65 -0
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +160 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
- qiskit/transpiler/passes/optimization/hoare_opt.py +420 -0
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +93 -0
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +149 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +268 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +260 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +448 -0
- qiskit/transpiler/passes/optimization/optimize_cliffords.py +89 -0
- qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +71 -0
- qiskit/transpiler/passes/optimization/remove_diagonal_gates_before_measure.py +41 -0
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +47 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +40 -0
- qiskit/transpiler/passes/optimization/template_matching/__init__.py +19 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +749 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +452 -0
- qiskit/transpiler/passes/optimization/template_matching/maximal_matches.py +77 -0
- qiskit/transpiler/passes/optimization/template_matching/template_matching.py +370 -0
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +638 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +22 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +166 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/__init__.py +25 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_block.py +60 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +395 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +145 -0
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +306 -0
- qiskit/transpiler/passes/routing/layout_transformation.py +119 -0
- qiskit/transpiler/passes/routing/lookahead_swap.py +390 -0
- qiskit/transpiler/passes/routing/sabre_swap.py +443 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +392 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +532 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +27 -0
- qiskit/transpiler/passes/scheduling/alap.py +153 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +81 -0
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +255 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +78 -0
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +105 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +250 -0
- qiskit/transpiler/passes/scheduling/asap.py +175 -0
- qiskit/transpiler/passes/scheduling/base_scheduler.py +308 -0
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +307 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +256 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +441 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +79 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +127 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +131 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +160 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +691 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +928 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +734 -0
- qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +297 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +1055 -0
- qiskit/transpiler/passes/utils/__init__.py +33 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +95 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +52 -0
- qiskit/transpiler/passes/utils/check_map.py +78 -0
- qiskit/transpiler/passes/utils/contains_instruction.py +45 -0
- qiskit/transpiler/passes/utils/control_flow.py +65 -0
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +88 -0
- qiskit/transpiler/passes/utils/dag_fixed_point.py +36 -0
- qiskit/transpiler/passes/utils/error.py +69 -0
- qiskit/transpiler/passes/utils/filter_op_nodes.py +65 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +349 -0
- qiskit/transpiler/passes/utils/gates_basis.py +74 -0
- qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +162 -0
- qiskit/transpiler/passes/utils/minimum_point.py +118 -0
- qiskit/transpiler/passes/utils/remove_barriers.py +49 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +114 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +490 -0
- qiskit/transpiler/passmanager_config.py +198 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +73 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1019 -0
- qiskit/transpiler/preset_passmanagers/common.py +647 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +543 -0
- qiskit/transpiler/preset_passmanagers/level0.py +113 -0
- qiskit/transpiler/preset_passmanagers/level1.py +120 -0
- qiskit/transpiler/preset_passmanagers/level2.py +119 -0
- qiskit/transpiler/preset_passmanagers/level3.py +119 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +353 -0
- qiskit/transpiler/target.py +1261 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +262 -0
- qiskit/utils/__init__.py +89 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +490 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/multiprocessing.py +56 -0
- qiskit/utils/optionals.py +347 -0
- qiskit/utils/parallel.py +191 -0
- qiskit/utils/units.py +143 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +288 -0
- qiskit/visualization/array.py +204 -0
- qiskit/visualization/bloch.py +778 -0
- qiskit/visualization/circuit/__init__.py +15 -0
- qiskit/visualization/circuit/_utils.py +675 -0
- qiskit/visualization/circuit/circuit_visualization.py +726 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2029 -0
- qiskit/visualization/circuit/qcstyle.py +278 -0
- qiskit/visualization/circuit/styles/__init__.py +13 -0
- qiskit/visualization/circuit/styles/bw.json +202 -0
- qiskit/visualization/circuit/styles/clifford.json +202 -0
- qiskit/visualization/circuit/styles/iqp-dark.json +214 -0
- qiskit/visualization/circuit/styles/iqp.json +214 -0
- qiskit/visualization/circuit/styles/textbook.json +202 -0
- qiskit/visualization/circuit/text.py +1844 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +481 -0
- qiskit/visualization/dag_visualization.py +316 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1485 -0
- qiskit/visualization/library.py +37 -0
- qiskit/visualization/pass_manager_visualization.py +319 -0
- qiskit/visualization/pulse_v2/__init__.py +21 -0
- qiskit/visualization/pulse_v2/core.py +901 -0
- qiskit/visualization/pulse_v2/device_info.py +173 -0
- qiskit/visualization/pulse_v2/drawings.py +253 -0
- qiskit/visualization/pulse_v2/events.py +254 -0
- qiskit/visualization/pulse_v2/generators/__init__.py +40 -0
- qiskit/visualization/pulse_v2/generators/barrier.py +76 -0
- qiskit/visualization/pulse_v2/generators/chart.py +208 -0
- qiskit/visualization/pulse_v2/generators/frame.py +436 -0
- qiskit/visualization/pulse_v2/generators/snapshot.py +133 -0
- qiskit/visualization/pulse_v2/generators/waveform.py +645 -0
- qiskit/visualization/pulse_v2/interface.py +456 -0
- qiskit/visualization/pulse_v2/layouts.py +387 -0
- qiskit/visualization/pulse_v2/plotters/__init__.py +17 -0
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +53 -0
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +201 -0
- qiskit/visualization/pulse_v2/stylesheet.py +312 -0
- qiskit/visualization/pulse_v2/types.py +242 -0
- qiskit/visualization/state_visualization.py +1518 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +457 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +424 -0
- qiskit/visualization/timeline/layouts.py +115 -0
- qiskit/visualization/timeline/plotters/__init__.py +16 -0
- qiskit/visualization/timeline/plotters/base_plotter.py +58 -0
- qiskit/visualization/timeline/plotters/matplotlib.py +192 -0
- qiskit/visualization/timeline/stylesheet.py +301 -0
- qiskit/visualization/timeline/types.py +148 -0
- qiskit/visualization/transition_visualization.py +369 -0
- qiskit/visualization/utils.py +49 -0
- qiskit-1.3.0b1.dist-info/LICENSE.txt +203 -0
- qiskit-1.3.0b1.dist-info/METADATA +221 -0
- qiskit-1.3.0b1.dist-info/RECORD +825 -0
- qiskit-1.3.0b1.dist-info/WHEEL +5 -0
- qiskit-1.3.0b1.dist-info/entry_points.txt +57 -0
- qiskit-1.3.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2021.
|
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
|
+
"""Phase Oracle object."""
|
14
|
+
|
15
|
+
# Needed to avoid type hints from erroring when `classicalfunction` might not be available.
|
16
|
+
from __future__ import annotations
|
17
|
+
|
18
|
+
from typing import Union, Callable, Optional, TYPE_CHECKING
|
19
|
+
|
20
|
+
from qiskit.circuit import QuantumCircuit
|
21
|
+
from qiskit.utils import optionals as _optionals
|
22
|
+
|
23
|
+
if TYPE_CHECKING:
|
24
|
+
from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
|
25
|
+
from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
|
26
|
+
|
27
|
+
|
28
|
+
@_optionals.HAS_TWEEDLEDUM.require_in_instance
|
29
|
+
class PhaseOracle(QuantumCircuit):
|
30
|
+
r"""Phase Oracle.
|
31
|
+
|
32
|
+
The Phase Oracle object constructs circuits for any arbitrary
|
33
|
+
input logical expressions. A logical expression is composed of logical operators
|
34
|
+
`&` (`AND`), `|` (`OR`), `~` (`NOT`), and `^` (`XOR`).
|
35
|
+
as well as symbols for literals (variables).
|
36
|
+
For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
|
37
|
+
are both valid string representation of boolean logical expressions.
|
38
|
+
|
39
|
+
For convenience, this oracle, in addition to parsing arbitrary logical expressions,
|
40
|
+
also supports input strings in the `DIMACS CNF format
|
41
|
+
<http://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
42
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
43
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
44
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
45
|
+
or more literals. See :meth:`qiskit.circuit.library.phase_oracle.PhaseOracle.from_dimacs_file`.
|
46
|
+
|
47
|
+
From 16 variables on, possible performance issues should be expected when using the
|
48
|
+
default synthesizer.
|
49
|
+
"""
|
50
|
+
|
51
|
+
def __init__(
|
52
|
+
self,
|
53
|
+
expression: Union[str, ClassicalElement],
|
54
|
+
synthesizer: Optional[Callable[[BooleanExpression], QuantumCircuit]] = None,
|
55
|
+
var_order: list = None,
|
56
|
+
) -> None:
|
57
|
+
"""Creates a PhaseOracle object
|
58
|
+
|
59
|
+
Args:
|
60
|
+
expression: A Python-like boolean expression.
|
61
|
+
synthesizer: Optional. A function to convert a BooleanExpression into a QuantumCircuit
|
62
|
+
If None is provided, Tweedledum's `pkrm_synth` with `phase_esop` will be used.
|
63
|
+
var_order(list): A list with the order in which variables will be created.
|
64
|
+
(default: by appearance)
|
65
|
+
"""
|
66
|
+
from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
|
67
|
+
from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
|
68
|
+
|
69
|
+
if not isinstance(expression, ClassicalElement):
|
70
|
+
expression = BooleanExpression(expression, var_order=var_order)
|
71
|
+
|
72
|
+
self.boolean_expression = expression
|
73
|
+
|
74
|
+
if synthesizer is None:
|
75
|
+
|
76
|
+
def synthesizer(boolean_expression):
|
77
|
+
from tweedledum.synthesis import pkrm_synth # pylint: disable=import-error
|
78
|
+
from qiskit.circuit.classicalfunction.utils import tweedledum2qiskit
|
79
|
+
|
80
|
+
truth_table = boolean_expression._tweedledum_bool_expression.truth_table(
|
81
|
+
output_bit=0
|
82
|
+
)
|
83
|
+
tweedledum_circuit = pkrm_synth(truth_table, {"pkrm_synth": {"phase_esop": True}})
|
84
|
+
return tweedledum2qiskit(tweedledum_circuit)
|
85
|
+
|
86
|
+
oracle = expression.synth(synthesizer=synthesizer)
|
87
|
+
|
88
|
+
super().__init__(oracle.num_qubits, name="Phase Oracle")
|
89
|
+
|
90
|
+
self.compose(oracle, inplace=True, copy=False)
|
91
|
+
|
92
|
+
def evaluate_bitstring(self, bitstring: str) -> bool:
|
93
|
+
"""Evaluate the oracle on a bitstring.
|
94
|
+
This evaluation is done classically without any quantum circuit.
|
95
|
+
|
96
|
+
Args:
|
97
|
+
bitstring: The bitstring for which to evaluate. The input bitstring is expected to be
|
98
|
+
in little-endian order.
|
99
|
+
|
100
|
+
Returns:
|
101
|
+
True if the bitstring is a good state, False otherwise.
|
102
|
+
"""
|
103
|
+
return self.boolean_expression.simulate(bitstring[::-1])
|
104
|
+
|
105
|
+
@classmethod
|
106
|
+
def from_dimacs_file(cls, filename: str):
|
107
|
+
r"""Create a PhaseOracle from the string in the DIMACS format.
|
108
|
+
|
109
|
+
It is possible to build a PhaseOracle from a file in `DIMACS CNF format
|
110
|
+
<http://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
|
111
|
+
which is the standard format for specifying SATisfiability (SAT) problem instances in
|
112
|
+
`Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
|
113
|
+
which is a conjunction of one or more clauses, where a clause is a disjunction of one
|
114
|
+
or more literals.
|
115
|
+
|
116
|
+
The following is an example of a CNF expressed in the DIMACS format:
|
117
|
+
|
118
|
+
.. code:: text
|
119
|
+
|
120
|
+
c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
|
121
|
+
p cnf 3 5
|
122
|
+
-1 -2 -3 0
|
123
|
+
1 -2 3 0
|
124
|
+
1 2 -3 0
|
125
|
+
1 -2 -3 0
|
126
|
+
-1 2 3 0
|
127
|
+
|
128
|
+
The first line, following the `c` character, is a comment. The second line specifies that
|
129
|
+
the CNF is over three boolean variables --- let us call them :math:`x_1, x_2, x_3`, and
|
130
|
+
contains five clauses. The five clauses, listed afterwards, are implicitly joined by the
|
131
|
+
logical `AND` operator, :math:`\land`, while the variables in each clause, represented by
|
132
|
+
their indices, are implicitly disjoined by the logical `OR` operator, :math:`lor`. The
|
133
|
+
:math:`-` symbol preceding a boolean variable index corresponds to the logical `NOT`
|
134
|
+
operator, :math:`lnot`. Character `0` (zero) marks the end of each clause. Essentially,
|
135
|
+
the code above corresponds to the following CNF:
|
136
|
+
|
137
|
+
:math:`(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)
|
138
|
+
\land (x_1 \lor \lnot x_2 \lor x_3)
|
139
|
+
\land (x_1 \lor x_2 \lor \lnot x_3)
|
140
|
+
\land (x_1 \lor \lnot x_2 \lor \lnot x_3)
|
141
|
+
\land (\lnot x_1 \lor x_2 \lor x_3)`.
|
142
|
+
|
143
|
+
|
144
|
+
Args:
|
145
|
+
filename: A file in DIMACS format.
|
146
|
+
|
147
|
+
Returns:
|
148
|
+
PhaseOracle: A quantum circuit with a phase oracle.
|
149
|
+
"""
|
150
|
+
from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
|
151
|
+
|
152
|
+
expr = BooleanExpression.from_dimacs_file(filename)
|
153
|
+
return cls(expr)
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Quantum Volume model circuit."""
|
14
|
+
|
15
|
+
from typing import Optional, Union
|
16
|
+
|
17
|
+
import numpy as np
|
18
|
+
from qiskit.circuit import QuantumCircuit, CircuitInstruction
|
19
|
+
from qiskit.circuit.library.generalized_gates import PermutationGate, UnitaryGate
|
20
|
+
|
21
|
+
|
22
|
+
class QuantumVolume(QuantumCircuit):
|
23
|
+
"""A quantum volume model circuit.
|
24
|
+
|
25
|
+
The model circuits are random instances of circuits used to measure
|
26
|
+
the Quantum Volume metric, as introduced in [1].
|
27
|
+
|
28
|
+
The model circuits consist of layers of Haar random
|
29
|
+
elements of SU(4) applied between corresponding pairs
|
30
|
+
of qubits in a random bipartition.
|
31
|
+
|
32
|
+
**Reference Circuit:**
|
33
|
+
|
34
|
+
.. plot::
|
35
|
+
|
36
|
+
from qiskit.circuit.library import QuantumVolume
|
37
|
+
circuit = QuantumVolume(5, 6, seed=10)
|
38
|
+
circuit.draw('mpl')
|
39
|
+
|
40
|
+
**Expanded Circuit:**
|
41
|
+
|
42
|
+
.. plot::
|
43
|
+
|
44
|
+
from qiskit.circuit.library import QuantumVolume
|
45
|
+
from qiskit.visualization.library import _generate_circuit_library_visualization
|
46
|
+
circuit = QuantumVolume(5, 6, seed=10, classical_permutation=False)
|
47
|
+
_generate_circuit_library_visualization(circuit.decompose())
|
48
|
+
|
49
|
+
**References:**
|
50
|
+
|
51
|
+
[1] A. Cross et al. Validating quantum computers using
|
52
|
+
randomized model circuits, Phys. Rev. A 100, 032328 (2019).
|
53
|
+
[`arXiv:1811.12926 <https://arxiv.org/abs/1811.12926>`_]
|
54
|
+
"""
|
55
|
+
|
56
|
+
def __init__(
|
57
|
+
self,
|
58
|
+
num_qubits: int,
|
59
|
+
depth: Optional[int] = None,
|
60
|
+
seed: Optional[Union[int, np.random.Generator]] = None,
|
61
|
+
classical_permutation: bool = True,
|
62
|
+
*,
|
63
|
+
flatten: bool = False,
|
64
|
+
) -> None:
|
65
|
+
"""Create quantum volume model circuit of size num_qubits x depth.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
num_qubits: number of active qubits in model circuit.
|
69
|
+
depth: layers of SU(4) operations in model circuit.
|
70
|
+
seed: Random number generator or generator seed.
|
71
|
+
classical_permutation: use classical permutations at every layer,
|
72
|
+
rather than quantum.
|
73
|
+
flatten: If ``False`` (the default), construct a circuit that contains a single
|
74
|
+
instruction, which in turn has the actual volume structure. If ``True``, construct
|
75
|
+
the volume structure directly.
|
76
|
+
"""
|
77
|
+
import scipy.stats
|
78
|
+
|
79
|
+
# Parameters
|
80
|
+
depth = depth or num_qubits # how many layers of SU(4)
|
81
|
+
width = num_qubits // 2 # how many SU(4)s fit in each layer
|
82
|
+
rng = seed if isinstance(seed, np.random.Generator) else np.random.default_rng(seed)
|
83
|
+
if seed is None:
|
84
|
+
# Get the internal entropy used to seed the default RNG, if no seed was given. This
|
85
|
+
# stays in the output name, so effectively stores a way of regenerating the circuit.
|
86
|
+
# This is just best-effort only, for backwards compatibility, and isn't critical (if
|
87
|
+
# someone needs full reproducibility, they should be manually controlling the seeding).
|
88
|
+
seed = getattr(getattr(rng.bit_generator, "seed_seq", None), "entropy", None)
|
89
|
+
|
90
|
+
super().__init__(
|
91
|
+
num_qubits, name="quantum_volume_" + str([num_qubits, depth, seed]).replace(" ", "")
|
92
|
+
)
|
93
|
+
base = self if flatten else QuantumCircuit(num_qubits, name=self.name)
|
94
|
+
|
95
|
+
# For each layer, generate a permutation of qubits
|
96
|
+
# Then generate and apply a Haar-random SU(4) to each pair
|
97
|
+
unitaries = scipy.stats.unitary_group.rvs(4, depth * width, rng).reshape(depth, width, 4, 4)
|
98
|
+
qubits = tuple(base.qubits)
|
99
|
+
for row in unitaries:
|
100
|
+
perm = rng.permutation(num_qubits)
|
101
|
+
if classical_permutation:
|
102
|
+
for w, unitary in enumerate(row):
|
103
|
+
gate = UnitaryGate(unitary, check_input=False, num_qubits=2)
|
104
|
+
qubit = 2 * w
|
105
|
+
base._append(
|
106
|
+
CircuitInstruction(gate, (qubits[perm[qubit]], qubits[perm[qubit + 1]]))
|
107
|
+
)
|
108
|
+
else:
|
109
|
+
base._append(CircuitInstruction(PermutationGate(perm), qubits))
|
110
|
+
for w, unitary in enumerate(row):
|
111
|
+
gate = UnitaryGate(unitary, check_input=False, num_qubits=2)
|
112
|
+
qubit = 2 * w
|
113
|
+
base._append(CircuitInstruction(gate, qubits[qubit : qubit + 2]))
|
114
|
+
if not flatten:
|
115
|
+
self._append(CircuitInstruction(base.to_instruction(), tuple(self.qubits)))
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Standard gates
|
15
|
+
"""
|
16
|
+
|
17
|
+
from .h import HGate, CHGate
|
18
|
+
from .i import IGate
|
19
|
+
from .p import PhaseGate, CPhaseGate, MCPhaseGate
|
20
|
+
from .r import RGate
|
21
|
+
from .rx import RXGate, CRXGate
|
22
|
+
from .rxx import RXXGate
|
23
|
+
from .ry import RYGate, CRYGate
|
24
|
+
from .ryy import RYYGate
|
25
|
+
from .rz import RZGate, CRZGate
|
26
|
+
from .rzz import RZZGate
|
27
|
+
from .rzx import RZXGate
|
28
|
+
from .xx_minus_yy import XXMinusYYGate
|
29
|
+
from .xx_plus_yy import XXPlusYYGate
|
30
|
+
from .ecr import ECRGate
|
31
|
+
from .s import SGate, SdgGate, CSGate, CSdgGate
|
32
|
+
from .swap import SwapGate, CSwapGate
|
33
|
+
from .iswap import iSwapGate
|
34
|
+
from .sx import SXGate, SXdgGate, CSXGate
|
35
|
+
from .dcx import DCXGate
|
36
|
+
from .t import TGate, TdgGate
|
37
|
+
from .u import UGate, CUGate
|
38
|
+
from .u1 import U1Gate, CU1Gate, MCU1Gate
|
39
|
+
from .u2 import U2Gate
|
40
|
+
from .u3 import U3Gate, CU3Gate
|
41
|
+
from .x import XGate, CXGate, CCXGate, C3XGate, C3SXGate, C4XGate, RCCXGate, RC3XGate
|
42
|
+
from .x import MCXGate, MCXGrayCode, MCXRecursive, MCXVChain
|
43
|
+
from .y import YGate, CYGate
|
44
|
+
from .z import ZGate, CZGate, CCZGate
|
45
|
+
from .global_phase import GlobalPhaseGate
|
46
|
+
from .multi_control_rotation_gates import mcrx, mcry, mcrz
|
47
|
+
|
48
|
+
|
49
|
+
def get_standard_gate_name_mapping():
|
50
|
+
"""Return a dictionary mapping the name of standard gates and instructions to an object for
|
51
|
+
that name."""
|
52
|
+
from qiskit.circuit.parameter import Parameter
|
53
|
+
from qiskit.circuit.measure import Measure
|
54
|
+
from qiskit.circuit.delay import Delay
|
55
|
+
from qiskit.circuit.reset import Reset
|
56
|
+
|
57
|
+
lambda_ = Parameter("λ")
|
58
|
+
theta = Parameter("ϴ")
|
59
|
+
phi = Parameter("φ")
|
60
|
+
gamma = Parameter("γ")
|
61
|
+
beta = Parameter("β")
|
62
|
+
time = Parameter("t")
|
63
|
+
|
64
|
+
# Standard gates library mapping, multicontrolled gates not included since they're
|
65
|
+
# variable width
|
66
|
+
gates = [
|
67
|
+
IGate(),
|
68
|
+
SXGate(),
|
69
|
+
XGate(),
|
70
|
+
CXGate(),
|
71
|
+
RZGate(lambda_),
|
72
|
+
RGate(theta, phi),
|
73
|
+
C3SXGate(),
|
74
|
+
CCXGate(),
|
75
|
+
DCXGate(),
|
76
|
+
CHGate(),
|
77
|
+
CPhaseGate(theta),
|
78
|
+
CRXGate(theta),
|
79
|
+
CRYGate(theta),
|
80
|
+
CRZGate(theta),
|
81
|
+
CSwapGate(),
|
82
|
+
CSXGate(),
|
83
|
+
CUGate(theta, phi, lambda_, gamma),
|
84
|
+
CU1Gate(lambda_),
|
85
|
+
CU3Gate(theta, phi, lambda_),
|
86
|
+
CYGate(),
|
87
|
+
CZGate(),
|
88
|
+
CCZGate(),
|
89
|
+
GlobalPhaseGate(theta),
|
90
|
+
HGate(),
|
91
|
+
PhaseGate(theta),
|
92
|
+
RCCXGate(),
|
93
|
+
RC3XGate(),
|
94
|
+
RXGate(theta),
|
95
|
+
RXXGate(theta),
|
96
|
+
RYGate(theta),
|
97
|
+
RYYGate(theta),
|
98
|
+
RZZGate(theta),
|
99
|
+
RZXGate(theta),
|
100
|
+
XXMinusYYGate(theta, beta),
|
101
|
+
XXPlusYYGate(theta, beta),
|
102
|
+
ECRGate(),
|
103
|
+
SGate(),
|
104
|
+
SdgGate(),
|
105
|
+
CSGate(),
|
106
|
+
CSdgGate(),
|
107
|
+
SwapGate(),
|
108
|
+
iSwapGate(),
|
109
|
+
SXdgGate(),
|
110
|
+
TGate(),
|
111
|
+
TdgGate(),
|
112
|
+
UGate(theta, phi, lambda_),
|
113
|
+
U1Gate(lambda_),
|
114
|
+
U2Gate(phi, lambda_),
|
115
|
+
U3Gate(theta, phi, lambda_),
|
116
|
+
YGate(),
|
117
|
+
ZGate(),
|
118
|
+
Delay(time),
|
119
|
+
Reset(),
|
120
|
+
Measure(),
|
121
|
+
]
|
122
|
+
name_mapping = {gate.name: gate for gate in gates}
|
123
|
+
return name_mapping
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Double-CNOT gate."""
|
14
|
+
|
15
|
+
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
16
|
+
from qiskit.circuit.quantumregister import QuantumRegister
|
17
|
+
from qiskit.circuit._utils import with_gate_array
|
18
|
+
from qiskit._accelerate.circuit import StandardGate
|
19
|
+
|
20
|
+
|
21
|
+
@with_gate_array([[1, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0]])
|
22
|
+
class DCXGate(SingletonGate):
|
23
|
+
r"""Double-CNOT gate.
|
24
|
+
|
25
|
+
A 2-qubit Clifford gate consisting of two back-to-back
|
26
|
+
CNOTs with alternate controls.
|
27
|
+
|
28
|
+
Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
|
29
|
+
with the :meth:`~qiskit.circuit.QuantumCircuit.dcx` method.
|
30
|
+
|
31
|
+
.. parsed-literal::
|
32
|
+
┌───┐
|
33
|
+
q_0: ──■──┤ X ├
|
34
|
+
┌─┴─┐└─┬─┘
|
35
|
+
q_1: ┤ X ├──■──
|
36
|
+
└───┘
|
37
|
+
|
38
|
+
This is a classical logic gate, equivalent to a CNOT-SWAP (CNS) sequence,
|
39
|
+
and locally equivalent to an iSWAP.
|
40
|
+
|
41
|
+
.. math::
|
42
|
+
|
43
|
+
DCX\ q_0, q_1 =
|
44
|
+
\begin{pmatrix}
|
45
|
+
1 & 0 & 0 & 0 \\
|
46
|
+
0 & 0 & 0 & 1 \\
|
47
|
+
0 & 1 & 0 & 0 \\
|
48
|
+
0 & 0 & 1 & 0
|
49
|
+
\end{pmatrix}
|
50
|
+
"""
|
51
|
+
|
52
|
+
_standard_gate = StandardGate.DCXGate
|
53
|
+
|
54
|
+
def __init__(self, label=None, *, duration=None, unit="dt"):
|
55
|
+
"""Create new DCX gate."""
|
56
|
+
super().__init__("dcx", 2, [], label=label, duration=duration, unit=unit)
|
57
|
+
|
58
|
+
_singleton_lookup_key = stdlib_singleton_key()
|
59
|
+
|
60
|
+
def _define(self):
|
61
|
+
"""
|
62
|
+
gate dcx a, b { cx a, b; cx b, a; }
|
63
|
+
"""
|
64
|
+
# pylint: disable=cyclic-import
|
65
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
66
|
+
from .x import CXGate
|
67
|
+
|
68
|
+
q = QuantumRegister(2, "q")
|
69
|
+
qc = QuantumCircuit(q, name=self.name)
|
70
|
+
rules = [(CXGate(), [q[0], q[1]], []), (CXGate(), [q[1], q[0]], [])]
|
71
|
+
for instr, qargs, cargs in rules:
|
72
|
+
qc._append(instr, qargs, cargs)
|
73
|
+
|
74
|
+
self.definition = qc
|
75
|
+
|
76
|
+
def __eq__(self, other):
|
77
|
+
return isinstance(other, DCXGate)
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2021.
|
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
|
+
"""Two-qubit ZX-rotation gate."""
|
14
|
+
from math import sqrt
|
15
|
+
import numpy as np
|
16
|
+
|
17
|
+
from qiskit.circuit._utils import with_gate_array
|
18
|
+
from qiskit.circuit.quantumregister import QuantumRegister
|
19
|
+
from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
|
20
|
+
from qiskit._accelerate.circuit import StandardGate
|
21
|
+
from .rzx import RZXGate
|
22
|
+
from .x import XGate
|
23
|
+
|
24
|
+
|
25
|
+
@with_gate_array(
|
26
|
+
sqrt(0.5) * np.array([[0, 1, 0, 1.0j], [1, 0, -1.0j, 0], [0, 1.0j, 0, 1], [-1.0j, 0, 1, 0]])
|
27
|
+
)
|
28
|
+
class ECRGate(SingletonGate):
|
29
|
+
r"""An echoed cross-resonance gate.
|
30
|
+
|
31
|
+
This gate is maximally entangling and is equivalent to a CNOT up to
|
32
|
+
single-qubit pre-rotations. The echoing procedure mitigates some
|
33
|
+
unwanted terms (terms other than ZX) to cancel in an experiment.
|
34
|
+
More specifically, this gate implements :math:`\frac{1}{\sqrt{2}}(IX-XY)`.
|
35
|
+
|
36
|
+
Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
|
37
|
+
with the :meth:`~qiskit.circuit.QuantumCircuit.ecr` method.
|
38
|
+
|
39
|
+
**Circuit Symbol:**
|
40
|
+
|
41
|
+
.. parsed-literal::
|
42
|
+
|
43
|
+
┌─────────┐ ┌────────────┐┌────────┐┌─────────────┐
|
44
|
+
q_0: ┤0 ├ q_0: ┤0 ├┤ RX(pi) ├┤0 ├
|
45
|
+
│ ECR │ = │ RZX(pi/4) │└────────┘│ RZX(-pi/4) │
|
46
|
+
q_1: ┤1 ├ q_1: ┤1 ├──────────┤1 ├
|
47
|
+
└─────────┘ └────────────┘ └─────────────┘
|
48
|
+
|
49
|
+
**Matrix Representation:**
|
50
|
+
|
51
|
+
.. math::
|
52
|
+
|
53
|
+
ECR\ q_0, q_1 = \frac{1}{\sqrt{2}}
|
54
|
+
\begin{pmatrix}
|
55
|
+
0 & 1 & 0 & i \\
|
56
|
+
1 & 0 & -i & 0 \\
|
57
|
+
0 & i & 0 & 1 \\
|
58
|
+
-i & 0 & 1 & 0
|
59
|
+
\end{pmatrix}
|
60
|
+
|
61
|
+
.. note::
|
62
|
+
|
63
|
+
In Qiskit's convention, higher qubit indices are more significant
|
64
|
+
(little endian convention). In the above example we apply the gate
|
65
|
+
on (q_0, q_1) which results in the :math:`X \otimes Z` tensor order.
|
66
|
+
Instead, if we apply it on (q_1, q_0), the matrix will
|
67
|
+
be :math:`Z \otimes X`:
|
68
|
+
|
69
|
+
.. parsed-literal::
|
70
|
+
|
71
|
+
┌─────────┐
|
72
|
+
q_0: ┤1 ├
|
73
|
+
│ ECR │
|
74
|
+
q_1: ┤0 ├
|
75
|
+
└─────────┘
|
76
|
+
|
77
|
+
.. math::
|
78
|
+
|
79
|
+
ECR\ q_0, q_1 = \frac{1}{\sqrt{2}}
|
80
|
+
\begin{pmatrix}
|
81
|
+
0 & 0 & 1 & i \\
|
82
|
+
0 & 0 & i & 1 \\
|
83
|
+
1 & -i & 0 & 0 \\
|
84
|
+
-i & 1 & 0 & 0
|
85
|
+
\end{pmatrix}
|
86
|
+
"""
|
87
|
+
|
88
|
+
_standard_gate = StandardGate.ECRGate
|
89
|
+
|
90
|
+
def __init__(self, label=None, *, duration=None, unit="dt"):
|
91
|
+
"""Create new ECR gate."""
|
92
|
+
super().__init__("ecr", 2, [], label=label, duration=duration, unit=unit)
|
93
|
+
|
94
|
+
_singleton_lookup_key = stdlib_singleton_key()
|
95
|
+
|
96
|
+
def _define(self):
|
97
|
+
"""
|
98
|
+
gate ecr a, b { rzx(pi/4) a, b; x a; rzx(-pi/4) a, b;}
|
99
|
+
"""
|
100
|
+
# pylint: disable=cyclic-import
|
101
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
102
|
+
|
103
|
+
q = QuantumRegister(2, "q")
|
104
|
+
qc = QuantumCircuit(q, name=self.name)
|
105
|
+
rules = [
|
106
|
+
(RZXGate(np.pi / 4), [q[0], q[1]], []),
|
107
|
+
(XGate(), [q[0]], []),
|
108
|
+
(RZXGate(-np.pi / 4), [q[0], q[1]], []),
|
109
|
+
]
|
110
|
+
for instr, qargs, cargs in rules:
|
111
|
+
qc._append(instr, qargs, cargs)
|
112
|
+
|
113
|
+
self.definition = qc
|
114
|
+
|
115
|
+
def inverse(self, annotated: bool = False):
|
116
|
+
"""Return inverse ECR gate (itself).
|
117
|
+
|
118
|
+
Args:
|
119
|
+
annotated: when set to ``True``, this is typically used to return an
|
120
|
+
:class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
|
121
|
+
:class:`.Gate`. However, for this class this argument is ignored as this gate
|
122
|
+
is self-inverse.
|
123
|
+
|
124
|
+
Returns:
|
125
|
+
ECRGate: inverse gate (self-inverse).
|
126
|
+
"""
|
127
|
+
return ECRGate() # self-inverse
|
128
|
+
|
129
|
+
def __eq__(self, other):
|
130
|
+
return isinstance(other, ECRGate)
|