qiskit 2.0.3__cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit/VERSION.txt +1 -0
- qiskit/__init__.py +141 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/circuit/__init__.py +1343 -0
- qiskit/circuit/_add_control.py +312 -0
- qiskit/circuit/_classical_resource_map.py +150 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/barrier.py +46 -0
- qiskit/circuit/classical/__init__.py +41 -0
- qiskit/circuit/classical/expr/__init__.py +266 -0
- qiskit/circuit/classical/expr/constructors.py +764 -0
- qiskit/circuit/classical/expr/expr.py +498 -0
- qiskit/circuit/classical/expr/visitors.py +375 -0
- qiskit/circuit/classical/types/__init__.py +113 -0
- qiskit/circuit/classical/types/ordering.py +229 -0
- qiskit/circuit/classical/types/types.py +153 -0
- qiskit/circuit/commutation_checker.py +133 -0
- qiskit/circuit/commutation_library.py +20 -0
- qiskit/circuit/controlflow/__init__.py +59 -0
- qiskit/circuit/controlflow/_builder_utils.py +211 -0
- qiskit/circuit/controlflow/box.py +163 -0
- qiskit/circuit/controlflow/break_loop.py +56 -0
- qiskit/circuit/controlflow/builder.py +791 -0
- qiskit/circuit/controlflow/continue_loop.py +56 -0
- qiskit/circuit/controlflow/control_flow.py +94 -0
- qiskit/circuit/controlflow/for_loop.py +218 -0
- qiskit/circuit/controlflow/if_else.py +498 -0
- qiskit/circuit/controlflow/switch_case.py +411 -0
- qiskit/circuit/controlflow/while_loop.py +166 -0
- qiskit/circuit/controlledgate.py +274 -0
- qiskit/circuit/delay.py +157 -0
- qiskit/circuit/duration.py +80 -0
- qiskit/circuit/equivalence.py +94 -0
- qiskit/circuit/equivalence_library.py +18 -0
- qiskit/circuit/exceptions.py +19 -0
- qiskit/circuit/gate.py +261 -0
- qiskit/circuit/instruction.py +564 -0
- qiskit/circuit/instructionset.py +132 -0
- qiskit/circuit/library/__init__.py +984 -0
- qiskit/circuit/library/arithmetic/__init__.py +40 -0
- qiskit/circuit/library/arithmetic/adders/__init__.py +18 -0
- qiskit/circuit/library/arithmetic/adders/adder.py +235 -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 +131 -0
- qiskit/circuit/library/arithmetic/functional_pauli_rotations.py +114 -0
- qiskit/circuit/library/arithmetic/integer_comparator.py +200 -0
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +363 -0
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +243 -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 +201 -0
- qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +108 -0
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +502 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +387 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +493 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +364 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +409 -0
- qiskit/circuit/library/basis_change/__init__.py +15 -0
- qiskit/circuit/library/basis_change/qft.py +316 -0
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +316 -0
- qiskit/circuit/library/boolean_logic/__init__.py +18 -0
- qiskit/circuit/library/boolean_logic/inner_product.py +157 -0
- qiskit/circuit/library/boolean_logic/quantum_and.py +204 -0
- qiskit/circuit/library/boolean_logic/quantum_or.py +206 -0
- qiskit/circuit/library/boolean_logic/quantum_xor.py +167 -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 +160 -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 +175 -0
- qiskit/circuit/library/generalized_gates/gr.py +219 -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 +84 -0
- qiskit/circuit/library/generalized_gates/permutation.py +198 -0
- qiskit/circuit/library/generalized_gates/rv.py +96 -0
- qiskit/circuit/library/generalized_gates/uc.py +303 -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 +217 -0
- qiskit/circuit/library/graph_state.py +172 -0
- qiskit/circuit/library/grover_operator.py +583 -0
- qiskit/circuit/library/hamiltonian_gate.py +142 -0
- qiskit/circuit/library/hidden_linear_function.py +163 -0
- qiskit/circuit/library/iqp.py +180 -0
- qiskit/circuit/library/n_local/__init__.py +45 -0
- qiskit/circuit/library/n_local/efficient_su2.py +282 -0
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +520 -0
- qiskit/circuit/library/n_local/excitation_preserving.py +303 -0
- qiskit/circuit/library/n_local/n_local.py +1477 -0
- qiskit/circuit/library/n_local/pauli_two_design.py +246 -0
- qiskit/circuit/library/n_local/qaoa_ansatz.py +367 -0
- qiskit/circuit/library/n_local/real_amplitudes.py +312 -0
- qiskit/circuit/library/n_local/two_local.py +289 -0
- qiskit/circuit/library/overlap.py +183 -0
- qiskit/circuit/library/pauli_evolution.py +201 -0
- qiskit/circuit/library/phase_estimation.py +177 -0
- qiskit/circuit/library/phase_oracle.py +239 -0
- qiskit/circuit/library/quantum_volume.py +180 -0
- qiskit/circuit/library/standard_gates/__init__.py +141 -0
- qiskit/circuit/library/standard_gates/dcx.py +77 -0
- qiskit/circuit/library/standard_gates/ecr.py +129 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1800 -0
- qiskit/circuit/library/standard_gates/global_phase.py +84 -0
- qiskit/circuit/library/standard_gates/h.py +253 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +133 -0
- qiskit/circuit/library/standard_gates/p.py +422 -0
- qiskit/circuit/library/standard_gates/r.py +114 -0
- qiskit/circuit/library/standard_gates/rx.py +293 -0
- qiskit/circuit/library/standard_gates/rxx.py +180 -0
- qiskit/circuit/library/standard_gates/ry.py +286 -0
- qiskit/circuit/library/standard_gates/ryy.py +180 -0
- qiskit/circuit/library/standard_gates/rz.py +307 -0
- qiskit/circuit/library/standard_gates/rzx.py +226 -0
- qiskit/circuit/library/standard_gates/rzz.py +193 -0
- qiskit/circuit/library/standard_gates/s.py +419 -0
- qiskit/circuit/library/standard_gates/swap.py +281 -0
- qiskit/circuit/library/standard_gates/sx.py +310 -0
- qiskit/circuit/library/standard_gates/t.py +178 -0
- qiskit/circuit/library/standard_gates/u.py +395 -0
- qiskit/circuit/library/standard_gates/u1.py +490 -0
- qiskit/circuit/library/standard_gates/u2.py +145 -0
- qiskit/circuit/library/standard_gates/u3.py +428 -0
- qiskit/circuit/library/standard_gates/x.py +1481 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +202 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +236 -0
- qiskit/circuit/library/standard_gates/y.py +257 -0
- qiskit/circuit/library/standard_gates/z.py +338 -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 +53 -0
- qiskit/circuit/operation.py +68 -0
- qiskit/circuit/parameter.py +179 -0
- qiskit/circuit/parameterexpression.py +703 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +140 -0
- qiskit/circuit/quantumcircuit.py +7540 -0
- qiskit/circuit/quantumcircuitdata.py +136 -0
- qiskit/circuit/random/__init__.py +15 -0
- qiskit/circuit/random/utils.py +366 -0
- qiskit/circuit/reset.py +37 -0
- qiskit/circuit/singleton.py +600 -0
- qiskit/circuit/store.py +89 -0
- qiskit/circuit/tools/__init__.py +16 -0
- qiskit/circuit/tools/pi_check.py +193 -0
- qiskit/circuit/twirling.py +145 -0
- qiskit/compiler/__init__.py +27 -0
- qiskit/compiler/transpiler.py +375 -0
- qiskit/converters/__init__.py +74 -0
- qiskit/converters/circuit_to_dag.py +80 -0
- qiskit/converters/circuit_to_dagdependency.py +49 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +46 -0
- qiskit/converters/circuit_to_gate.py +107 -0
- qiskit/converters/circuit_to_instruction.py +142 -0
- qiskit/converters/dag_to_circuit.py +79 -0
- qiskit/converters/dag_to_dagdependency.py +54 -0
- qiskit/converters/dag_to_dagdependency_v2.py +43 -0
- qiskit/converters/dagdependency_to_circuit.py +40 -0
- qiskit/converters/dagdependency_to_dag.py +48 -0
- qiskit/dagcircuit/__init__.py +55 -0
- qiskit/dagcircuit/collect_blocks.py +407 -0
- qiskit/dagcircuit/dagcircuit.py +24 -0
- qiskit/dagcircuit/dagdependency.py +612 -0
- qiskit/dagcircuit/dagdependency_v2.py +566 -0
- qiskit/dagcircuit/dagdepnode.py +160 -0
- qiskit/dagcircuit/dagnode.py +188 -0
- qiskit/dagcircuit/exceptions.py +42 -0
- qiskit/exceptions.py +153 -0
- qiskit/passmanager/__init__.py +258 -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 +353 -0
- qiskit/primitives/__init__.py +490 -0
- qiskit/primitives/backend_estimator_v2.py +530 -0
- qiskit/primitives/backend_sampler_v2.py +339 -0
- qiskit/primitives/base/__init__.py +20 -0
- qiskit/primitives/base/base_estimator.py +247 -0
- qiskit/primitives/base/base_primitive_job.py +78 -0
- qiskit/primitives/base/base_primitive_v1.py +45 -0
- qiskit/primitives/base/base_result_v1.py +65 -0
- qiskit/primitives/base/base_sampler.py +196 -0
- qiskit/primitives/base/estimator_result_v1.py +46 -0
- qiskit/primitives/base/sampler_result_v1.py +45 -0
- qiskit/primitives/base/validation_v1.py +250 -0
- qiskit/primitives/containers/__init__.py +26 -0
- qiskit/primitives/containers/bindings_array.py +391 -0
- qiskit/primitives/containers/bit_array.py +764 -0
- qiskit/primitives/containers/data_bin.py +175 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +296 -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/primitive_job.py +81 -0
- qiskit/primitives/statevector_estimator.py +175 -0
- qiskit/primitives/statevector_sampler.py +290 -0
- qiskit/primitives/utils.py +72 -0
- qiskit/providers/__init__.py +677 -0
- qiskit/providers/backend.py +364 -0
- qiskit/providers/basic_provider/__init__.py +47 -0
- qiskit/providers/basic_provider/basic_provider.py +121 -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 +693 -0
- qiskit/providers/basic_provider/exceptions.py +30 -0
- qiskit/providers/exceptions.py +33 -0
- qiskit/providers/fake_provider/__init__.py +69 -0
- qiskit/providers/fake_provider/generic_backend_v2.py +374 -0
- qiskit/providers/fake_provider/utils/__init__.py +15 -0
- qiskit/providers/job.py +147 -0
- qiskit/providers/jobstatus.py +30 -0
- qiskit/providers/options.py +273 -0
- qiskit/providers/providerutils.py +110 -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 +669 -0
- qiskit/qasm2/exceptions.py +27 -0
- qiskit/qasm2/export.py +364 -0
- qiskit/qasm2/parse.py +438 -0
- qiskit/qasm3/__init__.py +372 -0
- qiskit/qasm3/ast.py +782 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1340 -0
- qiskit/qasm3/printer.py +608 -0
- qiskit/qpy/__init__.py +1965 -0
- qiskit/qpy/binary_io/__init__.py +35 -0
- qiskit/qpy/binary_io/circuits.py +1455 -0
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +308 -0
- qiskit/qpy/binary_io/value.py +1165 -0
- qiskit/qpy/common.py +353 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +442 -0
- qiskit/qpy/interface.py +344 -0
- qiskit/qpy/type_keys.py +409 -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 +104 -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 +373 -0
- qiskit/quantum_info/operators/channel/transformations.py +490 -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 +511 -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 +869 -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 +1032 -0
- qiskit/quantum_info/operators/symplectic/clifford_circuits.py +558 -0
- qiskit/quantum_info/operators/symplectic/pauli.py +755 -0
- qiskit/quantum_info/operators/symplectic/pauli_list.py +1242 -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 +1239 -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 +857 -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 +805 -0
- qiskit/quantum_info/states/statevector.py +977 -0
- qiskit/quantum_info/states/utils.py +247 -0
- qiskit/result/__init__.py +61 -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/models.py +241 -0
- qiskit/result/postprocess.py +239 -0
- qiskit/result/result.py +385 -0
- qiskit/result/sampled_expval.py +74 -0
- qiskit/result/utils.py +294 -0
- qiskit/synthesis/__init__.py +240 -0
- qiskit/synthesis/arithmetic/__init__.py +18 -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/comparators/__init__.py +16 -0
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +103 -0
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +100 -0
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/synthesis/boolean/__init__.py +13 -0
- qiskit/synthesis/boolean/boolean_expression.py +231 -0
- qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
- qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -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 +265 -0
- qiskit/synthesis/discrete_basis/gate_sequence.py +421 -0
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +165 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +240 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +120 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +313 -0
- qiskit/synthesis/evolution/qdrift.py +130 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +224 -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 +61 -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 +61 -0
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +58 -0
- qiskit/synthesis/multi_controlled/__init__.py +25 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +359 -0
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -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 +20 -0
- qiskit/synthesis/two_qubit/local_invariance.py +63 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +583 -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 +1345 -0
- qiskit/transpiler/basepasses.py +190 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +281 -0
- qiskit/transpiler/layout.py +740 -0
- qiskit/transpiler/passes/__init__.py +276 -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 +138 -0
- qiskit/transpiler/passes/basis/decompose.py +137 -0
- qiskit/transpiler/passes/basis/translate_parameterized.py +175 -0
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +84 -0
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +110 -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 +128 -0
- qiskit/transpiler/passes/layout/csp_layout.py +132 -0
- qiskit/transpiler/passes/layout/dense_layout.py +177 -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 +116 -0
- qiskit/transpiler/passes/layout/layout_2q_distance.py +77 -0
- qiskit/transpiler/passes/layout/sabre_layout.py +506 -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 +256 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +235 -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 +117 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +109 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +85 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +242 -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 +176 -0
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -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/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +267 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +250 -0
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +384 -0
- qiskit/transpiler/passes/optimization/optimize_annotated.py +449 -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 +70 -0
- qiskit/transpiler/passes/optimization/remove_reset_in_zero_state.py +37 -0
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +50 -0
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +63 -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 +639 -0
- qiskit/transpiler/passes/optimization/template_optimization.py +158 -0
- qiskit/transpiler/passes/routing/__init__.py +21 -0
- qiskit/transpiler/passes/routing/algorithms/__init__.py +33 -0
- qiskit/transpiler/passes/routing/algorithms/token_swapper.py +105 -0
- qiskit/transpiler/passes/routing/algorithms/types.py +46 -0
- qiskit/transpiler/passes/routing/algorithms/util.py +103 -0
- qiskit/transpiler/passes/routing/basic_swap.py +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 +397 -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 +463 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +408 -0
- qiskit/transpiler/passes/routing/utils.py +35 -0
- qiskit/transpiler/passes/scheduling/__init__.py +21 -0
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +79 -0
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +70 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +251 -0
- qiskit/transpiler/passes/scheduling/padding/__init__.py +16 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +415 -0
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +90 -0
- qiskit/transpiler/passes/scheduling/scheduling/__init__.py +17 -0
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +93 -0
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +100 -0
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +88 -0
- qiskit/transpiler/passes/scheduling/scheduling/set_io_latency.py +64 -0
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +237 -0
- qiskit/transpiler/passes/synthesis/__init__.py +20 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +429 -0
- qiskit/transpiler/passes/synthesis/hls_plugins.py +1963 -0
- qiskit/transpiler/passes/synthesis/linear_functions_synthesis.py +41 -0
- qiskit/transpiler/passes/synthesis/plugin.py +738 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +313 -0
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +425 -0
- qiskit/transpiler/passes/utils/__init__.py +32 -0
- qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +41 -0
- qiskit/transpiler/passes/utils/check_gate_direction.py +60 -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 +61 -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 +66 -0
- qiskit/transpiler/passes/utils/fixed_point.py +48 -0
- qiskit/transpiler/passes/utils/gate_direction.py +93 -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 +50 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +121 -0
- qiskit/transpiler/passes/utils/unroll_forloops.py +81 -0
- qiskit/transpiler/passmanager.py +503 -0
- qiskit/transpiler/passmanager_config.py +151 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +993 -0
- qiskit/transpiler/preset_passmanagers/common.py +672 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +437 -0
- qiskit/transpiler/preset_passmanagers/level0.py +104 -0
- qiskit/transpiler/preset_passmanagers/level1.py +108 -0
- qiskit/transpiler/preset_passmanagers/level2.py +109 -0
- qiskit/transpiler/preset_passmanagers/level3.py +110 -0
- qiskit/transpiler/preset_passmanagers/plugin.py +346 -0
- qiskit/transpiler/target.py +905 -0
- qiskit/transpiler/timing_constraints.py +59 -0
- qiskit/user_config.py +266 -0
- qiskit/utils/__init__.py +90 -0
- qiskit/utils/classtools.py +146 -0
- qiskit/utils/deprecation.py +382 -0
- qiskit/utils/lazy_tester.py +363 -0
- qiskit/utils/optionals.py +354 -0
- qiskit/utils/parallel.py +318 -0
- qiskit/utils/units.py +146 -0
- qiskit/version.py +84 -0
- qiskit/visualization/__init__.py +290 -0
- qiskit/visualization/array.py +207 -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 +735 -0
- qiskit/visualization/circuit/latex.py +661 -0
- qiskit/visualization/circuit/matplotlib.py +2019 -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 +1849 -0
- qiskit/visualization/circuit_visualization.py +19 -0
- qiskit/visualization/counts_visualization.py +487 -0
- qiskit/visualization/dag_visualization.py +318 -0
- qiskit/visualization/exceptions.py +21 -0
- qiskit/visualization/gate_map.py +1424 -0
- qiskit/visualization/library.py +40 -0
- qiskit/visualization/pass_manager_visualization.py +312 -0
- qiskit/visualization/state_visualization.py +1546 -0
- qiskit/visualization/timeline/__init__.py +21 -0
- qiskit/visualization/timeline/core.py +495 -0
- qiskit/visualization/timeline/drawings.py +260 -0
- qiskit/visualization/timeline/generators.py +506 -0
- qiskit/visualization/timeline/interface.py +444 -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 +195 -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-2.0.3.dist-info/METADATA +220 -0
- qiskit-2.0.3.dist-info/RECORD +690 -0
- qiskit-2.0.3.dist-info/WHEEL +6 -0
- qiskit-2.0.3.dist-info/entry_points.txt +82 -0
- qiskit-2.0.3.dist-info/licenses/LICENSE.txt +203 -0
- qiskit-2.0.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2019.
|
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
|
+
"""Helper function for converting a circuit to a gate"""
|
15
|
+
from qiskit.circuit.annotated_operation import AnnotatedOperation
|
16
|
+
from qiskit.circuit.gate import Gate
|
17
|
+
from qiskit.circuit import QuantumRegister
|
18
|
+
from qiskit.exceptions import QiskitError
|
19
|
+
|
20
|
+
|
21
|
+
def _check_is_gate(op):
|
22
|
+
"""Checks whether op can be converted to Gate."""
|
23
|
+
if isinstance(op, Gate):
|
24
|
+
return True
|
25
|
+
elif isinstance(op, AnnotatedOperation):
|
26
|
+
return _check_is_gate(op.base_op)
|
27
|
+
return False
|
28
|
+
|
29
|
+
|
30
|
+
def circuit_to_gate(circuit, parameter_map=None, equivalence_library=None, label=None):
|
31
|
+
"""Build a :class:`.Gate` object from a :class:`.QuantumCircuit`.
|
32
|
+
|
33
|
+
The gate is anonymous (not tied to a named quantum register),
|
34
|
+
and so can be inserted into another circuit. The gate will
|
35
|
+
have the same string name as the circuit.
|
36
|
+
|
37
|
+
Args:
|
38
|
+
circuit (QuantumCircuit): the input circuit.
|
39
|
+
parameter_map (dict): For parameterized circuits, a mapping from
|
40
|
+
parameters in the circuit to parameters to be used in the gate.
|
41
|
+
If None, existing circuit parameters will also parameterize the
|
42
|
+
Gate.
|
43
|
+
equivalence_library (EquivalenceLibrary): Optional equivalence library
|
44
|
+
where the converted gate will be registered.
|
45
|
+
label (str): Optional gate label.
|
46
|
+
|
47
|
+
Raises:
|
48
|
+
QiskitError: if circuit is non-unitary or if
|
49
|
+
parameter_map is not compatible with circuit
|
50
|
+
|
51
|
+
Return:
|
52
|
+
Gate: a Gate equivalent to the action of the
|
53
|
+
input circuit. Upon decomposition, this gate will
|
54
|
+
yield the components comprising the original circuit.
|
55
|
+
"""
|
56
|
+
# pylint: disable=cyclic-import
|
57
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
58
|
+
|
59
|
+
if circuit.clbits:
|
60
|
+
raise QiskitError("Circuit with classical bits cannot be converted to gate.")
|
61
|
+
if circuit.num_vars:
|
62
|
+
raise QiskitError("circuits with realtime classical variables cannot be converted to gates")
|
63
|
+
|
64
|
+
for instruction in circuit.data:
|
65
|
+
if not _check_is_gate(instruction.operation):
|
66
|
+
raise QiskitError(
|
67
|
+
"One or more instructions cannot be converted to"
|
68
|
+
f' a gate. "{instruction.operation.name}" is not a gate instruction'
|
69
|
+
)
|
70
|
+
|
71
|
+
if parameter_map is None:
|
72
|
+
parameter_dict = {p: p for p in circuit.parameters}
|
73
|
+
else:
|
74
|
+
parameter_dict = circuit._unroll_param_dict(parameter_map)
|
75
|
+
|
76
|
+
if parameter_dict.keys() != circuit.parameters:
|
77
|
+
raise QiskitError(
|
78
|
+
"parameter_map should map all circuit parameters. "
|
79
|
+
f"Circuit parameters: {circuit.parameters}, parameter_map: {parameter_dict}"
|
80
|
+
)
|
81
|
+
|
82
|
+
gate = Gate(
|
83
|
+
name=circuit.name,
|
84
|
+
num_qubits=circuit.num_qubits,
|
85
|
+
params=[*parameter_dict.values()],
|
86
|
+
label=label,
|
87
|
+
)
|
88
|
+
gate.condition = None
|
89
|
+
|
90
|
+
target = circuit.assign_parameters(parameter_dict, inplace=False)
|
91
|
+
|
92
|
+
if equivalence_library is not None:
|
93
|
+
equivalence_library.add_equivalence(gate, target)
|
94
|
+
|
95
|
+
qc = QuantumCircuit(name=gate.name, global_phase=target.global_phase)
|
96
|
+
if gate.num_qubits > 0:
|
97
|
+
q = QuantumRegister(gate.num_qubits, "q")
|
98
|
+
qc.add_register(q)
|
99
|
+
qubit_map = {bit: q[idx] for idx, bit in enumerate(circuit.qubits)}
|
100
|
+
|
101
|
+
# The 3rd parameter in the output tuple) is hard coded to [] because
|
102
|
+
# Gate objects do not have cregs set and we've verified that all
|
103
|
+
# instructions are gates
|
104
|
+
for instruction in target.data:
|
105
|
+
qc._append(instruction.replace(qubits=tuple(qubit_map[y] for y in instruction.qubits)))
|
106
|
+
gate.definition = qc
|
107
|
+
return gate
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2019.
|
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
|
+
"""Helper function for converting a circuit to an instruction."""
|
14
|
+
from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
|
15
|
+
from qiskit.exceptions import QiskitError
|
16
|
+
from qiskit.circuit.instruction import Instruction
|
17
|
+
from qiskit.circuit import QuantumRegister
|
18
|
+
from qiskit.circuit import ClassicalRegister
|
19
|
+
|
20
|
+
|
21
|
+
def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None, label=None):
|
22
|
+
"""Build an :class:`~.circuit.Instruction` object from a :class:`.QuantumCircuit`.
|
23
|
+
|
24
|
+
The instruction is anonymous (not tied to a named quantum register),
|
25
|
+
and so can be inserted into another circuit. The instruction will
|
26
|
+
have the same string name as the circuit.
|
27
|
+
|
28
|
+
Args:
|
29
|
+
circuit (QuantumCircuit): the input circuit.
|
30
|
+
parameter_map (dict): For parameterized circuits, a mapping from
|
31
|
+
parameters in the circuit to parameters to be used in the instruction.
|
32
|
+
If None, existing circuit parameters will also parameterize the
|
33
|
+
instruction.
|
34
|
+
equivalence_library (EquivalenceLibrary): Optional equivalence library
|
35
|
+
where the converted instruction will be registered.
|
36
|
+
label (str): Optional instruction label.
|
37
|
+
|
38
|
+
Raises:
|
39
|
+
QiskitError: if parameter_map is not compatible with circuit
|
40
|
+
|
41
|
+
Return:
|
42
|
+
qiskit.circuit.Instruction: an instruction equivalent to the action of the
|
43
|
+
input circuit. Upon decomposition, this instruction will
|
44
|
+
yield the components comprising the original circuit.
|
45
|
+
|
46
|
+
Example:
|
47
|
+
.. plot::
|
48
|
+
:include-source:
|
49
|
+
:nofigs:
|
50
|
+
|
51
|
+
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
|
52
|
+
from qiskit.converters import circuit_to_instruction
|
53
|
+
|
54
|
+
q = QuantumRegister(3, 'q')
|
55
|
+
c = ClassicalRegister(3, 'c')
|
56
|
+
circ = QuantumCircuit(q, c)
|
57
|
+
circ.h(q[0])
|
58
|
+
circ.cx(q[0], q[1])
|
59
|
+
circ.measure(q[0], c[0])
|
60
|
+
circ.rz(0.5, q[1])
|
61
|
+
circuit_to_instruction(circ)
|
62
|
+
"""
|
63
|
+
# pylint: disable=cyclic-import
|
64
|
+
from qiskit.circuit.quantumcircuit import QuantumCircuit
|
65
|
+
|
66
|
+
if circuit.num_input_vars:
|
67
|
+
# This could be supported by moving the `input` variables to be parameters of the
|
68
|
+
# instruction, but we don't really have a good representation of that yet, so safer to
|
69
|
+
# forbid it.
|
70
|
+
raise QiskitError("Circuits with 'input' variables cannot yet be converted to instructions")
|
71
|
+
if circuit.num_captured_vars:
|
72
|
+
raise QiskitError("Circuits that capture variables cannot be converted to instructions")
|
73
|
+
if circuit.num_declared_vars:
|
74
|
+
# This could very easily be supported in representations, since the variables are allocated
|
75
|
+
# and freed within the instruction itself. The reason to initially forbid it is to avoid
|
76
|
+
# needing to support unrolling such instructions within the transpiler; we would potentially
|
77
|
+
# need to remap variables to unique names in the larger context, and we don't yet have a way
|
78
|
+
# to return that information from the transpiler. We have to catch that in the transpiler
|
79
|
+
# as well since a user could manually make an instruction with such a definition, but
|
80
|
+
# forbidding it here means users get a more meaningful error at the point that the
|
81
|
+
# instruction actually gets created (since users often aren't aware that
|
82
|
+
# `QuantumCircuit.append(QuantumCircuit)` implicitly converts to an instruction).
|
83
|
+
raise QiskitError(
|
84
|
+
"Circuits with internal variables cannot yet be converted to instructions."
|
85
|
+
" You may be able to use `QuantumCircuit.compose` to inline this circuit into another."
|
86
|
+
)
|
87
|
+
if CONTROL_FLOW_OP_NAMES.intersection(circuit.count_ops()):
|
88
|
+
raise QiskitError(
|
89
|
+
"Circuits with control flow operations cannot be converted to an instruction."
|
90
|
+
)
|
91
|
+
|
92
|
+
if parameter_map is None:
|
93
|
+
parameter_dict = {p: p for p in circuit.parameters}
|
94
|
+
else:
|
95
|
+
parameter_dict = circuit._unroll_param_dict(parameter_map)
|
96
|
+
|
97
|
+
if parameter_dict.keys() != circuit.parameters:
|
98
|
+
raise QiskitError(
|
99
|
+
"parameter_map should map all circuit parameters. "
|
100
|
+
f"Circuit parameters: {circuit.parameters}, parameter_map: {parameter_dict}"
|
101
|
+
)
|
102
|
+
|
103
|
+
out_instruction = Instruction(
|
104
|
+
name=circuit.name,
|
105
|
+
num_qubits=circuit.num_qubits,
|
106
|
+
num_clbits=circuit.num_clbits,
|
107
|
+
params=[*parameter_dict.values()],
|
108
|
+
label=label,
|
109
|
+
)
|
110
|
+
out_instruction._condition = None
|
111
|
+
|
112
|
+
target = circuit.assign_parameters(parameter_dict, inplace=False)
|
113
|
+
|
114
|
+
if equivalence_library is not None:
|
115
|
+
equivalence_library.add_equivalence(out_instruction, target)
|
116
|
+
|
117
|
+
regs = []
|
118
|
+
qreg, creg = None, None
|
119
|
+
if out_instruction.num_qubits > 0:
|
120
|
+
qreg = QuantumRegister(out_instruction.num_qubits, "q")
|
121
|
+
regs.append(qreg)
|
122
|
+
|
123
|
+
if out_instruction.num_clbits > 0:
|
124
|
+
creg = ClassicalRegister(out_instruction.num_clbits, "c")
|
125
|
+
regs.append(creg)
|
126
|
+
|
127
|
+
data = target._data.copy()
|
128
|
+
data.replace_bits(qubits=qreg, clbits=creg)
|
129
|
+
|
130
|
+
qc = QuantumCircuit(name=out_instruction.name)
|
131
|
+
qc._data = data
|
132
|
+
|
133
|
+
# Re-add the registers.
|
134
|
+
for reg in regs:
|
135
|
+
qc.add_register(reg)
|
136
|
+
|
137
|
+
if circuit.global_phase:
|
138
|
+
qc.global_phase = circuit.global_phase
|
139
|
+
|
140
|
+
out_instruction.definition = qc
|
141
|
+
|
142
|
+
return out_instruction
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2017, 2018.
|
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
|
+
"""Helper function for converting a dag to a circuit."""
|
14
|
+
|
15
|
+
from qiskit.circuit import QuantumCircuit
|
16
|
+
from qiskit._accelerate.converters import dag_to_circuit as dag_to_circuit_rs
|
17
|
+
|
18
|
+
|
19
|
+
def dag_to_circuit(dag, copy_operations=True):
|
20
|
+
"""Build a ``QuantumCircuit`` object from a ``DAGCircuit``.
|
21
|
+
|
22
|
+
Args:
|
23
|
+
dag (DAGCircuit): the input dag.
|
24
|
+
copy_operations (bool): Deep copy the operation objects
|
25
|
+
in the :class:`~.DAGCircuit` for the output :class:`~.QuantumCircuit`.
|
26
|
+
This should only be set to ``False`` if the input :class:`~.DAGCircuit`
|
27
|
+
will not be used anymore as the operations in the output
|
28
|
+
:class:`~.QuantumCircuit` will be shared instances and
|
29
|
+
modifications to operations in the :class:`~.DAGCircuit` will
|
30
|
+
be reflected in the :class:`~.QuantumCircuit` (and vice versa).
|
31
|
+
|
32
|
+
Return:
|
33
|
+
QuantumCircuit: the circuit representing the input dag.
|
34
|
+
|
35
|
+
Example:
|
36
|
+
.. plot::
|
37
|
+
:alt: Circuit diagram output by the previous code.
|
38
|
+
:include-source:
|
39
|
+
|
40
|
+
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
|
41
|
+
from qiskit.dagcircuit import DAGCircuit
|
42
|
+
from qiskit.converters import circuit_to_dag
|
43
|
+
from qiskit.circuit.library.standard_gates import CHGate, U2Gate, CXGate
|
44
|
+
from qiskit.converters import dag_to_circuit
|
45
|
+
|
46
|
+
q = QuantumRegister(3, 'q')
|
47
|
+
c = ClassicalRegister(3, 'c')
|
48
|
+
circ = QuantumCircuit(q, c)
|
49
|
+
circ.h(q[0])
|
50
|
+
circ.cx(q[0], q[1])
|
51
|
+
circ.measure(q[0], c[0])
|
52
|
+
circ.rz(0.5, q[1])
|
53
|
+
dag = circuit_to_dag(circ)
|
54
|
+
circuit = dag_to_circuit(dag)
|
55
|
+
circuit.draw('mpl')
|
56
|
+
"""
|
57
|
+
|
58
|
+
name = dag.name or None
|
59
|
+
|
60
|
+
circuit_data = dag_to_circuit_rs(dag, copy_operations)
|
61
|
+
circuit = QuantumCircuit(
|
62
|
+
dag.qubits,
|
63
|
+
dag.clbits,
|
64
|
+
*dag.qregs.values(),
|
65
|
+
*dag.cregs.values(),
|
66
|
+
name=name,
|
67
|
+
global_phase=dag.global_phase,
|
68
|
+
inputs=dag.iter_input_vars(),
|
69
|
+
captures=dag.iter_captures(),
|
70
|
+
)
|
71
|
+
for var in dag.iter_declared_vars():
|
72
|
+
circuit.add_uninitialized_var(var)
|
73
|
+
for stretch in dag.iter_declared_stretches():
|
74
|
+
circuit.add_stretch(stretch)
|
75
|
+
circuit.metadata = dag.metadata or {}
|
76
|
+
circuit._data = circuit_data
|
77
|
+
circuit._duration = dag._duration
|
78
|
+
circuit._unit = dag._unit
|
79
|
+
return circuit
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Helper function for converting a dag circuit to a dag dependency"""
|
14
|
+
from qiskit.dagcircuit.dagdependency import DAGDependency
|
15
|
+
|
16
|
+
|
17
|
+
def dag_to_dagdependency(dag, create_preds_and_succs=True):
|
18
|
+
"""Build a ``DAGDependency`` object from a ``DAGCircuit``.
|
19
|
+
|
20
|
+
Args:
|
21
|
+
dag (DAGCircuit): the input dag.
|
22
|
+
create_preds_and_succs (bool): whether to construct lists of
|
23
|
+
predecessors and successors for every node.
|
24
|
+
|
25
|
+
Return:
|
26
|
+
DAGDependency: the DAG representing the input circuit as a dag dependency.
|
27
|
+
"""
|
28
|
+
|
29
|
+
dagdependency = DAGDependency()
|
30
|
+
dagdependency.name = dag.name
|
31
|
+
dagdependency.metadata = dag.metadata
|
32
|
+
|
33
|
+
dagdependency.add_qubits(dag.qubits)
|
34
|
+
dagdependency.add_clbits(dag.clbits)
|
35
|
+
|
36
|
+
for register in dag.qregs.values():
|
37
|
+
dagdependency.add_qreg(register)
|
38
|
+
|
39
|
+
for register in dag.cregs.values():
|
40
|
+
dagdependency.add_creg(register)
|
41
|
+
|
42
|
+
for node in dag.topological_op_nodes():
|
43
|
+
# Get arguments for classical control (if any)
|
44
|
+
inst = node.op.copy()
|
45
|
+
dagdependency.add_op_node(inst, node.qargs, node.cargs)
|
46
|
+
|
47
|
+
if create_preds_and_succs:
|
48
|
+
dagdependency._add_predecessors()
|
49
|
+
dagdependency._add_successors()
|
50
|
+
|
51
|
+
# copy metadata
|
52
|
+
dagdependency.global_phase = dag.global_phase
|
53
|
+
|
54
|
+
return dagdependency
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Helper function for converting a dag circuit to a dag dependency"""
|
14
|
+
from qiskit.dagcircuit.dagdependency_v2 import _DAGDependencyV2
|
15
|
+
|
16
|
+
|
17
|
+
def _dag_to_dagdependency_v2(dag):
|
18
|
+
"""Build a ``_DAGDependencyV2`` object from a ``DAGCircuit``.
|
19
|
+
|
20
|
+
Args:
|
21
|
+
dag (DAGCircuit): the input dag.
|
22
|
+
|
23
|
+
Return:
|
24
|
+
_DAGDependencyV2: the DAG representing the input circuit as a dag dependency.
|
25
|
+
"""
|
26
|
+
dagdependency = _DAGDependencyV2()
|
27
|
+
dagdependency.name = dag.name
|
28
|
+
dagdependency.metadata = dag.metadata
|
29
|
+
dagdependency.global_phase = dag.global_phase
|
30
|
+
|
31
|
+
dagdependency.add_qubits(dag.qubits)
|
32
|
+
dagdependency.add_clbits(dag.clbits)
|
33
|
+
|
34
|
+
for register in dag.qregs.values():
|
35
|
+
dagdependency.add_qreg(register)
|
36
|
+
|
37
|
+
for register in dag.cregs.values():
|
38
|
+
dagdependency.add_creg(register)
|
39
|
+
|
40
|
+
for node in dag.topological_op_nodes():
|
41
|
+
dagdependency.apply_operation_back(node.op.copy(), node.qargs, node.cargs)
|
42
|
+
|
43
|
+
return dagdependency
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Helper function for converting a dag dependency to a circuit"""
|
14
|
+
from qiskit.circuit import QuantumCircuit, CircuitInstruction
|
15
|
+
|
16
|
+
|
17
|
+
def dagdependency_to_circuit(dagdependency):
|
18
|
+
"""Build a ``QuantumCircuit`` object from a ``DAGDependency``.
|
19
|
+
|
20
|
+
Args:
|
21
|
+
dagdependency (DAGDependency): the input dag.
|
22
|
+
|
23
|
+
Return:
|
24
|
+
QuantumCircuit: the circuit representing the input dag dependency.
|
25
|
+
"""
|
26
|
+
|
27
|
+
name = dagdependency.name or None
|
28
|
+
circuit = QuantumCircuit(
|
29
|
+
dagdependency.qubits,
|
30
|
+
dagdependency.clbits,
|
31
|
+
*dagdependency.qregs.values(),
|
32
|
+
*dagdependency.cregs.values(),
|
33
|
+
name=name,
|
34
|
+
)
|
35
|
+
circuit.metadata = dagdependency.metadata
|
36
|
+
|
37
|
+
for node in dagdependency.topological_nodes():
|
38
|
+
circuit._append(CircuitInstruction(node.op.copy(), node.qargs, node.cargs))
|
39
|
+
|
40
|
+
return circuit
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""Helper function for converting a dag dependency to a dag circuit"""
|
14
|
+
from qiskit.dagcircuit.dagcircuit import DAGCircuit
|
15
|
+
|
16
|
+
|
17
|
+
def dagdependency_to_dag(dagdependency):
|
18
|
+
"""Build a ``DAGCircuit`` object from a ``DAGDependency``.
|
19
|
+
|
20
|
+
Args:
|
21
|
+
dag dependency (DAGDependency): the input dag.
|
22
|
+
|
23
|
+
Return:
|
24
|
+
DAGCircuit: the DAG representing the input circuit.
|
25
|
+
"""
|
26
|
+
|
27
|
+
dagcircuit = DAGCircuit()
|
28
|
+
dagcircuit.name = dagdependency.name
|
29
|
+
dagcircuit.metadata = dagdependency.metadata
|
30
|
+
|
31
|
+
dagcircuit.add_qubits(dagdependency.qubits)
|
32
|
+
dagcircuit.add_clbits(dagdependency.clbits)
|
33
|
+
|
34
|
+
for register in dagdependency.qregs.values():
|
35
|
+
dagcircuit.add_qreg(register)
|
36
|
+
|
37
|
+
for register in dagdependency.cregs.values():
|
38
|
+
dagcircuit.add_creg(register)
|
39
|
+
|
40
|
+
for node in dagdependency.topological_nodes():
|
41
|
+
# Get arguments for classical control (if any)
|
42
|
+
inst = node.op.copy()
|
43
|
+
dagcircuit.apply_operation_back(inst, node.qargs, node.cargs)
|
44
|
+
|
45
|
+
# copy metadata
|
46
|
+
dagcircuit.global_phase = dagdependency.global_phase
|
47
|
+
|
48
|
+
return dagcircuit
|
@@ -0,0 +1,55 @@
|
|
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
|
+
"""
|
14
|
+
=======================================
|
15
|
+
DAG Circuits (:mod:`qiskit.dagcircuit`)
|
16
|
+
=======================================
|
17
|
+
|
18
|
+
.. currentmodule:: qiskit.dagcircuit
|
19
|
+
|
20
|
+
Circuits as Directed Acyclic Graphs
|
21
|
+
===================================
|
22
|
+
|
23
|
+
.. autosummary::
|
24
|
+
:toctree: ../stubs/
|
25
|
+
|
26
|
+
DAGCircuit
|
27
|
+
DAGNode
|
28
|
+
DAGOpNode
|
29
|
+
DAGInNode
|
30
|
+
DAGOutNode
|
31
|
+
DAGDepNode
|
32
|
+
DAGDependency
|
33
|
+
|
34
|
+
Exceptions
|
35
|
+
==========
|
36
|
+
|
37
|
+
.. autoexception:: DAGCircuitError
|
38
|
+
.. autoexception:: DAGDependencyError
|
39
|
+
|
40
|
+
Utilities
|
41
|
+
=========
|
42
|
+
|
43
|
+
.. autosummary::
|
44
|
+
:toctree: ../stubs/
|
45
|
+
|
46
|
+
BlockCollapser
|
47
|
+
BlockCollector
|
48
|
+
BlockSplitter
|
49
|
+
"""
|
50
|
+
from .collect_blocks import BlockCollapser, BlockCollector, BlockSplitter
|
51
|
+
from .dagcircuit import DAGCircuit
|
52
|
+
from .dagnode import DAGNode, DAGOpNode, DAGInNode, DAGOutNode
|
53
|
+
from .dagdepnode import DAGDepNode
|
54
|
+
from .exceptions import DAGCircuitError, DAGDependencyError
|
55
|
+
from .dagdependency import DAGDependency
|