Quantum Circuit Visualization
YaoPlots is the Quantum circuit visualization component for Yao.
Examples
Example 1: Visualize a QBIR define in Yao
using Yao.EasyBuild, YaoPlots
# show a qft circuit
vizcircuit(qft_circuit(5))If you are using a Pluto/Jupyter notebook, Atom/VSCode editor, you should see the above image in your plotting panel.
Example 2: Visualize a single qubit
using YaoPlots, Yao
reg = zero_state(1) |> Rx(π/8) |> Rx(π/8)
rho = density_matrix(ghz_state(2), 1)
bloch_sphere("|ψ⟩"=>reg, "ρ"=>rho; show_projection_lines=true)See more examples.
Adjusting the plot attributes
Various attributes of the visualizations can be altered. The plot can be modified, if we change the following attributes
YaoPlots.CircuitStyles.linecolor[]for line color, default value being"#000000"(black color)YaoPlots.CircuitStyles.gate_bgcolor[]for background color of square blocks, the default value being"#FFFFFF"(white color)YaoPlots.CircuitStyles.textcolor[]for text color, default value being"#000000YaoPlots.CircuitStyles.lw[]for line width, default value being1(pt)YaoPlots.CircuitStyles.textsize[]for text size, default value being16(pt)YaoPlots.CircuitStyles.paramtextsize[]for parameter text size, for parameterized gates, default value being10(pt)
For example,
using YaoPlots, Yao
YaoPlots.CircuitStyles.linecolor[] = "pink"
YaoPlots.CircuitStyles.gate_bgcolor[] = "yellow"
YaoPlots.CircuitStyles.textcolor[] = "#000080" # the navy blue color
YaoPlots.CircuitStyles.fontfamily[] = "JuliaMono"
YaoPlots.CircuitStyles.lw[] = 2.5
YaoPlots.CircuitStyles.textsize[] = 13
YaoPlots.CircuitStyles.paramtextsize[] = 8
vizcircuit(chain(3, put(1=>X), repeat(3, H), put(2=>Y), repeat(3, Rx(π/2))))Circuit Visualization
YaoPlots.vizcircuit — Functionvizcircuit(circuit; w_depth=0.85, w_line=0.75, format=:svg, filename=nothing,
show_ending_bar=false, starting_texts=nothing, starting_offset=-0.3,
ending_texts=nothing, ending_offset=0.3, padding=10)Visualize a Yao quantum circuit.
Keyword Arguments
w_depthis the circuit column width.w_lineis the circuit row width.formatcan be:svg,:pngor:pdf.filenamecan be"*.svg","*.png","*.pdf"or nothing (not saving to a file).starting_textsandending_textsare texts shown before and after the circuit.starting_offsetandend_offsetare offsets (real values) for starting and ending texts.show_ending_baris a boolean switch to show ending bar.paddingis the padding between the circuit and the canvas, in pixels.
Styles
To change the gates styles like colors and lines, please modify the constants in submodule CircuitStyles. They are defined as:
- CircuitStyles.unit = Ref(60) # number of points in a unit
- CircuitStyles.r = Ref(0.2) # size of nodes
- CircuitStyles.lw = Ref(1.0) # line width
- CircuitStyles.textsize = Ref(16.0) # text size
- CircuitStyles.paramtextsize = Ref(10.0) # text size (longer texts)
- CircuitStyles.fontfamily = Ref("JuliaMono") # font family
- CircuitStyles.linecolor = Ref("#000000") # line color
- CircuitStyles.gate_bgcolor = Ref("transparent") # gate background color
- CircuitStyles.textcolor = Ref("#000000") # text color
YaoPlots.plot — FunctionAn alias of vizcircuit
Bloch Sphere Visualization
YaoPlots.CircuitStyles — ModuleCircuitStylesA module to define the styles of the circuit visualization. To change the styles, please modify the variables in this module, e.g.
julia> using YaoPlots
julia> YaoPlots.CircuitStyles.unit[] = 40
40Style variables
Sizes
unitis the number of pixels in a unit.ris the size of nodes.lwis the line width.
Texts
textsizeis the text size.paramtextsizeis the text size for longer texts.fontfamilyis the font family.
Colors
linecoloris the line color.gate_bgcoloris the gate background color.textcoloris the text color.
YaoPlots.bloch_sphere — Functionbloch_sphere(
states...;
textsize,
color,
drawing_size,
offset_x,
offset_y,
filename,
format,
fontfamily,
background_color,
lw,
eye_point,
extra_kwargs...
) -> Luxor.Drawing
Draw a bloch sphere, with the inputs being a list of string => state pairs, where the string is a label for the state and a state can be a complex vector of size 2, a Yao register or DensityMatrix. If you want to get a raw drawing, use draw_bloch_sphere instead.
Keyword Arguments
Note: The default values can be specified in submodule BlochStyles.
textsize: the size of the textcolor: the color of the drawingdrawing_size: the size of the drawingoffset_x: the offset of the drawing in x directionoffset_y: the offset of the drawing in y directionfilename: the filename of the output file, if not specified, a temporary file will be usedformat: the format of the output file, if not specified, the format will be inferred from the filenamefontfamily: the font family of the textbackground_color: the background color of the drawinglw: the line width of the drawingeye_point: the eye point of the drawingextra_kwargs: extra keyword arguments passed todraw_bloch_spheredot_size: the size of the dotball_size: the size of the ballshow_projection_lines: whether to show the projection linesshow_angle_texts: whether to show the angle textsshow_line: whether to show the lineshow01: whether to show the 0 and 1 statescolors: the colors of the statesaxes_lw: the line width of the axesaxes_textsize: the size of the axes textsaxes_colors: the colors of the axesaxes_texts: the texts of the axes
Examples
julia> using YaoPlots, YaoArrayRegister
julia> bloch_sphere("|ψ⟩"=>rand_state(1), "ρ"=>density_matrix(rand_state(2), 1));YaoPlots.BlochStyles — ModuleBlochStylesThe module to define the default styles for bloch sphere drawing. To change the default styles, you can modify the values in this module, e.g.
using YaoPlots
YaoPlots.BlochStyles.lw[] = 2.0Style variables
Generic
lw: the line width of the drawingtextsize: the size of the textfontfamily: the font family of the textbackground_color: the background color of the drawingcolor: the color of the drawing
Sphere
ball_size: the size of the balldot_size: the size of the doteye_point: the eye point of the drawing
Axis
axes_lw: the line width of the axesaxes_colors: the colors of the axesaxes_texts: the texts of the axes, default to["x", "y", "z"]
State display
show_projection_lines: whether to show the projection linesshow_angle_texts: whether to show the angle textsshow_line: whether to show the lineshow01: whether to show the 0 and 1 states
Themes
YaoPlots.darktheme! — Functiondarktheme!()Change the default theme to dark.
YaoPlots.lighttheme! — Functionlighttheme!()Change the default theme to light.