from numpy import *
import matplotlib.pyplot
from numpy.linalg import *

vecSize=2**12
vec=zeros([vecSize,1])
vec[4]=1
vec[29]=1

c0=(1+sqrt(3))/(4*sqrt(2));
c1=(3+sqrt(3))/(4*sqrt(2));
c2=(3-sqrt(3))/(4*sqrt(2));
c3=(1-sqrt(3))/(4*sqrt(2));

for i in range(11):
    splitSize=(2**(i+2))
    splitVec=zeros([splitSize,splitSize])
    for j in range(int(splitSize/2)):
        splitVec[j,2*j]=1
    for k in range(int(splitSize/2)):
        splitVec[k+splitSize/2,2*k+1]=1
        
    Csize=splitSize
    Circ=zeros([Csize,Csize])
    Circ[Csize-2,0]=c2
    Circ[Csize-2,1]=c3
    Circ[Csize-1,0]=c1
    Circ[Csize-1,1]=-c0
    Circ[Csize-2,Csize-2]=c0
    Circ[Csize-2,Csize-1]=c1
    Circ[Csize-1,Csize-2]=c3
    Circ[Csize-1,Csize-1]=-c2
    
    for l in range(0,Csize-2,2):
        Circ[l,l]=c0
        Circ[l,l+1]=c1
        Circ[l,l+2]=c2
        Circ[l,l+3]=c3
        Circ[l+1,l]=c3
        Circ[l+1,l+1]=-c2
        Circ[l+1,l+1]=c1
        Circ[l+1,l+1]=-c0
        
    Circ=Circ.transpose()
    vec[:splitSize]=dot(inv(splitVec),vec[:splitSize])
    vec[:Csize]=dot(Circ,vec[:Csize])
    
    
t=arange(0,vecSize)
fig=matplotlib.pyplot.figure()
inf=fig.add_subplot(111)
inf.plot(t,vec)

matplotlib.pyplot.show()
