
import numpy
import random
import math

class Atomes:
    def __init__(self,N):
        self.N = N
        self.etat = numpy.zeros(N)
        self.E = 0
                
    def temperature(self,T):
        self.T = T
        if T==0:
            self.A = 0.0
        else:
            self.A = math.exp(-1.0/T)
                
    def metropolis(self):
        i = random.randint(0,self.N-1)
        if self.etat[i] == 0:
            dE = 1
        else:
            if random.randint(1,2)==1:
                dE = -1
            else:
                dE = 1
        if dE<=0:
            self.etat[i] += dE
            self.E = self.E+dE
        else:
            x = random.random()
            if x<self.A:
                self.etat[i] += dE
                self.E = self.E+dE
                
    def boucle(self,n):
        en = numpy.zeros(n)
        for k in range(n):
            en[k] = self.E
            self.metropolis()
        return (en,numpy.mean(en),numpy.std(en))
                 