qiskit 1.4.1__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 +2 -141
- 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 +154 -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 +4 -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 +18 -12
- qiskit/visualization/timeline/interface.py +19 -18
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
- {qiskit-1.4.1.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.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
qiskit/qpy/type_keys.py
CHANGED
@@ -30,6 +30,7 @@ from qiskit.circuit import (
|
|
30
30
|
CASE_DEFAULT,
|
31
31
|
Clbit,
|
32
32
|
ClassicalRegister,
|
33
|
+
Duration,
|
33
34
|
)
|
34
35
|
from qiskit.circuit.annotated_operation import AnnotatedOperation, Modifier
|
35
36
|
from qiskit.circuit.classical import expr, types
|
@@ -37,36 +38,6 @@ from qiskit.circuit.library import PauliEvolutionGate
|
|
37
38
|
from qiskit.circuit.parameter import Parameter
|
38
39
|
from qiskit.circuit.parameterexpression import ParameterExpression
|
39
40
|
from qiskit.circuit.parametervector import ParameterVectorElement
|
40
|
-
from qiskit.pulse.channels import (
|
41
|
-
Channel,
|
42
|
-
DriveChannel,
|
43
|
-
MeasureChannel,
|
44
|
-
ControlChannel,
|
45
|
-
AcquireChannel,
|
46
|
-
MemorySlot,
|
47
|
-
RegisterSlot,
|
48
|
-
)
|
49
|
-
from qiskit.pulse.configuration import Discriminator, Kernel
|
50
|
-
from qiskit.pulse.instructions import (
|
51
|
-
Acquire,
|
52
|
-
Play,
|
53
|
-
Delay,
|
54
|
-
SetFrequency,
|
55
|
-
ShiftFrequency,
|
56
|
-
SetPhase,
|
57
|
-
ShiftPhase,
|
58
|
-
RelativeBarrier,
|
59
|
-
TimeBlockade,
|
60
|
-
Reference,
|
61
|
-
)
|
62
|
-
from qiskit.pulse.library import Waveform, SymbolicPulse
|
63
|
-
from qiskit.pulse.schedule import ScheduleBlock
|
64
|
-
from qiskit.pulse.transforms.alignments import (
|
65
|
-
AlignLeft,
|
66
|
-
AlignRight,
|
67
|
-
AlignSequential,
|
68
|
-
AlignEquispaced,
|
69
|
-
)
|
70
41
|
from qiskit.qpy import exceptions
|
71
42
|
|
72
43
|
|
@@ -168,7 +139,7 @@ class Condition(IntEnum):
|
|
168
139
|
|
169
140
|
|
170
141
|
class Container(TypeKeyBase):
|
171
|
-
"""
|
142
|
+
"""Type key enum for container-like object."""
|
172
143
|
|
173
144
|
RANGE = b"r"
|
174
145
|
TUPLE = b"t"
|
@@ -220,125 +191,13 @@ class CircuitInstruction(TypeKeyBase):
|
|
220
191
|
raise NotImplementedError
|
221
192
|
|
222
193
|
|
223
|
-
class ScheduleAlignment(TypeKeyBase):
|
224
|
-
"""Type key enum for schedule block alignment context object."""
|
225
|
-
|
226
|
-
LEFT = b"l"
|
227
|
-
RIGHT = b"r"
|
228
|
-
SEQUENTIAL = b"s"
|
229
|
-
EQUISPACED = b"e"
|
230
|
-
|
231
|
-
# AlignFunc is not serializable due to the callable in context parameter
|
232
|
-
|
233
|
-
@classmethod
|
234
|
-
def assign(cls, obj):
|
235
|
-
if isinstance(obj, AlignLeft):
|
236
|
-
return cls.LEFT
|
237
|
-
if isinstance(obj, AlignRight):
|
238
|
-
return cls.RIGHT
|
239
|
-
if isinstance(obj, AlignSequential):
|
240
|
-
return cls.SEQUENTIAL
|
241
|
-
if isinstance(obj, AlignEquispaced):
|
242
|
-
return cls.EQUISPACED
|
243
|
-
|
244
|
-
raise exceptions.QpyError(
|
245
|
-
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
246
|
-
)
|
247
|
-
|
248
|
-
@classmethod
|
249
|
-
def retrieve(cls, type_key):
|
250
|
-
if type_key == cls.LEFT:
|
251
|
-
return AlignLeft
|
252
|
-
if type_key == cls.RIGHT:
|
253
|
-
return AlignRight
|
254
|
-
if type_key == cls.SEQUENTIAL:
|
255
|
-
return AlignSequential
|
256
|
-
if type_key == cls.EQUISPACED:
|
257
|
-
return AlignEquispaced
|
258
|
-
|
259
|
-
raise exceptions.QpyError(
|
260
|
-
f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
|
261
|
-
)
|
262
|
-
|
263
|
-
|
264
|
-
class ScheduleInstruction(TypeKeyBase):
|
265
|
-
"""Type key enum for schedule instruction object."""
|
266
|
-
|
267
|
-
ACQUIRE = b"a"
|
268
|
-
PLAY = b"p"
|
269
|
-
DELAY = b"d"
|
270
|
-
SET_FREQUENCY = b"f"
|
271
|
-
SHIFT_FREQUENCY = b"g"
|
272
|
-
SET_PHASE = b"q"
|
273
|
-
SHIFT_PHASE = b"r"
|
274
|
-
BARRIER = b"b"
|
275
|
-
TIME_BLOCKADE = b"t"
|
276
|
-
REFERENCE = b"y"
|
277
|
-
|
278
|
-
# 's' is reserved by ScheduleBlock, i.e. block can be nested as an element.
|
279
|
-
# Call instruction is not supported by QPY.
|
280
|
-
# This instruction has been excluded from ScheduleBlock instructions with
|
281
|
-
# qiskit-terra/#8005 and new instruction Reference will be added instead.
|
282
|
-
# Call is only applied to Schedule which is not supported by QPY.
|
283
|
-
# Also snapshot is not suppored because of its limited usecase.
|
284
|
-
|
285
|
-
@classmethod
|
286
|
-
def assign(cls, obj):
|
287
|
-
if isinstance(obj, Acquire):
|
288
|
-
return cls.ACQUIRE
|
289
|
-
if isinstance(obj, Play):
|
290
|
-
return cls.PLAY
|
291
|
-
if isinstance(obj, Delay):
|
292
|
-
return cls.DELAY
|
293
|
-
if isinstance(obj, SetFrequency):
|
294
|
-
return cls.SET_FREQUENCY
|
295
|
-
if isinstance(obj, ShiftFrequency):
|
296
|
-
return cls.SHIFT_FREQUENCY
|
297
|
-
if isinstance(obj, SetPhase):
|
298
|
-
return cls.SET_PHASE
|
299
|
-
if isinstance(obj, ShiftPhase):
|
300
|
-
return cls.SHIFT_PHASE
|
301
|
-
if isinstance(obj, RelativeBarrier):
|
302
|
-
return cls.BARRIER
|
303
|
-
if isinstance(obj, TimeBlockade):
|
304
|
-
return cls.TIME_BLOCKADE
|
305
|
-
if isinstance(obj, Reference):
|
306
|
-
return cls.REFERENCE
|
307
|
-
|
308
|
-
raise exceptions.QpyError(
|
309
|
-
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
310
|
-
)
|
311
|
-
|
312
|
-
@classmethod
|
313
|
-
def retrieve(cls, type_key):
|
314
|
-
if type_key == cls.ACQUIRE:
|
315
|
-
return Acquire
|
316
|
-
if type_key == cls.PLAY:
|
317
|
-
return Play
|
318
|
-
if type_key == cls.DELAY:
|
319
|
-
return Delay
|
320
|
-
if type_key == cls.SET_FREQUENCY:
|
321
|
-
return SetFrequency
|
322
|
-
if type_key == cls.SHIFT_FREQUENCY:
|
323
|
-
return ShiftFrequency
|
324
|
-
if type_key == cls.SET_PHASE:
|
325
|
-
return SetPhase
|
326
|
-
if type_key == cls.SHIFT_PHASE:
|
327
|
-
return ShiftPhase
|
328
|
-
if type_key == cls.BARRIER:
|
329
|
-
return RelativeBarrier
|
330
|
-
if type_key == cls.TIME_BLOCKADE:
|
331
|
-
return TimeBlockade
|
332
|
-
if type_key == cls.REFERENCE:
|
333
|
-
return Reference
|
334
|
-
|
335
|
-
raise exceptions.QpyError(
|
336
|
-
f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
|
337
|
-
)
|
338
|
-
|
339
|
-
|
340
194
|
class ScheduleOperand(TypeKeyBase):
|
341
|
-
"""Type key enum for schedule instruction operand object.
|
195
|
+
"""Type key enum for schedule instruction operand object.
|
196
|
+
|
197
|
+
Note: This class is kept post pulse-removal to allow reading of
|
198
|
+
legacy payloads containing pulse gates without breaking the entire
|
199
|
+
load flow.
|
200
|
+
"""
|
342
201
|
|
343
202
|
WAVEFORM = b"w"
|
344
203
|
SYMBOLIC_PULSE = b"s"
|
@@ -353,92 +212,27 @@ class ScheduleOperand(TypeKeyBase):
|
|
353
212
|
OPERAND_STR = b"o"
|
354
213
|
|
355
214
|
@classmethod
|
356
|
-
def assign(cls,
|
357
|
-
if isinstance(obj, Waveform):
|
358
|
-
return cls.WAVEFORM
|
359
|
-
if isinstance(obj, SymbolicPulse):
|
360
|
-
return cls.SYMBOLIC_PULSE
|
361
|
-
if isinstance(obj, Channel):
|
362
|
-
return cls.CHANNEL
|
363
|
-
if isinstance(obj, str):
|
364
|
-
return cls.OPERAND_STR
|
365
|
-
if isinstance(obj, Kernel):
|
366
|
-
return cls.KERNEL
|
367
|
-
if isinstance(obj, Discriminator):
|
368
|
-
return cls.DISCRIMINATOR
|
369
|
-
|
370
|
-
raise exceptions.QpyError(
|
371
|
-
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
372
|
-
)
|
373
|
-
|
374
|
-
@classmethod
|
375
|
-
def retrieve(cls, type_key):
|
215
|
+
def assign(cls, _):
|
376
216
|
raise NotImplementedError
|
377
217
|
|
378
|
-
|
379
|
-
class ScheduleChannel(TypeKeyBase):
|
380
|
-
"""Type key enum for schedule channel object."""
|
381
|
-
|
382
|
-
DRIVE = b"d"
|
383
|
-
CONTROL = b"c"
|
384
|
-
MEASURE = b"m"
|
385
|
-
ACQURE = b"a"
|
386
|
-
MEM_SLOT = b"e"
|
387
|
-
REG_SLOT = b"r"
|
388
|
-
|
389
|
-
# SnapShot channel is not defined because of its limited usecase.
|
390
|
-
|
391
|
-
@classmethod
|
392
|
-
def assign(cls, obj):
|
393
|
-
if isinstance(obj, DriveChannel):
|
394
|
-
return cls.DRIVE
|
395
|
-
if isinstance(obj, ControlChannel):
|
396
|
-
return cls.CONTROL
|
397
|
-
if isinstance(obj, MeasureChannel):
|
398
|
-
return cls.MEASURE
|
399
|
-
if isinstance(obj, AcquireChannel):
|
400
|
-
return cls.ACQURE
|
401
|
-
if isinstance(obj, MemorySlot):
|
402
|
-
return cls.MEM_SLOT
|
403
|
-
if isinstance(obj, RegisterSlot):
|
404
|
-
return cls.REG_SLOT
|
405
|
-
|
406
|
-
raise exceptions.QpyError(
|
407
|
-
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
408
|
-
)
|
409
|
-
|
410
218
|
@classmethod
|
411
|
-
def retrieve(cls,
|
412
|
-
|
413
|
-
return DriveChannel
|
414
|
-
if type_key == cls.CONTROL:
|
415
|
-
return ControlChannel
|
416
|
-
if type_key == cls.MEASURE:
|
417
|
-
return MeasureChannel
|
418
|
-
if type_key == cls.ACQURE:
|
419
|
-
return AcquireChannel
|
420
|
-
if type_key == cls.MEM_SLOT:
|
421
|
-
return MemorySlot
|
422
|
-
if type_key == cls.REG_SLOT:
|
423
|
-
return RegisterSlot
|
424
|
-
|
425
|
-
raise exceptions.QpyError(
|
426
|
-
f"A class corresponding to type key '{type_key}' is not found in {cls.__name__} namespace."
|
427
|
-
)
|
219
|
+
def retrieve(cls, _):
|
220
|
+
raise NotImplementedError
|
428
221
|
|
429
222
|
|
430
223
|
class Program(TypeKeyBase):
|
431
|
-
"""
|
224
|
+
"""Type key enum for program that QPY supports."""
|
432
225
|
|
433
226
|
CIRCUIT = b"q"
|
227
|
+
# This is left for backward compatibility, for identifying payloads of type `ScheduleBlock`
|
228
|
+
# and raising accordingly. `ScheduleBlock` support has been removed in Qiskit 2.0 as part
|
229
|
+
# of the pulse package removal in that version.
|
434
230
|
SCHEDULE_BLOCK = b"s"
|
435
231
|
|
436
232
|
@classmethod
|
437
233
|
def assign(cls, obj):
|
438
234
|
if isinstance(obj, QuantumCircuit):
|
439
235
|
return cls.CIRCUIT
|
440
|
-
if isinstance(obj, ScheduleBlock):
|
441
|
-
return cls.SCHEDULE_BLOCK
|
442
236
|
|
443
237
|
raise exceptions.QpyError(
|
444
238
|
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
@@ -453,6 +247,7 @@ class Expression(TypeKeyBase):
|
|
453
247
|
"""Type keys for the ``EXPRESSION`` QPY item."""
|
454
248
|
|
455
249
|
VAR = b"x"
|
250
|
+
STRETCH = b"s"
|
456
251
|
VALUE = b"v"
|
457
252
|
CAST = b"c"
|
458
253
|
UNARY = b"u"
|
@@ -479,6 +274,8 @@ class ExprVarDeclaration(TypeKeyBase):
|
|
479
274
|
INPUT = b"I"
|
480
275
|
CAPTURE = b"C"
|
481
276
|
LOCAL = b"L"
|
277
|
+
STRETCH_CAPTURE = b"A"
|
278
|
+
STRETCH_LOCAL = b"O"
|
482
279
|
|
483
280
|
@classmethod
|
484
281
|
def assign(cls, obj):
|
@@ -494,6 +291,8 @@ class ExprType(TypeKeyBase):
|
|
494
291
|
|
495
292
|
BOOL = b"b"
|
496
293
|
UINT = b"u"
|
294
|
+
FLOAT = b"f"
|
295
|
+
DURATION = b"d"
|
497
296
|
|
498
297
|
@classmethod
|
499
298
|
def assign(cls, obj):
|
@@ -538,6 +337,8 @@ class ExprValue(TypeKeyBase):
|
|
538
337
|
|
539
338
|
BOOL = b"b"
|
540
339
|
INT = b"i"
|
340
|
+
FLOAT = b"f"
|
341
|
+
DURATION = b"t"
|
541
342
|
|
542
343
|
@classmethod
|
543
344
|
def assign(cls, obj):
|
@@ -545,6 +346,42 @@ class ExprValue(TypeKeyBase):
|
|
545
346
|
return cls.BOOL
|
546
347
|
if isinstance(obj, int):
|
547
348
|
return cls.INT
|
349
|
+
if isinstance(obj, float):
|
350
|
+
return cls.FLOAT
|
351
|
+
if isinstance(obj, Duration):
|
352
|
+
return cls.DURATION
|
353
|
+
raise exceptions.QpyError(
|
354
|
+
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
355
|
+
)
|
356
|
+
|
357
|
+
@classmethod
|
358
|
+
def retrieve(cls, type_key):
|
359
|
+
raise NotImplementedError
|
360
|
+
|
361
|
+
|
362
|
+
class CircuitDuration(TypeKeyBase):
|
363
|
+
"""Type keys for the ``DURATION`` QPY item."""
|
364
|
+
|
365
|
+
DT = b"t"
|
366
|
+
NS = b"n"
|
367
|
+
US = b"u"
|
368
|
+
MS = b"m"
|
369
|
+
S = b"s"
|
370
|
+
|
371
|
+
@classmethod
|
372
|
+
def assign(cls, obj):
|
373
|
+
if isinstance(obj, Duration):
|
374
|
+
unit = obj.unit()
|
375
|
+
if unit == "dt":
|
376
|
+
return cls.DT
|
377
|
+
if unit == "ns":
|
378
|
+
return cls.NS
|
379
|
+
if unit == "us":
|
380
|
+
return cls.US
|
381
|
+
if unit == "ms":
|
382
|
+
return cls.MS
|
383
|
+
if unit == "s":
|
384
|
+
return cls.S
|
548
385
|
raise exceptions.QpyError(
|
549
386
|
f"Object type '{type(obj)}' is not supported in {cls.__name__} namespace."
|
550
387
|
)
|
@@ -46,7 +46,9 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
|
|
46
46
|
The phase polynomial is a polynomial of degree at most 3,
|
47
47
|
in :math:`N` variables, whose coefficients are in the ring Z_8 with 8 elements.
|
48
48
|
|
49
|
-
..
|
49
|
+
.. plot::
|
50
|
+
:include-source:
|
51
|
+
:nofigs:
|
50
52
|
|
51
53
|
from qiskit import QuantumCircuit
|
52
54
|
from qiskit.quantum_info import CNOTDihedral
|
@@ -61,7 +61,9 @@ class Operator(LinearOp):
|
|
61
61
|
:math:`|\psi\rangle=|0\rangle (\rho = |0\rangle\langle 0|)` changes it to the
|
62
62
|
one state :math:`|\psi\rangle=|1\rangle (\rho = |1\rangle\langle 1|)`:
|
63
63
|
|
64
|
-
..
|
64
|
+
.. plot::
|
65
|
+
:include-source:
|
66
|
+
:nofigs:
|
65
67
|
|
66
68
|
>>> import numpy as np
|
67
69
|
>>> from qiskit.quantum_info import Operator
|
@@ -204,6 +206,8 @@ class Operator(LinearOp):
|
|
204
206
|
|
205
207
|
Raises:
|
206
208
|
ValueError: when an invalid output method is selected.
|
209
|
+
MissingOptionalLibrary: If SymPy isn't installed and ``'latex'`` or
|
210
|
+
``'latex_source'`` is selected for ``output``.
|
207
211
|
|
208
212
|
"""
|
209
213
|
# pylint: disable=cyclic-import
|
@@ -236,7 +240,7 @@ class Operator(LinearOp):
|
|
236
240
|
def _ipython_display_(self):
|
237
241
|
out = self.draw()
|
238
242
|
if isinstance(out, str):
|
239
|
-
print(out)
|
243
|
+
print(out) # pylint: disable=bad-builtin
|
240
244
|
else:
|
241
245
|
from IPython.display import display
|
242
246
|
|
@@ -72,7 +72,9 @@ class Clifford(BaseOperator, AdjointMixin, Operation):
|
|
72
72
|
be obtained by calling the :meth:`to_dict` method. This representation is
|
73
73
|
also used if a Clifford object is printed as in the following example
|
74
74
|
|
75
|
-
..
|
75
|
+
.. plot::
|
76
|
+
:include-source:
|
77
|
+
:nofigs:
|
76
78
|
|
77
79
|
from qiskit import QuantumCircuit
|
78
80
|
from qiskit.quantum_info import Clifford
|
@@ -142,7 +142,9 @@ class Pauli(BasePauli):
|
|
142
142
|
|
143
143
|
For example
|
144
144
|
|
145
|
-
..
|
145
|
+
.. plot::
|
146
|
+
:include-source:
|
147
|
+
:nofigs:
|
146
148
|
|
147
149
|
from qiskit.quantum_info import Pauli
|
148
150
|
|
@@ -583,7 +585,7 @@ class Pauli(BasePauli):
|
|
583
585
|
other (Pauli or Clifford or QuantumCircuit): The Clifford operator to evolve by.
|
584
586
|
qargs (list): a list of qubits to apply the Clifford to.
|
585
587
|
frame (string): ``'h'`` for Heisenberg (default) or ``'s'`` for
|
586
|
-
|
588
|
+
Schrödinger framework.
|
587
589
|
|
588
590
|
Returns:
|
589
591
|
Pauli: the Pauli :math:`C^\dagger.P.C` (Heisenberg picture)
|
@@ -54,7 +54,10 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
54
54
|
|
55
55
|
For example,
|
56
56
|
|
57
|
-
..
|
57
|
+
.. plot::
|
58
|
+
:include-source:
|
59
|
+
:nofigs:
|
60
|
+
:context: reset
|
58
61
|
|
59
62
|
import numpy as np
|
60
63
|
|
@@ -93,7 +96,10 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
93
96
|
operator which accepts integer, lists, or slices for selecting subsets
|
94
97
|
of PauliList. If integer is given, it returns Pauli not PauliList.
|
95
98
|
|
96
|
-
..
|
99
|
+
.. plot::
|
100
|
+
:include-source:
|
101
|
+
:nofigs:
|
102
|
+
:context:
|
97
103
|
|
98
104
|
pauli_list = PauliList(["XX", "ZZ", "IZ"])
|
99
105
|
print("Integer: ", repr(pauli_list[1]))
|
@@ -542,7 +548,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
542
548
|
|
543
549
|
Consider sorting all a random ordering of all 2-qubit Paulis
|
544
550
|
|
545
|
-
..
|
551
|
+
.. plot::
|
552
|
+
:include-source:
|
553
|
+
:nofigs:
|
546
554
|
|
547
555
|
from numpy.random import shuffle
|
548
556
|
from qiskit.quantum_info.operators import PauliList
|
@@ -593,7 +601,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
593
601
|
|
594
602
|
**Example**
|
595
603
|
|
596
|
-
..
|
604
|
+
.. plot::
|
605
|
+
:include-source:
|
606
|
+
:nofigs:
|
597
607
|
|
598
608
|
from qiskit.quantum_info.operators import PauliList
|
599
609
|
|
@@ -1214,7 +1224,9 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
|
|
1214
1224
|
qubit_wise (bool): whether the commutation rule is applied to the whole operator,
|
1215
1225
|
or on a per-qubit basis. For example:
|
1216
1226
|
|
1217
|
-
..
|
1227
|
+
.. plot::
|
1228
|
+
:include-source:
|
1229
|
+
:nofigs:
|
1218
1230
|
|
1219
1231
|
>>> from qiskit.quantum_info import PauliList
|
1220
1232
|
>>> op = PauliList(["XX", "YY", "IZ", "ZZ"])
|
@@ -30,6 +30,7 @@ from qiskit._accelerate.sparse_pauli_op import (
|
|
30
30
|
to_matrix_sparse,
|
31
31
|
unordered_unique,
|
32
32
|
)
|
33
|
+
from qiskit._accelerate.sparse_observable import SparseObservable
|
33
34
|
from qiskit.circuit.parameter import Parameter
|
34
35
|
from qiskit.circuit.parameterexpression import ParameterExpression
|
35
36
|
from qiskit.circuit.parametertable import ParameterView
|
@@ -69,7 +70,9 @@ class SparsePauliOp(LinearOp):
|
|
69
70
|
configure this by passing ``np.ndarray`` with a different dtype. For example, a parameterized
|
70
71
|
:class:`SparsePauliOp` can be made as follows:
|
71
72
|
|
72
|
-
..
|
73
|
+
.. plot::
|
74
|
+
:include-source:
|
75
|
+
:nofigs:
|
73
76
|
|
74
77
|
>>> import numpy as np
|
75
78
|
>>> from qiskit.circuit import ParameterVector
|
@@ -539,7 +542,9 @@ class SparsePauliOp(LinearOp):
|
|
539
542
|
|
540
543
|
Here is an example of how to use SparsePauliOp argsort.
|
541
544
|
|
542
|
-
..
|
545
|
+
.. plot::
|
546
|
+
:include-source:
|
547
|
+
:nofigs:
|
543
548
|
|
544
549
|
import numpy as np
|
545
550
|
from qiskit.quantum_info import SparsePauliOp
|
@@ -608,7 +613,9 @@ class SparsePauliOp(LinearOp):
|
|
608
613
|
|
609
614
|
Here is an example of how to use SparsePauliOp sort.
|
610
615
|
|
611
|
-
..
|
616
|
+
.. plot::
|
617
|
+
:include-source:
|
618
|
+
:nofigs:
|
612
619
|
|
613
620
|
import numpy as np
|
614
621
|
from qiskit.quantum_info import SparsePauliOp
|
@@ -801,7 +808,9 @@ class SparsePauliOp(LinearOp):
|
|
801
808
|
|
802
809
|
can be constructed as
|
803
810
|
|
804
|
-
..
|
811
|
+
.. plot::
|
812
|
+
:include-source:
|
813
|
+
:nofigs:
|
805
814
|
|
806
815
|
from qiskit.quantum_info import SparsePauliOp
|
807
816
|
|
@@ -867,7 +876,9 @@ class SparsePauliOp(LinearOp):
|
|
867
876
|
|
868
877
|
can be constructed as
|
869
878
|
|
870
|
-
..
|
879
|
+
.. plot::
|
880
|
+
:include-source:
|
881
|
+
:nofigs:
|
871
882
|
|
872
883
|
from qiskit.quantum_info import SparsePauliOp
|
873
884
|
|
@@ -919,6 +930,27 @@ class SparsePauliOp(LinearOp):
|
|
919
930
|
paulis = PauliList(labels)
|
920
931
|
return SparsePauliOp(paulis, coeffs, copy=False)
|
921
932
|
|
933
|
+
@staticmethod
|
934
|
+
def from_sparse_observable(obs: SparseObservable) -> SparsePauliOp:
|
935
|
+
r"""Initialize from a :class:`.SparseObservable`.
|
936
|
+
|
937
|
+
.. warning::
|
938
|
+
|
939
|
+
A :class:`.SparseObservable` can efficiently represent eigenstate projectors
|
940
|
+
(such as :math:`|0\langle\rangle 0|`), but a :class:`.SparsePauliOp` **cannot**.
|
941
|
+
If the input ``obs`` has :math:`n` single-qubit projectors, the resulting
|
942
|
+
:class:`.SparsePauliOp` will use :math:`2^n` terms, which is an exponentially
|
943
|
+
expensive representation that can quickly run out of memory.
|
944
|
+
|
945
|
+
Args:
|
946
|
+
obs: The :class:`.SparseObservable` to convert.
|
947
|
+
|
948
|
+
Returns:
|
949
|
+
A :class:`.SparsePauliOp` version of the observable.
|
950
|
+
"""
|
951
|
+
as_sparse_list = obs.as_paulis().to_sparse_list()
|
952
|
+
return SparsePauliOp.from_sparse_list(as_sparse_list, obs.num_qubits)
|
953
|
+
|
922
954
|
def to_list(self, array: bool = False):
|
923
955
|
"""Convert to a list Pauli string labels and coefficients.
|
924
956
|
|
@@ -1072,7 +1104,9 @@ class SparsePauliOp(LinearOp):
|
|
1072
1104
|
qubit_wise (bool): whether the commutation rule is applied to the whole operator,
|
1073
1105
|
or on a per-qubit basis. For example:
|
1074
1106
|
|
1075
|
-
..
|
1107
|
+
.. plot::
|
1108
|
+
:include-source:
|
1109
|
+
:nofigs:
|
1076
1110
|
|
1077
1111
|
>>> from qiskit.quantum_info import SparsePauliOp
|
1078
1112
|
>>> op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ",2j), ("ZZ",1j)])
|
@@ -180,7 +180,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
180
180
|
def _ipython_display_(self):
|
181
181
|
out = self.draw()
|
182
182
|
if isinstance(out, str):
|
183
|
-
print(out)
|
183
|
+
print(out) # pylint: disable=bad-builtin
|
184
184
|
else:
|
185
185
|
from IPython.display import display
|
186
186
|
|
@@ -443,7 +443,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
443
443
|
with :math:`\\rho_1=|+\\rangle\\!\\langle+|`,
|
444
444
|
:math:`\\rho_0=|0\\rangle\\!\\langle0|`.
|
445
445
|
|
446
|
-
..
|
446
|
+
.. plot::
|
447
|
+
:include-source:
|
448
|
+
:nofigs:
|
447
449
|
|
448
450
|
from qiskit.quantum_info import DensityMatrix
|
449
451
|
|
@@ -470,7 +472,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
470
472
|
We can also permute the order of qubits in the ``qargs`` list
|
471
473
|
to change the qubit position in the probabilities output
|
472
474
|
|
473
|
-
..
|
475
|
+
.. plot::
|
476
|
+
:include-source:
|
477
|
+
:nofigs:
|
474
478
|
|
475
479
|
from qiskit.quantum_info import DensityMatrix
|
476
480
|
|
@@ -649,7 +653,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
649
653
|
The ket-form of a 2-qubit density matrix
|
650
654
|
:math:`rho = |-\rangle\!\langle -|\otimes |0\rangle\!\langle 0|`
|
651
655
|
|
652
|
-
..
|
656
|
+
.. plot::
|
657
|
+
:include-source:
|
658
|
+
:nofigs:
|
653
659
|
|
654
660
|
from qiskit.quantum_info import DensityMatrix
|
655
661
|
|
@@ -668,7 +674,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
668
674
|
For non-qubit subsystems the integer range can go from 0 to 9. For
|
669
675
|
example in a qutrit system
|
670
676
|
|
671
|
-
..
|
677
|
+
.. plot::
|
678
|
+
:include-source:
|
679
|
+
:nofigs:
|
672
680
|
|
673
681
|
import numpy as np
|
674
682
|
from qiskit.quantum_info import DensityMatrix
|
@@ -689,7 +697,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
|
|
689
697
|
following example is for a 20-dimensional system consisting of
|
690
698
|
a qubit and 10-dimensional qudit.
|
691
699
|
|
692
|
-
..
|
700
|
+
.. plot::
|
701
|
+
:include-source:
|
702
|
+
:nofigs:
|
693
703
|
|
694
704
|
import numpy as np
|
695
705
|
from qiskit.quantum_info import DensityMatrix
|