def ex631():
	n = 2**8
	rule = 110
	ratio = 2
	ca = CA(rule, n, ratio = ratio)
	#m = ratio * n / 2
	#start = 1
	#end = start + 100
	#for i in range(start, end, 3):
	#	ca.array[0, i] = 0
	#	ca.array[0, i+1] = 1
	#	ca.array[0, i+2] = 0
	#ca.next += 1
	ca.start_random()
	ca.loop(n-1)
	return ca
def ex632():
	n = 2**8
	rule = 110
	ratio = 2
	ca = CA(rule, n, ratio = ratio)
	#ca.start_random()
	m = ratio * n / 2
	ca.array[0, m-1] = 1
	ca.array[0, m] = 1
	for i in range(20):
		ca.array[0, m+i] = 1
	ca.start_single()
	ca.loop(n-1)
	return ca
def fractal_dim(ca_rule, t = 100, plot = True):
	""" plot box counting dimension and return estimated dimension"""
	ca = CA(ca_rule, t)
	ca.start_single()
	Ns = [1]
	drawer = PyplotDrawer()
	for i in range(t-1):
		ca.step()
		Ns.append(sum(ca.array[ca.next-1]))
	Ns = np.cumsum(Ns)
	one_over_eps = range(1, ca.n + 1)
	dim, _ = np.polyfit(np.log(one_over_eps), np.log(Ns), 1)
	if (plot):
		pyplot.plot(one_over_eps, Ns)
		scale = 'log'
		pyplot.xscale(scale)
		pyplot.yscale(scale)
		pyplot.title('')
		pyplot.xlabel('1/eps')
		pyplot.ylabel('N(eps)')
		pyplot.show()
		drawer.draw(ca)
		drawer.show()
	return dim