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)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.
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.