#!/usr/bin/env pyscript
# $Id: tutorial.py,v 1.5 2006/02/14 14:23:09 paultcochrane Exp $
"""
A tutorial script showing how to create a quantum circuit.
"""
# import the relevant pyscript libraries
from pyscript import *
from pyscript.lib.quantumcircuits import *
# set the default units for the diagam
defaults.units=UNITS['cm']
# set up some handy LaTeX macros
defaults.tex_head=r"""
\documentclass{article}
\pagestyle{empty}
\usepackage{amsmath}
\newcommand{\ket}[1]{\mbox{$|#1\rangle$}}
\newcommand{\bra}[1]{\mbox{$\langle #1|$}}
\newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}}
\newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}}
\newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}}
\newcommand{\R}[3]{%
\renewcommand{\arraystretch}{.5}
$\begin{array}{@{}c@{}}{#1}\\{#2}\end{array}{#3}$
\renewcommand{\arraystretch}{1}
}
\begin{document}
"""
# define some colours
blue = Color(.65, .65, 1)
green = Color(.65, 1, .65)
# define a Bell detector function
def BellDet(c=P(0,0)):
H = P(0,.8)
W = P(.5,0)
D = Group(Path(c+H,
C(c+H+W,c+H+W),
c+W,
C(c-H+W,c-H+W),
c-H, bg=blue,
))
return Group(
Path(c-H, c+H, linewidth=2),
D,
TeX(r'$\mathcal{B}$', c=D.c)
)
# a box showing what part of the circuit happens "offline"
offline = Rectangle(height=4, width=5.5, e=P(3.5,1.5),
dash='[3 ] 0', bg=Color(.85))
render(
# the offline background box and label
offline,
TeX('offline', nw=offline.nw+P(.1,-.1)),
# the quantum path in the offline part
Path(P(5,0), P(-.3,0), P(-.6,.5), P(-.3,1), P(2,1)),
Path(P(2,2), P(-.3,2), P(-.6,2.5), P(-.3,3), P(3.7,3)),
Path(P(-1,4), P(3.7,4)),
# two dots
Dot(P(-.6,.5)),
Dot(P(-.6,2.5)),
# the classical path
classicalpath(Path(P(2.1,1.5), P(4.5,1.5), P(4.5,0)),
Path(P(3,1.5), P(3,0)),
Path(P(3.8,3.5), P(4.5,3.5), P(4.5,1.5)),
),
# Bell detectors
BellDet(P(2,1.5)),
BellDet(P(3.7,3.5)),
# displacement operation
Boxed(TeX(r'$D\left(\frac{i\theta}{2\alpha^2}\right)$'),
c=P(1,2), bg=green),
# Pauli operators
Boxed(TeX('$X$'), c=P(3,0), bg=green),
Boxed(TeX('$Z$'), c=P(4.5,0), bg=green),
# input quantum states
TeX(r'$\ket{B_{00}}$', e=P(-.7,.5)),
TeX(r'$\ket{B_{00}}$', e=P(-.7,2.5)),
TeX(r'$\ket{Q}$', e=P(-1.1,4)),
# output file name
file="tutorial.eps",
)
# vim: expandtab shiftwidth=4:
|