qiskit 1.4.0__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.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 -1
- qiskit/__init__.py +2 -5
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +24 -5
- qiskit/circuit/{add_control.py → _add_control.py} +32 -12
- qiskit/circuit/_classical_resource_map.py +5 -3
- qiskit/circuit/barrier.py +3 -7
- qiskit/circuit/classical/expr/__init__.py +31 -3
- qiskit/circuit/classical/expr/constructors.py +248 -28
- qiskit/circuit/classical/expr/expr.py +104 -3
- qiskit/circuit/classical/expr/visitors.py +75 -0
- qiskit/circuit/classical/types/__init__.py +12 -8
- qiskit/circuit/classical/types/ordering.py +14 -7
- qiskit/circuit/classical/types/types.py +36 -0
- qiskit/circuit/commutation_checker.py +34 -7
- qiskit/circuit/controlflow/__init__.py +32 -1
- qiskit/circuit/controlflow/_builder_utils.py +9 -5
- qiskit/circuit/controlflow/box.py +163 -0
- qiskit/circuit/controlflow/break_loop.py +1 -1
- qiskit/circuit/controlflow/builder.py +139 -39
- qiskit/circuit/controlflow/continue_loop.py +1 -3
- qiskit/circuit/controlflow/control_flow.py +10 -0
- qiskit/circuit/controlflow/for_loop.py +2 -1
- qiskit/circuit/controlflow/if_else.py +3 -16
- qiskit/circuit/controlflow/switch_case.py +2 -8
- qiskit/circuit/controlflow/while_loop.py +2 -7
- qiskit/circuit/controlledgate.py +2 -4
- qiskit/circuit/delay.py +40 -11
- qiskit/circuit/duration.py +0 -15
- qiskit/circuit/gate.py +2 -4
- qiskit/circuit/instruction.py +7 -140
- qiskit/circuit/instructionset.py +7 -54
- qiskit/circuit/library/__init__.py +34 -5
- qiskit/circuit/library/arithmetic/__init__.py +16 -10
- qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
- qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
- qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
- qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
- qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
- qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
- qiskit/circuit/library/bit_flip_oracle.py +130 -0
- qiskit/circuit/library/blueprintcircuit.py +52 -16
- qiskit/circuit/library/data_preparation/initializer.py +1 -1
- qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
- qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
- qiskit/circuit/library/generalized_gates/gms.py +1 -1
- qiskit/circuit/library/generalized_gates/isometry.py +1 -1
- qiskit/circuit/library/generalized_gates/pauli.py +1 -2
- qiskit/circuit/library/generalized_gates/uc.py +97 -7
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
- qiskit/circuit/library/generalized_gates/unitary.py +4 -2
- qiskit/circuit/library/hamiltonian_gate.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
- qiskit/circuit/library/n_local/n_local.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
- qiskit/circuit/library/overlap.py +2 -2
- qiskit/circuit/library/pauli_evolution.py +39 -24
- qiskit/circuit/library/phase_oracle.py +130 -51
- qiskit/circuit/library/standard_gates/__init__.py +0 -1
- qiskit/circuit/library/standard_gates/dcx.py +3 -4
- qiskit/circuit/library/standard_gates/ecr.py +3 -4
- qiskit/circuit/library/standard_gates/global_phase.py +5 -6
- qiskit/circuit/library/standard_gates/h.py +4 -9
- qiskit/circuit/library/standard_gates/i.py +2 -2
- qiskit/circuit/library/standard_gates/iswap.py +3 -4
- qiskit/circuit/library/standard_gates/p.py +15 -34
- qiskit/circuit/library/standard_gates/r.py +2 -6
- qiskit/circuit/library/standard_gates/rx.py +5 -15
- qiskit/circuit/library/standard_gates/rxx.py +3 -6
- qiskit/circuit/library/standard_gates/ry.py +5 -17
- qiskit/circuit/library/standard_gates/ryy.py +3 -6
- qiskit/circuit/library/standard_gates/rz.py +5 -17
- qiskit/circuit/library/standard_gates/rzx.py +3 -6
- qiskit/circuit/library/standard_gates/rzz.py +3 -6
- qiskit/circuit/library/standard_gates/s.py +6 -15
- qiskit/circuit/library/standard_gates/swap.py +4 -11
- qiskit/circuit/library/standard_gates/sx.py +7 -12
- qiskit/circuit/library/standard_gates/t.py +6 -7
- qiskit/circuit/library/standard_gates/u.py +2 -10
- qiskit/circuit/library/standard_gates/u1.py +5 -16
- qiskit/circuit/library/standard_gates/u2.py +2 -6
- qiskit/circuit/library/standard_gates/u3.py +3 -11
- qiskit/circuit/library/standard_gates/x.py +13 -60
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
- qiskit/circuit/library/standard_gates/y.py +4 -9
- qiskit/circuit/library/standard_gates/z.py +5 -15
- qiskit/circuit/measure.py +11 -2
- qiskit/circuit/parameterexpression.py +4 -0
- qiskit/circuit/quantumcircuit.py +881 -555
- qiskit/circuit/random/utils.py +12 -6
- qiskit/circuit/reset.py +5 -2
- qiskit/circuit/singleton.py +5 -11
- qiskit/circuit/store.py +0 -8
- qiskit/compiler/__init__.py +1 -7
- qiskit/compiler/transpiler.py +38 -196
- qiskit/converters/circuit_to_dag.py +4 -2
- qiskit/converters/circuit_to_dagdependency.py +0 -2
- qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
- qiskit/converters/circuit_to_gate.py +1 -1
- qiskit/converters/circuit_to_instruction.py +16 -29
- qiskit/converters/dag_to_circuit.py +5 -5
- qiskit/converters/dag_to_dagdependency.py +0 -1
- qiskit/converters/dag_to_dagdependency_v2.py +0 -1
- qiskit/converters/dagdependency_to_circuit.py +0 -6
- qiskit/converters/dagdependency_to_dag.py +0 -6
- qiskit/dagcircuit/collect_blocks.py +32 -20
- qiskit/dagcircuit/dagdependency.py +3 -37
- qiskit/dagcircuit/dagdependency_v2.py +2 -80
- qiskit/dagcircuit/dagnode.py +14 -2
- qiskit/passmanager/__init__.py +24 -6
- qiskit/passmanager/passmanager.py +26 -24
- qiskit/primitives/__init__.py +44 -35
- qiskit/primitives/backend_estimator_v2.py +102 -23
- qiskit/primitives/backend_sampler_v2.py +5 -20
- qiskit/primitives/base/__init__.py +4 -4
- qiskit/primitives/base/base_estimator.py +77 -82
- qiskit/primitives/base/base_primitive_job.py +2 -2
- qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
- qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
- qiskit/primitives/base/base_sampler.py +52 -60
- qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
- qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
- qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
- qiskit/primitives/containers/bindings_array.py +3 -1
- qiskit/primitives/containers/bit_array.py +23 -0
- qiskit/primitives/containers/data_bin.py +3 -1
- qiskit/primitives/containers/observables_array.py +19 -2
- qiskit/primitives/statevector_sampler.py +6 -8
- qiskit/primitives/utils.py +14 -189
- qiskit/providers/__init__.py +4 -130
- qiskit/providers/backend.py +11 -314
- qiskit/providers/basic_provider/__init__.py +3 -1
- qiskit/providers/basic_provider/basic_provider.py +29 -9
- qiskit/providers/basic_provider/basic_simulator.py +158 -298
- qiskit/providers/exceptions.py +0 -33
- qiskit/providers/fake_provider/__init__.py +0 -37
- qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
- qiskit/qasm2/__init__.py +21 -6
- qiskit/qasm2/export.py +2 -10
- qiskit/qasm2/parse.py +11 -25
- qiskit/qasm3/__init__.py +5 -1
- qiskit/qasm3/ast.py +44 -0
- qiskit/qasm3/exporter.py +65 -27
- qiskit/qasm3/printer.py +35 -4
- qiskit/qpy/__init__.py +141 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +91 -116
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +168 -28
- qiskit/qpy/common.py +10 -7
- qiskit/qpy/formats.py +41 -0
- qiskit/qpy/interface.py +29 -62
- qiskit/qpy/type_keys.py +58 -221
- qiskit/quantum_info/analysis/distance.py +3 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
- qiskit/quantum_info/operators/operator.py +6 -2
- qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
- qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
- qiskit/quantum_info/states/densitymatrix.py +16 -6
- qiskit/quantum_info/states/stabilizerstate.py +35 -4
- qiskit/quantum_info/states/statevector.py +16 -6
- qiskit/result/__init__.py +5 -17
- qiskit/result/models.py +18 -10
- qiskit/result/result.py +28 -126
- qiskit/result/sampled_expval.py +1 -2
- qiskit/result/utils.py +3 -4
- qiskit/synthesis/__init__.py +21 -1
- qiskit/synthesis/arithmetic/__init__.py +3 -1
- qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
- qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
- qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
- qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
- qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
- qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
- qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
- qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
- 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/discrete_basis/generate_basis_approximations.py +2 -0
- qiskit/synthesis/evolution/lie_trotter.py +10 -7
- qiskit/synthesis/evolution/product_formula.py +44 -35
- qiskit/synthesis/evolution/qdrift.py +17 -24
- qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
- qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
- qiskit/synthesis/multi_controlled/__init__.py +1 -0
- qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
- qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
- qiskit/synthesis/two_qubit/__init__.py +1 -0
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
- qiskit/transpiler/__init__.py +32 -232
- qiskit/transpiler/basepasses.py +20 -51
- qiskit/transpiler/layout.py +1 -1
- qiskit/transpiler/passes/__init__.py +2 -40
- qiskit/transpiler/passes/basis/basis_translator.py +4 -3
- qiskit/transpiler/passes/basis/decompose.py +1 -15
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
- qiskit/transpiler/passes/layout/apply_layout.py +5 -0
- qiskit/transpiler/passes/layout/dense_layout.py +2 -39
- qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
- qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
- qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
- qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
- qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
- qiskit/transpiler/passes/optimization/__init__.py +1 -3
- qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
- qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
- qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
- qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
- qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
- qiskit/transpiler/passes/optimization/light_cone.py +135 -0
- qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
- qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
- qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
- qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
- qiskit/transpiler/passes/routing/__init__.py +0 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
- qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
- qiskit/transpiler/passes/scheduling/__init__.py +1 -7
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
- qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
- qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
- qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
- qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
- qiskit/transpiler/passes/synthesis/plugin.py +4 -0
- qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
- qiskit/transpiler/passes/utils/control_flow.py +2 -6
- qiskit/transpiler/passes/utils/gate_direction.py +7 -0
- qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
- qiskit/transpiler/passmanager.py +13 -0
- qiskit/transpiler/passmanager_config.py +5 -81
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
- qiskit/transpiler/preset_passmanagers/common.py +140 -167
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
- qiskit/transpiler/preset_passmanagers/level0.py +2 -11
- qiskit/transpiler/preset_passmanagers/level1.py +2 -14
- qiskit/transpiler/preset_passmanagers/level2.py +2 -12
- qiskit/transpiler/preset_passmanagers/level3.py +2 -11
- qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
- qiskit/transpiler/target.py +67 -524
- qiskit/user_config.py +8 -4
- qiskit/utils/__init__.py +13 -12
- qiskit/utils/deprecation.py +4 -112
- qiskit/utils/optionals.py +11 -4
- qiskit/utils/parallel.py +214 -87
- qiskit/utils/units.py +4 -1
- qiskit/visualization/__init__.py +3 -7
- qiskit/visualization/array.py +4 -1
- qiskit/visualization/bloch.py +1 -1
- qiskit/visualization/circuit/_utils.py +19 -19
- qiskit/visualization/circuit/circuit_visualization.py +11 -4
- qiskit/visualization/circuit/matplotlib.py +13 -23
- qiskit/visualization/circuit/text.py +7 -3
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +6 -0
- qiskit/visualization/timeline/core.py +27 -12
- qiskit/visualization/timeline/interface.py +23 -18
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
- qiskit/assembler/__init__.py +0 -42
- qiskit/assembler/assemble_circuits.py +0 -451
- qiskit/assembler/assemble_schedules.py +0 -367
- qiskit/assembler/disassemble.py +0 -310
- qiskit/assembler/run_config.py +0 -77
- qiskit/circuit/bit.py +0 -106
- qiskit/circuit/classicalfunction/__init__.py +0 -152
- qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
- qiskit/circuit/classicalfunction/classical_element.py +0 -54
- qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
- qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
- qiskit/circuit/classicalfunction/exceptions.py +0 -41
- qiskit/circuit/classicalfunction/types.py +0 -18
- qiskit/circuit/classicalfunction/utils.py +0 -91
- qiskit/circuit/classicalregister.py +0 -57
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
- qiskit/circuit/quantumregister.py +0 -75
- qiskit/circuit/register.py +0 -246
- qiskit/compiler/assembler.py +0 -689
- qiskit/compiler/scheduler.py +0 -109
- qiskit/compiler/sequencer.py +0 -71
- qiskit/primitives/backend_estimator.py +0 -486
- qiskit/primitives/backend_sampler.py +0 -222
- qiskit/primitives/estimator.py +0 -172
- qiskit/primitives/sampler.py +0 -162
- qiskit/providers/backend_compat.py +0 -507
- qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
- qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
- qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
- qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
- qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
- qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
- qiskit/providers/fake_provider/fake_1q.py +0 -91
- qiskit/providers/fake_provider/fake_backend.py +0 -165
- qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
- qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
- qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
- qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
- qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
- qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
- qiskit/providers/models/__init__.py +0 -89
- qiskit/providers/models/backendconfiguration.py +0 -1040
- qiskit/providers/models/backendproperties.py +0 -535
- qiskit/providers/models/backendstatus.py +0 -104
- qiskit/providers/models/jobstatus.py +0 -77
- qiskit/providers/models/pulsedefaults.py +0 -305
- qiskit/providers/provider.py +0 -95
- qiskit/pulse/__init__.py +0 -158
- qiskit/pulse/builder.py +0 -2262
- qiskit/pulse/calibration_entries.py +0 -381
- qiskit/pulse/channels.py +0 -227
- qiskit/pulse/configuration.py +0 -245
- qiskit/pulse/exceptions.py +0 -45
- qiskit/pulse/filters.py +0 -309
- qiskit/pulse/instruction_schedule_map.py +0 -424
- qiskit/pulse/instructions/__init__.py +0 -67
- qiskit/pulse/instructions/acquire.py +0 -150
- qiskit/pulse/instructions/delay.py +0 -71
- qiskit/pulse/instructions/directives.py +0 -154
- qiskit/pulse/instructions/frequency.py +0 -135
- qiskit/pulse/instructions/instruction.py +0 -270
- qiskit/pulse/instructions/phase.py +0 -152
- qiskit/pulse/instructions/play.py +0 -99
- qiskit/pulse/instructions/reference.py +0 -100
- qiskit/pulse/instructions/snapshot.py +0 -82
- qiskit/pulse/library/__init__.py +0 -97
- qiskit/pulse/library/continuous.py +0 -430
- qiskit/pulse/library/pulse.py +0 -148
- qiskit/pulse/library/samplers/__init__.py +0 -15
- qiskit/pulse/library/samplers/decorators.py +0 -295
- qiskit/pulse/library/samplers/strategies.py +0 -71
- qiskit/pulse/library/symbolic_pulses.py +0 -1989
- qiskit/pulse/library/waveform.py +0 -136
- qiskit/pulse/macros.py +0 -262
- qiskit/pulse/parameter_manager.py +0 -445
- qiskit/pulse/parser.py +0 -314
- qiskit/pulse/reference_manager.py +0 -58
- qiskit/pulse/schedule.py +0 -1854
- qiskit/pulse/transforms/__init__.py +0 -106
- qiskit/pulse/transforms/alignments.py +0 -406
- qiskit/pulse/transforms/base_transforms.py +0 -71
- qiskit/pulse/transforms/canonicalization.py +0 -498
- qiskit/pulse/transforms/dag.py +0 -122
- qiskit/pulse/utils.py +0 -149
- qiskit/qobj/__init__.py +0 -75
- qiskit/qobj/common.py +0 -81
- qiskit/qobj/converters/__init__.py +0 -18
- qiskit/qobj/converters/lo_config.py +0 -177
- qiskit/qobj/converters/pulse_instruction.py +0 -897
- qiskit/qobj/pulse_qobj.py +0 -709
- qiskit/qobj/qasm_qobj.py +0 -708
- qiskit/qobj/utils.py +0 -46
- qiskit/result/mitigation/base_readout_mitigator.py +0 -79
- qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
- qiskit/result/mitigation/local_readout_mitigator.py +0 -328
- qiskit/result/mitigation/utils.py +0 -217
- qiskit/scheduler/__init__.py +0 -40
- qiskit/scheduler/config.py +0 -37
- qiskit/scheduler/lowering.py +0 -187
- qiskit/scheduler/methods/__init__.py +0 -15
- qiskit/scheduler/methods/basic.py +0 -140
- qiskit/scheduler/schedule_circuit.py +0 -69
- qiskit/scheduler/sequence.py +0 -104
- qiskit/transpiler/passes/calibration/__init__.py +0 -17
- qiskit/transpiler/passes/calibration/base_builder.py +0 -79
- qiskit/transpiler/passes/calibration/builders.py +0 -20
- qiskit/transpiler/passes/calibration/exceptions.py +0 -22
- qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
- qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
- qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
- qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
- qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
- qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
- qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
- qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
- qiskit/transpiler/passes/scheduling/alap.py +0 -153
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
- qiskit/transpiler/passes/scheduling/asap.py +0 -175
- qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
- qiskit/utils/deprecate_pulse.py +0 -119
- qiskit/utils/multiprocessing.py +0 -56
- qiskit/visualization/pulse_v2/__init__.py +0 -21
- qiskit/visualization/pulse_v2/core.py +0 -901
- qiskit/visualization/pulse_v2/device_info.py +0 -173
- qiskit/visualization/pulse_v2/drawings.py +0 -253
- qiskit/visualization/pulse_v2/events.py +0 -254
- qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
- qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
- qiskit/visualization/pulse_v2/generators/chart.py +0 -208
- qiskit/visualization/pulse_v2/generators/frame.py +0 -436
- qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
- qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
- qiskit/visualization/pulse_v2/interface.py +0 -459
- qiskit/visualization/pulse_v2/layouts.py +0 -387
- qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
- qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
- qiskit/visualization/pulse_v2/stylesheet.py +0 -312
- qiskit/visualization/pulse_v2/types.py +0 -242
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
qiskit/visualization/__init__.py
CHANGED
@@ -18,7 +18,7 @@ Visualizations (:mod:`qiskit.visualization`)
|
|
18
18
|
.. currentmodule:: qiskit.visualization
|
19
19
|
|
20
20
|
The visualization module contain functions that visualizes measurement outcome counts, quantum
|
21
|
-
states, circuits,
|
21
|
+
states, circuits, devices and more.
|
22
22
|
|
23
23
|
To use visualization functions, you are required to install visualization optionals to your
|
24
24
|
development environment:
|
@@ -63,6 +63,7 @@ You can specify ``legend``, ``title``, ``figsize`` and ``color`` by passing to t
|
|
63
63
|
.. plot::
|
64
64
|
:alt: Output from the previous code.
|
65
65
|
:include-source:
|
66
|
+
:context: reset
|
66
67
|
|
67
68
|
from qiskit.visualization import plot_histogram
|
68
69
|
|
@@ -87,6 +88,7 @@ You can save the figure to file either by passing the file name to ``filename``
|
|
87
88
|
hist = plot_histogram(data)
|
88
89
|
hist.savefig('new_hist.png')
|
89
90
|
|
91
|
+
|
90
92
|
Counts Visualizations
|
91
93
|
=====================
|
92
94
|
|
@@ -279,8 +281,6 @@ from .gate_map import plot_gate_map, plot_circuit_layout, plot_error_map, plot_c
|
|
279
281
|
from .pass_manager_visualization import pass_manager_drawer
|
280
282
|
from .pass_manager_visualization import staged_pass_manager_drawer
|
281
283
|
|
282
|
-
from .pulse_v2 import draw as pulse_drawer
|
283
|
-
|
284
284
|
from .timeline import draw as timeline_drawer
|
285
285
|
|
286
286
|
from .exceptions import VisualizationError
|
@@ -288,7 +288,3 @@ from .exceptions import VisualizationError
|
|
288
288
|
# These modules aren't part of the public interface, and were moved in Terra 0.22. They're
|
289
289
|
# re-imported here to allow a backwards compatible path, and should be deprecated in Terra 0.23.
|
290
290
|
from .circuit import text, matplotlib, latex
|
291
|
-
|
292
|
-
# Prepare for migration of old versioned name to unversioned name. The `pulse_drawer_v2` name can
|
293
|
-
# be deprecated in Terra 0.24, as `pulse_drawer` became available by that name in Terra 0.23.
|
294
|
-
pulse_drawer_v2 = pulse_drawer
|
qiskit/visualization/array.py
CHANGED
@@ -16,8 +16,10 @@ Tools to create LaTeX arrays.
|
|
16
16
|
import numpy as np
|
17
17
|
|
18
18
|
from qiskit.exceptions import MissingOptionalLibraryError
|
19
|
+
from qiskit.utils.optionals import HAS_SYMPY
|
19
20
|
|
20
21
|
|
22
|
+
@HAS_SYMPY.require_in_call("Create a latex representation of a ket expression")
|
21
23
|
def _num_to_latex(raw_value, decimals=15, first_term=True, coefficient=False):
|
22
24
|
"""Convert a complex number to latex code suitable for a ket expression
|
23
25
|
|
@@ -83,6 +85,7 @@ def _matrix_to_latex(matrix, decimals=10, prefix="", max_size=(8, 8)):
|
|
83
85
|
|
84
86
|
Raises:
|
85
87
|
ValueError: If minimum value in max_size < 3
|
88
|
+
MissingOptionalLibraryError: If sympy is not installed
|
86
89
|
"""
|
87
90
|
if min(max_size) < 3:
|
88
91
|
raise ValueError("""Smallest value in max_size must be greater than or equal to 3""")
|
@@ -171,7 +174,7 @@ def array_to_latex(array, precision=10, prefix="", source=False, max_size=8):
|
|
171
174
|
TypeError: If array can not be interpreted as a numerical numpy array.
|
172
175
|
ValueError: If the dimension of array is not 1 or 2.
|
173
176
|
MissingOptionalLibraryError: If ``source`` is ``False`` and ``IPython.display.Latex`` cannot be
|
174
|
-
imported.
|
177
|
+
imported. Or if sympy is not installed.
|
175
178
|
"""
|
176
179
|
try:
|
177
180
|
array = np.asarray(array)
|
qiskit/visualization/bloch.py
CHANGED
@@ -32,7 +32,7 @@ from qiskit.circuit import (
|
|
32
32
|
)
|
33
33
|
from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier, PowerModifier
|
34
34
|
from qiskit.circuit.controlflow import condition_resources
|
35
|
-
from qiskit.circuit.library import PauliEvolutionGate
|
35
|
+
from qiskit.circuit.library import PauliEvolutionGate, PhaseOracleGate, BitFlipOracleGate
|
36
36
|
from qiskit.circuit.tools import pi_check
|
37
37
|
from qiskit.converters import circuit_to_dag
|
38
38
|
from qiskit.utils import optionals as _optionals
|
@@ -41,14 +41,10 @@ from ..exceptions import VisualizationError
|
|
41
41
|
|
42
42
|
|
43
43
|
def _is_boolean_expression(gate_text, op):
|
44
|
-
|
45
|
-
return False
|
46
|
-
from qiskit.circuit.classicalfunction import BooleanExpression
|
44
|
+
return isinstance(op, (PhaseOracleGate, BitFlipOracleGate)) and gate_text == op.label
|
47
45
|
|
48
|
-
return isinstance(op, BooleanExpression) and gate_text == op.name
|
49
46
|
|
50
|
-
|
51
|
-
def get_gate_ctrl_text(op, drawer, style=None, calibrations=None):
|
47
|
+
def get_gate_ctrl_text(op, drawer, style=None):
|
52
48
|
"""Load the gate_text and ctrl_text strings based on names and labels"""
|
53
49
|
anno_list = []
|
54
50
|
anno_text = ""
|
@@ -123,13 +119,6 @@ def get_gate_ctrl_text(op, drawer, style=None, calibrations=None):
|
|
123
119
|
) and (op_type is not PauliEvolutionGate):
|
124
120
|
gate_text = gate_text.capitalize()
|
125
121
|
|
126
|
-
if drawer == "mpl" and op.name in calibrations:
|
127
|
-
if isinstance(op, ControlledGate):
|
128
|
-
ctrl_text = "" if ctrl_text is None else ctrl_text
|
129
|
-
ctrl_text = "(cal)\n" + ctrl_text
|
130
|
-
else:
|
131
|
-
gate_text = gate_text + "\n(cal)"
|
132
|
-
|
133
122
|
if anno_text:
|
134
123
|
gate_text += " - " + anno_text
|
135
124
|
|
@@ -289,10 +278,21 @@ def get_wire_label(drawer, register, index, layout=None, cregbundle=True):
|
|
289
278
|
f"{{{virt_reg.name}}}_{{{virt_reg[:].index(virt_bit)}}} \\mapsto {{{index}}}"
|
290
279
|
)
|
291
280
|
except StopIteration:
|
292
|
-
if
|
293
|
-
|
281
|
+
if virt_bit._register is not None:
|
282
|
+
virt_reg = virt_bit._register
|
283
|
+
if drawer == "text":
|
284
|
+
wire_label = f"{virt_reg.name}_{virt_reg[:].index(virt_bit)} -> {index}"
|
285
|
+
else:
|
286
|
+
wire_label = (
|
287
|
+
f"{{{virt_reg.name}}}_"
|
288
|
+
f"{{{virt_reg[:].index(virt_bit)}}} "
|
289
|
+
f"\\mapsto {{{index}}}"
|
290
|
+
)
|
294
291
|
else:
|
295
|
-
|
292
|
+
if drawer == "text":
|
293
|
+
wire_label = f"{index_str} -> {index}"
|
294
|
+
else:
|
295
|
+
wire_label = f"{index_str} \\mapsto {{{index}}}"
|
296
296
|
if drawer != "text":
|
297
297
|
wire_label = wire_label.replace(" ", "\\;") # use wider spaces
|
298
298
|
else:
|
@@ -461,9 +461,9 @@ def _get_layered_instructions(
|
|
461
461
|
else:
|
462
462
|
nodes = _LayerSpooler(dag, qubits, clbits, justify, measure_map)
|
463
463
|
|
464
|
-
# Optionally remove all idle wires and instructions that are on them and
|
465
|
-
# on them only.
|
466
464
|
if not idle_wires:
|
465
|
+
# Optionally remove all idle wires and instructions that are on them and
|
466
|
+
# on them only.
|
467
467
|
for wire in dag.idle_wires(ignore=["barrier", "delay"]):
|
468
468
|
if wire in qubits:
|
469
469
|
qubits.remove(wire)
|
@@ -64,7 +64,7 @@ def circuit_drawer(
|
|
64
64
|
reverse_bits: bool | None = None,
|
65
65
|
justify: str | None = None,
|
66
66
|
vertical_compression: str | None = "medium",
|
67
|
-
idle_wires: bool | None = None,
|
67
|
+
idle_wires: bool | str | None = None,
|
68
68
|
with_layout: bool = True,
|
69
69
|
fold: int | None = None,
|
70
70
|
# The type of ax is matplotlib.axes.Axes, but this is not a fixed dependency, so cannot be
|
@@ -141,8 +141,10 @@ def circuit_drawer(
|
|
141
141
|
merges the lines generated by the `text` output so the drawing
|
142
142
|
will take less vertical room. Default is ``medium``. Only used by
|
143
143
|
the ``text`` output, will be silently ignored otherwise.
|
144
|
-
idle_wires: Include idle wires (wires with no circuit elements)
|
145
|
-
in output visualization.
|
144
|
+
idle_wires: Include (or not) idle wires (wires with no circuit elements)
|
145
|
+
in output visualization. The string ``"auto"`` is also possible, in which
|
146
|
+
case idle wires are show except that the circuit has a layout attached.
|
147
|
+
Default is ``"auto"`` unless the
|
146
148
|
user config file (usually ``~/.qiskit/settings.conf``) has an
|
147
149
|
alternative value set. For example, ``circuit_idle_wires = False``.
|
148
150
|
with_layout: Include layout information, with labels on the
|
@@ -205,7 +207,7 @@ def circuit_drawer(
|
|
205
207
|
# Get default from config file else use text
|
206
208
|
default_output = "text"
|
207
209
|
default_reverse_bits = False
|
208
|
-
default_idle_wires = config.get("circuit_idle_wires",
|
210
|
+
default_idle_wires = config.get("circuit_idle_wires", "auto")
|
209
211
|
if config:
|
210
212
|
default_output = config.get("circuit_drawer", "text")
|
211
213
|
if default_output == "auto":
|
@@ -223,6 +225,11 @@ def circuit_drawer(
|
|
223
225
|
|
224
226
|
if idle_wires is None:
|
225
227
|
idle_wires = default_idle_wires
|
228
|
+
if isinstance(idle_wires, str):
|
229
|
+
if idle_wires == "auto":
|
230
|
+
idle_wires = hasattr(circuit, "_layout") and circuit._layout is None
|
231
|
+
else:
|
232
|
+
raise VisualizationError(f"Parameter idle_wires={idle_wires} unrecognized.")
|
226
233
|
|
227
234
|
if wire_order is not None and reverse_bits:
|
228
235
|
raise VisualizationError(
|
@@ -29,6 +29,7 @@ from qiskit.circuit import (
|
|
29
29
|
ControlledGate,
|
30
30
|
Measure,
|
31
31
|
ControlFlowOp,
|
32
|
+
BoxOp,
|
32
33
|
WhileLoopOp,
|
33
34
|
IfElseOp,
|
34
35
|
ForLoopOp,
|
@@ -135,7 +136,6 @@ class MatplotlibDrawer:
|
|
135
136
|
|
136
137
|
self._initial_state = initial_state
|
137
138
|
self._global_phase = self._circuit.global_phase
|
138
|
-
self._calibrations = self._circuit._calibrations_prop
|
139
139
|
self._expr_len = expr_len
|
140
140
|
self._cregbundle = cregbundle
|
141
141
|
|
@@ -420,7 +420,7 @@ class MatplotlibDrawer:
|
|
420
420
|
|
421
421
|
base_type = getattr(op, "base_gate", None)
|
422
422
|
gate_text, ctrl_text, raw_gate_text = get_gate_ctrl_text(
|
423
|
-
op, "mpl", style=self._style
|
423
|
+
op, "mpl", style=self._style
|
424
424
|
)
|
425
425
|
node_data[node].gate_text = gate_text
|
426
426
|
node_data[node].ctrl_text = ctrl_text
|
@@ -1074,7 +1074,7 @@ class MatplotlibDrawer:
|
|
1074
1074
|
self._get_colors(node, node_data)
|
1075
1075
|
|
1076
1076
|
if verbose:
|
1077
|
-
print(op)
|
1077
|
+
print(op) # pylint: disable=bad-builtin
|
1078
1078
|
|
1079
1079
|
# add conditional
|
1080
1080
|
if getattr(op, "condition", None) or isinstance(op, SwitchCaseOp):
|
@@ -1455,7 +1455,7 @@ class MatplotlibDrawer:
|
|
1455
1455
|
|
1456
1456
|
# Swap gate
|
1457
1457
|
if isinstance(op, SwapGate):
|
1458
|
-
self._swap(xy,
|
1458
|
+
self._swap(xy, node_data[node].lc)
|
1459
1459
|
return
|
1460
1460
|
|
1461
1461
|
# RZZ Gate
|
@@ -1584,8 +1584,10 @@ class MatplotlibDrawer:
|
|
1584
1584
|
flow_text = " For"
|
1585
1585
|
elif isinstance(node.op, SwitchCaseOp):
|
1586
1586
|
flow_text = "Switch"
|
1587
|
+
elif isinstance(node.op, BoxOp):
|
1588
|
+
flow_text = ""
|
1587
1589
|
else:
|
1588
|
-
|
1590
|
+
raise RuntimeError(f"unhandled control-flow op: {node.name}")
|
1589
1591
|
|
1590
1592
|
# Some spacers. op_spacer moves 'Switch' back a bit for alignment,
|
1591
1593
|
# expr_spacer moves the expr over to line up with 'Switch' and
|
@@ -1595,6 +1597,10 @@ class MatplotlibDrawer:
|
|
1595
1597
|
op_spacer = 0.04
|
1596
1598
|
expr_spacer = 0.0
|
1597
1599
|
empty_default_spacer = 0.3 if len(node.op.blocks[-1]) == 0 else 0.0
|
1600
|
+
elif isinstance(node.op, BoxOp):
|
1601
|
+
op_spacer = 0.0
|
1602
|
+
expr_spacer = 0.0
|
1603
|
+
empty_default_spacer = 0.0
|
1598
1604
|
else:
|
1599
1605
|
op_spacer = 0.08
|
1600
1606
|
expr_spacer = 0.02
|
@@ -1747,7 +1753,7 @@ class MatplotlibDrawer:
|
|
1747
1753
|
self._gate(node, node_data, glob_data, xy[num_ctrl_qubits:][0])
|
1748
1754
|
|
1749
1755
|
elif isinstance(base_type, SwapGate):
|
1750
|
-
self._swap(xy[num_ctrl_qubits:],
|
1756
|
+
self._swap(xy[num_ctrl_qubits:], node_data[node].lc)
|
1751
1757
|
|
1752
1758
|
else:
|
1753
1759
|
self._multiqubit_gate(node, node_data, glob_data, xy[num_ctrl_qubits:])
|
@@ -1882,28 +1888,12 @@ class MatplotlibDrawer:
|
|
1882
1888
|
)
|
1883
1889
|
self._line(qubit_b, qubit_t, lc=lc)
|
1884
1890
|
|
1885
|
-
def _swap(self, xy,
|
1891
|
+
def _swap(self, xy, color=None):
|
1886
1892
|
"""Draw a Swap gate"""
|
1887
1893
|
self._swap_cross(xy[0], color=color)
|
1888
1894
|
self._swap_cross(xy[1], color=color)
|
1889
1895
|
self._line(xy[0], xy[1], lc=color)
|
1890
1896
|
|
1891
|
-
# add calibration text
|
1892
|
-
gate_text = node_data[node].gate_text.split("\n")[-1]
|
1893
|
-
if node_data[node].raw_gate_text in self._calibrations:
|
1894
|
-
xpos, ypos = xy[0]
|
1895
|
-
self._ax.text(
|
1896
|
-
xpos,
|
1897
|
-
ypos + 0.7 * HIG,
|
1898
|
-
gate_text,
|
1899
|
-
ha="center",
|
1900
|
-
va="top",
|
1901
|
-
fontsize=self._style["sfs"],
|
1902
|
-
color=self._style["tc"],
|
1903
|
-
clip_on=True,
|
1904
|
-
zorder=PORDER_TEXT,
|
1905
|
-
)
|
1906
|
-
|
1907
1897
|
def _swap_cross(self, xy, color=None):
|
1908
1898
|
"""Draw the Swap cross symbol"""
|
1909
1899
|
xpos, ypos = xy
|
@@ -22,7 +22,7 @@ import sys
|
|
22
22
|
|
23
23
|
from qiskit.circuit import Qubit, Clbit, ClassicalRegister, CircuitError
|
24
24
|
from qiskit.circuit import ControlledGate, Reset, Measure
|
25
|
-
from qiskit.circuit import ControlFlowOp, WhileLoopOp, IfElseOp, ForLoopOp, SwitchCaseOp
|
25
|
+
from qiskit.circuit import ControlFlowOp, WhileLoopOp, IfElseOp, ForLoopOp, SwitchCaseOp, BoxOp
|
26
26
|
from qiskit.circuit.classical import expr
|
27
27
|
from qiskit.circuit.controlflow import node_resources
|
28
28
|
from qiskit.circuit.library.standard_gates import IGate, RZZGate, SwapGate, SXGate, SXdgGate
|
@@ -1335,7 +1335,7 @@ class TextDrawing:
|
|
1335
1335
|
if len(self._expr_text) > self.expr_len:
|
1336
1336
|
self._expr_text = self._expr_text[: self.expr_len] + "..."
|
1337
1337
|
else:
|
1338
|
-
draw_conditional =
|
1338
|
+
draw_conditional = isinstance(node.op, (IfElseOp, WhileLoopOp, SwitchCaseOp))
|
1339
1339
|
|
1340
1340
|
# # Draw a left box such as If, While, For, and Switch
|
1341
1341
|
flow_layer = self.draw_flow_box(node, wire_map, CF_LEFT, conditional=draw_conditional)
|
@@ -1421,8 +1421,12 @@ class TextDrawing:
|
|
1421
1421
|
else:
|
1422
1422
|
index_str = str(indexset)
|
1423
1423
|
label = "For-" + depth + " " + index_str
|
1424
|
-
|
1424
|
+
elif isinstance(op, BoxOp):
|
1425
|
+
label = "Box-" + depth + etext
|
1426
|
+
elif isinstance(op, SwitchCaseOp):
|
1425
1427
|
label = "Switch-" + depth + etext
|
1428
|
+
else:
|
1429
|
+
raise RuntimeError(f"unhandled control-flow operation: {node.name}")
|
1426
1430
|
elif section == CF_MID:
|
1427
1431
|
if isinstance(op, IfElseOp):
|
1428
1432
|
label = "Else-" + depth
|
@@ -113,7 +113,8 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
|
|
113
113
|
circ.h(q[0])
|
114
114
|
circ.cx(q[0], q[1])
|
115
115
|
circ.measure(q[0], c[0])
|
116
|
-
circ.
|
116
|
+
with circ.if_test((c, 2)):
|
117
|
+
circ.rz(0.5, q[1])
|
117
118
|
|
118
119
|
dag = circuit_to_dag(circ)
|
119
120
|
dag_drawer(dag)
|
qiskit/visualization/gate_map.py
CHANGED
@@ -13,7 +13,6 @@
|
|
13
13
|
"""A module for visualizing device coupling maps"""
|
14
14
|
|
15
15
|
import math
|
16
|
-
import warnings
|
17
16
|
from typing import List
|
18
17
|
|
19
18
|
import numpy as np
|
@@ -22,17 +21,10 @@ from rustworkx.visualization import graphviz_draw
|
|
22
21
|
|
23
22
|
from qiskit.exceptions import QiskitError
|
24
23
|
from qiskit.utils import optionals as _optionals
|
25
|
-
from qiskit.providers import BackendV2
|
26
|
-
from qiskit.providers.exceptions import BackendPropertyError
|
27
24
|
from qiskit.transpiler.coupling import CouplingMap
|
28
25
|
from .exceptions import VisualizationError
|
29
26
|
|
30
27
|
|
31
|
-
def _get_backend_interface_version(backend):
|
32
|
-
backend_interface_version = getattr(backend, "version", None)
|
33
|
-
return backend_interface_version
|
34
|
-
|
35
|
-
|
36
28
|
@_optionals.HAS_MATPLOTLIB.require_in_call
|
37
29
|
def plot_gate_map(
|
38
30
|
backend,
|
@@ -52,12 +44,6 @@ def plot_gate_map(
|
|
52
44
|
):
|
53
45
|
"""Plots the gate map of a device.
|
54
46
|
|
55
|
-
.. deprecated:: 1.4
|
56
|
-
The function ``plot_gate_map`` will stop supporting inputs of type
|
57
|
-
:class:`.BackendV1` in the `backend` parameter in a future release no
|
58
|
-
earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
|
59
|
-
move to :class:`.BackendV2`.
|
60
|
-
|
61
47
|
Args:
|
62
48
|
backend (Backend): The backend instance that will be used to plot the device
|
63
49
|
gate map.
|
@@ -100,15 +86,6 @@ def plot_gate_map(
|
|
100
86
|
|
101
87
|
plot_gate_map(backend)
|
102
88
|
"""
|
103
|
-
if not isinstance(backend, BackendV2):
|
104
|
-
warnings.warn(
|
105
|
-
"The function `plot_gate_map` will stop supporting inputs of "
|
106
|
-
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
107
|
-
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
108
|
-
"should move to `BackendV2`.",
|
109
|
-
category=DeprecationWarning,
|
110
|
-
stacklevel=2,
|
111
|
-
)
|
112
89
|
qubit_coordinates_map = {}
|
113
90
|
|
114
91
|
qubit_coordinates_map[5] = [[1, 0], [0, 1], [1, 1], [1, 2], [2, 1]]
|
@@ -926,18 +903,9 @@ def plot_gate_map(
|
|
926
903
|
[24, 26],
|
927
904
|
]
|
928
905
|
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
raise QiskitError("Requires a device backend, not simulator.")
|
933
|
-
config = backend.configuration()
|
934
|
-
num_qubits = config.n_qubits
|
935
|
-
coupling_map = CouplingMap(config.coupling_map)
|
936
|
-
name = backend.name()
|
937
|
-
else:
|
938
|
-
num_qubits = backend.num_qubits
|
939
|
-
coupling_map = backend.coupling_map
|
940
|
-
name = backend.name
|
906
|
+
num_qubits = backend.num_qubits
|
907
|
+
coupling_map = backend.coupling_map
|
908
|
+
name = backend.name
|
941
909
|
if qubit_coordinates is None and ("ibm" in name or "fake" in name):
|
942
910
|
qubit_coordinates = qubit_coordinates_map.get(num_qubits, None)
|
943
911
|
|
@@ -1162,12 +1130,6 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
|
|
1162
1130
|
"""Plot the layout of a circuit transpiled for a given
|
1163
1131
|
target backend.
|
1164
1132
|
|
1165
|
-
.. deprecated:: 1.4
|
1166
|
-
The function ``plot_circuit_layout`` will stop supporting inputs of type
|
1167
|
-
:class:`.BackendV1` in the `backend` parameter in a future release no
|
1168
|
-
earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
|
1169
|
-
move to :class:`.BackendV2`.
|
1170
|
-
|
1171
1133
|
Args:
|
1172
1134
|
circuit (QuantumCircuit): Input quantum circuit.
|
1173
1135
|
backend (Backend): Target backend.
|
@@ -1210,29 +1172,12 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
|
|
1210
1172
|
new_circ_lv3 = transpile(ghz, backend=backend, optimization_level=3)
|
1211
1173
|
plot_circuit_layout(new_circ_lv3, backend)
|
1212
1174
|
"""
|
1213
|
-
|
1214
|
-
if not isinstance(backend, BackendV2):
|
1215
|
-
warnings.warn(
|
1216
|
-
"The function `plot_circuit_layout` will stop supporting inputs of "
|
1217
|
-
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
1218
|
-
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
1219
|
-
"should move to `BackendV2`.",
|
1220
|
-
category=DeprecationWarning,
|
1221
|
-
stacklevel=2,
|
1222
|
-
)
|
1223
|
-
|
1224
1175
|
if circuit._layout is None:
|
1225
1176
|
raise QiskitError("Circuit has no layout. Perhaps it has not been transpiled.")
|
1226
1177
|
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
cmap = backend.configuration().coupling_map
|
1231
|
-
cmap_len = len(cmap)
|
1232
|
-
else:
|
1233
|
-
num_qubits = backend.num_qubits
|
1234
|
-
cmap = backend.coupling_map
|
1235
|
-
cmap_len = cmap.graph.num_edges()
|
1178
|
+
num_qubits = backend.num_qubits
|
1179
|
+
cmap = backend.coupling_map
|
1180
|
+
cmap_len = cmap.graph.num_edges()
|
1236
1181
|
|
1237
1182
|
qubits = []
|
1238
1183
|
qubit_labels = [""] * num_qubits
|
@@ -1288,12 +1233,6 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
|
|
1288
1233
|
def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates=None):
|
1289
1234
|
"""Plots the error map of a given backend.
|
1290
1235
|
|
1291
|
-
.. deprecated:: 1.4
|
1292
|
-
The function ``plot_error_map`` will stop supporting inputs of type
|
1293
|
-
:class:`.BackendV1` in the `backend` parameter in a future release no
|
1294
|
-
earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
|
1295
|
-
move to :class:`.BackendV2`.
|
1296
|
-
|
1297
1236
|
Args:
|
1298
1237
|
backend (Backend): Given backend.
|
1299
1238
|
figsize (tuple): Figure size in inches.
|
@@ -1322,16 +1261,6 @@ def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates
|
|
1322
1261
|
backend = GenericBackendV2(num_qubits=5)
|
1323
1262
|
plot_error_map(backend)
|
1324
1263
|
"""
|
1325
|
-
if not isinstance(backend, BackendV2):
|
1326
|
-
warnings.warn(
|
1327
|
-
"The function `plot_error_map` will stop supporting inputs of "
|
1328
|
-
f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
|
1329
|
-
"release no earlier than 2.0. `BackendV1` is deprecated and implementations "
|
1330
|
-
"should move to `BackendV2`.",
|
1331
|
-
category=DeprecationWarning,
|
1332
|
-
stacklevel=2,
|
1333
|
-
)
|
1334
|
-
|
1335
1264
|
import matplotlib
|
1336
1265
|
import matplotlib.pyplot as plt
|
1337
1266
|
from matplotlib import gridspec, ticker
|
@@ -1340,84 +1269,40 @@ def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates
|
|
1340
1269
|
|
1341
1270
|
color_map = sns.cubehelix_palette(reverse=True, as_cmap=True)
|
1342
1271
|
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
1355
|
-
if gate["gate"] == "sx":
|
1356
|
-
_qubit = gate["qubits"][0]
|
1357
|
-
for param in gate["parameters"]:
|
1358
|
-
if param["name"] == "gate_error":
|
1359
|
-
single_gate_errors[_qubit] = param["value"]
|
1360
|
-
break
|
1361
|
-
else:
|
1362
|
-
raise VisualizationError(
|
1363
|
-
f"Backend '{backend}' did not supply an error for the 'sx' gate."
|
1364
|
-
)
|
1365
|
-
if cmap:
|
1366
|
-
directed = False
|
1367
|
-
if num_qubits < 20:
|
1368
|
-
for edge in cmap:
|
1369
|
-
if not [edge[1], edge[0]] in cmap:
|
1370
|
-
directed = True
|
1371
|
-
break
|
1372
|
-
|
1373
|
-
for line in cmap:
|
1374
|
-
for item in props_dict["gates"]:
|
1375
|
-
if item["qubits"] == line:
|
1376
|
-
cx_errors.append(item["parameters"][0]["value"])
|
1377
|
-
break
|
1378
|
-
for qubit in range(num_qubits):
|
1379
|
-
try:
|
1380
|
-
read_err[qubit] = props.readout_error(qubit)
|
1381
|
-
except BackendPropertyError:
|
1382
|
-
pass
|
1383
|
-
|
1384
|
-
else:
|
1385
|
-
backend_name = backend.name
|
1386
|
-
num_qubits = backend.num_qubits
|
1387
|
-
cmap = backend.coupling_map
|
1388
|
-
two_q_error_map = {}
|
1389
|
-
single_gate_errors = [0] * num_qubits
|
1390
|
-
read_err = [0] * num_qubits
|
1391
|
-
cx_errors = []
|
1392
|
-
for gate, prop_dict in backend.target.items():
|
1393
|
-
if prop_dict is None or None in prop_dict:
|
1272
|
+
backend_name = backend.name
|
1273
|
+
num_qubits = backend.num_qubits
|
1274
|
+
cmap = backend.coupling_map
|
1275
|
+
two_q_error_map = {}
|
1276
|
+
single_gate_errors = [0] * num_qubits
|
1277
|
+
read_err = [0] * num_qubits
|
1278
|
+
cx_errors = []
|
1279
|
+
for gate, prop_dict in backend.target.items():
|
1280
|
+
if prop_dict is None or None in prop_dict:
|
1281
|
+
continue
|
1282
|
+
for qargs, inst_props in prop_dict.items():
|
1283
|
+
if inst_props is None:
|
1394
1284
|
continue
|
1395
|
-
|
1396
|
-
if inst_props is None:
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
directed = True
|
1417
|
-
break
|
1418
|
-
for line in cmap.get_edges():
|
1419
|
-
err = two_q_error_map.get(tuple(line), 0)
|
1420
|
-
cx_errors.append(err)
|
1285
|
+
if gate == "measure":
|
1286
|
+
if inst_props.error is not None:
|
1287
|
+
read_err[qargs[0]] = inst_props.error
|
1288
|
+
elif len(qargs) == 1:
|
1289
|
+
if inst_props.error is not None:
|
1290
|
+
single_gate_errors[qargs[0]] = max(
|
1291
|
+
single_gate_errors[qargs[0]], inst_props.error
|
1292
|
+
)
|
1293
|
+
elif len(qargs) == 2:
|
1294
|
+
if inst_props.error is not None:
|
1295
|
+
two_q_error_map[qargs] = max(two_q_error_map.get(qargs, 0), inst_props.error)
|
1296
|
+
if cmap:
|
1297
|
+
directed = False
|
1298
|
+
if num_qubits < 20:
|
1299
|
+
for edge in cmap:
|
1300
|
+
if not [edge[1], edge[0]] in cmap:
|
1301
|
+
directed = True
|
1302
|
+
break
|
1303
|
+
for line in cmap.get_edges():
|
1304
|
+
err = two_q_error_map.get(tuple(line), 0)
|
1305
|
+
cx_errors.append(err)
|
1421
1306
|
|
1422
1307
|
# Convert to percent
|
1423
1308
|
single_gate_errors = 100 * np.asarray(single_gate_errors)
|
@@ -56,7 +56,9 @@ def pass_manager_drawer(pass_manager, filename=None, style=None, raw=False):
|
|
56
56
|
VisualizationError: If raw=True and filename=None.
|
57
57
|
|
58
58
|
Example:
|
59
|
-
..
|
59
|
+
.. plot::
|
60
|
+
:include-source:
|
61
|
+
:nofigs:
|
60
62
|
|
61
63
|
from qiskit import QuantumCircuit
|
62
64
|
from qiskit.transpiler import generate_preset_pass_manager
|
@@ -131,7 +133,9 @@ def staged_pass_manager_drawer(pass_manager, filename=None, style=None, raw=Fals
|
|
131
133
|
VisualizationError: If raw=True and filename=None.
|
132
134
|
|
133
135
|
Example:
|
134
|
-
..
|
136
|
+
.. plot::
|
137
|
+
:include-source:
|
138
|
+
:nofigs:
|
135
139
|
|
136
140
|
%matplotlib inline
|
137
141
|
from qiskit.providers.fake_provider import GenericBackendV2
|
@@ -1266,6 +1266,9 @@ def state_to_latex(
|
|
1266
1266
|
|
1267
1267
|
Returns:
|
1268
1268
|
Latex representation of the state
|
1269
|
+
MissingOptionalLibrary: If SymPy isn't installed and ``'latex'`` or
|
1270
|
+
``'latex_source'`` is selected for ``output``.
|
1271
|
+
|
1269
1272
|
"""
|
1270
1273
|
if dims is None: # show dims if state is not only qubits
|
1271
1274
|
if set(state.dims()) == {2}:
|
@@ -1438,6 +1441,9 @@ def state_drawer(state, output=None, **drawer_args):
|
|
1438
1441
|
|
1439
1442
|
Raises:
|
1440
1443
|
MissingOptionalLibraryError: when `output` is `latex` and IPython is not installed.
|
1444
|
+
or if SymPy isn't installed and ``'latex'`` or ``'latex_source'`` is selected for
|
1445
|
+
``output``.
|
1446
|
+
|
1441
1447
|
ValueError: when `output` is not a valid selection.
|
1442
1448
|
"""
|
1443
1449
|
config = user_config.get_config()
|