#!/usr/bin/env pyscript
# $Id: div_con.py,v 1.3 2006/02/14 14:23:09 paultcochrane Exp $
"""
Example usage of the qi (quantum information) library. Output is of a
divide-and-conquer scheme of quantum gates.
"""
# import relevant pyscript libraries
from pyscript import *
from pyscript.lib.qi import *
# assemble one set of quantum gates and wires together
g1 = Assemble(
Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5,
Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 2.5,
Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5,
wires=[QWire, QWire, QWire],
)
# assemble another set of quantum gates
g21 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5,
wires=[QWire, QWire, QWire],
)
g22 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 2.5,
wires=[QWire, QWire, QWire],
)
g23 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5,
wires=[QWire, QWire, QWire],
)
# and assemble a third set of quantum gates together
g31 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5,
wires=[QWire, QWire],
)
g32 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 1.5,
wires=[QWire, QWire],
)
g33 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5,
wires=[QWire, QWire],
)
# define some TeX objects for later reuse
m1 = TeX(r'\Large $\le$')
m2 = TeX(r'\Large $+$')
m3 = TeX(r'\Large $+$')
m4 = TeX(r'\Large $=$')
m5 = TeX(r'\Large $+$')
m6 = TeX(r'\Large $+$')
# align all the gate and TeX objects
Align(g1, m1, m2, m3, m4, m5, m6, g31, g32, g33,
a1="e", a2="w", angle=90)
# distribute the objects equally along a line
divnconk = Distribute(
g1,
m1,
g21, m2, g22,
m3, g23,
m4,
g31, m5, g32, m6, g33,
a1="e", a2="w", p1=P(0,0), p2=P(15,0),
)
# define some labels
t1 = TeX(r'\Large (by chaining)', n=P(g22.s.x, divnconk.s.y-.2))
t2 = TeX(r'\Large (by stability)', n=P(g32.s.x, divnconk.s.y-.2))
# append the labels to the object for the diagram
divnconk.append(t1,t2).scale(.7)
# render the diagram
render(
# object to render
divnconk,
# output file name
file="div_con.eps"
)
# vim: expandtab shiftwidth=4:
|