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,444 @@
|
|
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
|
+
"""Qiskit timeline drawer.
|
14
|
+
|
15
|
+
This module provides a common user interface to the timeline drawer.
|
16
|
+
The `draw` function takes a scheduled circuit to visualize, as well as a style sheet
|
17
|
+
along with several control arguments.
|
18
|
+
The drawer canvas object is internally initialized from the input data and
|
19
|
+
the configured canvas is passed to one of the plotter APIs to generate a visualization data.
|
20
|
+
"""
|
21
|
+
|
22
|
+
from typing import Optional, Dict, Any, List, Tuple
|
23
|
+
|
24
|
+
from qiskit import circuit
|
25
|
+
from qiskit.transpiler.target import Target
|
26
|
+
from qiskit.exceptions import MissingOptionalLibraryError
|
27
|
+
from qiskit.visualization.exceptions import VisualizationError
|
28
|
+
from qiskit.visualization.timeline import types, core, stylesheet
|
29
|
+
from qiskit.utils import deprecate_arg
|
30
|
+
|
31
|
+
|
32
|
+
@deprecate_arg("show_idle", new_alias="idle_wires", since="1.1.0", pending=True)
|
33
|
+
@deprecate_arg("show_barriers", new_alias="plot_barriers", since="1.1.0", pending=True)
|
34
|
+
def draw(
|
35
|
+
program: circuit.QuantumCircuit,
|
36
|
+
style: Optional[Dict[str, Any]] = None,
|
37
|
+
time_range: Tuple[int, int] = None,
|
38
|
+
disable_bits: List[types.Bits] = None,
|
39
|
+
show_clbits: Optional[bool] = None,
|
40
|
+
idle_wires: Optional[bool] = None,
|
41
|
+
plot_barriers: Optional[bool] = None,
|
42
|
+
show_delays: Optional[bool] = None,
|
43
|
+
show_labels: bool = True,
|
44
|
+
plotter: Optional[str] = types.Plotter.MPL.value,
|
45
|
+
axis: Optional[Any] = None,
|
46
|
+
filename: Optional[str] = None,
|
47
|
+
target: Optional[Target] = None,
|
48
|
+
*,
|
49
|
+
show_idle: Optional[bool] = None,
|
50
|
+
show_barriers: Optional[bool] = None,
|
51
|
+
):
|
52
|
+
r"""Generate visualization data for scheduled circuit programs.
|
53
|
+
|
54
|
+
.. deprecated:: 1.3
|
55
|
+
The ``target`` parameter needs to be specified in Qiskit 2.0 in order to get the
|
56
|
+
instruction durations.
|
57
|
+
|
58
|
+
Args:
|
59
|
+
program: Program to visualize. This program should be a `QuantumCircuit` which is
|
60
|
+
transpiled with a scheduling_method, thus containing gate time information.
|
61
|
+
style: Stylesheet options. This can be dictionary or preset stylesheet classes. See
|
62
|
+
:py:class:`~qiskit.visualization.timeline.stylesheets.IQXStandard`,
|
63
|
+
:py:class:`~qiskit.visualization.timeline.stylesheets.IQXSimple`, and
|
64
|
+
:py:class:`~qiskit.visualization.timeline.stylesheets.IQXDebugging` for details of
|
65
|
+
preset stylesheets. See also the stylesheet section for details of configuration keys.
|
66
|
+
time_range: Set horizontal axis limit.
|
67
|
+
disable_bits: List of qubits of classical bits not shown in the output image.
|
68
|
+
show_clbits: A control property to show classical bits.
|
69
|
+
Set `True` to show classical bits.
|
70
|
+
idle_wires: A control property to show idle timeline.
|
71
|
+
Set `True` to show timeline without gates.
|
72
|
+
plot_barriers: A control property to show barrier instructions.
|
73
|
+
Set `True` to show barrier instructions.
|
74
|
+
show_delays: A control property to show delay instructions.
|
75
|
+
Set `True` to show delay instructions.
|
76
|
+
show_labels: A control property to show annotations, i.e. name, of gates.
|
77
|
+
Set `True` to show annotations.
|
78
|
+
plotter: Name of plotter API to generate an output image.
|
79
|
+
One of following APIs should be specified::
|
80
|
+
|
81
|
+
mpl: Matplotlib API
|
82
|
+
Matplotlib API to generate 2D image. Timelines are placed along y axis with
|
83
|
+
vertical offset. This API takes matplotlib.axes.Axes as `axis` input.
|
84
|
+
|
85
|
+
`axis` and `style` kwargs may depend on the plotter.
|
86
|
+
axis: Arbitrary object passed to the plotter. If this object is provided,
|
87
|
+
the plotters uses given `axis` instead of internally initializing a figure object.
|
88
|
+
This object format depends on the plotter. See plotters section for details.
|
89
|
+
filename: If provided the output image is dumped into a file under the filename.
|
90
|
+
target: The target for the backend the timeline is being generated for.
|
91
|
+
show_idle: DEPRECATED.
|
92
|
+
show_barriers: DEPRECATED.
|
93
|
+
|
94
|
+
Returns:
|
95
|
+
Visualization output data.
|
96
|
+
|
97
|
+
The returned data type depends on the `plotter`.
|
98
|
+
If matplotlib family is specified, this will be a `matplotlib.pyplot.Figure` data.
|
99
|
+
The returned data is generated by the `.get_image` method of the specified plotter API.
|
100
|
+
|
101
|
+
Raises:
|
102
|
+
MissingOptionalLibraryError: When required visualization package is not installed.
|
103
|
+
VisualizationError: When invalid plotter API is specified.
|
104
|
+
|
105
|
+
.. _style-dict-doc:
|
106
|
+
|
107
|
+
**Style Dict Details**
|
108
|
+
|
109
|
+
The stylesheet kwarg contains numerous options that define the style of the
|
110
|
+
output timeline visualization.
|
111
|
+
The stylesheet options can be classified into `formatter`, `generator` and `layout`.
|
112
|
+
Those options available in the stylesheet are defined below:
|
113
|
+
|
114
|
+
Args:
|
115
|
+
formatter.general.fig_width: Width of output image (default `14`).
|
116
|
+
formatter.general.fig_unit_height: Height of output image per timeline.
|
117
|
+
The sum of all timeline becomes the height of the output image (default `0.8`).
|
118
|
+
formatter.general.dpi: Dot per inch of image if `filename` is set (default `150`).
|
119
|
+
formatter.margin.top: Margin from the top boundary of the figure canvas to
|
120
|
+
the zero line of the first time slot (default `0.5`).
|
121
|
+
formatter.margin.bottom: Margin from the bottom boundary of the figure canvas to
|
122
|
+
the zero lien of the last time slot (default `0.5`).
|
123
|
+
formatter.margin.left_percent: Margin from the left boundary of the figure canvas to
|
124
|
+
the left limit of the horizontal axis. The value is in units of percentage of
|
125
|
+
the whole program duration. If the duration is 100 and the value of 0.5 is set,
|
126
|
+
this keeps left margin of 5 (default `0.02`).
|
127
|
+
formatter.margin.right_percent: Margin from the right boundary of the figure canvas to
|
128
|
+
the right limit of the horizontal axis. The value is in units of percentage of
|
129
|
+
the whole program duration. If the duration is 100 and the value of 0.5 is set,
|
130
|
+
this keeps right margin of 5 (default `0.02`).
|
131
|
+
formatter.margin.link_interval_percent: Allowed overlap of gate links.
|
132
|
+
If multiple gate links are drawing within this range, links are horizontally
|
133
|
+
shifted not to overlap with each other. The value is in units of percentage of
|
134
|
+
the whole program duration (default `0.01`).
|
135
|
+
formatter.time_bucket.edge_dt: The length of round edge of gate boxes. Gate boxes are
|
136
|
+
smoothly faded in and out from the zero line. This value is in units of
|
137
|
+
the system cycle time dt (default `10`).
|
138
|
+
formatter.margin.minimum_duration: Minimum scheduled circuit duration.
|
139
|
+
If the duration of input circuit is below this value, horizontal limit is
|
140
|
+
set based on this value. This value is in units of
|
141
|
+
the system cycle time dt (default `50`).
|
142
|
+
formatter.color.background: Color code of the face color of canvas (default `#FFFFFF`).
|
143
|
+
formatter.color.timeslot: Face color of the time slot box (default `#DDDDDD`).
|
144
|
+
formatter.color.gate_name: Text color of the gate name annotations (default `#000000`).
|
145
|
+
formatter.color.bit_name: Text color of the bit label annotations (default `#000000`).
|
146
|
+
formatter.color.barrier: Line color of barriers (default `#222222`).
|
147
|
+
formatter.color.gates: A dictionary of the gate box or gate symbol colors
|
148
|
+
to use for each element type in the output visualization. The default
|
149
|
+
values are::
|
150
|
+
|
151
|
+
{
|
152
|
+
'u0': '#FA74A6',
|
153
|
+
'u1': '#000000',
|
154
|
+
'u2': '#FA74A6',
|
155
|
+
'u3': '#FA74A6',
|
156
|
+
'id': '#05BAB6',
|
157
|
+
'sx': '#FA74A6',
|
158
|
+
'sxdg': '#FA74A6',
|
159
|
+
'x': '#05BAB6',
|
160
|
+
'y': '#05BAB6',
|
161
|
+
'z': '#05BAB6',
|
162
|
+
'h': '#6FA4FF',
|
163
|
+
'cx': '#6FA4FF',
|
164
|
+
'cy': '#6FA4FF',
|
165
|
+
'cz': '#6FA4FF',
|
166
|
+
'swap': '#6FA4FF',
|
167
|
+
's': '#6FA4FF',
|
168
|
+
'sdg': '#6FA4FF',
|
169
|
+
'dcx': '#6FA4FF',
|
170
|
+
'iswap': '#6FA4FF',
|
171
|
+
't': '#BB8BFF',
|
172
|
+
'tdg': '#BB8BFF',
|
173
|
+
'r': '#BB8BFF',
|
174
|
+
'rx': '#BB8BFF',
|
175
|
+
'ry': '#BB8BFF',
|
176
|
+
'rz': '#000000',
|
177
|
+
'reset': '#808080',
|
178
|
+
'measure': '#808080'
|
179
|
+
}
|
180
|
+
|
181
|
+
You must specify all the necessary values if using this. If a gate name is not
|
182
|
+
specified, the color in `formatter.color.default_gate` is applied.
|
183
|
+
formatter.color.default_gate: Default gate color. This color is applied when
|
184
|
+
a gate name to visualize is not contained in the dictionary of
|
185
|
+
`formatter.color.gates` (default `#BB8BFF`).
|
186
|
+
formatter.latex_symbol.gates: A dictionary of latex representation of gate names
|
187
|
+
to use for each element type in the output visualization. The default
|
188
|
+
values are::
|
189
|
+
|
190
|
+
{
|
191
|
+
'u0': r'{\rm U}_0',
|
192
|
+
'u1': r'{\rm U}_1',
|
193
|
+
'u2': r'{\rm U}_2',
|
194
|
+
'u3': r'{\rm U}_3',
|
195
|
+
'id': r'{\rm Id}',
|
196
|
+
'x': r'{\rm X}',
|
197
|
+
'y': r'{\rm Y}',
|
198
|
+
'z': r'{\rm Z}',
|
199
|
+
'h': r'{\rm H}',
|
200
|
+
'cx': r'{\rm CX}',
|
201
|
+
'cy': r'{\rm CY}',
|
202
|
+
'cz': r'{\rm CZ}',
|
203
|
+
'swap': r'{\rm SWAP}',
|
204
|
+
's': r'{\rm S}',
|
205
|
+
'sdg': r'{\rm S}^\dagger',
|
206
|
+
'sx': r'{\rm √X}',
|
207
|
+
'sxdg': r'{\rm √X}^\dagger',
|
208
|
+
'dcx': r'{\rm DCX}',
|
209
|
+
'iswap': r'{\rm iSWAP}',
|
210
|
+
't': r'{\rm T}',
|
211
|
+
'tdg': r'{\rm T}^\dagger',
|
212
|
+
'r': r'{\rm R}',
|
213
|
+
'rx': r'{\rm R}_x',
|
214
|
+
'ry': r'{\rm R}_y',
|
215
|
+
'rz': r'{\rm R}_z',
|
216
|
+
'reset': r'|0\rangle',
|
217
|
+
'measure': r'{\rm Measure}'
|
218
|
+
}
|
219
|
+
|
220
|
+
You must specify all the necessary values if using this. There is
|
221
|
+
no provision for passing an incomplete dict in.
|
222
|
+
formatter.latex_symbol.frame_change: Latex representation of
|
223
|
+
the frame change symbol (default r`\circlearrowleft`).
|
224
|
+
formatter.unicode_symbol.frame_change: Unicode representation of
|
225
|
+
the frame change symbol (default u'\u21BA').
|
226
|
+
formatter.box_height.gate: Height of gate box (default `0.5`).
|
227
|
+
formatter.box_height.timeslot: Height of time slot (default `0.6`).
|
228
|
+
formatter.layer.gate: Layer index of gate boxes. Larger number comes
|
229
|
+
in the front of the output image (default `3`).
|
230
|
+
formatter.layer.timeslot: Layer index of time slots. Larger number comes
|
231
|
+
in the front of the output image (default `0`).
|
232
|
+
formatter.layer.gate_name: Layer index of gate name annotations. Larger number comes
|
233
|
+
in the front of the output image (default `5`).
|
234
|
+
formatter.layer.bit_name: Layer index of bit labels. Larger number comes
|
235
|
+
in the front of the output image (default `5`).
|
236
|
+
formatter.layer.frame_change: Layer index of frame change symbols. Larger number comes
|
237
|
+
in the front of the output image (default `4`).
|
238
|
+
formatter.layer.barrier: Layer index of barrier lines. Larger number comes
|
239
|
+
in the front of the output image (default `1`).
|
240
|
+
formatter.layer.gate_link: Layer index of gate link lines. Larger number comes
|
241
|
+
in the front of the output image (default `2`).
|
242
|
+
formatter.alpha.gate: Transparency of gate boxes. A value in the range from
|
243
|
+
`0` to `1`. The value `0` gives completely transparent boxes (default `1.0`).
|
244
|
+
formatter.alpha.timeslot: Transparency of time slots. A value in the range from
|
245
|
+
`0` to `1`. The value `0` gives completely transparent boxes (default `0.7`).
|
246
|
+
formatter.alpha.barrier: Transparency of barrier lines. A value in the range from
|
247
|
+
`0` to `1`. The value `0` gives completely transparent lines (default `0.5`).
|
248
|
+
formatter.alpha.gate_link: Transparency of gate link lines. A value in the range from
|
249
|
+
`0` to `1`. The value `0` gives completely transparent lines (default `0.8`).
|
250
|
+
formatter.line_width.gate: Line width of the fringe of gate boxes (default `0`).
|
251
|
+
formatter.line_width.timeslot: Line width of the fringe of time slots (default `0`).
|
252
|
+
formatter.line_width.barrier: Line width of barrier lines (default `3`).
|
253
|
+
formatter.line_width.gate_link: Line width of gate links (default `3`).
|
254
|
+
formatter.line_style.barrier: Line style of barrier lines. This
|
255
|
+
conforms to the line style spec of matplotlib (default `'-'`).
|
256
|
+
formatter.line_style.gate_link: Line style of gate link lines. This
|
257
|
+
conforms to the line style spec of matplotlib (default `'-'`).
|
258
|
+
formatter.text_size.gate_name: Text size of gate name annotations (default `12`).
|
259
|
+
formatter.text_size.bit_name: Text size of bit labels (default `15`).
|
260
|
+
formatter.text_size.frame_change: Text size of frame change symbols (default `18`).
|
261
|
+
formatter.text_size.axis_label: Text size of axis labels (default `13`).
|
262
|
+
formatter.label_offset.frame_change: Offset of zero duration gate name annotations
|
263
|
+
from the zero line of time slot (default `0.25`).
|
264
|
+
formatter.control.show_idle: Set `True` to show time slots without gate (default `True`).
|
265
|
+
formatter.control.show_clbits: Set `True` to show time slots of
|
266
|
+
classical bits (default `True`).
|
267
|
+
formatter.control.show_barriers: Set `True` to show barriers (default `True`).
|
268
|
+
formatter.control.show_delays: Set `True` to show delay boxes (default `True`).
|
269
|
+
generator.gates: List of callback functions that generates drawings
|
270
|
+
for gates. Arbitrary callback functions satisfying the generator format
|
271
|
+
can be set here. There are some default generators in the timeline drawer. See
|
272
|
+
:py:mod:`~qiskit.visualization.timeline.generators` for more details.
|
273
|
+
No default generator is set (default `[]`).
|
274
|
+
generator.bits: List of callback functions that generates drawings for bit labels
|
275
|
+
and time slots. Arbitrary callback functions satisfying the generator format
|
276
|
+
can be set here. There are some default generators in the timeline drawer. See
|
277
|
+
:py:mod:`~qiskit.visualization.timeline.generators` for more details.
|
278
|
+
No default generator is set (default `[]`).
|
279
|
+
generator.barriers: List of callback functions that generates drawings
|
280
|
+
for barriers. Arbitrary callback functions satisfying the generator format
|
281
|
+
can be set here. There are some default generators in the timeline drawer. See
|
282
|
+
:py:mod:`~qiskit.visualization.timeline.generators` for more details.
|
283
|
+
No default generator is set (default `[]`).
|
284
|
+
generator.gate_links: List of callback functions that generates drawings
|
285
|
+
for gate links. Arbitrary callback functions satisfying the generator format
|
286
|
+
can be set here. There are some default generators in the timeline drawer. See
|
287
|
+
:py:mod:`~qiskit.visualization.timeline.generators` for more details.
|
288
|
+
No default generator is set (default `[]`).
|
289
|
+
layout.bit_arrange: Callback function that sorts bits. See
|
290
|
+
:py:mod:`~qiskit.visualization.timeline.layouts` for more details.
|
291
|
+
No default layout is set. (default `None`).
|
292
|
+
layout.time_axis_map: Callback function that determines the layout of
|
293
|
+
horizontal axis labels. See :py:mod:`~qiskit.visualization.timeline.layouts`
|
294
|
+
for more details. No default layout is set. (default `None`).
|
295
|
+
|
296
|
+
Examples:
|
297
|
+
To visualize a scheduled circuit program, you can call this function with a set of
|
298
|
+
control arguments. Most of the appearance of the output image can be controlled by the
|
299
|
+
stylesheet.
|
300
|
+
|
301
|
+
Drawing with the default stylesheet.
|
302
|
+
|
303
|
+
.. plot::
|
304
|
+
:alt: Output from the previous code.
|
305
|
+
:include-source:
|
306
|
+
|
307
|
+
from qiskit import QuantumCircuit, transpile
|
308
|
+
from qiskit.visualization.timeline import draw
|
309
|
+
from qiskit.providers.fake_provider import GenericBackendV2
|
310
|
+
|
311
|
+
qc = QuantumCircuit(2)
|
312
|
+
qc.h(0)
|
313
|
+
qc.cx(0,1)
|
314
|
+
|
315
|
+
backend = GenericBackendV2(5)
|
316
|
+
|
317
|
+
qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
|
318
|
+
draw(qc, target=backend.target)
|
319
|
+
|
320
|
+
Drawing with the simple stylesheet.
|
321
|
+
|
322
|
+
.. plot::
|
323
|
+
:alt: Output from the previous code.
|
324
|
+
:include-source:
|
325
|
+
|
326
|
+
from qiskit import QuantumCircuit, transpile
|
327
|
+
from qiskit.visualization.timeline import draw, IQXSimple
|
328
|
+
from qiskit.providers.fake_provider import GenericBackendV2
|
329
|
+
|
330
|
+
qc = QuantumCircuit(2)
|
331
|
+
qc.h(0)
|
332
|
+
qc.cx(0,1)
|
333
|
+
|
334
|
+
backend = GenericBackendV2(5)
|
335
|
+
|
336
|
+
qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
|
337
|
+
draw(qc, style=IQXSimple(), target=backend.target)
|
338
|
+
|
339
|
+
Drawing with the stylesheet suited for program debugging.
|
340
|
+
|
341
|
+
.. plot::
|
342
|
+
:alt: Output from the previous code.
|
343
|
+
:include-source:
|
344
|
+
|
345
|
+
from qiskit import QuantumCircuit, transpile
|
346
|
+
from qiskit.visualization.timeline import draw, IQXDebugging
|
347
|
+
from qiskit.providers.fake_provider import GenericBackendV2
|
348
|
+
|
349
|
+
qc = QuantumCircuit(2)
|
350
|
+
qc.h(0)
|
351
|
+
qc.cx(0,1)
|
352
|
+
|
353
|
+
backend = GenericBackendV2(5)
|
354
|
+
qc = transpile(qc, backend, scheduling_method='alap', layout_method='trivial')
|
355
|
+
draw(qc, style=IQXDebugging(), target=backend.target)
|
356
|
+
|
357
|
+
You can partially customize a preset stylesheet when call it::
|
358
|
+
|
359
|
+
my_style = {
|
360
|
+
'formatter.general.fig_width': 16,
|
361
|
+
'formatter.general.fig_unit_height': 1
|
362
|
+
}
|
363
|
+
style = IQXStandard(**my_style)
|
364
|
+
|
365
|
+
# draw
|
366
|
+
draw(qc, style=style)
|
367
|
+
|
368
|
+
In the same way as above, you can create custom generator or layout functions
|
369
|
+
and update existing stylesheet with custom functions.
|
370
|
+
This feature enables you to control the most of the appearance of the output image
|
371
|
+
without modifying the codebase of the scheduled circuit drawer.
|
372
|
+
"""
|
373
|
+
del show_idle
|
374
|
+
del show_barriers
|
375
|
+
# update stylesheet
|
376
|
+
temp_style = stylesheet.QiskitTimelineStyle()
|
377
|
+
temp_style.update(style or stylesheet.IQXStandard())
|
378
|
+
|
379
|
+
if target is None:
|
380
|
+
raise VisualizationError(
|
381
|
+
"No target is specified, this is required to get the duration of instructions."
|
382
|
+
)
|
383
|
+
|
384
|
+
# update control properties
|
385
|
+
if idle_wires is not None:
|
386
|
+
temp_style["formatter.control.show_idle"] = idle_wires
|
387
|
+
|
388
|
+
if show_clbits is not None:
|
389
|
+
temp_style["formatter.control.show_clbits"] = show_clbits
|
390
|
+
|
391
|
+
if plot_barriers is not None:
|
392
|
+
temp_style["formatter.control.show_barriers"] = plot_barriers
|
393
|
+
|
394
|
+
if show_delays is not None:
|
395
|
+
temp_style["formatter.control.show_delays"] = show_delays
|
396
|
+
|
397
|
+
# create empty canvas and load program
|
398
|
+
canvas = core.DrawerCanvas(stylesheet=temp_style)
|
399
|
+
canvas.load_program(program=program, target=target)
|
400
|
+
|
401
|
+
#
|
402
|
+
# update configuration
|
403
|
+
#
|
404
|
+
|
405
|
+
# time range
|
406
|
+
if time_range:
|
407
|
+
canvas.set_time_range(*time_range)
|
408
|
+
|
409
|
+
# bits not shown
|
410
|
+
if disable_bits:
|
411
|
+
for bit in disable_bits:
|
412
|
+
canvas.set_disable_bits(bit, remove=True)
|
413
|
+
|
414
|
+
# show labels
|
415
|
+
if not show_labels:
|
416
|
+
labels = [types.LabelType.DELAY, types.LabelType.GATE_PARAM, types.LabelType.GATE_NAME]
|
417
|
+
for label in labels:
|
418
|
+
canvas.set_disable_type(label, remove=True)
|
419
|
+
|
420
|
+
canvas.update()
|
421
|
+
|
422
|
+
#
|
423
|
+
# Call plotter API and generate image
|
424
|
+
#
|
425
|
+
|
426
|
+
if plotter == types.Plotter.MPL.value:
|
427
|
+
try:
|
428
|
+
from qiskit.visualization.timeline.plotters import MplPlotter
|
429
|
+
except ImportError as ex:
|
430
|
+
raise MissingOptionalLibraryError(
|
431
|
+
libname="Matplotlib",
|
432
|
+
name="timeline drawer",
|
433
|
+
pip_install="pip install matplotlib",
|
434
|
+
) from ex
|
435
|
+
plotter_api = MplPlotter(canvas=canvas, axis=axis)
|
436
|
+
plotter_api.draw()
|
437
|
+
else:
|
438
|
+
raise VisualizationError(f"Plotter API {plotter} is not supported.")
|
439
|
+
|
440
|
+
# save figure
|
441
|
+
if filename:
|
442
|
+
plotter_api.save_file(filename=filename)
|
443
|
+
|
444
|
+
return plotter_api.get_image()
|
@@ -0,0 +1,115 @@
|
|
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
|
+
A collection of functions that decide the layout of an output image.
|
15
|
+
See :py:mod:`~qiskit.visualization.timeline.types` for more info on the required data.
|
16
|
+
|
17
|
+
There are 2 types of layout functions in this module.
|
18
|
+
|
19
|
+
1. layout.bit_arrange
|
20
|
+
|
21
|
+
In this stylesheet entry the input data is a list of `types.Bits` and returns a
|
22
|
+
sorted list of `types.Bits`.
|
23
|
+
|
24
|
+
|
25
|
+
The function signature of the layout is restricted to:
|
26
|
+
|
27
|
+
```python
|
28
|
+
|
29
|
+
def my_layout(bits: List[types.Bits]) -> List[types.Bits]:
|
30
|
+
|
31
|
+
# your code here: sort input bits and return list of bits
|
32
|
+
```
|
33
|
+
|
34
|
+
2. layout.time_axis_map
|
35
|
+
|
36
|
+
In this stylesheet entry the input data is `Tuple[int, int]` that represents horizontal
|
37
|
+
axis limit of the output image. The layout function returns `types.HorizontalAxis` data
|
38
|
+
which is consumed by the plotter API to make horizontal axis.
|
39
|
+
|
40
|
+
The function signature of the layout is restricted to:
|
41
|
+
|
42
|
+
```python
|
43
|
+
|
44
|
+
def my_layout(time_window: Tuple[int, int]) -> types.HorizontalAxis:
|
45
|
+
|
46
|
+
# your code here: create and return axis config
|
47
|
+
```
|
48
|
+
|
49
|
+
Arbitrary layout function satisfying the above format can be accepted.
|
50
|
+
"""
|
51
|
+
from typing import List, Tuple
|
52
|
+
import numpy as np
|
53
|
+
|
54
|
+
from qiskit import circuit
|
55
|
+
from qiskit.visualization.timeline import types
|
56
|
+
|
57
|
+
|
58
|
+
def qreg_creg_ascending(bits: List[types.Bits]) -> List[types.Bits]:
|
59
|
+
"""Sort bits by ascending order.
|
60
|
+
|
61
|
+
Bit order becomes Q0, Q1, ..., Cl0, Cl1, ...
|
62
|
+
|
63
|
+
Args:
|
64
|
+
bits: List of bits to sort.
|
65
|
+
|
66
|
+
Returns:
|
67
|
+
Sorted bits.
|
68
|
+
"""
|
69
|
+
return [x for x in bits if isinstance(x, circuit.Qubit)] + [
|
70
|
+
x for x in bits if isinstance(x, circuit.Clbit)
|
71
|
+
]
|
72
|
+
|
73
|
+
|
74
|
+
def qreg_creg_descending(bits: List[types.Bits]) -> List[types.Bits]:
|
75
|
+
"""Sort bits by descending order.
|
76
|
+
|
77
|
+
Bit order becomes Q_N, Q_N-1, ..., Cl_N, Cl_N-1, ...
|
78
|
+
|
79
|
+
Args:
|
80
|
+
bits: List of bits to sort.
|
81
|
+
|
82
|
+
Returns:
|
83
|
+
Sorted bits.
|
84
|
+
"""
|
85
|
+
return [x for x in bits[::-1] if isinstance(x, circuit.Qubit)] + [
|
86
|
+
x for x in bits[::-1] if isinstance(x, circuit.Clbit)
|
87
|
+
]
|
88
|
+
|
89
|
+
|
90
|
+
def time_map_in_dt(time_window: Tuple[int, int]) -> types.HorizontalAxis:
|
91
|
+
"""Layout function for the horizontal axis formatting.
|
92
|
+
|
93
|
+
Generate equispaced 6 horizontal axis ticks.
|
94
|
+
|
95
|
+
Args:
|
96
|
+
time_window: Left and right edge of this graph.
|
97
|
+
|
98
|
+
Returns:
|
99
|
+
Axis formatter object.
|
100
|
+
"""
|
101
|
+
# shift time axis
|
102
|
+
t0, t1 = time_window
|
103
|
+
|
104
|
+
# axis label
|
105
|
+
axis_loc = np.linspace(max(t0, 0), t1, 6)
|
106
|
+
axis_label = axis_loc.copy()
|
107
|
+
|
108
|
+
# consider time resolution
|
109
|
+
label = "System cycle time (dt)"
|
110
|
+
|
111
|
+
formatted_label = [f"{val:.0f}" for val in axis_label]
|
112
|
+
|
113
|
+
return types.HorizontalAxis(
|
114
|
+
window=(t0, t1), axis_map=dict(zip(axis_loc, formatted_label)), label=label
|
115
|
+
)
|
@@ -0,0 +1,16 @@
|
|
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
|
+
Plotter API.
|
14
|
+
"""
|
15
|
+
|
16
|
+
from qiskit.visualization.timeline.plotters.matplotlib import MplPlotter
|
@@ -0,0 +1,58 @@
|
|
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
|
+
"""Base plotter API."""
|
14
|
+
|
15
|
+
from abc import ABC, abstractmethod
|
16
|
+
from typing import Any
|
17
|
+
|
18
|
+
from qiskit.visualization.timeline import core
|
19
|
+
|
20
|
+
|
21
|
+
class BasePlotter(ABC):
|
22
|
+
"""Base class of Qiskit plotter."""
|
23
|
+
|
24
|
+
def __init__(self, canvas: core.DrawerCanvas):
|
25
|
+
"""Create new plotter.
|
26
|
+
Args:
|
27
|
+
canvas: Configured drawer canvas object.
|
28
|
+
"""
|
29
|
+
self.canvas = canvas
|
30
|
+
|
31
|
+
@abstractmethod
|
32
|
+
def initialize_canvas(self):
|
33
|
+
"""Format appearance of the canvas."""
|
34
|
+
raise NotImplementedError
|
35
|
+
|
36
|
+
@abstractmethod
|
37
|
+
def draw(self):
|
38
|
+
"""Output drawings stored in canvas object."""
|
39
|
+
raise NotImplementedError
|
40
|
+
|
41
|
+
@abstractmethod
|
42
|
+
def save_file(self, filename: str):
|
43
|
+
"""Save image to file.
|
44
|
+
Args:
|
45
|
+
filename: File path to output image data.
|
46
|
+
"""
|
47
|
+
raise NotImplementedError
|
48
|
+
|
49
|
+
@abstractmethod
|
50
|
+
def get_image(self, interactive: bool = False) -> Any:
|
51
|
+
"""Get image data to return.
|
52
|
+
Args:
|
53
|
+
interactive: When set `True` show the circuit in a new window.
|
54
|
+
This depends on the matplotlib backend being used supporting this.
|
55
|
+
Returns:
|
56
|
+
Image data. This depends on the plotter API.
|
57
|
+
"""
|
58
|
+
raise NotImplementedError
|