qiskit 1.4.1__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__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 +3 -9
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/circuit/__init__.py +35 -10
- 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 +236 -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 +469 -154
- 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/graph_state.py +1 -0
- 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 +7 -10
- 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 +14 -62
- 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 +11 -0
- qiskit/circuit/quantumcircuit.py +890 -564
- 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/circuit/tools/pi_check.py +3 -0
- qiskit/compiler/__init__.py +1 -7
- qiskit/compiler/transpiler.py +38 -196
- qiskit/converters/circuit_to_dag.py +6 -4
- 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 +7 -8
- 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 +5 -82
- 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 +162 -19
- qiskit/qpy/binary_io/__init__.py +0 -1
- qiskit/qpy/binary_io/circuits.py +96 -116
- qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
- qiskit/qpy/binary_io/schedules.py +61 -388
- qiskit/qpy/binary_io/value.py +159 -33
- 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 -11
- qiskit/result/result.py +38 -134
- 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 +4 -40
- qiskit/transpiler/passes/basis/basis_translator.py +5 -4
- 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 +3 -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 +2 -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 +3 -2
- 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 +32 -4
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
- qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
- 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 +134 -62
- 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 +107 -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 +78 -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/counts_visualization.py +4 -0
- qiskit/visualization/dag_visualization.py +2 -1
- qiskit/visualization/gate_map.py +39 -154
- qiskit/visualization/library.py +4 -1
- qiskit/visualization/pass_manager_visualization.py +6 -2
- qiskit/visualization/state_visualization.py +19 -2
- qiskit/visualization/timeline/core.py +19 -13
- qiskit/visualization/timeline/interface.py +19 -18
- qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.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.0.dist-info/licenses}/LICENSE.txt +0 -0
- {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -1,430 +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-unary-operand-type
|
14
|
-
|
15
|
-
"""Module for builtin continuous pulse functions."""
|
16
|
-
from __future__ import annotations
|
17
|
-
|
18
|
-
import functools
|
19
|
-
|
20
|
-
import numpy as np
|
21
|
-
from qiskit.pulse.exceptions import PulseError
|
22
|
-
|
23
|
-
|
24
|
-
def constant(times: np.ndarray, amp: complex) -> np.ndarray:
|
25
|
-
"""Continuous constant pulse.
|
26
|
-
|
27
|
-
Args:
|
28
|
-
times: Times to output pulse for.
|
29
|
-
amp: Complex pulse amplitude.
|
30
|
-
"""
|
31
|
-
return np.full(len(times), amp, dtype=np.complex128)
|
32
|
-
|
33
|
-
|
34
|
-
def zero(times: np.ndarray) -> np.ndarray:
|
35
|
-
"""Continuous zero pulse.
|
36
|
-
|
37
|
-
Args:
|
38
|
-
times: Times to output pulse for.
|
39
|
-
"""
|
40
|
-
return constant(times, 0)
|
41
|
-
|
42
|
-
|
43
|
-
def square(times: np.ndarray, amp: complex, freq: float, phase: float = 0) -> np.ndarray:
|
44
|
-
"""Continuous square wave.
|
45
|
-
|
46
|
-
Args:
|
47
|
-
times: Times to output wave for.
|
48
|
-
amp: Pulse amplitude. Wave range is [-amp, amp].
|
49
|
-
freq: Pulse frequency. units of 1/dt.
|
50
|
-
phase: Pulse phase.
|
51
|
-
"""
|
52
|
-
x = times * freq + phase / np.pi
|
53
|
-
return amp * (2 * (2 * np.floor(x) - np.floor(2 * x)) + 1).astype(np.complex128)
|
54
|
-
|
55
|
-
|
56
|
-
def sawtooth(times: np.ndarray, amp: complex, freq: float, phase: float = 0) -> np.ndarray:
|
57
|
-
"""Continuous sawtooth wave.
|
58
|
-
|
59
|
-
Args:
|
60
|
-
times: Times to output wave for.
|
61
|
-
amp: Pulse amplitude. Wave range is [-amp, amp].
|
62
|
-
freq: Pulse frequency. units of 1/dt.
|
63
|
-
phase: Pulse phase.
|
64
|
-
"""
|
65
|
-
x = times * freq + phase / np.pi
|
66
|
-
return amp * 2 * (x - np.floor(1 / 2 + x)).astype(np.complex128)
|
67
|
-
|
68
|
-
|
69
|
-
def triangle(times: np.ndarray, amp: complex, freq: float, phase: float = 0) -> np.ndarray:
|
70
|
-
"""Continuous triangle wave.
|
71
|
-
|
72
|
-
Args:
|
73
|
-
times: Times to output wave for.
|
74
|
-
amp: Pulse amplitude. Wave range is [-amp, amp].
|
75
|
-
freq: Pulse frequency. units of 1/dt.
|
76
|
-
phase: Pulse phase.
|
77
|
-
"""
|
78
|
-
return amp * (-2 * np.abs(sawtooth(times, 1, freq, phase=(phase - np.pi / 2) / 2)) + 1).astype(
|
79
|
-
np.complex128
|
80
|
-
)
|
81
|
-
|
82
|
-
|
83
|
-
def cos(times: np.ndarray, amp: complex, freq: float, phase: float = 0) -> np.ndarray:
|
84
|
-
"""Continuous cosine wave.
|
85
|
-
|
86
|
-
Args:
|
87
|
-
times: Times to output wave for.
|
88
|
-
amp: Pulse amplitude.
|
89
|
-
freq: Pulse frequency, units of 1/dt.
|
90
|
-
phase: Pulse phase.
|
91
|
-
"""
|
92
|
-
return amp * np.cos(2 * np.pi * freq * times + phase).astype(np.complex128)
|
93
|
-
|
94
|
-
|
95
|
-
def sin(times: np.ndarray, amp: complex, freq: float, phase: float = 0) -> np.ndarray:
|
96
|
-
"""Continuous cosine wave.
|
97
|
-
|
98
|
-
Args:
|
99
|
-
times: Times to output wave for.
|
100
|
-
amp: Pulse amplitude.
|
101
|
-
freq: Pulse frequency, units of 1/dt.
|
102
|
-
phase: Pulse phase.
|
103
|
-
"""
|
104
|
-
return amp * np.sin(2 * np.pi * freq * times + phase).astype(np.complex128)
|
105
|
-
|
106
|
-
|
107
|
-
def _fix_gaussian_width(
|
108
|
-
gaussian_samples: np.ndarray,
|
109
|
-
amp: complex,
|
110
|
-
center: float,
|
111
|
-
sigma: float,
|
112
|
-
zeroed_width: float | None = None,
|
113
|
-
rescale_amp: bool = False,
|
114
|
-
ret_scale_factor: bool = False,
|
115
|
-
) -> np.ndarray | tuple[np.ndarray, float]:
|
116
|
-
r"""Enforce that the supplied gaussian pulse is zeroed at a specific width.
|
117
|
-
|
118
|
-
This is achieved by subtracting $\Omega_g(center \pm zeroed_width/2)$ from all samples.
|
119
|
-
|
120
|
-
amp: Pulse amplitude at `center`.
|
121
|
-
center: Center (mean) of pulse.
|
122
|
-
sigma: Standard deviation of pulse.
|
123
|
-
zeroed_width: Subtract baseline from gaussian pulses to make sure
|
124
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
125
|
-
large discontinuities at the start of a gaussian pulse. If unsupplied,
|
126
|
-
defaults to $2*(center + 1)$ such that $\Omega_g(-1)=0$ and $\Omega_g(2*(center + 1))=0$.
|
127
|
-
rescale_amp: If True the pulse will be rescaled so that $\Omega_g(center)=amp$.
|
128
|
-
ret_scale_factor: Return amplitude scale factor.
|
129
|
-
"""
|
130
|
-
if zeroed_width is None:
|
131
|
-
zeroed_width = 2 * (center + 1)
|
132
|
-
|
133
|
-
zero_offset = gaussian(np.array([zeroed_width / 2]), amp, 0, sigma)
|
134
|
-
gaussian_samples -= zero_offset
|
135
|
-
amp_scale_factor: complex | float | np.ndarray = 1.0
|
136
|
-
if rescale_amp:
|
137
|
-
amp_scale_factor = amp / (amp - zero_offset) if amp - zero_offset != 0 else 1.0
|
138
|
-
gaussian_samples *= amp_scale_factor
|
139
|
-
|
140
|
-
if ret_scale_factor:
|
141
|
-
return gaussian_samples, amp_scale_factor
|
142
|
-
return gaussian_samples
|
143
|
-
|
144
|
-
|
145
|
-
def gaussian(
|
146
|
-
times: np.ndarray,
|
147
|
-
amp: complex,
|
148
|
-
center: float,
|
149
|
-
sigma: float,
|
150
|
-
zeroed_width: float | None = None,
|
151
|
-
rescale_amp: bool = False,
|
152
|
-
ret_x: bool = False,
|
153
|
-
) -> np.ndarray | tuple[np.ndarray, np.ndarray]:
|
154
|
-
r"""Continuous unnormalized gaussian pulse.
|
155
|
-
|
156
|
-
Integrated area under curve is $\Omega_g(amp, sigma) = amp \times np.sqrt(2\pi \sigma^2)$
|
157
|
-
|
158
|
-
Args:
|
159
|
-
times: Times to output pulse for.
|
160
|
-
amp: Pulse amplitude at `center`. If `zeroed_width` is set pulse amplitude at center
|
161
|
-
will be $amp-\Omega_g(center \pm zeroed_width/2)$ unless `rescale_amp` is set,
|
162
|
-
in which case all samples will be rescaled such that the center
|
163
|
-
amplitude will be `amp`.
|
164
|
-
center: Center (mean) of pulse.
|
165
|
-
sigma: Width (standard deviation) of pulse.
|
166
|
-
zeroed_width: Subtract baseline from gaussian pulses to make sure
|
167
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
168
|
-
large discontinuities at the start of a gaussian pulse.
|
169
|
-
rescale_amp: If `zeroed_width` is not `None` and `rescale_amp=True` the pulse will
|
170
|
-
be rescaled so that $\Omega_g(center)=amp$.
|
171
|
-
ret_x: Return centered and standard deviation normalized pulse location.
|
172
|
-
$x=(times-center)/sigma.
|
173
|
-
"""
|
174
|
-
times = np.asarray(times, dtype=np.complex128)
|
175
|
-
x = (times - center) / sigma
|
176
|
-
gauss = amp * np.exp(-(x**2) / 2).astype(np.complex128)
|
177
|
-
|
178
|
-
if zeroed_width is not None:
|
179
|
-
gauss = _fix_gaussian_width(
|
180
|
-
gauss,
|
181
|
-
amp=amp,
|
182
|
-
center=center,
|
183
|
-
sigma=sigma,
|
184
|
-
zeroed_width=zeroed_width,
|
185
|
-
rescale_amp=rescale_amp,
|
186
|
-
)
|
187
|
-
|
188
|
-
if ret_x:
|
189
|
-
return gauss, x
|
190
|
-
return gauss
|
191
|
-
|
192
|
-
|
193
|
-
def gaussian_deriv(
|
194
|
-
times: np.ndarray,
|
195
|
-
amp: complex,
|
196
|
-
center: float,
|
197
|
-
sigma: float,
|
198
|
-
ret_gaussian: bool = False,
|
199
|
-
zeroed_width: float | None = None,
|
200
|
-
rescale_amp: bool = False,
|
201
|
-
) -> np.ndarray | tuple[np.ndarray, np.ndarray]:
|
202
|
-
r"""Continuous unnormalized gaussian derivative pulse.
|
203
|
-
|
204
|
-
Args:
|
205
|
-
times: Times to output pulse for.
|
206
|
-
amp: Pulse amplitude at `center`.
|
207
|
-
center: Center (mean) of pulse.
|
208
|
-
sigma: Width (standard deviation) of pulse.
|
209
|
-
ret_gaussian: Return gaussian with which derivative was taken with.
|
210
|
-
zeroed_width: Subtract baseline of pulse to make sure
|
211
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
212
|
-
large discontinuities at the start of a pulse.
|
213
|
-
rescale_amp: If `zeroed_width` is not `None` and `rescale_amp=True` the pulse will
|
214
|
-
be rescaled so that $\Omega_g(center)=amp$.
|
215
|
-
"""
|
216
|
-
gauss, x = gaussian(
|
217
|
-
times,
|
218
|
-
amp=amp,
|
219
|
-
center=center,
|
220
|
-
sigma=sigma,
|
221
|
-
zeroed_width=zeroed_width,
|
222
|
-
rescale_amp=rescale_amp,
|
223
|
-
ret_x=True,
|
224
|
-
)
|
225
|
-
gauss_deriv = -x / sigma * gauss # Note that x is shifted and normalized by sigma
|
226
|
-
if ret_gaussian:
|
227
|
-
return gauss_deriv, gauss
|
228
|
-
return gauss_deriv
|
229
|
-
|
230
|
-
|
231
|
-
def _fix_sech_width(
|
232
|
-
sech_samples: np.ndarray,
|
233
|
-
amp: complex,
|
234
|
-
center: float,
|
235
|
-
sigma: float,
|
236
|
-
zeroed_width: float | None = None,
|
237
|
-
rescale_amp: bool = False,
|
238
|
-
ret_scale_factor: bool = False,
|
239
|
-
) -> np.ndarray | tuple[np.ndarray, float]:
|
240
|
-
r"""Enforce that the supplied sech pulse is zeroed at a specific width.
|
241
|
-
|
242
|
-
This is achieved by subtracting $\Omega_g(center \pm zeroed_width/2)$ from all samples.
|
243
|
-
|
244
|
-
amp: Pulse amplitude at `center`.
|
245
|
-
center: Center (mean) of pulse.
|
246
|
-
sigma: Standard deviation of pulse.
|
247
|
-
zeroed_width: Subtract baseline from sech pulses to make sure
|
248
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
249
|
-
large discontinuities at the start of a sech pulse. If unsupplied,
|
250
|
-
defaults to $2*(center + 1)$ such that $\Omega_g(-1)=0$ and $\Omega_g(2*(center + 1))=0$.
|
251
|
-
rescale_amp: If True the pulse will be rescaled so that $\Omega_g(center)=amp$.
|
252
|
-
ret_scale_factor: Return amplitude scale factor.
|
253
|
-
"""
|
254
|
-
if zeroed_width is None:
|
255
|
-
zeroed_width = 2 * (center + 1)
|
256
|
-
|
257
|
-
zero_offset = sech(np.array([zeroed_width / 2]), amp, 0, sigma)
|
258
|
-
sech_samples -= zero_offset
|
259
|
-
amp_scale_factor: complex | float | np.ndarray = 1.0
|
260
|
-
if rescale_amp:
|
261
|
-
amp_scale_factor = amp / (amp - zero_offset) if amp - zero_offset != 0 else 1.0
|
262
|
-
sech_samples *= amp_scale_factor
|
263
|
-
|
264
|
-
if ret_scale_factor:
|
265
|
-
return sech_samples, amp_scale_factor
|
266
|
-
return sech_samples
|
267
|
-
|
268
|
-
|
269
|
-
def sech_fn(x, *args, **kwargs):
|
270
|
-
r"""Hyperbolic secant function"""
|
271
|
-
return 1.0 / np.cosh(x, *args, **kwargs)
|
272
|
-
|
273
|
-
|
274
|
-
def sech(
|
275
|
-
times: np.ndarray,
|
276
|
-
amp: complex,
|
277
|
-
center: float,
|
278
|
-
sigma: float,
|
279
|
-
zeroed_width: float | None = None,
|
280
|
-
rescale_amp: bool = False,
|
281
|
-
ret_x: bool = False,
|
282
|
-
) -> np.ndarray | tuple[np.ndarray, np.ndarray]:
|
283
|
-
r"""Continuous unnormalized sech pulse.
|
284
|
-
|
285
|
-
Args:
|
286
|
-
times: Times to output pulse for.
|
287
|
-
amp: Pulse amplitude at `center`.
|
288
|
-
center: Center (mean) of pulse.
|
289
|
-
sigma: Width (standard deviation) of pulse.
|
290
|
-
zeroed_width: Subtract baseline from pulse to make sure
|
291
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
292
|
-
large discontinuities at the start and end of the pulse.
|
293
|
-
rescale_amp: If `zeroed_width` is not `None` and `rescale_amp=True` the pulse will
|
294
|
-
be rescaled so that $\Omega_g(center)=amp$.
|
295
|
-
ret_x: Return centered and standard deviation normalized pulse location.
|
296
|
-
$x=(times-center)/sigma$.
|
297
|
-
"""
|
298
|
-
times = np.asarray(times, dtype=np.complex128)
|
299
|
-
x = (times - center) / sigma
|
300
|
-
sech_out = amp * sech_fn(x).astype(np.complex128)
|
301
|
-
|
302
|
-
if zeroed_width is not None:
|
303
|
-
sech_out = _fix_sech_width(
|
304
|
-
sech_out,
|
305
|
-
amp=amp,
|
306
|
-
center=center,
|
307
|
-
sigma=sigma,
|
308
|
-
zeroed_width=zeroed_width,
|
309
|
-
rescale_amp=rescale_amp,
|
310
|
-
)
|
311
|
-
|
312
|
-
if ret_x:
|
313
|
-
return sech_out, x
|
314
|
-
return sech_out
|
315
|
-
|
316
|
-
|
317
|
-
def sech_deriv(
|
318
|
-
times: np.ndarray, amp: complex, center: float, sigma: float, ret_sech: bool = False
|
319
|
-
) -> np.ndarray | tuple[np.ndarray, np.ndarray]:
|
320
|
-
"""Continuous unnormalized sech derivative pulse.
|
321
|
-
|
322
|
-
Args:
|
323
|
-
times: Times to output pulse for.
|
324
|
-
amp: Pulse amplitude at `center`.
|
325
|
-
center: Center (mean) of pulse.
|
326
|
-
sigma: Width (standard deviation) of pulse.
|
327
|
-
ret_sech: Return sech with which derivative was taken with.
|
328
|
-
"""
|
329
|
-
sech_out, x = sech(times, amp=amp, center=center, sigma=sigma, ret_x=True)
|
330
|
-
sech_out_deriv = -sech_out * np.tanh(x) / sigma
|
331
|
-
if ret_sech:
|
332
|
-
return sech_out_deriv, sech_out
|
333
|
-
return sech_out_deriv
|
334
|
-
|
335
|
-
|
336
|
-
def gaussian_square(
|
337
|
-
times: np.ndarray,
|
338
|
-
amp: complex,
|
339
|
-
center: float,
|
340
|
-
square_width: float,
|
341
|
-
sigma: float,
|
342
|
-
zeroed_width: float | None = None,
|
343
|
-
) -> np.ndarray:
|
344
|
-
r"""Continuous gaussian square pulse.
|
345
|
-
|
346
|
-
Args:
|
347
|
-
times: Times to output pulse for.
|
348
|
-
amp: Pulse amplitude.
|
349
|
-
center: Center of the square pulse component.
|
350
|
-
square_width: Width of the square pulse component.
|
351
|
-
sigma: Standard deviation of Gaussian rise/fall portion of the pulse.
|
352
|
-
zeroed_width: Subtract baseline of gaussian square pulse
|
353
|
-
to enforce $\OmegaSquare(center \pm zeroed_width/2)=0$.
|
354
|
-
|
355
|
-
Raises:
|
356
|
-
PulseError: if zeroed_width is not compatible with square_width.
|
357
|
-
"""
|
358
|
-
square_start = center - square_width / 2
|
359
|
-
square_stop = center + square_width / 2
|
360
|
-
if zeroed_width:
|
361
|
-
if zeroed_width < square_width:
|
362
|
-
raise PulseError("zeroed_width cannot be smaller than square_width.")
|
363
|
-
gaussian_zeroed_width = zeroed_width - square_width
|
364
|
-
else:
|
365
|
-
gaussian_zeroed_width = None
|
366
|
-
|
367
|
-
funclist = [
|
368
|
-
functools.partial(
|
369
|
-
gaussian,
|
370
|
-
amp=amp,
|
371
|
-
center=square_start,
|
372
|
-
sigma=sigma,
|
373
|
-
zeroed_width=gaussian_zeroed_width,
|
374
|
-
rescale_amp=True,
|
375
|
-
),
|
376
|
-
functools.partial(
|
377
|
-
gaussian,
|
378
|
-
amp=amp,
|
379
|
-
center=square_stop,
|
380
|
-
sigma=sigma,
|
381
|
-
zeroed_width=gaussian_zeroed_width,
|
382
|
-
rescale_amp=True,
|
383
|
-
),
|
384
|
-
functools.partial(constant, amp=amp),
|
385
|
-
]
|
386
|
-
condlist = [times <= square_start, times >= square_stop]
|
387
|
-
return np.piecewise(times.astype(np.complex128), condlist, funclist)
|
388
|
-
|
389
|
-
|
390
|
-
def drag(
|
391
|
-
times: np.ndarray,
|
392
|
-
amp: complex,
|
393
|
-
center: float,
|
394
|
-
sigma: float,
|
395
|
-
beta: float,
|
396
|
-
zeroed_width: float | None = None,
|
397
|
-
rescale_amp: bool = False,
|
398
|
-
) -> np.ndarray:
|
399
|
-
r"""Continuous Y-only correction DRAG pulse for standard nonlinear oscillator (SNO) [1].
|
400
|
-
|
401
|
-
[1] Gambetta, J. M., Motzoi, F., Merkel, S. T. & Wilhelm, F. K.
|
402
|
-
Analytic control methods for high-fidelity unitary operations
|
403
|
-
in a weakly nonlinear oscillator. Phys. Rev. A 83, 012308 (2011).
|
404
|
-
|
405
|
-
Args:
|
406
|
-
times: Times to output pulse for.
|
407
|
-
amp: Pulse amplitude at `center`.
|
408
|
-
center: Center (mean) of pulse.
|
409
|
-
sigma: Width (standard deviation) of pulse.
|
410
|
-
beta: Y correction amplitude. For the SNO this is $\beta=-\frac{\lambda_1^2}{4\Delta_2}$.
|
411
|
-
Where $\lambds_1$ is the relative coupling strength between the first excited and second
|
412
|
-
excited states and $\Delta_2$ is the detuning between the respective excited states.
|
413
|
-
zeroed_width: Subtract baseline of drag pulse to make sure
|
414
|
-
$\Omega_g(center \pm zeroed_width/2)=0$ is satisfied. This is used to avoid
|
415
|
-
large discontinuities at the start of a drag pulse.
|
416
|
-
rescale_amp: If `zeroed_width` is not `None` and `rescale_amp=True` the pulse will
|
417
|
-
be rescaled so that $\Omega_g(center)=amp$.
|
418
|
-
|
419
|
-
"""
|
420
|
-
gauss_deriv, gauss = gaussian_deriv(
|
421
|
-
times,
|
422
|
-
amp=amp,
|
423
|
-
center=center,
|
424
|
-
sigma=sigma,
|
425
|
-
ret_gaussian=True,
|
426
|
-
zeroed_width=zeroed_width,
|
427
|
-
rescale_amp=rescale_amp,
|
428
|
-
)
|
429
|
-
|
430
|
-
return gauss + 1j * beta * gauss_deriv
|
qiskit/pulse/library/pulse.py
DELETED
@@ -1,148 +0,0 @@
|
|
1
|
-
# This code is part of Qiskit.
|
2
|
-
#
|
3
|
-
# (C) Copyright IBM 2020.
|
4
|
-
#
|
5
|
-
# This code is licensed under the Apache License, Version 2.0. You may
|
6
|
-
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
7
|
-
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
8
|
-
#
|
9
|
-
# Any modifications or derivative works of this code must retain this
|
10
|
-
# copyright notice, and modified files need to carry a notice indicating
|
11
|
-
# that they have been altered from the originals.
|
12
|
-
|
13
|
-
"""Pulses are descriptions of waveform envelopes. They can be transmitted by control electronics
|
14
|
-
to the device.
|
15
|
-
"""
|
16
|
-
from __future__ import annotations
|
17
|
-
|
18
|
-
import typing
|
19
|
-
from abc import ABC, abstractmethod
|
20
|
-
from typing import Any
|
21
|
-
from qiskit.utils.deprecate_pulse import deprecate_pulse_func
|
22
|
-
|
23
|
-
from qiskit.circuit.parameterexpression import ParameterExpression
|
24
|
-
|
25
|
-
|
26
|
-
if typing.TYPE_CHECKING:
|
27
|
-
from qiskit.providers import Backend # pylint: disable=cyclic-import
|
28
|
-
|
29
|
-
|
30
|
-
class Pulse(ABC):
|
31
|
-
"""The abstract superclass for pulses. Pulses are complex-valued waveform envelopes. The
|
32
|
-
modulation phase and frequency are specified separately from ``Pulse``s.
|
33
|
-
"""
|
34
|
-
|
35
|
-
__slots__ = ("duration", "name", "_limit_amplitude")
|
36
|
-
|
37
|
-
limit_amplitude = True
|
38
|
-
|
39
|
-
@abstractmethod
|
40
|
-
@deprecate_pulse_func
|
41
|
-
def __init__(
|
42
|
-
self,
|
43
|
-
duration: int | ParameterExpression,
|
44
|
-
name: str | None = None,
|
45
|
-
limit_amplitude: bool | None = None,
|
46
|
-
):
|
47
|
-
"""Abstract base class for pulses
|
48
|
-
Args:
|
49
|
-
duration: Duration of the pulse
|
50
|
-
name: Optional name for the pulse
|
51
|
-
limit_amplitude: If ``True``, then limit the amplitude of the waveform to 1.
|
52
|
-
The default value of ``None`` causes the flag value to be
|
53
|
-
derived from :py:attr:`~limit_amplitude` which is ``True``
|
54
|
-
by default but may be set by the user to disable amplitude
|
55
|
-
checks globally.
|
56
|
-
"""
|
57
|
-
if limit_amplitude is None:
|
58
|
-
limit_amplitude = self.__class__.limit_amplitude
|
59
|
-
|
60
|
-
self.duration = duration
|
61
|
-
self.name = name
|
62
|
-
self._limit_amplitude = limit_amplitude
|
63
|
-
|
64
|
-
@property
|
65
|
-
def id(self) -> int: # pylint: disable=invalid-name
|
66
|
-
"""Unique identifier for this pulse."""
|
67
|
-
return id(self)
|
68
|
-
|
69
|
-
@property
|
70
|
-
@abstractmethod
|
71
|
-
def parameters(self) -> dict[str, typing.Any]:
|
72
|
-
"""Return a dictionary containing the pulse's parameters."""
|
73
|
-
pass
|
74
|
-
|
75
|
-
def is_parameterized(self) -> bool:
|
76
|
-
"""Return True iff the instruction is parameterized."""
|
77
|
-
raise NotImplementedError
|
78
|
-
|
79
|
-
def draw(
|
80
|
-
self,
|
81
|
-
style: dict[str, Any] | None = None,
|
82
|
-
backend: Backend | None = None,
|
83
|
-
time_range: tuple[int, int] | None = None,
|
84
|
-
time_unit: str = "dt",
|
85
|
-
show_waveform_info: bool = True,
|
86
|
-
plotter: str = "mpl2d",
|
87
|
-
axis: Any | None = None,
|
88
|
-
):
|
89
|
-
"""Plot the interpolated envelope of pulse.
|
90
|
-
|
91
|
-
Args:
|
92
|
-
style: Stylesheet options. This can be dictionary or preset stylesheet classes. See
|
93
|
-
:py:class:`~qiskit.visualization.pulse_v2.stylesheets.IQXStandard`,
|
94
|
-
:py:class:`~qiskit.visualization.pulse_v2.stylesheets.IQXSimple`, and
|
95
|
-
:py:class:`~qiskit.visualization.pulse_v2.stylesheets.IQXDebugging` for details of
|
96
|
-
preset stylesheets.
|
97
|
-
backend (Optional[BaseBackend]): Backend object to play the input pulse program.
|
98
|
-
If provided, the plotter may use to make the visualization hardware aware.
|
99
|
-
time_range: Set horizontal axis limit. Tuple ``(tmin, tmax)``.
|
100
|
-
time_unit: The unit of specified time range either ``dt`` or ``ns``.
|
101
|
-
The unit of ``ns`` is available only when ``backend`` object is provided.
|
102
|
-
show_waveform_info: Show waveform annotations, i.e. name, of waveforms.
|
103
|
-
Set ``True`` to show additional information about waveforms.
|
104
|
-
plotter: Name of plotter API to generate an output image.
|
105
|
-
One of following APIs should be specified::
|
106
|
-
|
107
|
-
mpl2d: Matplotlib API for 2D image generation.
|
108
|
-
Matplotlib API to generate 2D image. Charts are placed along y axis with
|
109
|
-
vertical offset. This API takes matplotlib.axes.Axes as `axis` input.
|
110
|
-
|
111
|
-
`axis` and `style` kwargs may depend on the plotter.
|
112
|
-
axis: Arbitrary object passed to the plotter. If this object is provided,
|
113
|
-
the plotters use a given ``axis`` instead of internally initializing
|
114
|
-
a figure object. This object format depends on the plotter.
|
115
|
-
See plotter argument for details.
|
116
|
-
|
117
|
-
Returns:
|
118
|
-
Visualization output data.
|
119
|
-
The returned data type depends on the ``plotter``.
|
120
|
-
If matplotlib family is specified, this will be a ``matplotlib.pyplot.Figure`` data.
|
121
|
-
"""
|
122
|
-
# pylint: disable=cyclic-import
|
123
|
-
from qiskit.visualization import pulse_drawer
|
124
|
-
|
125
|
-
return pulse_drawer(
|
126
|
-
program=self,
|
127
|
-
style=style,
|
128
|
-
backend=backend,
|
129
|
-
time_range=time_range,
|
130
|
-
time_unit=time_unit,
|
131
|
-
show_waveform_info=show_waveform_info,
|
132
|
-
plotter=plotter,
|
133
|
-
axis=axis,
|
134
|
-
)
|
135
|
-
|
136
|
-
@abstractmethod
|
137
|
-
def __eq__(self, other: object) -> bool:
|
138
|
-
if not isinstance(other, Pulse):
|
139
|
-
return NotImplemented
|
140
|
-
return isinstance(other, type(self))
|
141
|
-
|
142
|
-
@abstractmethod
|
143
|
-
def __hash__(self) -> int:
|
144
|
-
raise NotImplementedError
|
145
|
-
|
146
|
-
@abstractmethod
|
147
|
-
def __repr__(self) -> str:
|
148
|
-
raise NotImplementedError
|
@@ -1,15 +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
|
-
"""Module for methods which sample continuous functions."""
|
14
|
-
|
15
|
-
from .decorators import left, right, midpoint
|