예제 #1
0
    def test_load_circuit(self):
        create_tmp_file()
        circ = Circuit()
        circ.load(path="tmp.circ")

        self.assertEqual(len(circ.nodes), 2)
        self.assertEqual(len(circ.components), 2)
예제 #2
0
    def test_single_node(self):
        circ = Circuit()
        circ.add_node(Node("ground-node", True))

        results = circ.ac_sweep({"frequency": 1e3})

        self.assertEqual(0, results["ground-node"])
예제 #3
0
def two_node_circuit():
    circ = Circuit()
    n0 = Node("N0", True)
    n1 = Node("N1")
    circ.add_node(n0)
    circ.add_node(n1)

    return circ, n0, n1
예제 #4
0
    def __lin2(self, circuito, d1, d2, d3):
        
        equation = [[[0 for i in range(len(d1))], [0 for i in range(len(d1))], [0]]
                    for i in range(len(d1))]
        
        R = []
        r = []
        for i in range(1, len(equation)+2):
            R.append(i)
            r.append(i)
        r.extend(r)
        m = []
        
        for i in range(len(R)):
            
            for j in range(len(d1)):
                d1[j].setEquation([[[1], [-R[j]], [0]]])
                c = Circuit(circuito)
                
            voltage = []
            current = []
            for j in d1:
                voltage.append(c.solution([d3[j]], [0], ["voltage"]))
                current.append(c.solution([d3[j]], [0], ["current"]))
            m.append([voltage, current])
            for j in range(len(R)):
                R[j] = r[j+i+1]

        for i in range(1, len(m)):
            for j in range(len(m[i][0])):
                m[i][0][j] = m[0][0][j]-m[i][0][j]
                m[i][1][j] = m[0][1][j]-m[i][1][j]
                
        a = [m[i][1] for i in range(1, len(m))]
        
        for i in range(0, len(m)-1):
            b = []
            for j in range(1, len(m)):
                b.append(m[j][0][i])
                
            A = np.array(a, dtype="float")
            B = np.array(b, dtype="float")
            y = np.linalg.solve(A, B)
            
            equation[i][2][0] = m[0][0][i]
            equation[i][0][i] = 1
            for j in range(len(y)):
                equation[i][1][j] = y[j]
                equation[i][2][0] -= y[j]*m[0][1][j]
            equation[i][2][0] = -equation[i][2][0]
        return equation
예제 #5
0
    def test_var(self):
        cir = c.Circuit("circuit9.txt", 0, 2, 10)

        x, y = cir.coordonneesWayPoint(1)
        ve = v.VehiculeIAA(x, y, cir, 5)

        self.assertEqual(ve.x, x)
        self.assertEqual(ve.coords, (x, y))
예제 #6
0
    def test_component_rejection(self):
        circ = Circuit("Circ")

        ground = Node("ground node", True)
        node = Node("non-ground")

        circ.add_node(ground)

        try:
            Resistor("R", node, ground, 1000)
        except CircuitError as e:
            self.assertEqual(str(e),
                             "node non-ground does not belong to a circuit",
                             "Incorrect exception type")
            return

        self.assertTrue(False, "Component was not rejected")
예제 #7
0
def create_tmp_file():
    circ = Circuit("Circ")

    n1 = Node("N1", True)
    n2 = Node("N2")
    circ.add_node(n1)
    circ.add_node(n2)

    Resistor("R1", n1, n2, 1000)
    VoltageSource("V1", n1, n2, 5)

    circ.save("tmp.circ", overwrite=True)
    return circ
예제 #8
0
    def test_component_circuit_1(self):
        circ = Circuit("Circ")

        ground = Node("ground node", True)
        node = Node("non-ground")

        circ.add_node(ground)
        circ.add_node(node)

        Resistor("R", node, ground, 1000)
        VoltageSource("V0", ground, node, 5)

        self.assertTrue(len(circ.nodes) == 2 and len(circ.components) == 2)
예제 #9
0
class Input:
    qubits = 0
    inputs = 0
    circuit = Circuit.Circuit()
    states = list()

    def __init__(self):
        self.qubits = 0
        self.inputs = 0

    #this function reads a file and stores the information within an input object
    def readFile(self, filename):
        i = 0

        with open(filename) as fp:
            for line in fp:
                #trim line
                line = line.strip()

                #first line, how many qubits
                if (i == 0):
                    self.qubits = int(line)
                #for the number of bits, there will be a wire
                elif (i <= self.qubits):
                    wire = Wire.Wire(line)
                    self.circuit.append(wire)
                #the line after specifies number of inputs
                elif (i == self.qubits + 1):
                    self.inputs = int(line)
                #for the number of inputs
                elif (i <= self.qubits + 1 + self.inputs):
                    state = State.State(line, self.qubits)
                    self.states.append(state)
                i += 1

    #returns the list of initial states
    def getStates(self):
        return self.states

    def getCircuit(self):
        return self.circuit
예제 #10
0
    def __lin0(self, d1, d2, d3, circuito):
        self.equation = [[[0 for i in range(len(d1))],
                         [1 if i == j else 0 for i in range(len(d1))],
                         [0]] for j in range(len(d1))]
        
        c = Circuit(circuito)
        for i in range(len(d1)):
            self.equation[i][2][0] = -c.solution([d3[d1[i]]], [0], ["current"])

        for i in range(len(d1)):
            d2[d1[i]][0].setEquation([[[1], [0], [1]]])
            c = Circuit(circuito)
            for j in range(len(d1)):
                self.equation[j][0][i] = +self.equation[j][2][0]+c.solution([d3[d1[j]]], [0], ["current"])
            
            d2[d1[i]][0].setEquation([[[1], [0], [0]]])
        
        return self.equation
예제 #11
0
 def __lin3(self, circuito, d1, d2, d3):
     
     self.equation = [[[1 if i == j else 0 for i in range(len(d1))],
                     [0 for i in range(len(d1))],
                     [0]] for j in range(len(d1))]
     
     c = Circuit(circuito)
     for i in range(len(d1)):
         self.equation[i][2][0] = c.solution([d3[d1[i]]], [0], ["voltage"])
     for i in range(len(d1)):
         d1[i].setEquation([[[0], [1], [1]]])
         c = Circuit(circuito)
         for j in range(len(d1)):
             self.equation[j][1][i] = +self.equation[j][2][0]-c.solution([d3[d1[j]]], [0], ["voltage"])
         
         d1[i].setEquation([[[0], [1], [0]]])
     
     return self.equation
예제 #12
0
 def test_type(self):
     cir = c.Circuit("circuit9.txt", 0, 2, 10)
     self.assertIsInstance(cir, list)
예제 #13
0
    def setParamValues(self, v=None, i=None):
        """
        This methods get values for linearization, and gets the equivalent 
        equation.
        
        Parameters
        ----------
        v: list
            v is a list with the voltage values of the elements port.
            
        i: list
            i is a list with the current values of the elements port.
        """

        if v is None:
            v = self.__v
        else:
            self.__v = v

        self.__d1 = [i for i in self.__v]
            
        self.__d2 = {}
        for i in range(len(self.__d1)):
            self.__d2[self.__d1[i]] = self.__FT[i]

        self.d3 = {}
        for i in range(len(self.__d1)):
            self.d3[self.__d1[i]] = self.circuito.index(self.__d2[self.__d1[i]])

        circuito = self.circuito
        a = len(self.__d1)
        
        self.equation = [[[0 for i in range(a)],
                         [1 if i == j else 0 for i in range(a)],
                         [0]] for j in range(a)]
        
        for i in range(len(self.__d1)):
            self.__d2[self.__d1[i]][0].setEquation([[[1], [0], [self.__d1[i]]]])

        c = Circuit(circuito)
        c.solution()
        self.setCir(c)

        for i in range(len(self.__d1)):
            self.__d2[self.__d1[i]][0].setEquation([[[1], [0], [0]]])
            
        nol = []
        e = {}
        for i in range(len(circuito)):
            if circuito[i][0].getNL():
                nol.append(i)
                e[circuito[i][0]] = deepcopy(circuito[i][0].getEquation())
                circuito[i][0].setDiscrete(True)
                
        self.__lin0(self.__d1, self.__d2, self.d3, circuito)
        
        for i in nol:
            circuito[i][0].setEquation(e[circuito[i][0]])
            circuito[i][0].setDiscrete(False)

        if self.__discrete:
            self.circuito = circuito
            super().__init__(self.equation, nl=False)    
        ]
        inValuesStr = "".join([("1" if is_true(i) else "0") for i in inValues])
        logging.info(log_info + inValuesStr)
    else:
        logging.info(log_info + "No test case possible")
    atpg.removeFault()


logging.basicConfig(format='%(message)s',
                    filename='benchmark_results.log',
                    filemode='w',
                    level=logging.INFO)

for filename in os.listdir(DIRECTORY):
    logging.info("START with " + filename)
    c = Circuit()
    p = Parser(c, os.path.join(DIRECTORY, filename))
    p.parse()
    atpg = ATPG(c)
    logging.info("Inputs: " + " ".join(c.getInNodeNames()))
    start = time.process_time()
    for fault in [Circuit.STUCK_AT_0_FAULT, Circuit.STUCK_AT_1_FAULT]:
        logging.info("START with stuck at " +
                     ("1" if fault == Circuit.STUCK_AT_1_FAULT else "0") +
                     " fault")
        for inputNodeName in c.inNodes:
            run_test(atpg, fault, inputNodeName)

        for gateName in c.gates:
            # output of gate
            run_test(atpg, fault, gateName)
예제 #15
0
def SingleRun(theta0, theta1, num_blocks, shot=None, style='expectation'):
    C2 = Circuit(num_wires=5)
    C2.extend(ArbitraryTwoQubitGate(params=theta0), wires=[1, 2])
    C2.extend(BasicBlockTwoQubitGate(num_blocks=num_blocks, params=theta1),
              wires=[3, 4])
    C2.add(H(0))
    C2.add(SWAP(ctrl=0, tgt1=[1, 2], tgt2=[3, 4]))
    C2.add(H(0))
    random2 = randomState(dim=2)
    C2.setInitialState(
        State(dim=5,
              state=np.kron(np.kron(np.array([1, 0]).reshape(2, 1), random2),
                            random2)))
    return C2.execute(measure_wires=[0], shot=shot, style=style)
예제 #16
0
    def __init__(self, nbtour=5, Controle=0, nbv=4):

        nbv = nbv
        nbtour = nbtour

        l = 20
        L = 20

        self.Controle = Controle  # pour savoir si le joueur a le contrôle ou si c'est un trounoi entre les intelligences artificielles
        self.cir = Circuit("circuit9.txt", nbv, nbtour)

        if self.Controle == 1:
            self.joueur = VehiculeControle(
                self.cir.coordonneesWayPoint(len(self.cir))[0],
                self.cir.coordonneesWayPoint(len(self.cir))[1], self.cir, 3)
            self.joueur.id = "joueur1"
            self.cir.append(self.joueur)
#
        else:

            self.joueur = self.cir[0]

        self.angleCamera = 0

        chemin = os.getcwd()

        #on charge des images pour les voitures les obtacles ..
        self.imvoiture = QImage(chemin + "\\images\\car\\V7.png")
        self.imvoiture3 = QImage(chemin + "\\images\\car\\V7.png")
        self.imvoiture4 = QImage(chemin + "\\images\\car\\V12.png")
        self.imvoiture2 = QImage(chemin + "\\images\\car\\V6.png")
        self.imCarbu = QImage(chemin + "\\images\\motifs\\tube1.png")
        self.imWall = QImage(chemin + "\\images\\motifs\\A3.png")  #A3.png
        self.imSol = QImage(chemin + "\\images\\motifs\\mur.png")  #herbe
        self.imR = QImage(chemin + "\\images\\motifs\\pisteA.png")
        self.imMoule = QImage(chemin + "\\images\\motifs\\Moule.png")

        self.sprites = {}
        self.sprites['A'] = self.imvoiture2

        self.sprites['B'] = self.imvoiture
        self.sprites['C'] = self.imvoiture4

        self.sprites['P'] = self.imvoiture3

        self.scalex, self.scaley = 110, 110

        self.scalecarx, self.scalecary = 110, 110

        # à chque voiture on associe une image dépendant de son type
        self.voitures = dict()

        self.periodeMiseAjour = 200

        self.scene = QGraphicsScene()
        self.listFoos = []

        super(MyView, self).__init__()

        self.initUI()
        #self.scroll(500,500)
        # on cache le scroll pour des fins esthétiques
        self.setVerticalScrollBarPolicy(1)
        self.setHorizontalScrollBarPolicy(1)
        self.dessiner()

        self.setScene(self.scene)
        self.timer1 = QtCore.QTimer()
        QtCore.QObject.connect(self.timer1, QtCore.SIGNAL("timeout()"),
                               self.unTour)
        self.timer1.setInterval(self.periodeMiseAjour)
예제 #17
0
if g1 == 0:
    g1 = gate0Input0
elif g1 == 1:
    g1 = gate0Input1

if x0 == 0:
    x0 = gate0Input0
elif x0 == 1:
    x0 = gate0Input1

if x1 == 0:
    x1 = gate0Output0
elif x1 == 1:
    x1 = gate0Output1

# Send the GTTs & garbled inputs to server and get result
result = Circuit.createGarbledCircuit(garbledTruthTableList, g0, g1, x0, x1)

# Transform the garbled outputs into normal outputs
print "\nResult:"
if result[0] == gate3Output0:
    print('2^1: 0')
elif result[0] == gate3Output1:
    print('2^1: 1')

if result[1] == gate7Output0:
    print('2^0: 0')
elif result[1] == gate7Output1:
    print('2^0: 1')
예제 #18
0
def parse(filename):
    mycircuit = Circuit.Circuit(title="", filename=filename)
    file = open(filename, "r")
    lines = []
    line_number = 0
    elements = []

    if file is not None:
        while True:
            line = file.readline()
            line_number = line_number + 1
            line = line.strip().lower()
            if line_number == 1:
                mycircuit.title = line
            elif len(line) == 0:
                break
            line = plus_line(file, line)

            if line[0] == '.':
                line_elements = line.lower().split()
                if line_elements[0] == ".end":
                    print("End of the netlist file.")
                elif line_elements[0] == ".op":
                    mycircuit.op = True
                elif line_elements[0] == ".dc":
                    mycircuit.dc = True
                    mycircuit.dc_source = line_elements[1]
                    mycircuit.dc_start = unit_transform(line_elements[2])
                    mycircuit.dc_stop = unit_transform(line_elements[3])
                    mycircuit.dc_point_number = \
                        (mycircuit.dc_stop - mycircuit.dc_start) / unit_transform(line_elements[4])
                    # TODO:mycircuit.dc_type = line_elements[]
                elif line_elements[0] == ".ac":
                    pattern = re.match(
                        r'.AC (.*) (.*) ([0-9.]*[FPNUMKGT]?)(Hz)? ([0-9.]*[FPNUMKGT]?)(Hz)?',
                        line, re.I)
                    mycircuit.ac = True
                    mycircuit.ac_type = pattern.group(1)
                    mycircuit.ac_point_number = int(
                        unit_transform(pattern.group(2)))
                    mycircuit.ac_start = unit_transform(pattern.group(3))
                    mycircuit.ac_stop = unit_transform(pattern.group(5))
                elif line_elements[0] == ".tran":
                    pattern = re.match(
                        r'.tran ([0-9.]*[FPNUMKGT]?)(s)? ([0-9.]*[FPNUMKGT]?)(s)?',
                        line, re.I)
                    mycircuit.tran = True
                    mycircuit.tran_start = 0
                    mycircuit.tran_step = unit_transform(pattern.group(1))
                    mycircuit.tran_stop = unit_transform(pattern.group(3))
                else:
                    pass

            lines.append((line, line_number))

    for line, line_number in lines:
        if line_number > 1:

            r_pattern = re.match(r'^R.*', line, re.I)
            c_pattern = re.match(r'^C.*', line, re.I)
            l_pattern = re.match(r'^L.*', line, re.I)

            d_pattern = re.match(r'^D.*', line, re.I)
            mos_pattern = re.match(r'^M.*', line, re.I)

            v_pattern = re.match(r'^V.*', line, re.I)
            ispulse = re.search(r'PULSE', line, re.I)

            i_pattern = re.match(r'^I.*', line, re.I)

            e_pattern = re.match(r'^E.', line, re.I)
            f_pattern = re.match(r'^F.', line, re.I)
            g_pattern = re.match(r'^G.', line, re.I)
            h_pattern = re.match(r'^H.', line, re.I)

            if r_pattern:
                element = parse_resistor(line, mycircuit)
            elif c_pattern:
                element = parse_capacitor(line, mycircuit)
            elif l_pattern:
                element = parse_inductor(line, mycircuit)
            elif d_pattern:
                element = parse_diode(line, mycircuit)
                mycircuit.has_nonlinear = True
            elif mos_pattern:
                element = parse_mos(line, mycircuit)
                mycircuit.has_nonlinear = True
            elif v_pattern:
                if ispulse:
                    element = parse_v_pulse_src(line, mycircuit)
                else:
                    element = parse_vsrc(line, mycircuit)
            elif i_pattern:
                element = parse_isrc(line, mycircuit)
            elif e_pattern:
                element = parse_vcvs(line, mycircuit)
            elif f_pattern:
                element = parse_cccs(line, mycircuit)
            elif g_pattern:
                element = parse_vccs(line, mycircuit)
            elif h_pattern:
                element = parse_ccvs(line, mycircuit)
            else:
                element = None

            if element:
                elements += [element]

    return mycircuit, elements
예제 #19
0
    def test_type(self):

        cir = c.Circuit("circuit9.txt", 0, 2, 10)
        x, y = cir.coordonneesWayPoint(1)
        ve = vb.VehiculeIAB(x, y, cir, 5)
        self.assertIsInstance(ve, vb.VehiculeIAB)
예제 #20
0
    textrect = text.get_rect()
    if posicion.upper() == "CENTRO":
        textrect.midtop = (x, y)
    elif posicion.upper() == "DERECHA":
        textrect.topright = (x, y)
    else:
        textrect.topleft = (x, y)
    superficie.blit(text, textrect)
    return textrect


#Dibujando Circuito
display = pygame.Surface((500, 300))
display.fill((224, 224, 224))
display_rect = display.get_rect()
circuit = Circuit(400, 200)
circuit.draw_circuit(display, 50, 50)

#Creando Boton de simulacion
botonDisplay = pygame.Surface((500, 100))
botonDisplay.fill((224, 224, 224))
botonSimular = pygame.draw.rect(botonDisplay, (46, 204, 113),
                                (50, 25, 400, 50))
texto("Simular", font30, (0, 0, 0), botonDisplay, botonSimular.midtop[0],
      botonSimular.midright[1] - 10, "CENTRO")

#Cargando imagenes
img_resistencia = pygame.image.load("resistencia.png").convert()
img_fuentePoder = pygame.image.load("FuentePoder.png").convert()
img_resistencia.set_colorkey((255, 255, 255))
img_fuentePoder.set_colorkey((255, 255, 255))
예제 #21
0
    def test_multi_node_circuit(self):
        circ = Circuit("Circ")
        circ.add_node(Node("ground node", True))
        circ.add_node(Node("non-ground"))

        self.assertTrue(len(circ.nodes) == 2 and len(circ.components) == 0)
예제 #22
0
    def test_single_node_circuit(self):
        circ = Circuit("Circ")
        circ.add_node(Node("ground node", True))

        self.assertTrue(len(circ.nodes) == 1 and len(circ.components) == 0)
예제 #23
0
 def setIVk(self, V=None, I=None):
     """
     It is a method for the application of the Euler method in capacitors, 
     and inductors.
     
     Parameters
     ----------
     V: list
         V contains the voltage solutions of the ports.
         
     I: list
         I contains the current solutions of the ports.
     """
     dim1 = []
     dim2 = []
     
     for i in range(len(self.circuito)):
         
         elemento = self.circuito[i]
         if elemento[0].getSubcir() and elemento[0].getDif() and  not elemento[0].getNL():
             
             dim1.append(i)
             
         elif elemento[0].getSubcir() and elemento[0].getDif() and elemento[0].getNL():
             elemento[0].setIVk()    
             
         elif elemento[0].getDif():
             dim2.append(i)
             
     for i in dim1:
         if not self.nl:
             for j in range(len(self.__d1)):
                 r = self.__d2[self.__d1[j]][0]
                 if type(self.__d1[0]) == Resistance:
                     r.setEquation([[[1], [-V[j]/I[j]], [0]]])
                     
                 else:
                     r.setEquation([[[0], [1], [I[j]]]])
                     
             self.setCir(Circuit(self.circuito))    
         # esta sentencia es tanto valida para los casos con circuito
         # principal lineal como no lineal.
         cir = self.getCir()
         
         I = [cir.solution([i], [j], ["current"]) for j in range(len(elemento)-1)]
         V = [cir.solution([i], [j], ["voltage"]) for j in range(len(elemento)-1)]
         elemento[0].setIVk(V, I)
         
         
     
     # caso de circuito principal lineal.
     if not self.nl:
         for i in range(len(self.__d1)):
             r = self.__d2[self.__d1[i]][0]
             if type(self.__d1[0]) == Resistance:
                 r.setEquation([[[1], [-V[i]/I[i]], [0]]])
                 
             else:
                 r.setEquation([[[0], [1], [I[i]]]])
                 
         self.setCir(Circuit(self.circuito))
         
         cir = self.getCir()
         
         for i in dim2:
             elemento = self.circuito[i]
             if elemento[0].getDifValue() == "v":
                 elemento[0].vk(cir.solution([i], [0], ["voltage"]))
             elif elemento[0].getDifValue() == "i":
                 elemento[0].ik(cir.solution([i], [0], ["current"]))
                 
         for i in range(len(self.__d1)):
             r = self.__d2[self.__d1[i]][0]
             if type(self.__d1[0]) == Resistance:
                 r.setEquation([[[1], [-V[i]/I[i]], [0]]])
                 
             else:
                 r.setEquation([[[0], [1], [0]]])
                 
     else:
         cir = self.getCir()
         for i in dim2:
             elemento = self.circuito[i]
             if elemento[0].getDifValue() == "v":
                 elemento[0].vk(cir.solution([i], [0], ["voltage"]))
             elif elemento[0].getDifValue() == "i":
                 elemento[0].ik(cir.solution([i], [0], ["current"]))
예제 #24
0
class MyView(QtGui.QGraphicsView):
    def __init__(self, nbtour=5, Controle=0, nbv=4):

        nbv = nbv
        nbtour = nbtour

        l = 20
        L = 20

        self.Controle = Controle  # pour savoir si le joueur a le contrôle ou si c'est un trounoi entre les intelligences artificielles
        self.cir = Circuit("circuit9.txt", nbv, nbtour)

        if self.Controle == 1:
            self.joueur = VehiculeControle(
                self.cir.coordonneesWayPoint(len(self.cir))[0],
                self.cir.coordonneesWayPoint(len(self.cir))[1], self.cir, 3)
            self.joueur.id = "joueur1"
            self.cir.append(self.joueur)
#
        else:

            self.joueur = self.cir[0]

        self.angleCamera = 0

        chemin = os.getcwd()

        #on charge des images pour les voitures les obtacles ..
        self.imvoiture = QImage(chemin + "\\images\\car\\V7.png")
        self.imvoiture3 = QImage(chemin + "\\images\\car\\V7.png")
        self.imvoiture4 = QImage(chemin + "\\images\\car\\V12.png")
        self.imvoiture2 = QImage(chemin + "\\images\\car\\V6.png")
        self.imCarbu = QImage(chemin + "\\images\\motifs\\tube1.png")
        self.imWall = QImage(chemin + "\\images\\motifs\\A3.png")  #A3.png
        self.imSol = QImage(chemin + "\\images\\motifs\\mur.png")  #herbe
        self.imR = QImage(chemin + "\\images\\motifs\\pisteA.png")
        self.imMoule = QImage(chemin + "\\images\\motifs\\Moule.png")

        self.sprites = {}
        self.sprites['A'] = self.imvoiture2

        self.sprites['B'] = self.imvoiture
        self.sprites['C'] = self.imvoiture4

        self.sprites['P'] = self.imvoiture3

        self.scalex, self.scaley = 110, 110

        self.scalecarx, self.scalecary = 110, 110

        # à chque voiture on associe une image dépendant de son type
        self.voitures = dict()

        self.periodeMiseAjour = 200

        self.scene = QGraphicsScene()
        self.listFoos = []

        super(MyView, self).__init__()

        self.initUI()
        #self.scroll(500,500)
        # on cache le scroll pour des fins esthétiques
        self.setVerticalScrollBarPolicy(1)
        self.setHorizontalScrollBarPolicy(1)
        self.dessiner()

        self.setScene(self.scene)
        self.timer1 = QtCore.QTimer()
        QtCore.QObject.connect(self.timer1, QtCore.SIGNAL("timeout()"),
                               self.unTour)
        self.timer1.setInterval(self.periodeMiseAjour)

    def initUI(self):

        self.setViewport(QGLWidget())

        self.setGeometry(500, 200, 1000, 800)
        self.setWindowTitle('Course ')

    def keyPressEvent(self, e):
        print(e.key())
        if self.Controle != 1:  # si c'est une course entre les intelligence artificielle on n'a pas besoin de détecter les évènements
            return

        if e.key() == QtCore.Qt.Key_Left:

            self.joueur.tournerGauche()
        if e.key() == QtCore.Qt.Key_Right:

            self.joueur.tournerDroite()
        if e.key() == QtCore.Qt.Key_Up:

            self.joueur.accelerer()
        if e.key() == QtCore.Qt.Key_Down:

            self.joueur.deccelerer()

        if e.key() == QtCore.Qt.Key_Escape:

            self.close()

    def dessiner(self):

        for j in range(len(self.cir.plateau)):

            for i in range(len(self.cir.plateau[j])):
                if self.cir.plateau[
                        j, i, Circuit.Couche_terrain].getCaractere() == 'C':
                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imSol.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imCarbu.scaled(self.scalex,
                                                    self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                elif self.cir.plateau[
                        j, i, Circuit.Couche_terrain].getCaractere() == 'M':
                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imSol.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imWall.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                elif self.cir.plateau[
                        j, i, Circuit.Couche_terrain].getCaractere() == 'O':

                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imSol.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imMoule.scaled(self.scalex,
                                                    self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)

                elif self.cir.plateau[
                        j, i, Circuit.Couche_terrain].getCaractere() == 'H':

                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imSol.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
                else:

                    self.listFoos.append(
                        self.scene.addPixmap(
                            QPixmap.fromImage(
                                self.imR.scaled(self.scalex, self.scaley))))

                    self.listFoos[-1].setPos(self.scalex * i, self.scaley * j)
        for v in self.cir:

            self.voitures[v.id] = (self.scene.addPixmap(
                QPixmap.fromImage(self.sprites[v.typeV].scaled(
                    self.scalecarx, self.scalecary))))

            self.voitures[v.id].setTransformOriginPoint(
                QPoint(self.scalecarx / 2, self.scalecarx / 2))
            self.voitures[v.id].setPos(v.x * self.scalex, v.y * self.scaley)
            self.voitures[v.id].setRotation(90 + v.orientation * (180 / 3.14))

        self.centerOn(self.voitures[self.joueur.id])

        self.textRang = QGraphicsTextItem(" rang {} tour {}/{}".format(
            self.joueur.rang, self.joueur.nombreTourE,
            self.joueur._circuit.nbtours))
        font = QtGui.QFont('White Rabbit')
        font.setPointSize(18)
        font.setBold(True)
        self.textRang.setFont(font)
        self.textRang.setDefaultTextColor(QColor('lightgray'))

        self.MarqueurCamera = QGraphicsRectItem(10, 10, 10, 10)
        self.MarqueurCamera.setBrush(QBrush(Qt.yellow))
        self.scene.addItem(self.textRang)
        self.scene.addItem(self.MarqueurCamera)

#◘ self.scale(1,1)

    def unTour(self):

        for v in self.cir:
            coord = v.coords
            self.voitures[v.id].setRotation(90 + v.orientation * (180 / 3.14))
            self.voitures[v.id].setPos(coord[0] * self.scalex,
                                       coord[1] * self.scaley)

        self.centerOn(self.voitures[self.joueur.id])
        #self.rotate((10/3.14)*(self.joueur.orientation-self.angleCamera))

        self.cir.unTour()
        self.angleCamera = self.joueur.orientation

        self.textRang.setHtml(" Rang {}/{} tours {}/{} v={} R={} L".format(
            self.joueur.rang, len(self.cir), self.joueur.nombreTourE,
            self.joueur._circuit.nbtours, self.joueur.vitesse,
            self.joueur.reservoir))
        self.textRang.setPos(self.mapToScene(QPoint(0, 0)))
        #     self.indicateurDeVitesse.setPos(self.voitures[self.joueur.id].x()-10,self.voitures[self.joueur.id].y()-10)
        #     self.setBaseSize((self.joueur.reservoir*50)/self.joueur.capacite_reservoir,10)
        self.MarqueurCamera.setPos(self.voitures[self.joueur.id].x(),
                                   self.voitures[self.joueur.id].y())
        print("un tour de plus")

        if (self.joueur.reservoir == 0):
            self.timer1.stop()
            self.cir.courseFinie = True
            self.cir.Tri_finale()

            msgBox = QMessageBox()
            msgBox.setText("vous avez perdu faute de carburant")
            msgBox.exec_()

        if self.cir[
                len(self.cir) -
                1].nombreTourE > self.cir.nbtours:  #  si la course est terminée

            self.timer1.stop()
            self.cir.courseFinie = True
            self.cir.Tri_finale()

    def lancerCourse(self):
        self.cir.heurede_depart = time.time()
        self.timer1.start()
예제 #25
0
def SingleRun(theta0, theta1, shot=None):

    random1 = randomState(dim=1)
    C1 = Circuit(num_wires=3)
    # U: unknown channel
    C1.extend(ArbitraryOneQubitGate(params=theta0), wires=[1])
    # \tilde U: estimated channel
    C1.extend(ArbitraryOneQubitGate(params=theta1), wires=[2])

    # C-SWAP test
    C1.add(H(0))
    C1.add(SWAP(ctrl=0, tgt1=[1], tgt2=[2]))
    C1.add(H(0))
    # prepare initial state as two same input
    C1.setInitialState(
        State(dim=3,
              state=np.kron(np.kron(np.array([1, 0]).reshape(2, 1), random1),
                            random1)))
    #return C1.execute(measure_wires=[0], shot=shot)
    ans1 = C1.execute(measure_wires=[0], shot=shot)

    C2 = Circuit(num_wires=3)
    # U: unknown channel
    #C2.extend(ArbitraryOneQubitGate(params=theta0), wires=[1])
    # \tilde U: estimated channel
    #C2.extend(ArbitraryOneQubitGate(params=theta1), wires=[2])

    # C-SWAP test
    C2.add(H(0))
    C2.add(SWAP(ctrl=0, tgt1=[1], tgt2=[2]))
    C2.add(H(0))
    # prepare initial state as two same input
    UnknownChannel = ArbitraryOneQubitGate(params=theta0)
    TrueOutput = np.dot(UnknownChannel.calcUnitary(), random1)
    EstimatedChannel = ArbitraryOneQubitGate(params=theta1)
    EstimatedOutput = np.dot(EstimatedChannel.calcUnitary(), random1)

    C2.setInitialState(
        State(dim=3,
              state=np.kron(
                  np.kron(np.array([1, 0]).reshape(2, 1), TrueOutput),
                  EstimatedOutput)))
    # return C1.execute(measure_wires=[0], shot=shot)
    ans2 = C2.execute(measure_wires=[0], shot=shot)
    #print(ans1, ans2)
    return ans1
    BorD = BorD_prompt()

    if (BorD == 'benchmarks'):
        tensorTest()
        input("\nPress any key for the next test...")
        compareProbabilities()
        input("\nPress any key for the next test...")
        timeBenchmarks()

    elif (BorD == 'demo'):
        build = builder_prompt()
        stop = False
        while (not stop):

            if (build != 'builder'):
                circ = Circuit(build)
                circ.run_circuit()
                esc = input(
                    "\nPress any key for another circuit or 's' to stop... ")
                if esc == "s":
                    stop = True
                else:
                    build = circuit_prompt()
            else:
                toBuild = custom_builder_prompt()
                actual_builder(toBuild)
                esc = input(
                    "\nPress any key for another circuit or 's' to stop... ")
                if esc == "s":
                    stop = True