#!/usr/bin/python3
import numpy as np
import matplotlib.pyplot as plt
import copy as cp

def binary (b, u=31, l=-32, length=6):
    s=0
    for i in np.arange(1,length+1) :
        s+=b[length-i]*2**(i-1)
    return l+(u-l)/(2**length-1)*s

def f1 (x):
    return x**2

def matchScheme (scheme):
    ind=[]
    ind.append([])
    if(scheme[0]==0) or (scheme[0]==1):
        ind[0]=[scheme[i]]
        c=1
    else:
        ind[0]=[0]
        ind.append([1])
        c=2
    for i in np.arange(1,len(scheme)):
        if (scheme[i] == 0) or (scheme[i] == 1):
            for j in np.arange(0,c):
                ind[j].append(scheme[i])
        else :
            ind2=cp.deepcopy(ind)
            for j in np.arange(0,c):
                ind.append(ind2[j])
            for j in np.arange(0,c):
                ind[j].append(0)
            for j in np.arange(c,2*c):
                ind[j].append(1)
            c=2*c
    return ind

x=np.arange(-32,32)
plt.scatter(x,f1(x), label='x^2')
#plt.grid(True)

H3=['*',1,1,'*','*','*']
H3scheme=list(map(binary,matchScheme(H3)))
H4=['*','*','*',0,0,'*']
H4scheme=list(map(binary,matchScheme(H4)))

plt.vlines(H3scheme,list([0]*len(H3scheme)), list(map(f1,H3scheme)), linestyles='dashed', label='H3')
plt.vlines(H4scheme,list([0]*len(H4scheme)), list(map(f1,H4scheme)), linestyles='dotted', label='H4')
plt.legend(bbox_to_anchor=(0.6,0.8))

plt.show()
