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/pulse/parser.py
DELETED
@@ -1,314 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2017, 2019.
|
4
|
-
#
|
5
|
-
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
-
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
-
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
-
#
|
9
|
-
# Any modifications or derivative works of this code must retain this
|
10
|
-
# copyright notice, and modified files need to carry a notice indicating
|
11
|
-
# that they have been altered from the originals.
|
12
|
-
|
13
|
-
# pylint: disable=invalid-name
|
14
|
-
|
15
|
-
"""Parser for mathematical string expressions returned by backends."""
|
16
|
-
from __future__ import annotations
|
17
|
-
import ast
|
18
|
-
import copy
|
19
|
-
import operator
|
20
|
-
|
21
|
-
import cmath
|
22
|
-
from collections.abc import Callable
|
23
|
-
from typing import Any
|
24
|
-
|
25
|
-
from qiskit.pulse.exceptions import PulseError
|
26
|
-
from qiskit.circuit import ParameterExpression
|
27
|
-
|
28
|
-
|
29
|
-
class PulseExpression(ast.NodeTransformer):
|
30
|
-
"""Expression parser to evaluate parameter values."""
|
31
|
-
|
32
|
-
_math_ops: dict[str, Callable | float] = {
|
33
|
-
"acos": cmath.acos,
|
34
|
-
"acosh": cmath.acosh,
|
35
|
-
"asin": cmath.asin,
|
36
|
-
"asinh": cmath.asinh,
|
37
|
-
"atan": cmath.atan,
|
38
|
-
"atanh": cmath.atanh,
|
39
|
-
"cos": cmath.cos,
|
40
|
-
"cosh": cmath.cosh,
|
41
|
-
"exp": cmath.exp,
|
42
|
-
"log": cmath.log,
|
43
|
-
"log10": cmath.log10,
|
44
|
-
"sin": cmath.sin,
|
45
|
-
"sinh": cmath.sinh,
|
46
|
-
"sqrt": cmath.sqrt,
|
47
|
-
"tan": cmath.tan,
|
48
|
-
"tanh": cmath.tanh,
|
49
|
-
"pi": cmath.pi,
|
50
|
-
"e": cmath.e,
|
51
|
-
}
|
52
|
-
"""Valid math functions."""
|
53
|
-
|
54
|
-
_binary_ops = {
|
55
|
-
ast.Add: operator.add,
|
56
|
-
ast.Sub: operator.sub,
|
57
|
-
ast.Mult: operator.mul,
|
58
|
-
ast.Div: operator.truediv,
|
59
|
-
ast.Pow: operator.pow,
|
60
|
-
}
|
61
|
-
"""Valid binary operations."""
|
62
|
-
|
63
|
-
_unary_ops = {ast.UAdd: operator.pos, ast.USub: operator.neg}
|
64
|
-
"""Valid unary operations."""
|
65
|
-
|
66
|
-
def __init__(self, source: str | ast.Expression, partial_binding: bool = False):
|
67
|
-
"""Create new evaluator.
|
68
|
-
|
69
|
-
Args:
|
70
|
-
source: Expression of equation to evaluate.
|
71
|
-
partial_binding: Allow partial bind of parameters.
|
72
|
-
|
73
|
-
Raises:
|
74
|
-
PulseError: When invalid string is specified.
|
75
|
-
"""
|
76
|
-
self._partial_binding = partial_binding
|
77
|
-
self._locals_dict: dict[str, Any] = {}
|
78
|
-
self._params: set[str] = set()
|
79
|
-
|
80
|
-
if isinstance(source, ast.Expression):
|
81
|
-
self._tree = source
|
82
|
-
else:
|
83
|
-
try:
|
84
|
-
self._tree = ast.parse(source, mode="eval")
|
85
|
-
except SyntaxError as ex:
|
86
|
-
raise PulseError(f"{source} is invalid expression.") from ex
|
87
|
-
|
88
|
-
# parse parameters
|
89
|
-
self.visit(self._tree)
|
90
|
-
|
91
|
-
@property
|
92
|
-
def params(self) -> list[str]:
|
93
|
-
"""Get parameters.
|
94
|
-
|
95
|
-
Returns:
|
96
|
-
A list of parameters in sorted order.
|
97
|
-
"""
|
98
|
-
return sorted(self._params.copy())
|
99
|
-
|
100
|
-
def __call__(self, *args, **kwargs) -> complex | ast.Expression | PulseExpression:
|
101
|
-
"""Evaluate the expression with the given values of the expression's parameters.
|
102
|
-
|
103
|
-
Args:
|
104
|
-
*args: Variable length parameter list.
|
105
|
-
**kwargs: Arbitrary parameters.
|
106
|
-
|
107
|
-
Returns:
|
108
|
-
Evaluated value.
|
109
|
-
|
110
|
-
Raises:
|
111
|
-
PulseError: When parameters are not bound.
|
112
|
-
"""
|
113
|
-
if isinstance(self._tree.body, ast.Constant):
|
114
|
-
return self._tree.body.value
|
115
|
-
|
116
|
-
self._locals_dict.clear()
|
117
|
-
if args:
|
118
|
-
for key, val in zip(self.params, args):
|
119
|
-
self._locals_dict[key] = val
|
120
|
-
if kwargs:
|
121
|
-
for key, val in kwargs.items():
|
122
|
-
if key in self.params:
|
123
|
-
if key not in self._locals_dict:
|
124
|
-
self._locals_dict[key] = val
|
125
|
-
else:
|
126
|
-
raise PulseError(
|
127
|
-
f"{self.__class__.__name__} got multiple values for argument '{key}'"
|
128
|
-
)
|
129
|
-
else:
|
130
|
-
raise PulseError(
|
131
|
-
f"{self.__class__.__name__} got an unexpected keyword argument '{key}'"
|
132
|
-
)
|
133
|
-
|
134
|
-
expr = self.visit(self._tree)
|
135
|
-
|
136
|
-
if not isinstance(expr.body, ast.Constant):
|
137
|
-
if self._partial_binding:
|
138
|
-
return PulseExpression(expr, self._partial_binding)
|
139
|
-
else:
|
140
|
-
raise PulseError(f"Parameters {self.params} are not all bound.")
|
141
|
-
return expr.body.value
|
142
|
-
|
143
|
-
@staticmethod
|
144
|
-
def _match_ops(opr: ast.AST, opr_dict: dict, *args) -> complex:
|
145
|
-
"""Helper method to apply operators.
|
146
|
-
|
147
|
-
Args:
|
148
|
-
opr: Operator of node.
|
149
|
-
opr_dict: Mapper from ast to operator.
|
150
|
-
*args: Arguments supplied to operator.
|
151
|
-
|
152
|
-
Returns:
|
153
|
-
Evaluated value.
|
154
|
-
|
155
|
-
Raises:
|
156
|
-
PulseError: When unsupported operation is specified.
|
157
|
-
"""
|
158
|
-
for op_type, op_func in opr_dict.items():
|
159
|
-
if isinstance(opr, op_type):
|
160
|
-
return op_func(*args)
|
161
|
-
raise PulseError(f"Operator {opr.__class__.__name__} is not supported.")
|
162
|
-
|
163
|
-
def visit_Expression(self, node: ast.Expression) -> ast.Expression:
|
164
|
-
"""Evaluate children nodes of expression.
|
165
|
-
|
166
|
-
Args:
|
167
|
-
node: Expression to evaluate.
|
168
|
-
|
169
|
-
Returns:
|
170
|
-
Evaluated value.
|
171
|
-
"""
|
172
|
-
tmp_node = copy.copy(node)
|
173
|
-
tmp_node.body = self.visit(tmp_node.body)
|
174
|
-
|
175
|
-
return tmp_node
|
176
|
-
|
177
|
-
def visit_Constant(self, node: ast.Constant) -> ast.Constant:
|
178
|
-
"""Return constant value as it is.
|
179
|
-
|
180
|
-
Args:
|
181
|
-
node: Constant.
|
182
|
-
|
183
|
-
Returns:
|
184
|
-
Input node.
|
185
|
-
"""
|
186
|
-
return node
|
187
|
-
|
188
|
-
def visit_Name(self, node: ast.Name) -> ast.Name | ast.Constant:
|
189
|
-
"""Evaluate name and return ast.Constant if it is bound.
|
190
|
-
|
191
|
-
Args:
|
192
|
-
node: Name to evaluate.
|
193
|
-
|
194
|
-
Returns:
|
195
|
-
Evaluated value.
|
196
|
-
|
197
|
-
Raises:
|
198
|
-
PulseError: When parameter value is not a number.
|
199
|
-
"""
|
200
|
-
if node.id in self._math_ops:
|
201
|
-
val = ast.Constant(self._math_ops[node.id])
|
202
|
-
return ast.copy_location(val, node)
|
203
|
-
elif node.id in self._locals_dict:
|
204
|
-
_val = self._locals_dict[node.id]
|
205
|
-
if not isinstance(_val, ParameterExpression):
|
206
|
-
# check value type
|
207
|
-
try:
|
208
|
-
_val = complex(_val)
|
209
|
-
if not _val.imag:
|
210
|
-
_val = _val.real
|
211
|
-
except ValueError as ex:
|
212
|
-
raise PulseError(
|
213
|
-
f"Invalid parameter value {node.id} = {self._locals_dict[node.id]} is "
|
214
|
-
"specified."
|
215
|
-
) from ex
|
216
|
-
val = ast.Constant(_val)
|
217
|
-
return ast.copy_location(val, node)
|
218
|
-
self._params.add(node.id)
|
219
|
-
return node
|
220
|
-
|
221
|
-
def visit_UnaryOp(self, node: ast.UnaryOp) -> ast.UnaryOp | ast.Constant:
|
222
|
-
"""Evaluate unary operation and return ast.Constant if operand is bound.
|
223
|
-
|
224
|
-
Args:
|
225
|
-
node: Unary operation to evaluate.
|
226
|
-
|
227
|
-
Returns:
|
228
|
-
Evaluated value.
|
229
|
-
"""
|
230
|
-
node = copy.copy(node)
|
231
|
-
node.operand = self.visit(node.operand)
|
232
|
-
if isinstance(node.operand, ast.Constant):
|
233
|
-
val = ast.Constant(self._match_ops(node.op, self._unary_ops, node.operand.value))
|
234
|
-
return ast.copy_location(val, node)
|
235
|
-
return node
|
236
|
-
|
237
|
-
def visit_BinOp(self, node: ast.BinOp) -> ast.BinOp | ast.Constant:
|
238
|
-
"""Evaluate binary operation and return ast.Constant if operands are bound.
|
239
|
-
|
240
|
-
Args:
|
241
|
-
node: Binary operation to evaluate.
|
242
|
-
|
243
|
-
Returns:
|
244
|
-
Evaluated value.
|
245
|
-
"""
|
246
|
-
node = copy.copy(node)
|
247
|
-
node.left = self.visit(node.left)
|
248
|
-
node.right = self.visit(node.right)
|
249
|
-
if isinstance(node.left, ast.Constant) and isinstance(node.right, ast.Constant):
|
250
|
-
val = ast.Constant(
|
251
|
-
self._match_ops(node.op, self._binary_ops, node.left.value, node.right.value)
|
252
|
-
)
|
253
|
-
return ast.copy_location(val, node)
|
254
|
-
return node
|
255
|
-
|
256
|
-
def visit_Call(self, node: ast.Call) -> ast.Call | ast.Constant:
|
257
|
-
"""Evaluate function and return ast.Constant if all arguments are bound.
|
258
|
-
|
259
|
-
Args:
|
260
|
-
node: Function to evaluate.
|
261
|
-
|
262
|
-
Returns:
|
263
|
-
Evaluated value.
|
264
|
-
|
265
|
-
Raises:
|
266
|
-
PulseError: When unsupported or unsafe function is specified.
|
267
|
-
"""
|
268
|
-
if not isinstance(node.func, ast.Name):
|
269
|
-
raise PulseError("Unsafe expression is detected.")
|
270
|
-
node = copy.copy(node)
|
271
|
-
node.args = [self.visit(arg) for arg in node.args]
|
272
|
-
if all(isinstance(arg, ast.Constant) for arg in node.args):
|
273
|
-
if node.func.id not in self._math_ops:
|
274
|
-
raise PulseError(f"Function {node.func.id} is not supported.")
|
275
|
-
_args = [arg.value for arg in node.args]
|
276
|
-
_val = self._math_ops[node.func.id](*_args)
|
277
|
-
if not _val.imag:
|
278
|
-
_val = _val.real
|
279
|
-
val = ast.Constant(_val)
|
280
|
-
return ast.copy_location(val, node)
|
281
|
-
return node
|
282
|
-
|
283
|
-
def generic_visit(self, node):
|
284
|
-
raise PulseError(f"Unsupported node: {node.__class__.__name__}")
|
285
|
-
|
286
|
-
|
287
|
-
def parse_string_expr(source: str, partial_binding: bool = False) -> PulseExpression:
|
288
|
-
"""Safe parsing of string expression.
|
289
|
-
|
290
|
-
Args:
|
291
|
-
source: String expression to parse.
|
292
|
-
partial_binding: Allow partial bind of parameters.
|
293
|
-
|
294
|
-
Returns:
|
295
|
-
PulseExpression: Returns a expression object.
|
296
|
-
|
297
|
-
Example:
|
298
|
-
|
299
|
-
expr = 'P1 + P2 + P3'
|
300
|
-
parsed_expr = parse_string_expr(expr, partial_binding=True)
|
301
|
-
|
302
|
-
# create new PulseExpression
|
303
|
-
bound_two = parsed_expr(P1=1, P2=2)
|
304
|
-
# evaluate expression
|
305
|
-
value1 = bound_two(P3=3)
|
306
|
-
value2 = bound_two(P3=4)
|
307
|
-
value3 = bound_two(P3=5)
|
308
|
-
|
309
|
-
"""
|
310
|
-
subs = [("numpy.", ""), ("np.", ""), ("math.", ""), ("cmath.", "")]
|
311
|
-
for match, sub in subs:
|
312
|
-
source = source.replace(match, sub)
|
313
|
-
|
314
|
-
return PulseExpression(source, partial_binding)
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2022.
|
4
|
-
#
|
5
|
-
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
-
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
-
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
-
#
|
9
|
-
# Any modifications or derivative works of this code must retain this
|
10
|
-
# copyright notice, and modified files need to carry a notice indicating
|
11
|
-
# that they have been altered from the originals.
|
12
|
-
|
13
|
-
"""Management of schedule block references."""
|
14
|
-
|
15
|
-
from typing import Tuple
|
16
|
-
from collections import UserDict
|
17
|
-
from qiskit.pulse.exceptions import PulseError
|
18
|
-
|
19
|
-
|
20
|
-
class ReferenceManager(UserDict):
|
21
|
-
"""Dictionary wrapper to manage pulse schedule references."""
|
22
|
-
|
23
|
-
def unassigned(self) -> Tuple[Tuple[str, ...], ...]:
|
24
|
-
"""Get the keys of unassigned references.
|
25
|
-
|
26
|
-
Returns:
|
27
|
-
Tuple of reference keys.
|
28
|
-
"""
|
29
|
-
keys = []
|
30
|
-
for key, value in self.items():
|
31
|
-
if value is None:
|
32
|
-
keys.append(key)
|
33
|
-
return tuple(keys)
|
34
|
-
|
35
|
-
def __setitem__(self, key, value):
|
36
|
-
if key in self and self[key] is not None:
|
37
|
-
# Check subroutine conflict.
|
38
|
-
if self[key] != value:
|
39
|
-
raise PulseError(
|
40
|
-
f"Subroutine {key} is already assigned to the reference of the current scope, "
|
41
|
-
"however, the newly assigned schedule conflicts with the existing schedule. "
|
42
|
-
"This operation was not successfully done."
|
43
|
-
)
|
44
|
-
return
|
45
|
-
super().__setitem__(key, value)
|
46
|
-
|
47
|
-
def __repr__(self):
|
48
|
-
keys = ", ".join(map(repr, self.keys()))
|
49
|
-
return f"{self.__class__.__name__}(references=[{keys}])"
|
50
|
-
|
51
|
-
def __str__(self):
|
52
|
-
out = f"{self.__class__.__name__}:"
|
53
|
-
for key, reference in self.items():
|
54
|
-
prog_repr = repr(reference)
|
55
|
-
if len(prog_repr) > 50:
|
56
|
-
prog_repr = prog_repr[:50] + "..."
|
57
|
-
out += f"\n - {repr(key)}: {prog_repr}"
|
58
|
-
return out
|