qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0rc1__cp39-abi3-win_amd64.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.pyd +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 +1 -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
@@ -1,295 +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
|
-
"""Sampler decorator module for sampling of continuous pulses to discrete pulses to be
|
14
|
-
exposed to user.
|
15
|
-
|
16
|
-
Some atypical boilerplate has been added to solve the problem of decorators not preserving
|
17
|
-
their wrapped function signatures. Below we explain the problem that samplers solve and how
|
18
|
-
we implement this.
|
19
|
-
|
20
|
-
A sampler is a function that takes an continuous pulse function with signature:
|
21
|
-
```python
|
22
|
-
def f(times: np.ndarray, *args, **kwargs) -> np.ndarray:
|
23
|
-
...
|
24
|
-
```
|
25
|
-
and returns a new function:
|
26
|
-
def f(duration: int, *args, **kwargs) -> Waveform:
|
27
|
-
...
|
28
|
-
|
29
|
-
Samplers are used to build up pulse waveforms from continuous pulse functions.
|
30
|
-
|
31
|
-
In Python the creation of a dynamic function that wraps another function will cause
|
32
|
-
the underlying signature and documentation of the underlying function to be overwritten.
|
33
|
-
In order to circumvent this issue the Python standard library provides the decorator
|
34
|
-
`functools.wraps` which allows the programmer to expose the names and signature of the
|
35
|
-
wrapped function as those of the dynamic function.
|
36
|
-
|
37
|
-
Samplers are implemented by creating a function with signature
|
38
|
-
@sampler
|
39
|
-
def left(continuous_pulse: Callable, duration: int, *args, **kwargs)
|
40
|
-
...
|
41
|
-
|
42
|
-
This will create a sampler function for `left`. Since it is a dynamic function it would not
|
43
|
-
have the docstring of `left` available too `help`. This could be fixed by wrapping with
|
44
|
-
`functools.wraps` in the `sampler`, but this would then cause the signature to be that of the
|
45
|
-
sampler function which is called on the continuous pulse, below:
|
46
|
-
`(continuous_pulse: Callable, duration: int, *args, **kwargs)``
|
47
|
-
This is not correct for the sampler as the output sampled functions accept only a function.
|
48
|
-
For the standard sampler we get around this by not using `functools.wraps` and
|
49
|
-
explicitly defining our samplers such as `left`, `right` and `midpoint` and
|
50
|
-
calling `sampler` internally on the function that implements the sampling schemes such as
|
51
|
-
`left_sample`, `right_sample` and `midpoint_sample` respectively. See `left` for an example of this.
|
52
|
-
|
53
|
-
|
54
|
-
In this way our standard samplers will expose the proper help signature, but a user can
|
55
|
-
still create their own sampler with
|
56
|
-
@sampler
|
57
|
-
def custom_sampler(time, *args, **kwargs):
|
58
|
-
...
|
59
|
-
However, in this case it will be missing documentation of the underlying sampling methods.
|
60
|
-
We believe that the definition of custom samplers will be rather infrequent.
|
61
|
-
|
62
|
-
However, users will frequently apply sampler instances too continuous pulses. Therefore, a different
|
63
|
-
approach was required for sampled continuous functions (the output of an continuous pulse function
|
64
|
-
decorated by a sampler instance).
|
65
|
-
|
66
|
-
A sampler instance is a decorator that may be used to wrap continuous pulse functions such as
|
67
|
-
linear below:
|
68
|
-
```python
|
69
|
-
@left
|
70
|
-
def linear(times: np.ndarray, m: float, b: float) -> np.ndarray:
|
71
|
-
```Linear test function
|
72
|
-
Args:
|
73
|
-
times: Input times.
|
74
|
-
m: Slope.
|
75
|
-
b: Intercept
|
76
|
-
Returns:
|
77
|
-
np.ndarray
|
78
|
-
```
|
79
|
-
return m*times+b
|
80
|
-
```
|
81
|
-
Which after decoration may be called with a duration rather than an array of times
|
82
|
-
```python
|
83
|
-
duration = 10
|
84
|
-
pulse_envelope = linear(10, 0.1, 0.1)
|
85
|
-
```
|
86
|
-
If one calls help on `linear` they will find
|
87
|
-
```
|
88
|
-
linear(duration:int, *args, **kwargs) -> numpy.ndarray
|
89
|
-
Discretized continuous pulse function: `linear` using
|
90
|
-
sampler: `_left`.
|
91
|
-
|
92
|
-
The first argument (time) of the continuous pulse function has been replaced with
|
93
|
-
a discretized `duration` of type (int).
|
94
|
-
|
95
|
-
Args:
|
96
|
-
duration (int)
|
97
|
-
*args: Remaining arguments of continuous pulse function.
|
98
|
-
See continuous pulse function documentation below.
|
99
|
-
**kwargs: Remaining kwargs of continuous pulse function.
|
100
|
-
See continuous pulse function documentation below.
|
101
|
-
|
102
|
-
Sampled continuous function:
|
103
|
-
|
104
|
-
function linear in module test.python.pulse.test_samplers
|
105
|
-
linear(x:numpy.ndarray, m:float, b:float) -> numpy.ndarray
|
106
|
-
Linear test function
|
107
|
-
Args:
|
108
|
-
x: Input times.
|
109
|
-
m: Slope.
|
110
|
-
b: Intercept
|
111
|
-
Returns:
|
112
|
-
np.ndarray
|
113
|
-
```
|
114
|
-
This is partly because `functools.wraps` has been used on the underlying function.
|
115
|
-
This in itself is not sufficient as the signature of the sampled function has
|
116
|
-
`duration`, whereas the signature of the continuous function is `time`.
|
117
|
-
|
118
|
-
This is achieved by removing `__wrapped__` set by `functools.wraps` in order to preserve
|
119
|
-
the correct signature and also applying `_update_annotations` and `_update_docstring`
|
120
|
-
to the generated function which corrects the function annotations and adds an informative
|
121
|
-
docstring respectively.
|
122
|
-
|
123
|
-
The user therefore has access to the correct sampled function docstring in its entirety, while
|
124
|
-
still seeing the signature for the continuous pulse function and all of its arguments.
|
125
|
-
"""
|
126
|
-
from __future__ import annotations
|
127
|
-
import functools
|
128
|
-
import textwrap
|
129
|
-
import pydoc
|
130
|
-
from collections.abc import Callable
|
131
|
-
|
132
|
-
import numpy as np
|
133
|
-
|
134
|
-
from ...exceptions import PulseError
|
135
|
-
from ..waveform import Waveform
|
136
|
-
from . import strategies
|
137
|
-
|
138
|
-
|
139
|
-
def functional_pulse(func: Callable) -> Callable:
|
140
|
-
"""A decorator for generating Waveform from python callable.
|
141
|
-
|
142
|
-
Args:
|
143
|
-
func: A function describing pulse envelope.
|
144
|
-
|
145
|
-
Raises:
|
146
|
-
PulseError: when invalid function is specified.
|
147
|
-
"""
|
148
|
-
|
149
|
-
@functools.wraps(func)
|
150
|
-
def to_pulse(duration, *args, name=None, **kwargs):
|
151
|
-
"""Return Waveform."""
|
152
|
-
if isinstance(duration, (int, np.integer)) and duration > 0:
|
153
|
-
samples = func(duration, *args, **kwargs)
|
154
|
-
samples = np.asarray(samples, dtype=np.complex128)
|
155
|
-
return Waveform(samples=samples, name=name)
|
156
|
-
raise PulseError("The first argument must be an integer value representing duration.")
|
157
|
-
|
158
|
-
return to_pulse
|
159
|
-
|
160
|
-
|
161
|
-
def _update_annotations(discretized_pulse: Callable) -> Callable:
|
162
|
-
"""Update annotations of discretized continuous pulse function with duration.
|
163
|
-
|
164
|
-
Args:
|
165
|
-
discretized_pulse: Discretized decorated continuous pulse.
|
166
|
-
"""
|
167
|
-
undecorated_annotations = list(discretized_pulse.__annotations__.items())
|
168
|
-
decorated_annotations = undecorated_annotations[1:]
|
169
|
-
decorated_annotations.insert(0, ("duration", int))
|
170
|
-
discretized_pulse.__annotations__ = dict(decorated_annotations)
|
171
|
-
return discretized_pulse
|
172
|
-
|
173
|
-
|
174
|
-
def _update_docstring(discretized_pulse: Callable, sampler_inst: Callable) -> Callable:
|
175
|
-
"""Update annotations of discretized continuous pulse function.
|
176
|
-
|
177
|
-
Args:
|
178
|
-
discretized_pulse: Discretized decorated continuous pulse.
|
179
|
-
sampler_inst: Applied sampler.
|
180
|
-
"""
|
181
|
-
wrapped_docstring = pydoc.render_doc(discretized_pulse, "%s")
|
182
|
-
header, body = wrapped_docstring.split("\n", 1)
|
183
|
-
body = textwrap.indent(body, " ")
|
184
|
-
wrapped_docstring = header + body
|
185
|
-
updated_ds = f"""
|
186
|
-
Discretized continuous pulse function: `{discretized_pulse.__name__}` using
|
187
|
-
sampler: `{sampler_inst.__name__}`.
|
188
|
-
|
189
|
-
The first argument (time) of the continuous pulse function has been replaced with
|
190
|
-
a discretized `duration` of type (int).
|
191
|
-
|
192
|
-
Args:
|
193
|
-
duration (int)
|
194
|
-
*args: Remaining arguments of continuous pulse function.
|
195
|
-
See continuous pulse function documentation below.
|
196
|
-
**kwargs: Remaining kwargs of continuous pulse function.
|
197
|
-
See continuous pulse function documentation below.
|
198
|
-
|
199
|
-
Sampled continuous function:
|
200
|
-
|
201
|
-
{wrapped_docstring}
|
202
|
-
"""
|
203
|
-
|
204
|
-
discretized_pulse.__doc__ = updated_ds
|
205
|
-
return discretized_pulse
|
206
|
-
|
207
|
-
|
208
|
-
def sampler(sample_function: Callable) -> Callable:
|
209
|
-
"""Sampler decorator base method.
|
210
|
-
|
211
|
-
Samplers are used for converting an continuous function to a discretized pulse.
|
212
|
-
|
213
|
-
They operate on a function with the signature:
|
214
|
-
`def f(times: np.ndarray, *args, **kwargs) -> np.ndarray`
|
215
|
-
Where `times` is a numpy array of floats with length n_times and the output array
|
216
|
-
is a complex numpy array with length n_times. The output of the decorator is an
|
217
|
-
instance of `FunctionalPulse` with signature:
|
218
|
-
`def g(duration: int, *args, **kwargs) -> Waveform`
|
219
|
-
|
220
|
-
Note if your continuous pulse function outputs a `complex` scalar rather than a
|
221
|
-
`np.ndarray`, you should first vectorize it before applying a sampler.
|
222
|
-
|
223
|
-
|
224
|
-
This class implements the sampler boilerplate for the sampler.
|
225
|
-
|
226
|
-
Args:
|
227
|
-
sample_function: A sampler function to be decorated.
|
228
|
-
"""
|
229
|
-
|
230
|
-
def generate_sampler(continuous_pulse: Callable) -> Callable:
|
231
|
-
"""Return a decorated sampler function."""
|
232
|
-
|
233
|
-
@functools.wraps(continuous_pulse)
|
234
|
-
def call_sampler(duration: int, *args, **kwargs) -> np.ndarray:
|
235
|
-
"""Replace the call to the continuous function with a call to the sampler applied
|
236
|
-
to the analytic pulse function."""
|
237
|
-
sampled_pulse = sample_function(continuous_pulse, duration, *args, **kwargs)
|
238
|
-
return np.asarray(sampled_pulse, dtype=np.complex128)
|
239
|
-
|
240
|
-
# Update type annotations for wrapped continuous function to be discrete
|
241
|
-
call_sampler = _update_annotations(call_sampler)
|
242
|
-
# Update docstring with that of the sampler and include sampled function documentation.
|
243
|
-
call_sampler = _update_docstring(call_sampler, sample_function)
|
244
|
-
# Unset wrapped to return base sampler signature
|
245
|
-
# but still get rest of benefits of wraps
|
246
|
-
# such as __name__, __qualname__
|
247
|
-
call_sampler.__dict__.pop("__wrapped__")
|
248
|
-
# wrap with functional pulse
|
249
|
-
return functional_pulse(call_sampler)
|
250
|
-
|
251
|
-
return generate_sampler
|
252
|
-
|
253
|
-
|
254
|
-
def left(continuous_pulse: Callable) -> Callable:
|
255
|
-
r"""Left sampling strategy decorator.
|
256
|
-
|
257
|
-
See `pulse.samplers.sampler` for more information.
|
258
|
-
|
259
|
-
For `duration`, return:
|
260
|
-
$$\{f(t) \in \mathbb{C} | t \in \mathbb{Z} \wedge 0<=t<\texttt{duration}\}$$
|
261
|
-
|
262
|
-
Args:
|
263
|
-
continuous_pulse: To sample.
|
264
|
-
"""
|
265
|
-
|
266
|
-
return sampler(strategies.left_sample)(continuous_pulse)
|
267
|
-
|
268
|
-
|
269
|
-
def right(continuous_pulse: Callable) -> Callable:
|
270
|
-
r"""Right sampling strategy decorator.
|
271
|
-
|
272
|
-
See `pulse.samplers.sampler` for more information.
|
273
|
-
|
274
|
-
For `duration`, return:
|
275
|
-
$$\{f(t) \in \mathbb{C} | t \in \mathbb{Z} \wedge 0<t<=\texttt{duration}\}$$
|
276
|
-
|
277
|
-
Args:
|
278
|
-
continuous_pulse: To sample.
|
279
|
-
"""
|
280
|
-
|
281
|
-
return sampler(strategies.right_sample)(continuous_pulse)
|
282
|
-
|
283
|
-
|
284
|
-
def midpoint(continuous_pulse: Callable) -> Callable:
|
285
|
-
r"""Midpoint sampling strategy decorator.
|
286
|
-
|
287
|
-
See `pulse.samplers.sampler` for more information.
|
288
|
-
|
289
|
-
For `duration`, return:
|
290
|
-
$$\{f(t+0.5) \in \mathbb{C} | t \in \mathbb{Z} \wedge 0<=t<\texttt{duration}\}$$
|
291
|
-
|
292
|
-
Args:
|
293
|
-
continuous_pulse: To sample.
|
294
|
-
"""
|
295
|
-
return sampler(strategies.midpoint_sample)(continuous_pulse)
|
@@ -1,71 +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
|
-
|
14
|
-
"""Sampler strategy module for sampler functions.
|
15
|
-
|
16
|
-
Sampler functions have signature.
|
17
|
-
```python
|
18
|
-
def sampler_function(continuous_pulse: Callable, duration: int, *args, **kwargs) -> np.ndarray:
|
19
|
-
...
|
20
|
-
```
|
21
|
-
where the supplied `continuous_pulse` is a function with signature:
|
22
|
-
```python
|
23
|
-
def f(times: np.ndarray, *args, **kwargs) -> np.ndarray:
|
24
|
-
...
|
25
|
-
```
|
26
|
-
The sampler will call the `continuous_pulse` function with a set of times it will decide
|
27
|
-
according to the sampling strategy it implements along with the passed `args` and `kwargs`.
|
28
|
-
"""
|
29
|
-
|
30
|
-
from typing import Callable
|
31
|
-
|
32
|
-
import numpy as np
|
33
|
-
|
34
|
-
|
35
|
-
def left_sample(continuous_pulse: Callable, duration: int, *args, **kwargs) -> np.ndarray:
|
36
|
-
"""Left sample a continuous function.
|
37
|
-
|
38
|
-
Args:
|
39
|
-
continuous_pulse: Continuous pulse function to sample.
|
40
|
-
duration: Duration to sample for.
|
41
|
-
*args: Continuous pulse function args.
|
42
|
-
**kwargs: Continuous pulse function kwargs.
|
43
|
-
"""
|
44
|
-
times = np.arange(duration)
|
45
|
-
return continuous_pulse(times, *args, **kwargs)
|
46
|
-
|
47
|
-
|
48
|
-
def right_sample(continuous_pulse: Callable, duration: int, *args, **kwargs) -> np.ndarray:
|
49
|
-
"""Sampling strategy for decorator.
|
50
|
-
|
51
|
-
Args:
|
52
|
-
continuous_pulse: Continuous pulse function to sample.
|
53
|
-
duration: Duration to sample for.
|
54
|
-
*args: Continuous pulse function args.
|
55
|
-
**kwargs: Continuous pulse function kwargs.
|
56
|
-
"""
|
57
|
-
times = np.arange(1, duration + 1)
|
58
|
-
return continuous_pulse(times, *args, **kwargs)
|
59
|
-
|
60
|
-
|
61
|
-
def midpoint_sample(continuous_pulse: Callable, duration: int, *args, **kwargs) -> np.ndarray:
|
62
|
-
"""Sampling strategy for decorator.
|
63
|
-
|
64
|
-
Args:
|
65
|
-
continuous_pulse: Continuous pulse function to sample.
|
66
|
-
duration: Duration to sample for.
|
67
|
-
*args: Continuous pulse function args.
|
68
|
-
**kwargs: Continuous pulse function kwargs.
|
69
|
-
"""
|
70
|
-
times = np.arange(1 / 2, duration + 1 / 2)
|
71
|
-
return continuous_pulse(times, *args, **kwargs)
|