qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0__cp38-abi3-macosx_10_9_universal2.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 +27 -24
- qiskit/_accelerate.abi3.so +0 -0
- qiskit/_numpy_compat.py +1 -1
- qiskit/assembler/assemble_circuits.py +107 -64
- qiskit/assembler/assemble_schedules.py +5 -12
- qiskit/assembler/disassemble.py +10 -1
- qiskit/circuit/__init__.py +6 -3
- qiskit/circuit/_classical_resource_map.py +5 -5
- qiskit/circuit/_utils.py +0 -13
- qiskit/circuit/add_control.py +1 -1
- qiskit/circuit/annotated_operation.py +23 -1
- qiskit/circuit/classical/expr/expr.py +4 -4
- qiskit/circuit/classical/expr/visitors.py +1 -1
- qiskit/circuit/classical/types/__init__.py +1 -1
- qiskit/circuit/classical/types/types.py +2 -2
- qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
- qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
- qiskit/circuit/classicalfunction/utils.py +1 -1
- qiskit/circuit/classicalregister.py +1 -1
- qiskit/circuit/commutation_checker.py +83 -35
- qiskit/circuit/controlflow/_builder_utils.py +1 -1
- qiskit/circuit/controlflow/builder.py +10 -6
- qiskit/circuit/controlflow/if_else.py +2 -2
- qiskit/circuit/controlflow/switch_case.py +1 -1
- qiskit/circuit/delay.py +1 -1
- qiskit/circuit/duration.py +2 -2
- qiskit/circuit/equivalence.py +5 -7
- qiskit/circuit/gate.py +11 -8
- qiskit/circuit/instruction.py +31 -13
- qiskit/circuit/instructionset.py +2 -5
- qiskit/circuit/library/__init__.py +2 -1
- qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
- qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
- qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
- qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
- qiskit/circuit/library/basis_change/__init__.py +1 -1
- qiskit/circuit/library/basis_change/qft.py +40 -6
- qiskit/circuit/library/blueprintcircuit.py +3 -5
- qiskit/circuit/library/data_preparation/__init__.py +9 -2
- qiskit/circuit/library/data_preparation/initializer.py +8 -0
- qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
- qiskit/circuit/library/generalized_gates/isometry.py +8 -8
- qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
- qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
- qiskit/circuit/library/generalized_gates/permutation.py +8 -9
- qiskit/circuit/library/generalized_gates/uc.py +3 -3
- qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
- qiskit/circuit/library/generalized_gates/unitary.py +13 -11
- qiskit/circuit/library/graph_state.py +1 -1
- qiskit/circuit/library/hamiltonian_gate.py +1 -2
- qiskit/circuit/library/hidden_linear_function.py +1 -1
- qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
- qiskit/circuit/library/n_local/n_local.py +4 -5
- qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
- qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
- qiskit/circuit/library/n_local/two_local.py +1 -1
- qiskit/circuit/library/overlap.py +11 -5
- qiskit/circuit/library/pauli_evolution.py +7 -3
- qiskit/circuit/library/standard_gates/dcx.py +3 -0
- qiskit/circuit/library/standard_gates/ecr.py +3 -0
- qiskit/circuit/library/standard_gates/global_phase.py +3 -0
- qiskit/circuit/library/standard_gates/h.py +13 -5
- qiskit/circuit/library/standard_gates/i.py +3 -0
- qiskit/circuit/library/standard_gates/iswap.py +3 -0
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
- qiskit/circuit/library/standard_gates/p.py +14 -9
- qiskit/circuit/library/standard_gates/r.py +3 -0
- qiskit/circuit/library/standard_gates/rx.py +21 -6
- qiskit/circuit/library/standard_gates/rxx.py +40 -1
- qiskit/circuit/library/standard_gates/ry.py +21 -6
- qiskit/circuit/library/standard_gates/ryy.py +40 -1
- qiskit/circuit/library/standard_gates/rz.py +22 -6
- qiskit/circuit/library/standard_gates/rzx.py +40 -1
- qiskit/circuit/library/standard_gates/rzz.py +41 -2
- qiskit/circuit/library/standard_gates/s.py +77 -0
- qiskit/circuit/library/standard_gates/swap.py +12 -5
- qiskit/circuit/library/standard_gates/sx.py +14 -5
- qiskit/circuit/library/standard_gates/t.py +5 -0
- qiskit/circuit/library/standard_gates/u.py +22 -7
- qiskit/circuit/library/standard_gates/u1.py +8 -3
- qiskit/circuit/library/standard_gates/u2.py +3 -0
- qiskit/circuit/library/standard_gates/u3.py +22 -7
- qiskit/circuit/library/standard_gates/x.py +156 -92
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
- qiskit/circuit/library/standard_gates/y.py +6 -1
- qiskit/circuit/library/standard_gates/z.py +8 -1
- qiskit/circuit/operation.py +1 -1
- qiskit/circuit/parameter.py +9 -10
- qiskit/circuit/parameterexpression.py +16 -13
- qiskit/circuit/parametertable.py +1 -190
- qiskit/circuit/parametervector.py +1 -1
- qiskit/circuit/quantumcircuit.py +395 -387
- qiskit/circuit/quantumcircuitdata.py +3 -5
- qiskit/circuit/quantumregister.py +1 -1
- qiskit/circuit/random/__init__.py +1 -1
- qiskit/circuit/random/utils.py +175 -26
- qiskit/circuit/register.py +5 -7
- qiskit/circuit/singleton.py +3 -3
- qiskit/circuit/tools/pi_check.py +4 -4
- qiskit/compiler/assembler.py +95 -24
- qiskit/compiler/scheduler.py +2 -2
- qiskit/compiler/transpiler.py +42 -128
- qiskit/converters/circuit_to_dag.py +4 -6
- qiskit/converters/circuit_to_gate.py +4 -8
- qiskit/converters/circuit_to_instruction.py +5 -17
- qiskit/converters/dag_to_circuit.py +2 -6
- qiskit/dagcircuit/collect_blocks.py +2 -2
- qiskit/dagcircuit/dagcircuit.py +190 -187
- qiskit/dagcircuit/dagdependency.py +4 -4
- qiskit/dagcircuit/dagdependency_v2.py +4 -4
- qiskit/dagcircuit/dagdepnode.py +1 -1
- qiskit/dagcircuit/dagnode.py +66 -157
- qiskit/passmanager/flow_controllers.py +1 -1
- qiskit/passmanager/passmanager.py +3 -3
- qiskit/primitives/__init__.py +1 -5
- qiskit/primitives/backend_estimator.py +25 -15
- qiskit/primitives/backend_estimator_v2.py +31 -7
- qiskit/primitives/backend_sampler.py +21 -12
- qiskit/primitives/backend_sampler_v2.py +12 -3
- qiskit/primitives/base/base_estimator.py +31 -4
- qiskit/primitives/base/base_primitive.py +2 -2
- qiskit/primitives/base/base_result.py +2 -2
- qiskit/primitives/base/base_sampler.py +26 -2
- qiskit/primitives/base/estimator_result.py +2 -2
- qiskit/primitives/base/sampler_result.py +2 -2
- qiskit/primitives/containers/__init__.py +0 -1
- qiskit/primitives/containers/bindings_array.py +2 -2
- qiskit/primitives/containers/bit_array.py +108 -10
- qiskit/primitives/containers/shape.py +3 -3
- qiskit/primitives/estimator.py +9 -2
- qiskit/primitives/primitive_job.py +1 -1
- qiskit/primitives/sampler.py +10 -3
- qiskit/primitives/statevector_estimator.py +5 -3
- qiskit/primitives/statevector_sampler.py +11 -5
- qiskit/primitives/utils.py +16 -0
- qiskit/providers/backend.py +15 -6
- qiskit/providers/backend_compat.py +7 -4
- qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
- qiskit/providers/basic_provider/basic_simulator.py +33 -25
- qiskit/providers/fake_provider/fake_backend.py +10 -3
- qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
- qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
- qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
- qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
- qiskit/providers/fake_provider/generic_backend_v2.py +514 -68
- qiskit/providers/models/__init__.py +48 -11
- qiskit/providers/models/backendconfiguration.py +50 -4
- qiskit/providers/models/backendproperties.py +13 -2
- qiskit/providers/models/pulsedefaults.py +10 -11
- qiskit/providers/options.py +13 -13
- qiskit/providers/providerutils.py +3 -1
- qiskit/pulse/configuration.py +8 -12
- qiskit/pulse/instruction_schedule_map.py +3 -5
- qiskit/pulse/instructions/acquire.py +7 -8
- qiskit/pulse/instructions/instruction.py +2 -3
- qiskit/pulse/library/samplers/decorators.py +5 -9
- qiskit/pulse/library/symbolic_pulses.py +4 -7
- qiskit/pulse/library/waveform.py +2 -5
- qiskit/pulse/macros.py +11 -6
- qiskit/pulse/parser.py +8 -10
- qiskit/pulse/schedule.py +9 -17
- qiskit/pulse/transforms/alignments.py +1 -3
- qiskit/pulse/utils.py +1 -2
- qiskit/qasm/libs/stdgates.inc +35 -28
- qiskit/qasm2/__init__.py +7 -7
- qiskit/qasm2/export.py +5 -9
- qiskit/qasm2/parse.py +1 -1
- qiskit/qasm3/ast.py +9 -25
- qiskit/qasm3/exporter.py +582 -479
- qiskit/qasm3/printer.py +7 -16
- qiskit/qobj/common.py +10 -0
- qiskit/qobj/converters/lo_config.py +9 -0
- qiskit/qobj/converters/pulse_instruction.py +13 -6
- qiskit/qobj/pulse_qobj.py +69 -15
- qiskit/qobj/qasm_qobj.py +72 -20
- qiskit/qobj/utils.py +9 -0
- qiskit/qpy/__init__.py +1 -1
- qiskit/qpy/binary_io/circuits.py +8 -5
- qiskit/qpy/binary_io/schedules.py +1 -1
- qiskit/qpy/binary_io/value.py +3 -3
- qiskit/qpy/interface.py +3 -2
- qiskit/qpy/type_keys.py +2 -2
- qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
- qiskit/quantum_info/operators/channel/superop.py +2 -2
- qiskit/quantum_info/operators/channel/transformations.py +1 -1
- qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
- qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
- qiskit/quantum_info/operators/dihedral/random.py +6 -3
- qiskit/quantum_info/operators/measures.py +2 -2
- qiskit/quantum_info/operators/op_shape.py +12 -20
- qiskit/quantum_info/operators/operator.py +14 -21
- qiskit/quantum_info/operators/predicates.py +1 -0
- qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
- qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
- qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
- qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
- qiskit/quantum_info/operators/symplectic/random.py +1 -1
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
- qiskit/quantum_info/quaternion.py +1 -1
- qiskit/quantum_info/states/densitymatrix.py +5 -8
- qiskit/quantum_info/states/stabilizerstate.py +128 -37
- qiskit/quantum_info/states/statevector.py +4 -8
- qiskit/result/counts.py +2 -2
- qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
- qiskit/result/mitigation/local_readout_mitigator.py +2 -2
- qiskit/result/mitigation/utils.py +1 -3
- qiskit/result/models.py +17 -16
- qiskit/result/result.py +15 -20
- qiskit/scheduler/lowering.py +2 -2
- qiskit/synthesis/__init__.py +2 -1
- qiskit/synthesis/clifford/__init__.py +1 -1
- qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
- qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
- qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
- qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
- qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
- qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
- qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
- qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
- qiskit/synthesis/evolution/lie_trotter.py +46 -19
- qiskit/synthesis/evolution/product_formula.py +111 -55
- qiskit/synthesis/evolution/qdrift.py +40 -10
- qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
- qiskit/synthesis/linear/__init__.py +1 -0
- qiskit/synthesis/linear/cnot_synth.py +22 -96
- qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
- qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
- qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
- qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
- qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
- qiskit/synthesis/permutation/permutation_full.py +5 -29
- qiskit/synthesis/permutation/permutation_lnn.py +2 -24
- qiskit/synthesis/permutation/permutation_utils.py +2 -59
- qiskit/synthesis/qft/__init__.py +1 -0
- qiskit/synthesis/qft/qft_decompose_full.py +79 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
- qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
- qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
- qiskit/synthesis/two_qubit/local_invariance.py +8 -38
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
- qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
- qiskit/synthesis/unitary/qsd.py +5 -3
- qiskit/transpiler/__init__.py +1 -0
- qiskit/transpiler/basepasses.py +1 -1
- qiskit/transpiler/coupling.py +3 -3
- qiskit/transpiler/instruction_durations.py +1 -2
- qiskit/transpiler/layout.py +3 -3
- qiskit/transpiler/passes/__init__.py +2 -0
- qiskit/transpiler/passes/basis/basis_translator.py +84 -64
- qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
- qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
- qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
- qiskit/transpiler/passes/layout/apply_layout.py +13 -3
- qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
- qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
- qiskit/transpiler/passes/layout/set_layout.py +2 -2
- qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
- qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
- qiskit/transpiler/passes/optimization/__init__.py +1 -0
- qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
- qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
- qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
- qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
- qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
- qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
- qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
- qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
- qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
- qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
- qiskit/transpiler/passes/scheduling/alap.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
- qiskit/transpiler/passes/scheduling/asap.py +1 -2
- qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
- qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
- qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
- qiskit/transpiler/passes/synthesis/plugin.py +2 -2
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
- qiskit/transpiler/passes/utils/__init__.py +0 -1
- qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
- qiskit/transpiler/passes/utils/check_map.py +3 -6
- qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
- qiskit/transpiler/passes/utils/error.py +2 -2
- qiskit/transpiler/passes/utils/fixed_point.py +3 -3
- qiskit/transpiler/passes/utils/gate_direction.py +1 -1
- qiskit/transpiler/passes/utils/gates_basis.py +1 -2
- qiskit/transpiler/passmanager.py +7 -6
- qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
- qiskit/transpiler/preset_passmanagers/common.py +3 -6
- qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
- qiskit/transpiler/preset_passmanagers/level0.py +1 -1
- qiskit/transpiler/target.py +27 -8
- qiskit/user_config.py +29 -6
- qiskit/utils/classtools.py +3 -3
- qiskit/utils/deprecation.py +3 -2
- qiskit/utils/lazy_tester.py +2 -2
- qiskit/utils/optionals.py +8 -8
- qiskit/visualization/bloch.py +18 -23
- qiskit/visualization/circuit/_utils.py +34 -10
- qiskit/visualization/circuit/circuit_visualization.py +23 -16
- qiskit/visualization/circuit/latex.py +29 -27
- qiskit/visualization/circuit/matplotlib.py +4 -2
- qiskit/visualization/circuit/qcstyle.py +2 -2
- qiskit/visualization/circuit/text.py +9 -15
- qiskit/visualization/dag_visualization.py +2 -2
- qiskit/visualization/pulse_v2/core.py +1 -1
- qiskit/visualization/pulse_v2/events.py +1 -1
- qiskit/visualization/pulse_v2/generators/frame.py +3 -4
- qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
- qiskit/visualization/pulse_v2/layouts.py +1 -5
- qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
- qiskit/visualization/state_visualization.py +5 -6
- qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
- qiskit/visualization/transition_visualization.py +7 -2
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/METADATA +12 -12
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/RECORD +342 -340
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
- qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/WHEEL +0 -0
- {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
qiskit/pulse/schedule.py
CHANGED
@@ -553,17 +553,10 @@ class Schedule:
|
|
553
553
|
self._timeslots[channel].insert(index, interval)
|
554
554
|
except PulseError as ex:
|
555
555
|
raise PulseError(
|
556
|
-
"Schedule(name='{
|
557
|
-
"
|
558
|
-
"{
|
559
|
-
""
|
560
|
-
new=schedule.name or "",
|
561
|
-
old=self.name or "",
|
562
|
-
time=time,
|
563
|
-
ch=channel,
|
564
|
-
t0=interval[0],
|
565
|
-
tf=interval[1],
|
566
|
-
)
|
556
|
+
f"Schedule(name='{schedule.name or ''}') cannot be inserted into "
|
557
|
+
f"Schedule(name='{self.name or ''}') at "
|
558
|
+
f"time {time} because its instruction on channel {channel} scheduled from time "
|
559
|
+
f"{interval[0]} to {interval[1]} overlaps with an existing instruction."
|
567
560
|
) from ex
|
568
561
|
|
569
562
|
_check_nonnegative_timeslot(self._timeslots)
|
@@ -598,10 +591,8 @@ class Schedule:
|
|
598
591
|
continue
|
599
592
|
|
600
593
|
raise PulseError(
|
601
|
-
"Cannot find interval ({
|
602
|
-
"channel {
|
603
|
-
ch=channel, t0=interval[0], tf=interval[1], name=schedule.name
|
604
|
-
)
|
594
|
+
f"Cannot find interval ({interval[0]}, {interval[1]}) to remove from "
|
595
|
+
f"channel {channel} in Schedule(name='{schedule.name}')."
|
605
596
|
)
|
606
597
|
|
607
598
|
if not channel_timeslots:
|
@@ -1615,8 +1606,9 @@ class ScheduleBlock:
|
|
1615
1606
|
blocks = ", ".join([repr(instr) for instr in self.blocks[:50]])
|
1616
1607
|
if len(self.blocks) > 25:
|
1617
1608
|
blocks += ", ..."
|
1618
|
-
return
|
1619
|
-
self.__class__.__name__
|
1609
|
+
return (
|
1610
|
+
f'{self.__class__.__name__}({blocks}, name="{name}",'
|
1611
|
+
f" transform={repr(self.alignment_context)})"
|
1620
1612
|
)
|
1621
1613
|
|
1622
1614
|
def __add__(self, other: "BlockComponent") -> "ScheduleBlock":
|
@@ -398,9 +398,7 @@ class AlignFunc(AlignmentKind):
|
|
398
398
|
_t_center = self.duration * self.func(ind + 1)
|
399
399
|
_t0 = int(_t_center - 0.5 * child.duration)
|
400
400
|
if _t0 < 0 or _t0 > self.duration:
|
401
|
-
raise PulseError(
|
402
|
-
"Invalid schedule position t=%d is specified at index=%d" % (_t0, ind)
|
403
|
-
)
|
401
|
+
raise PulseError(f"Invalid schedule position t={_t0} is specified at index={ind}")
|
404
402
|
aligned.insert(_t0, child, inplace=True)
|
405
403
|
|
406
404
|
return aligned
|
qiskit/pulse/utils.py
CHANGED
@@ -108,10 +108,9 @@ def instruction_duration_validation(duration: int):
|
|
108
108
|
"""
|
109
109
|
if isinstance(duration, ParameterExpression):
|
110
110
|
raise UnassignedDurationError(
|
111
|
-
"Instruction duration {} is not assigned. "
|
111
|
+
f"Instruction duration {repr(duration)} is not assigned. "
|
112
112
|
"Please bind all durations to an integer value before playing in the Schedule, "
|
113
113
|
"or use ScheduleBlock to align instructions with unassigned duration."
|
114
|
-
"".format(repr(duration))
|
115
114
|
)
|
116
115
|
|
117
116
|
if not isinstance(duration, (int, np.integer)) or duration < 0:
|
qiskit/qasm/libs/stdgates.inc
CHANGED
@@ -1,51 +1,58 @@
|
|
1
|
-
// OpenQASM 3 standard gate library
|
1
|
+
// OpenQASM 3.0 standard gate library
|
2
|
+
//
|
3
|
+
// Vendored from the OpenQASM 3.0 project at commit 4ca1d793833b24a1 of
|
4
|
+
// https://github.com/openqasm/openqasm.
|
5
|
+
//
|
6
|
+
// Used under the terms of its Apache-2.0 license.
|
7
|
+
// Copyright 2017-2024 OpenQASM Contributors.
|
8
|
+
|
2
9
|
|
3
10
|
// phase gate
|
4
|
-
gate p(
|
11
|
+
gate p(λ) a { ctrl @ gphase(λ) a; }
|
5
12
|
|
6
13
|
// Pauli gate: bit-flip or NOT gate
|
7
|
-
gate x a { U(
|
14
|
+
gate x a { U(π, 0, π) a; gphase(-π/2);}
|
8
15
|
// Pauli gate: bit and phase flip
|
9
|
-
gate y a { U(
|
10
|
-
// Pauli gate: phase flip
|
11
|
-
gate z a { p(
|
16
|
+
gate y a { U(π, π/2, π/2) a; gphase(-π/2);}
|
17
|
+
// Pauli gate: phase flip
|
18
|
+
gate z a { p(π) a; }
|
12
19
|
|
13
20
|
// Clifford gate: Hadamard
|
14
|
-
gate h a { U(
|
21
|
+
gate h a { U(π/2, 0, π) a; gphase(-π/4);}
|
15
22
|
// Clifford gate: sqrt(Z) or S gate
|
16
|
-
gate s a { pow(
|
23
|
+
gate s a { pow(0.5) @ z a; }
|
17
24
|
// Clifford gate: inverse of sqrt(Z)
|
18
|
-
gate sdg a { inv @ pow(
|
25
|
+
gate sdg a { inv @ pow(0.5) @ z a; }
|
19
26
|
|
20
27
|
// sqrt(S) or T gate
|
21
|
-
gate t a { pow(
|
28
|
+
gate t a { pow(0.5) @ s a; }
|
22
29
|
// inverse of sqrt(S)
|
23
|
-
gate tdg a { inv @ pow(
|
30
|
+
gate tdg a { inv @ pow(0.5) @ s a; }
|
24
31
|
|
25
32
|
// sqrt(NOT) gate
|
26
|
-
gate sx a { pow(
|
33
|
+
gate sx a { pow(0.5) @ x a; }
|
27
34
|
|
28
35
|
// Rotation around X-axis
|
29
|
-
gate rx(
|
36
|
+
gate rx(θ) a { U(θ, -π/2, π/2) a; gphase(-θ/2);}
|
30
37
|
// rotation around Y-axis
|
31
|
-
gate ry(
|
38
|
+
gate ry(θ) a { U(θ, 0, 0) a; gphase(-θ/2);}
|
32
39
|
// rotation around Z axis
|
33
|
-
gate rz(
|
40
|
+
gate rz(λ) a { gphase(-λ/2); U(0, 0, λ) a; }
|
34
41
|
|
35
42
|
// controlled-NOT
|
36
|
-
gate cx
|
43
|
+
gate cx a, b { ctrl @ x a, b; }
|
37
44
|
// controlled-Y
|
38
45
|
gate cy a, b { ctrl @ y a, b; }
|
39
46
|
// controlled-Z
|
40
47
|
gate cz a, b { ctrl @ z a, b; }
|
41
48
|
// controlled-phase
|
42
|
-
gate cp(
|
49
|
+
gate cp(λ) a, b { ctrl @ p(λ) a, b; }
|
43
50
|
// controlled-rx
|
44
|
-
gate crx(
|
51
|
+
gate crx(θ) a, b { ctrl @ rx(θ) a, b; }
|
45
52
|
// controlled-ry
|
46
|
-
gate cry(
|
53
|
+
gate cry(θ) a, b { ctrl @ ry(θ) a, b; }
|
47
54
|
// controlled-rz
|
48
|
-
gate crz(
|
55
|
+
gate crz(θ) a, b { ctrl @ rz(θ) a, b; }
|
49
56
|
// controlled-H
|
50
57
|
gate ch a, b { ctrl @ h a, b; }
|
51
58
|
|
@@ -57,19 +64,19 @@ gate ccx a, b, c { ctrl @ ctrl @ x a, b, c; }
|
|
57
64
|
// controlled-swap
|
58
65
|
gate cswap a, b, c { ctrl @ swap a, b, c; }
|
59
66
|
|
60
|
-
// four parameter controlled-U gate with relative phase
|
61
|
-
gate cu(
|
67
|
+
// four parameter controlled-U gate with relative phase γ
|
68
|
+
gate cu(θ, φ, λ, γ) a, b { p(γ-θ/2) a; ctrl @ U(θ, φ, λ) a, b; }
|
62
69
|
|
63
70
|
// Gates for OpenQASM 2 backwards compatibility
|
64
71
|
// CNOT
|
65
|
-
gate CX
|
72
|
+
gate CX a, b { ctrl @ U(π, 0, π) a, b; }
|
66
73
|
// phase gate
|
67
|
-
gate phase(
|
74
|
+
gate phase(λ) q { U(0, 0, λ) q; }
|
68
75
|
// controlled-phase
|
69
|
-
gate cphase(
|
76
|
+
gate cphase(λ) a, b { ctrl @ phase(λ) a, b; }
|
70
77
|
// identity or idle gate
|
71
78
|
gate id a { U(0, 0, 0) a; }
|
72
79
|
// IBM Quantum experience gates
|
73
|
-
gate u1(
|
74
|
-
gate u2(
|
75
|
-
gate u3(
|
80
|
+
gate u1(λ) q { U(0, 0, λ) q; }
|
81
|
+
gate u2(φ, λ) q { gphase(-(φ+λ+π/2)/2); U(π/2, φ, λ) q; }
|
82
|
+
gate u3(θ, φ, λ) q { gphase(-(φ+λ+θ)/2); U(θ, φ, λ) q; }
|
qiskit/qasm2/__init__.py
CHANGED
@@ -20,7 +20,7 @@ formats <qasm2-parse>` and :ref:`exporting back to OpenQASM 2 <qasm2-export>`.
|
|
20
20
|
|
21
21
|
.. note::
|
22
22
|
|
23
|
-
OpenQASM 2 is a simple language, and not suitable for general
|
23
|
+
OpenQASM 2 is a simple language, and not suitable for general serialization of Qiskit objects.
|
24
24
|
See :ref:`some discussion of alternatives below <qasm2-alternatives>`, if that is what you are
|
25
25
|
looking for.
|
26
26
|
|
@@ -95,7 +95,7 @@ letter-of-the-spec mode with ``strict=True``.
|
|
95
95
|
Exporting API
|
96
96
|
=============
|
97
97
|
|
98
|
-
Similar to other
|
98
|
+
Similar to other serialization modules in Python, this module offers two public functions:
|
99
99
|
:func:`dump` and :func:`dumps`, which take a :class:`.QuantumCircuit` and write out a representative
|
100
100
|
OpenQASM 2 program to a file-like object or return a string, respectively.
|
101
101
|
|
@@ -394,7 +394,7 @@ Legacy Compatibility
|
|
394
394
|
|
395
395
|
:meth:`.QuantumCircuit.from_qasm_str` and :meth:`~.QuantumCircuit.from_qasm_file` used to make a few
|
396
396
|
additions on top of the raw specification. Qiskit originally tried to use OpenQASM 2 as a sort of
|
397
|
-
|
397
|
+
serialization format, and expanded its behavior as Qiskit expanded. The new parser under all its
|
398
398
|
defaults implements the specification more strictly.
|
399
399
|
|
400
400
|
In particular, in the legacy importers:
|
@@ -445,11 +445,11 @@ In particular, in the legacy importers:
|
|
445
445
|
* the parsed grammar is effectively the same as :ref:`the strict mode of the new importers
|
446
446
|
<qasm2-strict-mode>`.
|
447
447
|
|
448
|
-
You can emulate this
|
448
|
+
You can emulate this behavior in :func:`load` and :func:`loads` by setting `include_path`
|
449
449
|
appropriately (try inspecting the variable ``qiskit.__file__`` to find the installed location), and
|
450
450
|
by passing a list of :class:`CustomInstruction` instances for each of the custom gates you care
|
451
451
|
about. To make things easier we make three tuples available, which each contain one component of
|
452
|
-
a configuration that is equivalent to Qiskit's legacy converter
|
452
|
+
a configuration that is equivalent to Qiskit's legacy converter behavior.
|
453
453
|
|
454
454
|
.. py:data:: LEGACY_CUSTOM_INSTRUCTIONS
|
455
455
|
|
@@ -473,7 +473,7 @@ On *all* the gates defined in Qiskit's legacy version of ``qelib1.inc`` and the
|
|
473
473
|
instruction, it does not matter how the gates are actually defined and used, the legacy importer
|
474
474
|
will always attempt to output its custom objects for them. This can result in errors during the
|
475
475
|
circuit construction, even after a successful parse. There is no way to emulate this buggy
|
476
|
-
|
476
|
+
behavior with :mod:`qiskit.qasm2`; only an ``include "qelib1.inc";`` statement or the
|
477
477
|
`custom_instructions` argument can cause built-in Qiskit instructions to be used, and the signatures
|
478
478
|
of these match each other.
|
479
479
|
|
@@ -549,7 +549,7 @@ LEGACY_INCLUDE_PATH = (
|
|
549
549
|
|
550
550
|
|
551
551
|
def _normalize_path(path: Union[str, os.PathLike]) -> str:
|
552
|
-
"""
|
552
|
+
"""Normalize a given path into a path-like object that can be passed to Rust.
|
553
553
|
|
554
554
|
Ideally this would be something that we can convert to Rust's `OSString`, but in practice,
|
555
555
|
Python uses `os.fsencode` to produce a `bytes` object, but this doesn't map especially well.
|
qiskit/qasm2/export.py
CHANGED
@@ -157,7 +157,7 @@ def dumps(circuit: QuantumCircuit, /) -> str:
|
|
157
157
|
_make_unique(_escape_name(reg.name, "reg_"), register_escaped_names)
|
158
158
|
] = reg
|
159
159
|
bit_labels: dict[Qubit | Clbit, str] = {
|
160
|
-
bit: "
|
160
|
+
bit: f"{name}[{idx}]"
|
161
161
|
for name, register in register_escaped_names.items()
|
162
162
|
for (idx, bit) in enumerate(register)
|
163
163
|
}
|
@@ -244,18 +244,14 @@ def _instruction_call_site(operation):
|
|
244
244
|
else:
|
245
245
|
qasm2_call = operation.name
|
246
246
|
if operation.params:
|
247
|
-
|
248
|
-
|
249
|
-
",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params]),
|
250
|
-
)
|
247
|
+
params = ",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params])
|
248
|
+
qasm2_call = f"{qasm2_call}({params})"
|
251
249
|
if operation.condition is not None:
|
252
250
|
if not isinstance(operation.condition[0], ClassicalRegister):
|
253
251
|
raise QASM2ExportError(
|
254
252
|
"OpenQASM 2 can only condition on registers, but got '{operation.condition[0]}'"
|
255
253
|
)
|
256
|
-
qasm2_call = (
|
257
|
-
"if(%s==%d) " % (operation.condition[0].name, operation.condition[1]) + qasm2_call
|
258
|
-
)
|
254
|
+
qasm2_call = f"if({operation.condition[0].name}=={operation.condition[1]:d}) " + qasm2_call
|
259
255
|
return qasm2_call
|
260
256
|
|
261
257
|
|
@@ -312,7 +308,7 @@ def _define_custom_operation(operation, gates_to_define):
|
|
312
308
|
lib.U3Gate,
|
313
309
|
}
|
314
310
|
|
315
|
-
# In known-good situations we want to use a manually
|
311
|
+
# In known-good situations we want to use a manually parametrized object as the source of the
|
316
312
|
# definition, but still continue to return the given object as the call-site object.
|
317
313
|
if operation.base_class in known_good_parameterized:
|
318
314
|
parameterized_operation = type(operation)(*_FIXED_PARAMETERS[: len(operation.params)])
|
qiskit/qasm2/parse.py
CHANGED
@@ -287,7 +287,7 @@ def from_bytecode(bytecode, custom_instructions: Iterable[CustomInstruction]):
|
|
287
287
|
|
288
288
|
class _DefinedGate(Gate):
|
289
289
|
"""A gate object defined by a `gate` statement in an OpenQASM 2 program. This object lazily
|
290
|
-
binds its parameters to its definition, so it is only
|
290
|
+
binds its parameters to its definition, so it is only synthesized when required."""
|
291
291
|
|
292
292
|
def __init__(self, name, num_qubits, params, gates, bytecode):
|
293
293
|
self._gates = gates
|
qiskit/qasm3/ast.py
CHANGED
@@ -317,7 +317,7 @@ class Designator(ASTNode):
|
|
317
317
|
|
318
318
|
|
319
319
|
class ClassicalDeclaration(Statement):
|
320
|
-
"""Declaration of a classical type, optionally
|
320
|
+
"""Declaration of a classical type, optionally initializing it to a value."""
|
321
321
|
|
322
322
|
def __init__(self, type_: ClassicalType, identifier: Identifier, initializer=None):
|
323
323
|
self.type = type_
|
@@ -456,39 +456,23 @@ class SubroutineBlock(ProgramBlock):
|
|
456
456
|
pass
|
457
457
|
|
458
458
|
|
459
|
-
class
|
460
|
-
"""
|
461
|
-
quantumArgument
|
462
|
-
: 'qreg' Identifier designator? | 'qubit' designator? Identifier
|
463
|
-
"""
|
464
|
-
|
465
|
-
|
466
|
-
class QuantumGateSignature(ASTNode):
|
459
|
+
class QuantumGateDefinition(Statement):
|
467
460
|
"""
|
468
|
-
|
469
|
-
:
|
461
|
+
quantumGateDefinition
|
462
|
+
: 'gate' quantumGateSignature quantumBlock
|
470
463
|
"""
|
471
464
|
|
472
465
|
def __init__(
|
473
466
|
self,
|
474
467
|
name: Identifier,
|
475
|
-
|
476
|
-
|
468
|
+
params: Tuple[Identifier, ...],
|
469
|
+
qubits: Tuple[Identifier, ...],
|
470
|
+
body: QuantumBlock,
|
477
471
|
):
|
478
472
|
self.name = name
|
479
|
-
self.qargList = qargList
|
480
473
|
self.params = params
|
481
|
-
|
482
|
-
|
483
|
-
class QuantumGateDefinition(Statement):
|
484
|
-
"""
|
485
|
-
quantumGateDefinition
|
486
|
-
: 'gate' quantumGateSignature quantumBlock
|
487
|
-
"""
|
488
|
-
|
489
|
-
def __init__(self, quantumGateSignature: QuantumGateSignature, quantumBlock: QuantumBlock):
|
490
|
-
self.quantumGateSignature = quantumGateSignature
|
491
|
-
self.quantumBlock = quantumBlock
|
474
|
+
self.qubits = qubits
|
475
|
+
self.body = body
|
492
476
|
|
493
477
|
|
494
478
|
class SubroutineDefinition(Statement):
|