qiskit 1.0.2__cp38-abi3-win32.whl → 1.1.0__cp38-abi3-win32.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 -16
- qiskit/_accelerate.pyd +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/__init__.py +5 -10
- qiskit/assembler/disassemble.py +5 -6
- qiskit/circuit/__init__.py +1061 -232
- qiskit/circuit/_classical_resource_map.py +10 -6
- qiskit/circuit/_utils.py +18 -8
- qiskit/circuit/annotated_operation.py +21 -0
- qiskit/circuit/barrier.py +10 -13
- qiskit/circuit/bit.py +0 -1
- qiskit/circuit/classical/__init__.py +2 -2
- qiskit/circuit/classical/expr/__init__.py +39 -5
- qiskit/circuit/classical/expr/constructors.py +84 -1
- qiskit/circuit/classical/expr/expr.py +83 -13
- qiskit/circuit/classical/expr/visitors.py +83 -0
- qiskit/circuit/classical/types/__init__.py +5 -4
- qiskit/circuit/classicalfunction/__init__.py +1 -0
- qiskit/circuit/commutation_checker.py +86 -51
- qiskit/circuit/controlflow/_builder_utils.py +9 -1
- qiskit/circuit/controlflow/break_loop.py +8 -22
- qiskit/circuit/controlflow/builder.py +116 -1
- qiskit/circuit/controlflow/continue_loop.py +8 -22
- qiskit/circuit/controlflow/control_flow.py +47 -8
- qiskit/circuit/controlflow/for_loop.py +8 -23
- qiskit/circuit/controlflow/if_else.py +13 -27
- qiskit/circuit/controlflow/switch_case.py +14 -21
- qiskit/circuit/controlflow/while_loop.py +9 -23
- qiskit/circuit/controlledgate.py +2 -2
- qiskit/circuit/delay.py +7 -5
- qiskit/circuit/gate.py +20 -7
- qiskit/circuit/instruction.py +31 -30
- qiskit/circuit/instructionset.py +9 -22
- qiskit/circuit/library/__init__.py +3 -13
- qiskit/circuit/library/arithmetic/integer_comparator.py +2 -2
- qiskit/circuit/library/arithmetic/quadratic_form.py +3 -2
- qiskit/circuit/library/blueprintcircuit.py +29 -7
- qiskit/circuit/library/data_preparation/state_preparation.py +6 -5
- qiskit/circuit/library/generalized_gates/diagonal.py +5 -4
- qiskit/circuit/library/generalized_gates/isometry.py +51 -254
- qiskit/circuit/library/generalized_gates/pauli.py +2 -2
- qiskit/circuit/library/generalized_gates/permutation.py +4 -1
- qiskit/circuit/library/generalized_gates/rv.py +15 -11
- qiskit/circuit/library/generalized_gates/uc.py +2 -98
- qiskit/circuit/library/generalized_gates/unitary.py +9 -4
- qiskit/circuit/library/hamiltonian_gate.py +11 -5
- qiskit/circuit/library/n_local/efficient_su2.py +5 -5
- qiskit/circuit/library/n_local/n_local.py +100 -49
- qiskit/circuit/library/n_local/two_local.py +3 -59
- qiskit/circuit/library/overlap.py +3 -3
- qiskit/circuit/library/phase_oracle.py +1 -1
- qiskit/circuit/library/quantum_volume.py +39 -38
- qiskit/circuit/library/standard_gates/equivalence_library.py +50 -0
- qiskit/circuit/library/standard_gates/global_phase.py +4 -2
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +1 -2
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +11 -5
- qiskit/circuit/library/standard_gates/p.py +31 -15
- qiskit/circuit/library/standard_gates/r.py +4 -3
- qiskit/circuit/library/standard_gates/rx.py +7 -4
- qiskit/circuit/library/standard_gates/rxx.py +4 -3
- qiskit/circuit/library/standard_gates/ry.py +7 -4
- qiskit/circuit/library/standard_gates/ryy.py +4 -3
- qiskit/circuit/library/standard_gates/rz.py +7 -4
- qiskit/circuit/library/standard_gates/rzx.py +4 -3
- qiskit/circuit/library/standard_gates/rzz.py +4 -3
- qiskit/circuit/library/standard_gates/s.py +4 -8
- qiskit/circuit/library/standard_gates/t.py +2 -4
- qiskit/circuit/library/standard_gates/u.py +16 -11
- qiskit/circuit/library/standard_gates/u1.py +6 -2
- qiskit/circuit/library/standard_gates/u2.py +4 -2
- qiskit/circuit/library/standard_gates/u3.py +9 -5
- qiskit/circuit/library/standard_gates/x.py +22 -11
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +4 -3
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +7 -5
- qiskit/circuit/library/standard_gates/z.py +1 -2
- qiskit/circuit/measure.py +4 -1
- qiskit/circuit/operation.py +13 -8
- qiskit/circuit/parameter.py +11 -6
- qiskit/circuit/quantumcircuit.py +1910 -260
- qiskit/circuit/quantumcircuitdata.py +2 -2
- qiskit/circuit/reset.py +5 -2
- qiskit/circuit/store.py +95 -0
- qiskit/compiler/assembler.py +22 -22
- qiskit/compiler/transpiler.py +63 -112
- qiskit/converters/__init__.py +17 -2
- qiskit/converters/circuit_to_dag.py +7 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +2 -0
- qiskit/converters/circuit_to_instruction.py +22 -0
- qiskit/converters/dag_to_circuit.py +4 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +15 -10
- qiskit/dagcircuit/dagcircuit.py +434 -124
- qiskit/dagcircuit/dagdependency.py +19 -12
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +19 -16
- qiskit/dagcircuit/dagnode.py +14 -4
- qiskit/passmanager/passmanager.py +11 -11
- qiskit/primitives/__init__.py +22 -12
- qiskit/primitives/backend_estimator.py +3 -5
- qiskit/primitives/backend_estimator_v2.py +410 -0
- qiskit/primitives/backend_sampler_v2.py +287 -0
- qiskit/primitives/base/base_estimator.py +4 -9
- qiskit/primitives/base/base_sampler.py +2 -2
- qiskit/primitives/containers/__init__.py +6 -4
- qiskit/primitives/containers/bit_array.py +293 -2
- qiskit/primitives/containers/data_bin.py +123 -50
- qiskit/primitives/containers/estimator_pub.py +10 -3
- qiskit/primitives/containers/observables_array.py +2 -2
- qiskit/primitives/containers/pub_result.py +1 -1
- qiskit/primitives/containers/sampler_pub.py +19 -3
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +4 -4
- qiskit/primitives/statevector_estimator.py +4 -4
- qiskit/primitives/statevector_sampler.py +7 -12
- qiskit/providers/__init__.py +65 -34
- qiskit/providers/backend.py +2 -2
- qiskit/providers/backend_compat.py +8 -10
- qiskit/providers/basic_provider/__init__.py +2 -23
- qiskit/providers/basic_provider/basic_provider_tools.py +67 -31
- qiskit/providers/basic_provider/basic_simulator.py +81 -21
- qiskit/providers/fake_provider/__init__.py +1 -1
- qiskit/providers/fake_provider/fake_1q.py +1 -1
- qiskit/providers/fake_provider/fake_backend.py +3 -408
- qiskit/providers/fake_provider/generic_backend_v2.py +26 -14
- qiskit/providers/models/__init__.py +2 -2
- qiskit/providers/provider.py +16 -0
- qiskit/pulse/builder.py +4 -1
- qiskit/pulse/parameter_manager.py +60 -4
- qiskit/pulse/schedule.py +29 -13
- qiskit/pulse/utils.py +61 -20
- qiskit/qasm2/__init__.py +1 -5
- qiskit/qasm2/parse.py +1 -4
- qiskit/qasm3/__init__.py +42 -5
- qiskit/qasm3/ast.py +19 -0
- qiskit/qasm3/exporter.py +178 -106
- qiskit/qasm3/printer.py +27 -5
- qiskit/qobj/converters/pulse_instruction.py +6 -6
- qiskit/qpy/__init__.py +299 -67
- qiskit/qpy/binary_io/circuits.py +216 -47
- qiskit/qpy/binary_io/schedules.py +42 -36
- qiskit/qpy/binary_io/value.py +201 -22
- qiskit/qpy/common.py +1 -1
- qiskit/qpy/exceptions.py +20 -0
- qiskit/qpy/formats.py +29 -0
- qiskit/qpy/type_keys.py +21 -0
- qiskit/quantum_info/analysis/distance.py +3 -3
- qiskit/quantum_info/analysis/make_observable.py +2 -1
- qiskit/quantum_info/analysis/z2_symmetries.py +2 -1
- qiskit/quantum_info/operators/channel/chi.py +9 -8
- qiskit/quantum_info/operators/channel/choi.py +10 -9
- qiskit/quantum_info/operators/channel/kraus.py +2 -1
- qiskit/quantum_info/operators/channel/ptm.py +10 -9
- qiskit/quantum_info/operators/channel/quantum_channel.py +2 -1
- qiskit/quantum_info/operators/channel/stinespring.py +2 -1
- qiskit/quantum_info/operators/channel/superop.py +12 -11
- qiskit/quantum_info/operators/channel/transformations.py +12 -11
- qiskit/quantum_info/operators/dihedral/dihedral.py +5 -4
- qiskit/quantum_info/operators/operator.py +43 -30
- qiskit/quantum_info/operators/scalar_op.py +10 -9
- qiskit/quantum_info/operators/symplectic/base_pauli.py +70 -59
- qiskit/quantum_info/operators/symplectic/clifford.py +36 -9
- qiskit/quantum_info/operators/symplectic/pauli.py +53 -6
- qiskit/quantum_info/operators/symplectic/pauli_list.py +36 -14
- qiskit/quantum_info/operators/symplectic/random.py +3 -2
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +61 -36
- qiskit/quantum_info/states/densitymatrix.py +13 -13
- qiskit/quantum_info/states/stabilizerstate.py +3 -3
- qiskit/quantum_info/states/statevector.py +14 -13
- qiskit/quantum_info/states/utils.py +5 -3
- qiskit/result/__init__.py +6 -0
- qiskit/result/mitigation/correlated_readout_mitigator.py +3 -2
- qiskit/result/mitigation/local_readout_mitigator.py +2 -1
- qiskit/result/mitigation/utils.py +3 -2
- qiskit/scheduler/__init__.py +10 -1
- qiskit/scheduler/methods/__init__.py +1 -8
- qiskit/synthesis/__init__.py +3 -6
- qiskit/synthesis/discrete_basis/commutator_decompose.py +2 -2
- qiskit/synthesis/evolution/lie_trotter.py +7 -14
- qiskit/synthesis/evolution/qdrift.py +3 -4
- qiskit/synthesis/linear/cnot_synth.py +1 -3
- qiskit/synthesis/linear/linear_circuits_utils.py +1 -1
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +4 -18
- qiskit/synthesis/permutation/__init__.py +1 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +90 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +2 -6
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +165 -954
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +13 -12
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +7 -1
- qiskit/synthesis/unitary/aqc/__init__.py +1 -1
- qiskit/synthesis/unitary/aqc/cnot_structures.py +2 -1
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +2 -1
- qiskit/synthesis/unitary/qsd.py +3 -2
- qiskit/transpiler/__init__.py +7 -3
- qiskit/transpiler/layout.py +140 -61
- qiskit/transpiler/passes/__init__.py +10 -2
- qiskit/transpiler/passes/basis/basis_translator.py +9 -4
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/rzx_builder.py +2 -1
- qiskit/transpiler/passes/layout/apply_layout.py +8 -3
- qiskit/transpiler/passes/layout/sabre_layout.py +15 -3
- qiskit/transpiler/passes/layout/set_layout.py +1 -1
- qiskit/transpiler/passes/optimization/__init__.py +2 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -1
- qiskit/transpiler/passes/optimization/cx_cancellation.py +10 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +9 -3
- qiskit/transpiler/passes/optimization/optimize_annotated.py +248 -12
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +1 -3
- qiskit/transpiler/passes/routing/__init__.py +1 -0
- qiskit/transpiler/passes/routing/basic_swap.py +13 -2
- qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +8 -1
- qiskit/transpiler/passes/routing/lookahead_swap.py +7 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +10 -6
- qiskit/transpiler/passes/routing/star_prerouting.py +417 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +24 -8
- qiskit/transpiler/passes/scheduling/__init__.py +1 -1
- qiskit/transpiler/passes/scheduling/alap.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +9 -6
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +8 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +13 -4
- qiskit/transpiler/passes/scheduling/asap.py +1 -2
- qiskit/transpiler/passes/scheduling/base_scheduler.py +21 -2
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +26 -4
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +24 -2
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +28 -4
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +2 -2
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +120 -13
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +162 -55
- qiskit/transpiler/passes/utils/gates_basis.py +3 -3
- qiskit/transpiler/passmanager.py +44 -1
- qiskit/transpiler/preset_passmanagers/__init__.py +3 -3
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +34 -16
- qiskit/transpiler/preset_passmanagers/common.py +4 -6
- qiskit/transpiler/preset_passmanagers/plugin.py +9 -1
- qiskit/utils/__init__.py +3 -2
- qiskit/utils/optionals.py +6 -2
- qiskit/utils/parallel.py +24 -15
- qiskit/visualization/array.py +1 -1
- qiskit/visualization/bloch.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +44 -14
- qiskit/visualization/circuit/text.py +38 -18
- qiskit/visualization/counts_visualization.py +3 -6
- qiskit/visualization/dag_visualization.py +6 -7
- qiskit/visualization/gate_map.py +9 -1
- qiskit/visualization/pulse_v2/interface.py +8 -3
- qiskit/visualization/state_visualization.py +3 -2
- qiskit/visualization/timeline/interface.py +18 -8
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/METADATA +12 -8
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/RECORD +261 -251
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/WHEEL +1 -1
- qiskit/_qasm2.pyd +0 -0
- qiskit/_qasm3.pyd +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/entry_points.txt +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0.dist-info}/top_level.txt +0 -0
qiskit/pulse/schedule.py
CHANGED
@@ -39,11 +39,12 @@ import multiprocessing as mp
|
|
39
39
|
import sys
|
40
40
|
import warnings
|
41
41
|
from collections.abc import Callable, Iterable
|
42
|
-
from typing import List, Tuple, Union, Dict, Any
|
42
|
+
from typing import List, Tuple, Union, Dict, Any, Sequence
|
43
43
|
|
44
44
|
import numpy as np
|
45
45
|
import rustworkx as rx
|
46
46
|
|
47
|
+
from qiskit.circuit import ParameterVector
|
47
48
|
from qiskit.circuit.parameter import Parameter
|
48
49
|
from qiskit.circuit.parameterexpression import ParameterExpression, ParameterValueType
|
49
50
|
from qiskit.pulse.channels import Channel
|
@@ -52,6 +53,7 @@ from qiskit.pulse.instructions import Instruction, Reference
|
|
52
53
|
from qiskit.pulse.utils import instruction_duration_validation
|
53
54
|
from qiskit.pulse.reference_manager import ReferenceManager
|
54
55
|
from qiskit.utils.multiprocessing import is_main_process
|
56
|
+
from qiskit.utils import deprecate_arg
|
55
57
|
|
56
58
|
|
57
59
|
Interval = Tuple[int, int]
|
@@ -711,13 +713,19 @@ class Schedule:
|
|
711
713
|
return self._parameter_manager.is_parameterized()
|
712
714
|
|
713
715
|
def assign_parameters(
|
714
|
-
self,
|
716
|
+
self,
|
717
|
+
value_dict: dict[
|
718
|
+
ParameterExpression | ParameterVector | str,
|
719
|
+
ParameterValueType | Sequence[ParameterValueType],
|
720
|
+
],
|
721
|
+
inplace: bool = True,
|
715
722
|
) -> "Schedule":
|
716
723
|
"""Assign the parameters in this schedule according to the input.
|
717
724
|
|
718
725
|
Args:
|
719
|
-
value_dict: A mapping from
|
720
|
-
|
726
|
+
value_dict: A mapping from parameters or parameter names (parameter vector
|
727
|
+
or parameter vector name) to either numeric values (list of numeric values)
|
728
|
+
or another parameter expression (list of parameter expressions).
|
721
729
|
inplace: Set ``True`` to override this instance with new parameter.
|
722
730
|
|
723
731
|
Returns:
|
@@ -1408,14 +1416,18 @@ class ScheduleBlock:
|
|
1408
1416
|
|
1409
1417
|
def assign_parameters(
|
1410
1418
|
self,
|
1411
|
-
value_dict: dict[
|
1419
|
+
value_dict: dict[
|
1420
|
+
ParameterExpression | ParameterVector | str,
|
1421
|
+
ParameterValueType | Sequence[ParameterValueType],
|
1422
|
+
],
|
1412
1423
|
inplace: bool = True,
|
1413
1424
|
) -> "ScheduleBlock":
|
1414
1425
|
"""Assign the parameters in this schedule according to the input.
|
1415
1426
|
|
1416
1427
|
Args:
|
1417
|
-
value_dict: A mapping from
|
1418
|
-
|
1428
|
+
value_dict: A mapping from parameters or parameter names (parameter vector
|
1429
|
+
or parameter vector name) to either numeric values (list of numeric values)
|
1430
|
+
or another parameter expression (list of parameter expressions).
|
1419
1431
|
inplace: Set ``True`` to override this instance with new parameter.
|
1420
1432
|
|
1421
1433
|
Returns:
|
@@ -1634,6 +1646,7 @@ def _common_method(*classes):
|
|
1634
1646
|
return decorator
|
1635
1647
|
|
1636
1648
|
|
1649
|
+
@deprecate_arg("show_barriers", new_alias="plot_barriers", since="1.1.0", pending=True)
|
1637
1650
|
@_common_method(Schedule, ScheduleBlock)
|
1638
1651
|
def draw(
|
1639
1652
|
self,
|
@@ -1645,9 +1658,10 @@ def draw(
|
|
1645
1658
|
show_snapshot: bool = True,
|
1646
1659
|
show_framechange: bool = True,
|
1647
1660
|
show_waveform_info: bool = True,
|
1648
|
-
|
1661
|
+
plot_barrier: bool = True,
|
1649
1662
|
plotter: str = "mpl2d",
|
1650
1663
|
axis: Any | None = None,
|
1664
|
+
show_barrier: bool = True,
|
1651
1665
|
):
|
1652
1666
|
"""Plot the schedule.
|
1653
1667
|
|
@@ -1659,16 +1673,16 @@ def draw(
|
|
1659
1673
|
preset stylesheets.
|
1660
1674
|
backend (Optional[BaseBackend]): Backend object to play the input pulse program.
|
1661
1675
|
If provided, the plotter may use to make the visualization hardware aware.
|
1662
|
-
time_range: Set horizontal axis limit. Tuple
|
1663
|
-
time_unit: The unit of specified time range either
|
1664
|
-
The unit of `ns` is available only when
|
1676
|
+
time_range: Set horizontal axis limit. Tuple ``(tmin, tmax)``.
|
1677
|
+
time_unit: The unit of specified time range either ``dt`` or ``ns``.
|
1678
|
+
The unit of `ns` is available only when ``backend`` object is provided.
|
1665
1679
|
disable_channels: A control property to show specific pulse channel.
|
1666
1680
|
Pulse channel instances provided as a list are not shown in the output image.
|
1667
1681
|
show_snapshot: Show snapshot instructions.
|
1668
1682
|
show_framechange: Show frame change instructions. The frame change represents
|
1669
1683
|
instructions that modulate phase or frequency of pulse channels.
|
1670
1684
|
show_waveform_info: Show additional information about waveforms such as their name.
|
1671
|
-
|
1685
|
+
plot_barrier: Show barrier lines.
|
1672
1686
|
plotter: Name of plotter API to generate an output image.
|
1673
1687
|
One of following APIs should be specified::
|
1674
1688
|
|
@@ -1681,6 +1695,7 @@ def draw(
|
|
1681
1695
|
the plotters use a given ``axis`` instead of internally initializing
|
1682
1696
|
a figure object. This object format depends on the plotter.
|
1683
1697
|
See plotter argument for details.
|
1698
|
+
show_barrier: DEPRECATED. Show barrier lines.
|
1684
1699
|
|
1685
1700
|
Returns:
|
1686
1701
|
Visualization output data.
|
@@ -1690,6 +1705,7 @@ def draw(
|
|
1690
1705
|
# pylint: disable=cyclic-import
|
1691
1706
|
from qiskit.visualization import pulse_drawer
|
1692
1707
|
|
1708
|
+
del show_barrier
|
1693
1709
|
return pulse_drawer(
|
1694
1710
|
program=self,
|
1695
1711
|
style=style,
|
@@ -1700,7 +1716,7 @@ def draw(
|
|
1700
1716
|
show_snapshot=show_snapshot,
|
1701
1717
|
show_framechange=show_framechange,
|
1702
1718
|
show_waveform_info=show_waveform_info,
|
1703
|
-
|
1719
|
+
plot_barrier=plot_barrier,
|
1704
1720
|
plotter=plotter,
|
1705
1721
|
axis=axis,
|
1706
1722
|
)
|
qiskit/pulse/utils.py
CHANGED
@@ -11,13 +11,14 @@
|
|
11
11
|
# that they have been altered from the originals.
|
12
12
|
|
13
13
|
"""Module for common pulse programming utilities."""
|
14
|
-
from typing import List, Dict, Union
|
14
|
+
from typing import List, Dict, Union, Sequence
|
15
15
|
import warnings
|
16
16
|
|
17
17
|
import numpy as np
|
18
18
|
|
19
|
+
from qiskit.circuit import ParameterVector, Parameter
|
19
20
|
from qiskit.circuit.parameterexpression import ParameterExpression
|
20
|
-
from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError
|
21
|
+
from qiskit.pulse.exceptions import UnassignedDurationError, QiskitError, PulseError
|
21
22
|
|
22
23
|
|
23
24
|
def format_meas_map(meas_map: List[List[int]]) -> Dict[int, List[int]]:
|
@@ -52,17 +53,29 @@ def format_parameter_value(
|
|
52
53
|
Returns:
|
53
54
|
Value casted to non-parameter data type, when possible.
|
54
55
|
"""
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
56
|
+
if isinstance(operand, ParameterExpression):
|
57
|
+
try:
|
58
|
+
operand = operand.numeric()
|
59
|
+
except TypeError:
|
60
|
+
# Unassigned expression
|
61
|
+
return operand
|
62
|
+
|
63
|
+
# Return integer before calling the numpy round function.
|
64
|
+
# The input value is multiplied by 10**decimals, rounds to an integer
|
65
|
+
# and divided by 10**decimals. For a large enough integer,
|
66
|
+
# this operation may introduce a rounding error in the float operations
|
67
|
+
# and accidentally returns a float number.
|
68
|
+
if isinstance(operand, int):
|
69
|
+
return operand
|
70
|
+
|
71
|
+
# Remove truncation error and convert the result into Python builtin type.
|
72
|
+
# Value could originally contain a rounding error, e.g. 1.00000000001
|
73
|
+
# which may occur during the parameter expression evaluation.
|
74
|
+
evaluated = np.round(operand, decimals=decimal).item()
|
75
|
+
|
76
|
+
if isinstance(evaluated, complex):
|
77
|
+
if np.isclose(evaluated.imag, 0.0):
|
78
|
+
evaluated = evaluated.real
|
66
79
|
else:
|
67
80
|
warnings.warn(
|
68
81
|
"Assignment of complex values to ParameterExpression in Qiskit Pulse objects is "
|
@@ -76,13 +89,11 @@ def format_parameter_value(
|
|
76
89
|
"converted in a similar fashion to avoid the use of complex parameters.",
|
77
90
|
PendingDeprecationWarning,
|
78
91
|
)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
return operand
|
92
|
+
return evaluated
|
93
|
+
# Type cast integer-like float into Python builtin integer, after rounding.
|
94
|
+
if evaluated.is_integer():
|
95
|
+
return int(evaluated)
|
96
|
+
return evaluated
|
86
97
|
|
87
98
|
|
88
99
|
def instruction_duration_validation(duration: int):
|
@@ -107,3 +118,33 @@ def instruction_duration_validation(duration: int):
|
|
107
118
|
raise QiskitError(
|
108
119
|
f"Instruction duration must be a non-negative integer, got {duration} instead."
|
109
120
|
)
|
121
|
+
|
122
|
+
|
123
|
+
def _validate_parameter_vector(parameter: ParameterVector, value):
|
124
|
+
"""Validate parameter vector and its value."""
|
125
|
+
if not isinstance(value, Sequence):
|
126
|
+
raise PulseError(
|
127
|
+
f"Parameter vector '{parameter.name}' has length {len(parameter)},"
|
128
|
+
f" but was assigned to {value}."
|
129
|
+
)
|
130
|
+
if len(parameter) != len(value):
|
131
|
+
raise PulseError(
|
132
|
+
f"Parameter vector '{parameter.name}' has length {len(parameter)},"
|
133
|
+
f" but was assigned to {len(value)} values."
|
134
|
+
)
|
135
|
+
|
136
|
+
|
137
|
+
def _validate_single_parameter(parameter: Parameter, value):
|
138
|
+
"""Validate single parameter and its value."""
|
139
|
+
if not isinstance(value, (int, float, complex, ParameterExpression)):
|
140
|
+
raise PulseError(f"Parameter '{parameter.name}' is not assignable to {value}.")
|
141
|
+
|
142
|
+
|
143
|
+
def _validate_parameter_value(parameter, value):
|
144
|
+
"""Validate parameter and its value."""
|
145
|
+
if isinstance(parameter, ParameterVector):
|
146
|
+
_validate_parameter_vector(parameter, value)
|
147
|
+
return True
|
148
|
+
else:
|
149
|
+
_validate_single_parameter(parameter, value)
|
150
|
+
return False
|
qiskit/qasm2/__init__.py
CHANGED
@@ -526,12 +526,8 @@ import os
|
|
526
526
|
from pathlib import Path
|
527
527
|
from typing import Iterable, Union, Optional, Literal
|
528
528
|
|
529
|
-
# Pylint can't handle the C-extension introspection of `_qasm2` because there's a re-import through
|
530
|
-
# to `qiskit.qasm2.exceptions`, and pylint ends up trying to import `_qasm2` twice, which PyO3
|
531
|
-
# hates. If that gets fixed, this disable can be removed and `qiskit._qasm2` added to the allowed C
|
532
|
-
# extensions for loadings in the `pyproject.toml`.
|
533
529
|
# pylint: disable=c-extension-no-member
|
534
|
-
from qiskit import _qasm2
|
530
|
+
from qiskit._accelerate import qasm2 as _qasm2
|
535
531
|
from qiskit.circuit import QuantumCircuit
|
536
532
|
from . import parse as _parse
|
537
533
|
from .exceptions import QASM2Error, QASM2ParseError, QASM2ExportError
|
qiskit/qasm2/parse.py
CHANGED
@@ -30,10 +30,7 @@ from qiskit.circuit import (
|
|
30
30
|
Reset,
|
31
31
|
library as lib,
|
32
32
|
)
|
33
|
-
|
34
|
-
# This is the same C-extension problems as described in the `__init__.py` disable near the
|
35
|
-
# `_qasm2` import.
|
36
|
-
from qiskit._qasm2 import ( # pylint: disable=no-name-in-module
|
33
|
+
from qiskit._accelerate.qasm2 import (
|
37
34
|
OpCode,
|
38
35
|
UnaryOpCode,
|
39
36
|
BinaryOpCode,
|
qiskit/qasm3/__init__.py
CHANGED
@@ -105,14 +105,14 @@ respectively loading a program indirectly from a named file and directly from a
|
|
105
105
|
.. note::
|
106
106
|
|
107
107
|
While we are still in the exploratory release period, to use either function, the package
|
108
|
-
``qiskit_qasm3_import`` must be installed. This can be done by installing Qiskit
|
108
|
+
``qiskit_qasm3_import`` must be installed. This can be done by installing Qiskit with the
|
109
109
|
``qasm3-import`` extra, such as by:
|
110
110
|
|
111
111
|
.. code-block:: text
|
112
112
|
|
113
|
-
pip install qiskit
|
113
|
+
pip install qiskit[qasm3-import]
|
114
114
|
|
115
|
-
We expect that this functionality will eventually be merged into
|
115
|
+
We expect that this functionality will eventually be merged into Qiskit, and no longer
|
116
116
|
require an optional import, but we do not yet have a timeline for this.
|
117
117
|
|
118
118
|
.. autofunction:: load
|
@@ -223,14 +223,51 @@ available on this module, if you wish to build on top of it:
|
|
223
223
|
import functools
|
224
224
|
import warnings
|
225
225
|
|
226
|
-
from qiskit import _qasm3
|
226
|
+
from qiskit._accelerate import qasm3 as _qasm3
|
227
|
+
from qiskit.circuit import library
|
227
228
|
from qiskit.exceptions import ExperimentalWarning
|
228
229
|
from qiskit.utils import optionals as _optionals
|
229
230
|
|
230
231
|
from .experimental import ExperimentalFeatures
|
231
232
|
from .exporter import Exporter
|
232
233
|
from .exceptions import QASM3Error, QASM3ImporterError, QASM3ExporterError
|
233
|
-
from ..
|
234
|
+
from .._accelerate.qasm3 import CustomGate
|
235
|
+
|
236
|
+
|
237
|
+
STDGATES_INC_GATES = (
|
238
|
+
CustomGate(library.PhaseGate, "p", 1, 1),
|
239
|
+
CustomGate(library.XGate, "x", 0, 1),
|
240
|
+
CustomGate(library.YGate, "y", 0, 1),
|
241
|
+
CustomGate(library.ZGate, "z", 0, 1),
|
242
|
+
CustomGate(library.HGate, "h", 0, 1),
|
243
|
+
CustomGate(library.SGate, "s", 0, 1),
|
244
|
+
CustomGate(library.SdgGate, "sdg", 0, 1),
|
245
|
+
CustomGate(library.TGate, "t", 0, 1),
|
246
|
+
CustomGate(library.TdgGate, "tdg", 0, 1),
|
247
|
+
CustomGate(library.SXGate, "sx", 0, 1),
|
248
|
+
CustomGate(library.RXGate, "rx", 1, 1),
|
249
|
+
CustomGate(library.RYGate, "ry", 1, 1),
|
250
|
+
CustomGate(library.RZGate, "rz", 1, 1),
|
251
|
+
CustomGate(library.CXGate, "cx", 0, 2),
|
252
|
+
CustomGate(library.CYGate, "cy", 0, 2),
|
253
|
+
CustomGate(library.CZGate, "cz", 0, 2),
|
254
|
+
CustomGate(library.CPhaseGate, "cp", 1, 2),
|
255
|
+
CustomGate(library.CRXGate, "crx", 1, 2),
|
256
|
+
CustomGate(library.CRYGate, "cry", 1, 2),
|
257
|
+
CustomGate(library.CRZGate, "crz", 1, 2),
|
258
|
+
CustomGate(library.CHGate, "ch", 0, 2),
|
259
|
+
CustomGate(library.SwapGate, "swap", 0, 2),
|
260
|
+
CustomGate(library.CCXGate, "ccx", 0, 3),
|
261
|
+
CustomGate(library.CSwapGate, "cswap", 0, 3),
|
262
|
+
CustomGate(library.CUGate, "cu", 4, 2),
|
263
|
+
CustomGate(library.CXGate, "CX", 0, 2),
|
264
|
+
CustomGate(library.PhaseGate, "phase", 1, 1),
|
265
|
+
CustomGate(library.CPhaseGate, "cphase", 1, 2),
|
266
|
+
CustomGate(library.IGate, "id", 0, 1),
|
267
|
+
CustomGate(library.U1Gate, "u1", 1, 1),
|
268
|
+
CustomGate(library.U2Gate, "u2", 2, 1),
|
269
|
+
CustomGate(library.U3Gate, "u3", 3, 1),
|
270
|
+
)
|
234
271
|
|
235
272
|
|
236
273
|
def dumps(circuit, **kwargs) -> str:
|
qiskit/qasm3/ast.py
CHANGED
@@ -123,6 +123,10 @@ class FloatType(ClassicalType, enum.Enum):
|
|
123
123
|
OCT = 256
|
124
124
|
|
125
125
|
|
126
|
+
class BoolType(ClassicalType):
|
127
|
+
"""Type information for a Boolean."""
|
128
|
+
|
129
|
+
|
126
130
|
class IntType(ClassicalType):
|
127
131
|
"""Type information for a signed integer."""
|
128
132
|
|
@@ -130,6 +134,13 @@ class IntType(ClassicalType):
|
|
130
134
|
self.size = size
|
131
135
|
|
132
136
|
|
137
|
+
class UintType(ClassicalType):
|
138
|
+
"""Type information for an unsigned integer."""
|
139
|
+
|
140
|
+
def __init__(self, size: Optional[int] = None):
|
141
|
+
self.size = size
|
142
|
+
|
143
|
+
|
133
144
|
class BitType(ClassicalType):
|
134
145
|
"""Type information for a single bit."""
|
135
146
|
|
@@ -241,6 +252,8 @@ class Binary(Expression):
|
|
241
252
|
GREATER_EQUAL = ">="
|
242
253
|
EQUAL = "=="
|
243
254
|
NOT_EQUAL = "!="
|
255
|
+
SHIFT_LEFT = "<<"
|
256
|
+
SHIFT_RIGHT = ">>"
|
244
257
|
|
245
258
|
def __init__(self, op: Op, left: Expression, right: Expression):
|
246
259
|
self.op = op
|
@@ -254,6 +267,12 @@ class Cast(Expression):
|
|
254
267
|
self.operand = operand
|
255
268
|
|
256
269
|
|
270
|
+
class Index(Expression):
|
271
|
+
def __init__(self, target: Expression, index: Expression):
|
272
|
+
self.target = target
|
273
|
+
self.index = index
|
274
|
+
|
275
|
+
|
257
276
|
class IndexSet(ASTNode):
|
258
277
|
"""
|
259
278
|
A literal index set of values::
|