Visualization tools for the qubit Bloch sphere
Project description
Qubit Bloch Sphere Visualization
A collection of visualization tools for the qubit Bloch sphere. The Bloch sphere is a useful representation of the state of a single-qubit quantum computer.
Install
bloch_sphere is available on PyPI:
python3 -m pip install bloch_sphere
Prerequisites
Cairo needs to be installed separately to render videos. See platform-specific instructions for Linux, Windows, and macOS from Cairo. Below are some examples for installing Cairo on Linux distributions and macOS.
Ubuntu
sudo apt-get install libcairo2
macOS
Using homebrew:
brew install cairo
Usage
This package provides a command line tool to generate animations.
In your shell, run the following (run animate_bloch -h
for help).
animate_bloch hadamard x y s s
animate_bloch2 xy_vs_z x,y z
Code Examples
Visualize a single Bloch sphere
from bloch_sphere.animate_bloch import do_or_save_animation, AnimState
@do_or_save_animation('my_animation', save=False, fps=20, preview=True)
# Or
#@do_or_save_animation('my_animation', save='gif', fps=20, preview=True)
#@do_or_save_animation('my_animation', save='mp4', fps=20, preview=False)
def animate(state: AnimState):
state.x_gate()
state.y_gate()
state.s_gate()
state.s_gate()
...
state.wait() # Pause at the end
Compare two sequences of gates
from bloch_sphere.animate_bloch_compare import main
main('hzh_x', 'h,z,h'.split(','), 'x'.split(','),
r'& \gate{H} & \gate{Z} & \gate{H} & \qw & \push{=} & & \gate{X} & \qw',
r'$HZH\ket{\psi}=X\ket{\psi}$',
mp4=False,
fps=20,
preview=True,
)
Or
import drawSvg as draw
import latextools
from bloch_sphere.animate_bloch_compare import render_animation
# Add some extra labels
zero_ket = draw.Group()
zero_ket.draw(latextools.render_snippet('$\ket{0}$', latextools.pkg.qcircuit),
x=0, y=0, center=True, scale=0.015)
one_ket = draw.Group()
one_ket.draw(latextools.render_snippet('$\ket{1}$', latextools.pkg.qcircuit),
x=0, y=0, center=True, scale=0.015)
zero_ket_inner = draw.Use(zero_ket, 0, 0, transform='scale(0.75)')
one_ket_inner = draw.Use(one_ket, 0, 0, transform='scale(0.75)')
w = 624*2 # Output width
fps = 20
draw_args = dict(
w = w/2,
outer_labels=[
[(0, 0, 1), (-0.15, 0.13), zero_ket],
[(0, 0, -1), (0.15, -0.13), one_ket],
],
inner_labels=[
[(0, 0, 0.8), (0, 0), zero_ket_inner],
[(0, 0, -0.8), (0, 0), one_ket_inner],
],
)
gates1 = 'h,z,h'.split(',')
gates2 = 'x'.split(',')
def func1(state):
state.draw_args = dict(draw_args)
state.draw_args['inner_labels'] = []
state.sphere_fade_in()
state.apply_gate_list(gates1, final_wait=False)
state.wait()
for _ in gates2:
state.i_gate()
state.wait()
state.wait()
state.sphere_fade_out()
state.wait()
def func2(state):
state.draw_args = dict(draw_args)
state.draw_args['inner_labels'] = []
state.sphere_fade_in()
for _ in gates1:
state.i_gate()
state.wait()
state.apply_gate_list(gates2, final_wait=False)
state.wait()
state.wait()
state.sphere_fade_out()
state.wait()
render_animation('hzh_x_compare', func1, func2,
r'& \gate{H} & \gate{Z} & \gate{H} & \qw & \push{=} & & \gate{X} & \qw',
r'$HZH\ket{\psi}=X\ket{\psi}$',
save='gif', # False, 'gif', or 'mp4'
fps=fps,
preview=True,
w=w)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for bloch_sphere-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b7e4427ba56e70c1bec186431773f12c890806981d0d9a4528a71e7b167ffe4 |
|
MD5 | 1380e0c754f59ef7105985ba4b114656 |
|
BLAKE2b-256 | 5e15b871347a3a05358b51f932c5c3e0bbe5ee22f2e4da4dbeb172ca6c399440 |