qctrlvisualizer.plot_wigner_function(wigner_function, position, momentum, contour_count=100, *, figure=None)

Create a contour plot of the specified Wigner function.

  • wigner_function (np.ndarray) – The Wigner function values. Only the real part of this array will be plotted. Must be a 2D array of shape (L, K).

  • position (np.ndarray) – The dimensionless position vector. Must be a strictly increasing 1D array of length L.

  • momentum (np.ndarray) – The dimensionless momentum vector. Must be a strictly increasing 1D array of length K.

  • contour_count (int, optional) – The number of contour lines, the larger the value the finer the contour plot will be. Defaults to 100.

  • figure (matplotlib.figure.Figure, optional) – A matplotlib Figure in which to place the plots. If passed, its dimensions and axes will be overridden.


Plot the Wigner function associated to state \((|0 \rangle + |5 \rangle) / \sqrt{2}\).

import numpy as np
from qctrl import Qctrl
from qctrlvisualizer import plot_wigner_function

qctrl = Qctrl()

position = np.linspace(-5, 5, 100)
momentum = np.linspace(-5, 5, 100)

graph = qctrl.create_graph()

state = (graph.fock_state(10, 0) + graph.fock_state(10, 5)) / np.sqrt(2)
density_matrix = graph.outer_product(state, state)

wigner_transform = graph.wigner_transform(
    density_matrix, position, momentum, name="wigner_transform"

wigner_function = qctrl.functions.calculate_graph(
    graph=graph, output_node_names=["wigner_transform"]

plot_wigner_function(wigner_function, position, momentum)