import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
from matplotlib.pyplot import cm
#graphical parameters
############################################################################### 
plt.style.use('ggplot')
rc('font',**{'family':'serif','serif':['Computer Modern Roman'],
     'size' : '12'})
rc('text', usetex=True)
rc('lines', linewidth=2)
plt.rcParams['axes.facecolor']='w'
###############################################################################

np.random.seed(42)

N=10
color=iter(cm.tab20b(np.linspace(0,1,N+1))) # for plotting

y0=np.zeros(1)
y1=np.random.standard_normal(1)
Y_old=np.concatenate([y0,y1])
plt.plot(Y_old)
#stats the construction
for i in range(1,N):
     t=np.linspace(0,1,2**i+1) #discretizes time 
     Y=np.zeros(len(t))
     Y[::2]=Y_old
     for j in range(len(t)-1):
         if np.mod(j+1,2)==0:
             #interpolates
             Y[j]=0.5*(Y[j-1]+Y[j+1])+np.sqrt(2**(-i-2))*np.random.standard_normal(1)
     Y_old=Y
     #for the plotting color
     c=next(color)
     plt.plot(t,Y,c=c)
         
plt.title(r'L\'evy-Ciesielski construction with $N='+str(N-1)+'$ refinements')     


#some plotting parameters 
leg=['$N=0$']
for i in range(N):
    ln='$N='+str(i+1)+'$'
    leg.append(ln) 
plt.legend(leg,fancybox=True, framealpha=0.0,
               loc='upper center', bbox_to_anchor=(0.5, -0.05), shadow=False, ncol=5)
plt.show()
