Commit 01da0d2d authored by Robert Sokolewicz's avatar Robert Sokolewicz
Browse files

Merge branch 'vis-refactor' into 'main'

Unify calling functions for pulse and circuit diagram plots

See merge request !599
parents 36a9f73d 3f831a7e
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@

- Acquisition - `InstrumentCoordinator.retrieve_acquisition` returns an `xarray.Dataset` (!550, #362)
- Qblox backend - Set the `marker_ovr_en` QCoDeS parameter by default to `False` before schedule execution, so that the markers are always controlled using the `MarkerConfiguration` (!576)
- Visualization - Deprecate `visualization` module and its functions `circuit_diagram_matplotlib`, `pulse_diagram_matplotlib`, and `pulse_diagram_plotly`. Create `_visualization` submodule within `schedules`. Make plots via `ScheduleBase` methods (!599). Move visualization tests to `schedules` directory, and make tests for `ScheduleBase` plotting methods

### Merged branches and closed issue

+1 −2
Original line number Diff line number Diff line
@@ -155,7 +155,6 @@ The schedule defined at the beginning of this tutorial consists of 2 pulse opera

from quantify_scheduler.backends.graph_compilation import SerialCompiler
from quantify_scheduler.device_under_test.quantum_device import QuantumDevice
from quantify_scheduler.visualization.pulse_diagram import pulse_diagram_plotly

quantum_device = QuantumDevice("DUT")

@@ -165,7 +164,7 @@ compiled_sched = compiler.compile(
    schedule=sched, config=quantum_device.generate_compilation_config()
)

pulse_diagram_plotly(compiled_sched)
compiled_sched.plot_pulse_diagram(plot_backend='plotly')


```
+4 −5
Original line number Diff line number Diff line
@@ -69,10 +69,9 @@ Note that these plots are interactive and modulation is not shown by default.
```{code-cell} ipython3

from quantify_scheduler import compilation
from quantify_scheduler.visualization.pulse_diagram import pulse_diagram_plotly

compilation.determine_absolute_timing(sched)
pulse_diagram_plotly(sched)
sched.plot_pulse_diagram(plot_backend='plotly')


```
@@ -90,7 +89,7 @@ sched.add(
)

compilation.determine_absolute_timing(sched)
pulse_diagram_plotly(sched)
sched.plot_pulse_diagram(plot_backend='plotly')


```
@@ -111,7 +110,7 @@ sched.add(
sched.add_resource(ClockResource(name="q0.01", freq=7e9))

compilation.determine_absolute_timing(sched)
pulse_diagram_plotly(sched)
sched.plot_pulse_diagram(plot_backend='plotly')


```
@@ -158,7 +157,7 @@ def pulse_train_schedule(

sched = pulse_train_schedule(1, 200e-9, 300e-9, 5)
compilation.determine_absolute_timing(sched)
pulse_diagram_plotly(sched)
sched.plot_pulse_diagram(plot_backend='plotly')


```
+5 −8
Original line number Diff line number Diff line
@@ -79,11 +79,8 @@ sched = bell_schedule(

```{code-cell} ipython3

# import the circuit visualizer
from quantify_scheduler.visualization.circuit_diagram import circuit_diagram_matplotlib

# visualize the circuit
f, ax = circuit_diagram_matplotlib(sched)
f, ax = sched.plot_circuit_diagram()

```

@@ -152,15 +149,15 @@ Valid qubits are strings that appear in the {ref}`device configuration file<sec-

#### Visualization

A {class}`.Schedule` containing operations can be visualized using as a circuit diagram using {func}`~quantify_scheduler.visualization.circuit_diagram.circuit_diagram_matplotlib`.
A {class}`.Schedule` containing operations can be visualized using a circuit diagram by calling its method {meth}`.plot_circuit_diagram`.

Alternatively, one can plot the waveforms in schedules using {func}`~quantify_scheduler.visualization.pulse_diagram.pulse_diagram_matplotlib`:
Alternatively, one can plot the waveforms in schedules using {meth}`.plot_pulse_diagram` (the default plotting backend is `matplotlib`, but it is possible 
to use `plotly` by adding the argument {code}`plot_backend='plotly'`):

```{code-cell} ipython3

from quantify_scheduler.operations.pulse_library import SquarePulse, RampPulse
from quantify_scheduler.compilation import determine_absolute_timing
from quantify_scheduler.visualization.pulse_diagram import pulse_diagram_matplotlib

schedule = Schedule("waveforms")
schedule.add(SquarePulse(amp=0.2, duration=4e-6, port="P"))
@@ -168,7 +165,7 @@ schedule.add(RampPulse(amp=-0.1, offset=.2, duration=6e-6, port="P"))
schedule.add(SquarePulse(amp=0.1, duration=4e-6, port="Q"), ref_pt='start')
determine_absolute_timing(schedule)

_ = pulse_diagram_matplotlib(schedule, sampling_rate=20e6)
_ = schedule.plot_pulse_diagram(sampling_rate=20e6)

```

+13 −5
Original line number Diff line number Diff line
@@ -62,7 +62,9 @@ class Rxy(Operation):
        phi = phi % 360
        if data is None:
            tex = r"$R_{xy}^{" + f"{theta:.0f}, {phi:.0f}" + r"}$"
            plot_func = "quantify_scheduler.visualization.circuit_diagram.gate_box"
            plot_func = (
                "quantify_scheduler.schedules._visualization.circuit_diagram.gate_box"
            )
            theta_r = np.deg2rad(theta)
            phi_r = np.deg2rad(phi)

@@ -362,7 +364,9 @@ class CNOT(Operation):
            dictionary after initialization.
        """
        if data is None:
            plot_func = "quantify_scheduler.visualization.circuit_diagram.cnot"
            plot_func = (
                "quantify_scheduler.schedules._visualization.circuit_diagram.cnot"
            )
            super().__init__(f"CNOT ({qC}, {qT})")
            self.data.update(
                {
@@ -438,7 +442,7 @@ class CZ(Operation):
            dictionary after initialization.
        """
        if data is None:
            plot_func = "quantify_scheduler.visualization.circuit_diagram.cz"
            plot_func = "quantify_scheduler.schedules._visualization.circuit_diagram.cz"
            super().__init__(f"CZ ({qC}, {qT})")
            self.data.update(
                {
@@ -520,7 +524,9 @@ class Reset(Operation):
        """
        if data is None:
            super().__init__(f"Reset {', '.join(qubits)}")
            plot_func = "quantify_scheduler.visualization.circuit_diagram.reset"
            plot_func = (
                "quantify_scheduler.schedules._visualization.circuit_diagram.reset"
            )
            self.data.update(
                {
                    "name": f"Reset {', '.join(qubits)}",
@@ -641,7 +647,9 @@ class Measure(Operation):
                    FutureWarning,
                )
        if data is None:
            plot_func = "quantify_scheduler.visualization.circuit_diagram.meter"
            plot_func = (
                "quantify_scheduler.schedules._visualization.circuit_diagram.meter"
            )
            super().__init__(f"Measure {', '.join(qubits)}")
            self.data.update(
                {
Loading