qiskit 2.1.0rc1__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 +159 -0
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/circuit/__init__.py +1335 -0
- qiskit/circuit/_add_control.py +338 -0
- qiskit/circuit/_classical_resource_map.py +154 -0
- qiskit/circuit/_standard_gates_commutations.py +3849 -0
- qiskit/circuit/_utils.py +167 -0
- qiskit/circuit/annotated_operation.py +279 -0
- qiskit/circuit/annotation.py +404 -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 +156 -0
- qiskit/circuit/classical/expr/visitors.py +381 -0
- qiskit/circuit/classical/types/__init__.py +113 -0
- qiskit/circuit/classical/types/ordering.py +229 -0
- qiskit/circuit/classical/types/types.py +30 -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 +188 -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 +159 -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 +506 -0
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +395 -0
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +501 -0
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +389 -0
- qiskit/circuit/library/arithmetic/quadratic_form.py +370 -0
- qiskit/circuit/library/arithmetic/weighted_adder.py +428 -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 +322 -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 +163 -0
- qiskit/circuit/library/generalized_gates/gms.py +179 -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 +202 -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 +236 -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 +301 -0
- qiskit/circuit/library/n_local/n_local.py +1478 -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 +202 -0
- qiskit/circuit/library/phase_estimation.py +177 -0
- qiskit/circuit/library/phase_oracle.py +239 -0
- qiskit/circuit/library/quantum_volume.py +179 -0
- qiskit/circuit/library/standard_gates/__init__.py +141 -0
- qiskit/circuit/library/standard_gates/dcx.py +76 -0
- qiskit/circuit/library/standard_gates/ecr.py +126 -0
- qiskit/circuit/library/standard_gates/equivalence_library.py +1936 -0
- qiskit/circuit/library/standard_gates/global_phase.py +83 -0
- qiskit/circuit/library/standard_gates/h.py +230 -0
- qiskit/circuit/library/standard_gates/i.py +76 -0
- qiskit/circuit/library/standard_gates/iswap.py +115 -0
- qiskit/circuit/library/standard_gates/p.py +415 -0
- qiskit/circuit/library/standard_gates/r.py +108 -0
- qiskit/circuit/library/standard_gates/rx.py +269 -0
- qiskit/circuit/library/standard_gates/rxx.py +165 -0
- qiskit/circuit/library/standard_gates/ry.py +268 -0
- qiskit/circuit/library/standard_gates/ryy.py +165 -0
- qiskit/circuit/library/standard_gates/rz.py +290 -0
- qiskit/circuit/library/standard_gates/rzx.py +211 -0
- qiskit/circuit/library/standard_gates/rzz.py +181 -0
- qiskit/circuit/library/standard_gates/s.py +424 -0
- qiskit/circuit/library/standard_gates/swap.py +268 -0
- qiskit/circuit/library/standard_gates/sx.py +303 -0
- qiskit/circuit/library/standard_gates/t.py +169 -0
- qiskit/circuit/library/standard_gates/u.py +379 -0
- qiskit/circuit/library/standard_gates/u1.py +466 -0
- qiskit/circuit/library/standard_gates/u2.py +145 -0
- qiskit/circuit/library/standard_gates/u3.py +412 -0
- qiskit/circuit/library/standard_gates/x.py +1335 -0
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +164 -0
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +197 -0
- qiskit/circuit/library/standard_gates/y.py +253 -0
- qiskit/circuit/library/standard_gates/z.py +331 -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 +188 -0
- qiskit/circuit/parameterexpression.py +737 -0
- qiskit/circuit/parametertable.py +119 -0
- qiskit/circuit/parametervector.py +140 -0
- qiskit/circuit/quantumcircuit.py +7610 -0
- qiskit/circuit/quantumcircuitdata.py +137 -0
- qiskit/circuit/random/__init__.py +50 -0
- qiskit/circuit/random/utils.py +755 -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 +185 -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 +44 -0
- qiskit/dagcircuit/collect_blocks.py +403 -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 +193 -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 +172 -0
- qiskit/primitives/containers/estimator_pub.py +222 -0
- qiskit/primitives/containers/object_array.py +94 -0
- qiskit/primitives/containers/observables_array.py +380 -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 +100 -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 +376 -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 +466 -0
- qiskit/qasm3/ast.py +796 -0
- qiskit/qasm3/exceptions.py +27 -0
- qiskit/qasm3/experimental.py +70 -0
- qiskit/qasm3/exporter.py +1363 -0
- qiskit/qasm3/printer.py +620 -0
- qiskit/qpy/__init__.py +2141 -0
- qiskit/qpy/binary_io/__init__.py +35 -0
- qiskit/qpy/binary_io/circuits.py +1687 -0
- qiskit/qpy/binary_io/parse_sympy_repr.py +126 -0
- qiskit/qpy/binary_io/schedules.py +288 -0
- qiskit/qpy/binary_io/value.py +1183 -0
- qiskit/qpy/common.py +361 -0
- qiskit/qpy/exceptions.py +53 -0
- qiskit/qpy/formats.py +458 -0
- qiskit/qpy/interface.py +384 -0
- qiskit/qpy/type_keys.py +415 -0
- qiskit/quantum_info/__init__.py +172 -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 +29 -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 +24 -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 +584 -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 +76 -0
- qiskit/result/utils.py +294 -0
- qiskit/synthesis/__init__.py +250 -0
- qiskit/synthesis/arithmetic/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/__init__.py +18 -0
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +107 -0
- qiskit/synthesis/arithmetic/adders/rv_ripple_carry_adder.py +156 -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/generate_basis_approximations.py +53 -0
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +280 -0
- qiskit/synthesis/evolution/__init__.py +21 -0
- qiskit/synthesis/evolution/evolution_synthesis.py +48 -0
- qiskit/synthesis/evolution/lie_trotter.py +123 -0
- qiskit/synthesis/evolution/matrix_synthesis.py +47 -0
- qiskit/synthesis/evolution/pauli_network.py +80 -0
- qiskit/synthesis/evolution/product_formula.py +316 -0
- qiskit/synthesis/evolution/qdrift.py +133 -0
- qiskit/synthesis/evolution/suzuki_trotter.py +227 -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 +29 -0
- qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +583 -0
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +205 -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 +61 -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 +359 -0
- qiskit/transpiler/__init__.py +1352 -0
- qiskit/transpiler/basepasses.py +190 -0
- qiskit/transpiler/coupling.py +500 -0
- qiskit/transpiler/exceptions.py +59 -0
- qiskit/transpiler/instruction_durations.py +263 -0
- qiskit/transpiler/layout.py +740 -0
- qiskit/transpiler/passes/__init__.py +278 -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 +197 -0
- qiskit/transpiler/passes/layout/disjoint_utils.py +54 -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 +525 -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 +292 -0
- qiskit/transpiler/passes/layout/vf2_post_layout.py +376 -0
- qiskit/transpiler/passes/layout/vf2_utils.py +245 -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 +251 -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_clifford_t.py +68 -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 +633 -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 +465 -0
- qiskit/transpiler/passes/routing/star_prerouting.py +433 -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 +17 -0
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +284 -0
- qiskit/transpiler/passes/scheduling/padding/context_aware_dynamical_decoupling.py +876 -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 +21 -0
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +153 -0
- qiskit/transpiler/passes/synthesis/clifford_unitary_synth_plugin.py +123 -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 +2338 -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 +318 -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 +154 -0
- qiskit/transpiler/preset_passmanagers/__init__.py +93 -0
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +1114 -0
- qiskit/transpiler/preset_passmanagers/common.py +773 -0
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +443 -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 +355 -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 +677 -0
- qiskit/visualization/circuit/circuit_visualization.py +735 -0
- qiskit/visualization/circuit/latex.py +668 -0
- qiskit/visualization/circuit/matplotlib.py +2041 -0
- qiskit/visualization/circuit/qcstyle.py +130 -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/__init__.py +13 -0
- qiskit/visualization/dag/dagstyle.py +103 -0
- qiskit/visualization/dag/styles/__init__.py +13 -0
- qiskit/visualization/dag/styles/color.json +10 -0
- qiskit/visualization/dag/styles/plain.json +5 -0
- qiskit/visualization/dag_visualization.py +389 -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/style.py +223 -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.1.0rc1.dist-info/METADATA +221 -0
- qiskit-2.1.0rc1.dist-info/RECORD +699 -0
- qiskit-2.1.0rc1.dist-info/WHEEL +6 -0
- qiskit-2.1.0rc1.dist-info/entry_points.txt +88 -0
- qiskit-2.1.0rc1.dist-info/licenses/LICENSE.txt +203 -0
- qiskit-2.1.0rc1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,195 @@
|
|
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
|
+
# pylint: disable=invalid-name
|
14
|
+
|
15
|
+
"""Matplotlib plotter API."""
|
16
|
+
|
17
|
+
from typing import Optional, Tuple
|
18
|
+
|
19
|
+
import matplotlib
|
20
|
+
import matplotlib.pyplot as plt
|
21
|
+
import numpy as np
|
22
|
+
from matplotlib.collections import PatchCollection
|
23
|
+
from matplotlib.patches import Rectangle
|
24
|
+
|
25
|
+
from qiskit.visualization.exceptions import VisualizationError
|
26
|
+
from qiskit.visualization.timeline import core, types, drawings
|
27
|
+
from qiskit.visualization.timeline.plotters.base_plotter import BasePlotter
|
28
|
+
from qiskit.visualization.utils import matplotlib_close_if_inline
|
29
|
+
|
30
|
+
|
31
|
+
class MplPlotter(BasePlotter):
|
32
|
+
"""Matplotlib API for pulse drawer.
|
33
|
+
|
34
|
+
This plotter arranges bits along y axis of 2D canvas with vertical offset.
|
35
|
+
"""
|
36
|
+
|
37
|
+
def __init__(self, canvas: core.DrawerCanvas, axis: Optional[plt.Axes] = None):
|
38
|
+
"""Create new plotter.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
canvas: Configured drawer canvas object. Canvas object should be updated
|
42
|
+
with `.update` method before initializing the plotter.
|
43
|
+
axis: Matplotlib axis object. When `axis` is provided, the plotter updates
|
44
|
+
given axis instead of creating and returning new matplotlib figure.
|
45
|
+
"""
|
46
|
+
super().__init__(canvas=canvas)
|
47
|
+
|
48
|
+
if axis is None:
|
49
|
+
fig_height = self.canvas.vmax - self.canvas.vmin
|
50
|
+
fig_h = self.canvas.formatter["general.fig_unit_height"] * fig_height
|
51
|
+
fig_w = self.canvas.formatter["general.fig_width"]
|
52
|
+
|
53
|
+
self.figure = plt.figure(figsize=(fig_w, fig_h))
|
54
|
+
self.ax = self.figure.add_subplot(1, 1, 1)
|
55
|
+
else:
|
56
|
+
self.figure = axis.figure
|
57
|
+
self.ax = axis
|
58
|
+
|
59
|
+
self.initialize_canvas()
|
60
|
+
|
61
|
+
def initialize_canvas(self):
|
62
|
+
"""Format appearance of matplotlib canvas."""
|
63
|
+
self.ax.set_facecolor(self.canvas.formatter["color.background"])
|
64
|
+
|
65
|
+
# axis lines
|
66
|
+
self.ax.spines["right"].set_color("none")
|
67
|
+
self.ax.spines["left"].set_color("none")
|
68
|
+
self.ax.spines["top"].set_color("none")
|
69
|
+
|
70
|
+
# axis labels
|
71
|
+
self.ax.set_yticks([])
|
72
|
+
axis_config = self.canvas.layout["time_axis_map"](time_window=self.canvas.time_range)
|
73
|
+
|
74
|
+
self.ax.set_xticks(list(axis_config.axis_map.keys()))
|
75
|
+
self.ax.set_xticklabels(
|
76
|
+
list(axis_config.axis_map.values()),
|
77
|
+
fontsize=self.canvas.formatter["text_size.axis_label"],
|
78
|
+
)
|
79
|
+
self.ax.set_xlabel(
|
80
|
+
axis_config.label, fontsize=self.canvas.formatter["text_size.axis_label"]
|
81
|
+
)
|
82
|
+
|
83
|
+
# boundary
|
84
|
+
self.ax.set_xlim(*self.canvas.time_range)
|
85
|
+
self.ax.set_ylim(self.canvas.vmin, self.canvas.vmax)
|
86
|
+
|
87
|
+
def draw(self):
|
88
|
+
"""Output drawings stored in canvas object."""
|
89
|
+
|
90
|
+
for _, data in self.canvas.collections:
|
91
|
+
xvals = np.asarray(data.xvals, dtype=float)
|
92
|
+
yvals = np.asarray(data.yvals, dtype=float)
|
93
|
+
offsets = [self.canvas.assigned_coordinates[bit] for bit in data.bits]
|
94
|
+
|
95
|
+
if isinstance(data, drawings.BoxData):
|
96
|
+
# box data
|
97
|
+
if data.data_type in [
|
98
|
+
str(types.BoxType.SCHED_GATE.value),
|
99
|
+
str(types.BoxType.DELAY.value),
|
100
|
+
]:
|
101
|
+
# draw a smoothly rounded rectangle
|
102
|
+
xs, ys1, ys2 = self._time_bucket_outline(xvals, yvals)
|
103
|
+
self.ax.fill_between(
|
104
|
+
x=xs, y1=ys1 + offsets[0], y2=ys2 + offsets[0], **data.styles
|
105
|
+
)
|
106
|
+
|
107
|
+
else:
|
108
|
+
# draw a rectangle
|
109
|
+
x0, x1 = xvals
|
110
|
+
y0, y1 = yvals + offsets[0]
|
111
|
+
|
112
|
+
rect = Rectangle(xy=(x0, y0), width=x1 - x0, height=y1 - y0)
|
113
|
+
pc = PatchCollection([rect], **data.styles)
|
114
|
+
self.ax.add_collection(pc)
|
115
|
+
|
116
|
+
elif isinstance(data, drawings.LineData):
|
117
|
+
# line data
|
118
|
+
self.ax.plot(xvals, yvals + offsets[0], **data.styles)
|
119
|
+
|
120
|
+
elif isinstance(data, drawings.TextData):
|
121
|
+
# text data
|
122
|
+
if data.latex is not None:
|
123
|
+
s = rf"${data.latex}$"
|
124
|
+
else:
|
125
|
+
s = data.text
|
126
|
+
|
127
|
+
self.ax.text(x=xvals[0], y=yvals[0] + offsets[0], s=s, **data.styles)
|
128
|
+
|
129
|
+
elif isinstance(data, drawings.GateLinkData):
|
130
|
+
# gate link data
|
131
|
+
self.ax.plot(xvals.repeat(len(offsets)), offsets, **data.styles)
|
132
|
+
|
133
|
+
else:
|
134
|
+
raise VisualizationError(
|
135
|
+
f"Data {data} is not supported by {self.__class__.__name__}"
|
136
|
+
)
|
137
|
+
|
138
|
+
def _time_bucket_outline(
|
139
|
+
self, xvals: np.ndarray, yvals: np.ndarray
|
140
|
+
) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:
|
141
|
+
"""Generate outline of time bucket. Edges are smoothly faded.
|
142
|
+
|
143
|
+
Args:
|
144
|
+
xvals: Left and right point coordinates.
|
145
|
+
yvals: Bottom and top point coordinates.
|
146
|
+
|
147
|
+
Returns:
|
148
|
+
Coordinate vectors of time bucket fringe.
|
149
|
+
"""
|
150
|
+
x0, x1 = xvals
|
151
|
+
y0, y1 = yvals
|
152
|
+
|
153
|
+
width = x1 - x0
|
154
|
+
y_mid = 0.5 * (y0 + y1)
|
155
|
+
|
156
|
+
risefall = int(min(self.canvas.formatter["time_bucket.edge_dt"], max(width / 2 - 2, 0)))
|
157
|
+
edge = np.sin(np.pi / 2 * np.arange(0, risefall) / risefall)
|
158
|
+
|
159
|
+
xs = np.concatenate(
|
160
|
+
[
|
161
|
+
np.arange(x0, x0 + risefall),
|
162
|
+
[x0 + risefall, x1 - risefall],
|
163
|
+
np.arange(x1 - risefall + 1, x1 + 1),
|
164
|
+
]
|
165
|
+
)
|
166
|
+
|
167
|
+
l1 = (y1 - y_mid) * np.concatenate([edge, [1, 1], edge[::-1]])
|
168
|
+
l2 = (y0 - y_mid) * np.concatenate([edge, [1, 1], edge[::-1]])
|
169
|
+
|
170
|
+
return xs, l1, l2
|
171
|
+
|
172
|
+
def save_file(self, filename: str):
|
173
|
+
"""Save image to file.
|
174
|
+
Args:
|
175
|
+
filename: File path to output image data.
|
176
|
+
"""
|
177
|
+
plt.savefig(filename, bbox_inches="tight", dpi=self.canvas.formatter["general.dpi"])
|
178
|
+
|
179
|
+
def get_image(self, interactive: bool = False) -> matplotlib.pyplot.Figure:
|
180
|
+
"""Get image data to return.
|
181
|
+
Args:
|
182
|
+
interactive: When set `True` show the circuit in a new window.
|
183
|
+
This depends on the matplotlib backend being used supporting this.
|
184
|
+
Returns:
|
185
|
+
Matplotlib figure data.
|
186
|
+
"""
|
187
|
+
matplotlib_close_if_inline(self.figure)
|
188
|
+
|
189
|
+
if self.figure and interactive:
|
190
|
+
self.figure.show()
|
191
|
+
try:
|
192
|
+
self.figure.tight_layout()
|
193
|
+
except AttributeError:
|
194
|
+
pass
|
195
|
+
return self.figure
|
@@ -0,0 +1,301 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Stylesheet for timeline drawer.
|
15
|
+
|
16
|
+
# TODO merge this docstring with pulse drawer.
|
17
|
+
|
18
|
+
The stylesheet `QiskitTimelineStyle` is initialized with the hard-corded default values in
|
19
|
+
`default_style`.
|
20
|
+
|
21
|
+
The `QiskitTimelineStyle` is a wrapper class of python dictionary with
|
22
|
+
the nested keys written such as `<type>.<group>.<item>` to represent a specific item
|
23
|
+
from many configuration options. This key representation is imitative of
|
24
|
+
`rcParams` of `matplotlib`. However, the `QiskitTimelineStyle` does not need to be compatible
|
25
|
+
with the `rcParams` because the timeline stylesheet is heavily specialized to the context of
|
26
|
+
the scheduled circuit visualization.
|
27
|
+
|
28
|
+
Type of stylesheet is broadly separated into `formatter`, `generator` and `layout`.
|
29
|
+
The formatter is a nested dictionary of drawing parameters to control the appearance of
|
30
|
+
each visualization element. This data structure is similar to the `rcParams` of `matplotlib`.
|
31
|
+
|
32
|
+
The generator is a list of callback functions that generates drawings from
|
33
|
+
a given data source and the formatter. Each item can take multiple functions so that
|
34
|
+
several drawing data, for example, box, text, etc..., are generated from the single data source.
|
35
|
+
The layout is a callback function that determines the appearance of the output image.
|
36
|
+
Because a single stylesheet doesn't generate multiple images with different appearance,
|
37
|
+
only one layout function can be chosen for each stylesheet.
|
38
|
+
"""
|
39
|
+
|
40
|
+
from typing import Dict, Any, Mapping
|
41
|
+
|
42
|
+
from qiskit.visualization.timeline import generators, layouts
|
43
|
+
|
44
|
+
|
45
|
+
class QiskitTimelineStyle(dict):
|
46
|
+
"""Stylesheet for pulse drawer."""
|
47
|
+
|
48
|
+
def __init__(self):
|
49
|
+
super().__init__()
|
50
|
+
# to inform which stylesheet is applied. some plotter may not support specific style.
|
51
|
+
self.stylesheet = None
|
52
|
+
self.update(default_style())
|
53
|
+
|
54
|
+
def update(self, __m: Mapping[str, Any], **kwargs) -> None:
|
55
|
+
super().update(__m, **kwargs)
|
56
|
+
for key, value in __m.items():
|
57
|
+
self.__setitem__(key, value)
|
58
|
+
self.stylesheet = __m.__class__.__name__
|
59
|
+
|
60
|
+
@property
|
61
|
+
def formatter(self):
|
62
|
+
"""Return formatter field of style dictionary."""
|
63
|
+
sub_dict = {}
|
64
|
+
for key, value in self.items():
|
65
|
+
sub_keys = key.split(".")
|
66
|
+
if sub_keys[0] == "formatter":
|
67
|
+
sub_dict[".".join(sub_keys[1:])] = value
|
68
|
+
return sub_dict
|
69
|
+
|
70
|
+
@property
|
71
|
+
def generator(self):
|
72
|
+
"""Return generator field of style dictionary."""
|
73
|
+
sub_dict = {}
|
74
|
+
for key, value in self.items():
|
75
|
+
sub_keys = key.split(".")
|
76
|
+
if sub_keys[0] == "generator":
|
77
|
+
sub_dict[".".join(sub_keys[1:])] = value
|
78
|
+
return sub_dict
|
79
|
+
|
80
|
+
@property
|
81
|
+
def layout(self):
|
82
|
+
"""Return layout field of style dictionary."""
|
83
|
+
sub_dict = {}
|
84
|
+
for key, value in self.items():
|
85
|
+
sub_keys = key.split(".")
|
86
|
+
if sub_keys[0] == "layout":
|
87
|
+
sub_dict[".".join(sub_keys[1:])] = value
|
88
|
+
return sub_dict
|
89
|
+
|
90
|
+
|
91
|
+
class IQXStandard(dict):
|
92
|
+
"""Standard timeline stylesheet.
|
93
|
+
|
94
|
+
- Show time buckets.
|
95
|
+
- Show only operand name.
|
96
|
+
- Show bit name.
|
97
|
+
- Show barriers.
|
98
|
+
- Show idle timeline.
|
99
|
+
- Show gate link.
|
100
|
+
- Remove classical bits.
|
101
|
+
"""
|
102
|
+
|
103
|
+
def __init__(self, **kwargs):
|
104
|
+
super().__init__()
|
105
|
+
style = {
|
106
|
+
"formatter.control.show_idle": True,
|
107
|
+
"formatter.control.show_clbits": False,
|
108
|
+
"formatter.control.show_barriers": True,
|
109
|
+
"formatter.control.show_delays": False,
|
110
|
+
"generator.gates": [generators.gen_sched_gate, generators.gen_short_gate_name],
|
111
|
+
"generator.bits": [generators.gen_bit_name, generators.gen_timeslot],
|
112
|
+
"generator.barriers": [generators.gen_barrier],
|
113
|
+
"generator.gate_links": [generators.gen_gate_link],
|
114
|
+
"layout.bit_arrange": layouts.qreg_creg_ascending,
|
115
|
+
"layout.time_axis_map": layouts.time_map_in_dt,
|
116
|
+
}
|
117
|
+
style.update(**kwargs)
|
118
|
+
self.update(style)
|
119
|
+
|
120
|
+
def __repr__(self):
|
121
|
+
return "Standard timeline style sheet."
|
122
|
+
|
123
|
+
|
124
|
+
class IQXSimple(dict):
|
125
|
+
"""Simple timeline stylesheet.
|
126
|
+
|
127
|
+
- Show time buckets.
|
128
|
+
- Show bit name.
|
129
|
+
- Show gate link.
|
130
|
+
- Remove idle timeline.
|
131
|
+
- Remove classical bits.
|
132
|
+
"""
|
133
|
+
|
134
|
+
def __init__(self, **kwargs):
|
135
|
+
super().__init__()
|
136
|
+
style = {
|
137
|
+
"formatter.control.show_idle": False,
|
138
|
+
"formatter.control.show_clbits": False,
|
139
|
+
"formatter.control.show_barriers": False,
|
140
|
+
"formatter.control.show_delays": False,
|
141
|
+
"generator.gates": [generators.gen_sched_gate],
|
142
|
+
"generator.bits": [generators.gen_bit_name, generators.gen_timeslot],
|
143
|
+
"generator.barriers": [generators.gen_barrier],
|
144
|
+
"generator.gate_links": [generators.gen_gate_link],
|
145
|
+
"layout.bit_arrange": layouts.qreg_creg_ascending,
|
146
|
+
"layout.time_axis_map": layouts.time_map_in_dt,
|
147
|
+
}
|
148
|
+
style.update(**kwargs)
|
149
|
+
self.update(style)
|
150
|
+
|
151
|
+
def __repr__(self):
|
152
|
+
return "Simplified timeline style sheet."
|
153
|
+
|
154
|
+
|
155
|
+
class IQXDebugging(dict):
|
156
|
+
"""Timeline stylesheet for programmers. Show details of instructions.
|
157
|
+
|
158
|
+
- Show time buckets.
|
159
|
+
- Show operand name, qubits, and parameters.
|
160
|
+
- Show barriers.
|
161
|
+
- Show delays.
|
162
|
+
- Show idle timeline.
|
163
|
+
- Show bit name.
|
164
|
+
- Show gate link.
|
165
|
+
"""
|
166
|
+
|
167
|
+
def __init__(self, **kwargs):
|
168
|
+
super().__init__()
|
169
|
+
style = {
|
170
|
+
"formatter.control.show_idle": True,
|
171
|
+
"formatter.control.show_clbits": True,
|
172
|
+
"formatter.control.show_barriers": True,
|
173
|
+
"formatter.control.show_delays": True,
|
174
|
+
"generator.gates": [generators.gen_sched_gate, generators.gen_full_gate_name],
|
175
|
+
"generator.bits": [generators.gen_bit_name, generators.gen_timeslot],
|
176
|
+
"generator.barriers": [generators.gen_barrier],
|
177
|
+
"generator.gate_links": [generators.gen_gate_link],
|
178
|
+
"layout.bit_arrange": layouts.qreg_creg_ascending,
|
179
|
+
"layout.time_axis_map": layouts.time_map_in_dt,
|
180
|
+
}
|
181
|
+
style.update(**kwargs)
|
182
|
+
self.update(style)
|
183
|
+
|
184
|
+
def __repr__(self):
|
185
|
+
return "Timeline style sheet for timeline programmers."
|
186
|
+
|
187
|
+
|
188
|
+
def default_style() -> Dict[str, Any]:
|
189
|
+
"""Define default values of the timeline stylesheet."""
|
190
|
+
return {
|
191
|
+
"formatter.general.fig_width": 14,
|
192
|
+
"formatter.general.fig_unit_height": 0.8,
|
193
|
+
"formatter.general.dpi": 150,
|
194
|
+
"formatter.margin.top": 0.5,
|
195
|
+
"formatter.margin.bottom": 0.5,
|
196
|
+
"formatter.margin.left_percent": 0.02,
|
197
|
+
"formatter.margin.right_percent": 0.02,
|
198
|
+
"formatter.margin.link_interval_percent": 0.01,
|
199
|
+
"formatter.margin.minimum_duration": 50,
|
200
|
+
"formatter.time_bucket.edge_dt": 10,
|
201
|
+
"formatter.color.background": "#FFFFFF",
|
202
|
+
"formatter.color.timeslot": "#DDDDDD",
|
203
|
+
"formatter.color.gate_name": "#000000",
|
204
|
+
"formatter.color.bit_name": "#000000",
|
205
|
+
"formatter.color.barrier": "#222222",
|
206
|
+
"formatter.color.gates": {
|
207
|
+
"u0": "#FA74A6",
|
208
|
+
"u1": "#000000",
|
209
|
+
"u2": "#FA74A6",
|
210
|
+
"u3": "#FA74A6",
|
211
|
+
"id": "#05BAB6",
|
212
|
+
"sx": "#FA74A6",
|
213
|
+
"sxdg": "#FA74A6",
|
214
|
+
"x": "#05BAB6",
|
215
|
+
"y": "#05BAB6",
|
216
|
+
"z": "#05BAB6",
|
217
|
+
"h": "#6FA4FF",
|
218
|
+
"cx": "#6FA4FF",
|
219
|
+
"cy": "#6FA4FF",
|
220
|
+
"cz": "#6FA4FF",
|
221
|
+
"swap": "#6FA4FF",
|
222
|
+
"s": "#6FA4FF",
|
223
|
+
"sdg": "#6FA4FF",
|
224
|
+
"dcx": "#6FA4FF",
|
225
|
+
"iswap": "#6FA4FF",
|
226
|
+
"t": "#BB8BFF",
|
227
|
+
"tdg": "#BB8BFF",
|
228
|
+
"r": "#BB8BFF",
|
229
|
+
"rx": "#BB8BFF",
|
230
|
+
"ry": "#BB8BFF",
|
231
|
+
"rz": "#000000",
|
232
|
+
"reset": "#808080",
|
233
|
+
"measure": "#808080",
|
234
|
+
},
|
235
|
+
"formatter.color.default_gate": "#BB8BFF",
|
236
|
+
"formatter.latex_symbol.gates": {
|
237
|
+
"u0": r"{\rm U}_0",
|
238
|
+
"u1": r"{\rm U}_1",
|
239
|
+
"u2": r"{\rm U}_2",
|
240
|
+
"u3": r"{\rm U}_3",
|
241
|
+
"id": r"{\rm Id}",
|
242
|
+
"x": r"{\rm X}",
|
243
|
+
"y": r"{\rm Y}",
|
244
|
+
"z": r"{\rm Z}",
|
245
|
+
"h": r"{\rm H}",
|
246
|
+
"cx": r"{\rm CX}",
|
247
|
+
"cy": r"{\rm CY}",
|
248
|
+
"cz": r"{\rm CZ}",
|
249
|
+
"swap": r"{\rm SWAP}",
|
250
|
+
"s": r"{\rm S}",
|
251
|
+
"sdg": r"{\rm S}^\dagger",
|
252
|
+
"sx": r"{\rm √X}",
|
253
|
+
"sxdg": r"{\rm √X}^\dagger",
|
254
|
+
"dcx": r"{\rm DCX}",
|
255
|
+
"iswap": r"{\rm iSWAP}",
|
256
|
+
"t": r"{\rm T}",
|
257
|
+
"tdg": r"{\rm T}^\dagger",
|
258
|
+
"r": r"{\rm R}",
|
259
|
+
"rx": r"{\rm R}_x",
|
260
|
+
"ry": r"{\rm R}_y",
|
261
|
+
"rz": r"{\rm R}_z",
|
262
|
+
"reset": r"|0\rangle",
|
263
|
+
"measure": r"{\rm Measure}",
|
264
|
+
},
|
265
|
+
"formatter.latex_symbol.frame_change": r"\circlearrowleft",
|
266
|
+
"formatter.unicode_symbol.frame_change": "\u21BA",
|
267
|
+
"formatter.box_height.gate": 0.5,
|
268
|
+
"formatter.box_height.timeslot": 0.6,
|
269
|
+
"formatter.layer.gate": 3,
|
270
|
+
"formatter.layer.timeslot": 0,
|
271
|
+
"formatter.layer.gate_name": 5,
|
272
|
+
"formatter.layer.bit_name": 5,
|
273
|
+
"formatter.layer.frame_change": 4,
|
274
|
+
"formatter.layer.barrier": 1,
|
275
|
+
"formatter.layer.gate_link": 2,
|
276
|
+
"formatter.alpha.gate": 1.0,
|
277
|
+
"formatter.alpha.timeslot": 0.7,
|
278
|
+
"formatter.alpha.barrier": 0.5,
|
279
|
+
"formatter.alpha.gate_link": 0.8,
|
280
|
+
"formatter.line_width.gate": 0,
|
281
|
+
"formatter.line_width.timeslot": 0,
|
282
|
+
"formatter.line_width.barrier": 3,
|
283
|
+
"formatter.line_width.gate_link": 3,
|
284
|
+
"formatter.line_style.barrier": "-",
|
285
|
+
"formatter.line_style.gate_link": "-",
|
286
|
+
"formatter.text_size.gate_name": 12,
|
287
|
+
"formatter.text_size.bit_name": 15,
|
288
|
+
"formatter.text_size.frame_change": 18,
|
289
|
+
"formatter.text_size.axis_label": 13,
|
290
|
+
"formatter.label_offset.frame_change": 0.25,
|
291
|
+
"formatter.control.show_idle": True,
|
292
|
+
"formatter.control.show_clbits": True,
|
293
|
+
"formatter.control.show_barriers": True,
|
294
|
+
"formatter.control.show_delays": True,
|
295
|
+
"generator.gates": [],
|
296
|
+
"generator.bits": [],
|
297
|
+
"generator.barriers": [],
|
298
|
+
"generator.gate_links": [],
|
299
|
+
"layout.bit_arrange": None,
|
300
|
+
"layout.time_axis_map": None,
|
301
|
+
}
|
@@ -0,0 +1,148 @@
|
|
1
|
+
# This code is part of Qiskit.
|
2
|
+
#
|
3
|
+
# (C) Copyright IBM 2020.
|
4
|
+
#
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
+
#
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
11
|
+
# that they have been altered from the originals.
|
12
|
+
|
13
|
+
"""
|
14
|
+
Special data types.
|
15
|
+
"""
|
16
|
+
|
17
|
+
from enum import Enum
|
18
|
+
from typing import NamedTuple, List, Union, NewType, Tuple, Dict
|
19
|
+
|
20
|
+
from qiskit import circuit
|
21
|
+
|
22
|
+
|
23
|
+
ScheduledGate = NamedTuple(
|
24
|
+
"ScheduledGate",
|
25
|
+
[
|
26
|
+
("t0", int),
|
27
|
+
("operand", circuit.Gate),
|
28
|
+
("duration", int),
|
29
|
+
("bits", List[Union[circuit.Qubit, circuit.Clbit]]),
|
30
|
+
("bit_position", int),
|
31
|
+
],
|
32
|
+
)
|
33
|
+
ScheduledGate.__doc__ = "A gate instruction with embedded time."
|
34
|
+
ScheduledGate.t0.__doc__ = "Time when the instruction is issued."
|
35
|
+
ScheduledGate.operand.__doc__ = "Gate object associated with the gate."
|
36
|
+
ScheduledGate.duration.__doc__ = "Time duration of the instruction."
|
37
|
+
ScheduledGate.bits.__doc__ = "List of bit associated with the gate."
|
38
|
+
ScheduledGate.bit_position.__doc__ = "Position of bit associated with this drawing source."
|
39
|
+
|
40
|
+
|
41
|
+
GateLink = NamedTuple(
|
42
|
+
"GateLink", [("t0", int), ("opname", str), ("bits", List[Union[circuit.Qubit, circuit.Clbit]])]
|
43
|
+
)
|
44
|
+
GateLink.__doc__ = "Dedicated object to represent a relationship between instructions."
|
45
|
+
GateLink.t0.__doc__ = "A position where the link is placed."
|
46
|
+
GateLink.opname.__doc__ = "Name of gate associated with this link."
|
47
|
+
GateLink.bits.__doc__ = "List of bit associated with the instruction."
|
48
|
+
|
49
|
+
|
50
|
+
Barrier = NamedTuple(
|
51
|
+
"Barrier",
|
52
|
+
[("t0", int), ("bits", List[Union[circuit.Qubit, circuit.Clbit]]), ("bit_position", int)],
|
53
|
+
)
|
54
|
+
Barrier.__doc__ = "Dedicated object to represent a barrier instruction."
|
55
|
+
Barrier.t0.__doc__ = "A position where the barrier is placed."
|
56
|
+
Barrier.bits.__doc__ = "List of bit associated with the instruction."
|
57
|
+
Barrier.bit_position.__doc__ = "Position of bit associated with this drawing source."
|
58
|
+
|
59
|
+
|
60
|
+
HorizontalAxis = NamedTuple(
|
61
|
+
"HorizontalAxis", [("window", Tuple[int, int]), ("axis_map", Dict[int, int]), ("label", str)]
|
62
|
+
)
|
63
|
+
HorizontalAxis.__doc__ = "Data to represent configuration of horizontal axis."
|
64
|
+
HorizontalAxis.window.__doc__ = "Left and right edge of graph."
|
65
|
+
HorizontalAxis.axis_map.__doc__ = "Mapping of apparent coordinate system and actual location."
|
66
|
+
HorizontalAxis.label.__doc__ = "Label of horizontal axis."
|
67
|
+
|
68
|
+
|
69
|
+
class BoxType(str, Enum):
|
70
|
+
"""Box type.
|
71
|
+
|
72
|
+
SCHED_GATE: Box that represents occupation time by gate.
|
73
|
+
DELAY: Box associated with delay.
|
74
|
+
TIMELINE: Box that represents time slot of a bit.
|
75
|
+
"""
|
76
|
+
|
77
|
+
SCHED_GATE = "Box.ScheduledGate"
|
78
|
+
DELAY = "Box.Delay"
|
79
|
+
TIMELINE = "Box.Timeline"
|
80
|
+
|
81
|
+
|
82
|
+
class LineType(str, Enum):
|
83
|
+
"""Line type.
|
84
|
+
|
85
|
+
BARRIER: Line that represents barrier instruction.
|
86
|
+
GATE_LINK: Line that represents a link among gates.
|
87
|
+
"""
|
88
|
+
|
89
|
+
BARRIER = "Line.Barrier"
|
90
|
+
GATE_LINK = "Line.GateLink"
|
91
|
+
|
92
|
+
|
93
|
+
class SymbolType(str, Enum):
|
94
|
+
"""Symbol type.
|
95
|
+
|
96
|
+
FRAME: Symbol that represents zero time frame change (Rz) instruction.
|
97
|
+
"""
|
98
|
+
|
99
|
+
FRAME = "Symbol.Frame"
|
100
|
+
|
101
|
+
|
102
|
+
class LabelType(str, Enum):
|
103
|
+
"""Label type.
|
104
|
+
|
105
|
+
GATE_NAME: Label that represents name of gate.
|
106
|
+
DELAY: Label associated with delay.
|
107
|
+
GATE_PARAM: Label that represents parameter of gate.
|
108
|
+
BIT_NAME: Label that represents name of bit.
|
109
|
+
"""
|
110
|
+
|
111
|
+
GATE_NAME = "Label.Gate.Name"
|
112
|
+
DELAY = "Label.Delay"
|
113
|
+
GATE_PARAM = "Label.Gate.Param"
|
114
|
+
BIT_NAME = "Label.Bit.Name"
|
115
|
+
|
116
|
+
|
117
|
+
class AbstractCoordinate(Enum):
|
118
|
+
"""Abstract coordinate that the exact value depends on the user preference.
|
119
|
+
|
120
|
+
RIGHT: The horizontal coordinate at t0 shifted by the left margin.
|
121
|
+
LEFT: The horizontal coordinate at tf shifted by the right margin.
|
122
|
+
TOP: The vertical coordinate at the top of the canvas.
|
123
|
+
BOTTOM: The vertical coordinate at the bottom of the canvas.
|
124
|
+
"""
|
125
|
+
|
126
|
+
RIGHT = "RIGHT"
|
127
|
+
LEFT = "LEFT"
|
128
|
+
TOP = "TOP"
|
129
|
+
BOTTOM = "BOTTOM"
|
130
|
+
|
131
|
+
|
132
|
+
class Plotter(str, Enum):
|
133
|
+
"""Name of timeline plotter APIs.
|
134
|
+
|
135
|
+
MPL: Matplotlib plotter interface. Show timeline in 2D canvas.
|
136
|
+
"""
|
137
|
+
|
138
|
+
MPL = "mpl"
|
139
|
+
|
140
|
+
|
141
|
+
# convenient type to represent union of drawing data
|
142
|
+
DataTypes = NewType("DataType", Union[BoxType, LabelType, LineType, SymbolType])
|
143
|
+
|
144
|
+
# convenient type to represent union of values to represent a coordinate
|
145
|
+
Coordinate = NewType("Coordinate", Union[float, AbstractCoordinate])
|
146
|
+
|
147
|
+
# Valid bit objects
|
148
|
+
Bits = NewType("Bits", Union[circuit.Qubit, circuit.Clbit])
|