Commit 985bfc0f955024c17771846a1a994847d0261fb0

  • Tree SHA1: 34800d5
  • Parent SHA1: 584f919 (totuustaulu vs. totuustaulu vertailu melkein toimii, muotoilussa pikku hiontaa, pitää miettiä jos muuttaa siten että vertailussa muotoilusta luovutaan, ja käytetään muotoilua vain tulostuksessa)
  • raw diff | raw patch
vertailut toimii totuustaululle, lausekkeelle ja kaaviolle. ideana vielä lisätä sallitut portit, eli tee kytkentä esim. pelkillä NANDeilla, ja pisteiden määrittäminen
simcirtest.py
(43 / 29)
  
108108
109109 def lausekkeesta_totuustaulu(self, lausekkeet):
110110 import itertools
111
112111 # Terminals sisältää muuttujat.
113112 # Luodaan yhtä monta totuusarvoa ja käydään
114113 # näille kaikki kombinaatiot läpi (product),
127127 locs[k]=v
128128 locss.append(locs)
129129
130 #print locss == locss
131
132130 def header(locss):
133131 loc = sorted(locss[0])
134132 #loc = sorted(locss[0], reverse=self.reverse)
165165 '''
166166
167167 '''
168 useampien ulostulojen totuustaulut samassa taulukoissa
168 useampien ulostulojen totuustaulut samassa taulukossa
169169 '''
170170 tulostettava = ""
171171 hd,label_length = header(locss)
172172 for (nimi,lauseke) in sorted(lausekkeet.items()):
173173 hd += ' '.rjust(label_length) + nimi
174 #hd += str(' '.join(nimi.center(max(len(nimi),label_length))))
174175 for locs in locss:
175 tulostettava += hianosti(locs, label_length)
176 for (nimi,lauseke) in lausekkeet.items():
176 tulostettava += hianosti(locs, label_length).rstrip()
177 for (nimi,lauseke) in sorted(lausekkeet.items()):
177178 arvo = eval(lauseke, globals(), locs)
178179 tulostettava += ' '.center(max(len(nimi),label_length)) + str(int(arvo))
179180 tulostettava += '\n'
180181 tulostettava = hd + '\n' + tulostettava
181182
182 return tulostettava
183 return totuustaulu_muotoilu(tulostettava)
183184
184185
185186 def doit(self):
394394 Palauttaa virheiden lukumäärän ja virheelliset totuustaulun rivit
395395 '''
396396 testitaulu = totuustaulu_kaaviosta(json.loads(testikaavio))
397
397398 oikeataulu = totuustaulu_lausekkeesta(oikealauseke)
399 #print testitaulu
400 #print oikeataulu
398401 virheita, virherivit = testaa_totuustaulut(testitaulu, oikeataulu)
399402 # Lisätään muuttujat ja output virheellisten rivien yläpuolelle
400403 virheet = ' ' + oikeataulu.splitlines()[0] + '\n' + virherivit
405405 return virheita, virheet
406406
407407 def totuustaulu_muotoilu(totuustaulu):
408 '''
409 muotoillaan totuustaulu samaan muotoon kuin lausekkeesta muotoiltu totuustaulu
410 aikamoinen viritys... totuustaulujen samankaltaisuus päätellään rivien samankaltaisuudesta
411 pitää miettiä, tekisikö sen joskus arvoilla, kun muotoilu voi mennä pilalle
412 '''
408413 from math import sqrt, ceil
409414 # poistetaan mahdolliset tyhjät rivit ja viivalla alkavat rivit (TIM taulukosta)
410415 totuustaulu = [line for line in totuustaulu.split('\n') if line.strip() != '' and not line.strip().startswith('-')]
411416 muokattu = ""
417 # Selvitetään muuttujien ja ulostulojen määrä ja nimen pituudet,
418 # muuttujien määrä on neliöjuuri totuustaulun riveistä (pl. otsikkorivi)
419 # pyöristetään ylös, totuustaulussa ei välttämättä kaikkia rivejä
412420 count = int(ceil(sqrt(len(totuustaulu)-1)))
413421 nimet = totuustaulu[0].split()
414422 maxlenmuuttujat = max([len(item) for item in nimet[:count]])
415423 maxlenulostulot = max([len(item) for item in nimet[count:]])
416 #print int(ceil(sqrt(10)))
417 #muokattu += " ".center(max([len(item) for item in nimet])).join(totuustaulu[0].split()) + '\n'
424 # Muokkauksia tulostusta varten... sotkuista, mutta kaikki totuustaulut
425 # käyt tätä kautta, joten tulee samanlainen muotoilu
418426 frmt1 = (i.center(maxlenmuuttujat) for i in nimet[:count])
419 frmt2 = (i.rjust(maxlenulostulot) for i in nimet[count:])
420 labels = str(' '.join(frmt1) + ' '.center(maxlenmuuttujat) + ' '.join(frmt2))
427 frmt2 = ((' ' + i).center(maxlenmuuttujat) for i in nimet[count:])
428 labels = str(' '.join(frmt1) + ''.join(frmt2))
421429 muokattu = labels + '\n'
422 '''
423 label_length = max(len(x) for x in loc)
424 frmt = (i.center(label_length) for i in loc)
425 print frmt
426 labels = str(' '.join(frmt))
427 print labels
428 '''
429430 for i in range(1, len(totuustaulu)):
430431 rivi = totuustaulu[i].split()
431 muokattu += " " + " ".center(max([len(item) for item in nimet[:2]])).join(rivi[:1]) + " ".center(max([len(item) for item in nimet[:2]]))
432 muokattu += " ".center(max([len(item) for item in nimet[2:]])).join(rivi[1:]) + '\n'
433 #muokattu += ' '.center(max(len(nimi),label_length)) + str(int(arvo))
432 frmt1 = (i.center(maxlenmuuttujat) for i in rivi[:count])
433 frmt2 = (i.center(max(maxlenmuuttujat,maxlenulostulot)) for i in rivi[count:])
434 labels = str(' '.join(frmt1) + ' ' + ' '.join(frmt2))
435 muokattu += labels.rstrip() + '\n'
434436 return muokattu
435437
436438 def testaa_totuustaulu_vs_kaavio(testikaavio, oikeatotuustaulu):
452452 '''
453453 oikeataulu = totuustaulu_muotoilu(oikeatotuustaulu)
454454 testitaulu = totuustaulu_kaaviosta(json.loads(testikaavio))
455 print testitaulu
456 print oikeataulu
455 #print testitaulu
456 #print oikeataulu
457457 virheita, virherivit = testaa_totuustaulut(testitaulu, oikeataulu)
458458 # Lisätään muuttujat ja output virheellisten rivien yläpuolelle
459459 virheet = ' ' + oikeataulu.splitlines()[0] + '\n' + virherivit
466466 sys.stdout.write('Virheet: ' + str(v1) + '\n\n')
467467
468468 #oikealauseke = ["LED = AND(AND(ENOR(OR(NOT(ENOR(EOR(NOR(NAND(NOT(DC), NOT(DC)), NAND(NOT(DC), NOT(DC))), NOR(NAND(NOT(DC), NOT(DC)), NAND(NOT(DC), NOT(DC)))), EOR(NOR(NAND(NOT(DC), NOT(DC)), NAND(NOT(DC), NOT(DC))), NOR(NAND(NOT(DC), NOT(DC)), NAND(NOT(DC), NOT(DC)))))), A1), B1), ENOR(A2, B2)), AND(ENOR(A3, B3), ENOR(A4, B4)))"]
469 oikealauseke = ["Sininen = AND(a,sel)", "Keltainen = AND(a,NOT(sel))"]
469 oikealauseke = ["Keltainen = AND(a,NOT(sel))", "Sininen = AND(a,sel)"]
470 #oikealauseke = ["S = AND(a,sel)", "K = AND(a,NOT(sel))"]
470471
471472 sys.stdout.write('Lauseke vs. kaavio\n')
472473 v3, v4 = testaa_lauseke_vs_kaavio(data, oikealauseke)
473474 sys.stdout.write(v4)
474475 sys.stdout.write('Virheet: ' + str(v3) + '\n\n')
475476
477
476478 oikeataulu = """
477479 a sel Keltainen Sininen
478480 - --- --- -
482482 0 1 0 0
483483 1 0 1 0
484484 1 1 0 1
485"""
486
485 """
486 '''
487 oikeataulu = """
488 a sel K S
489 - --- --- -
490 0 0 0 0
491 0 1 0 0
492 1 0 1 0
493 1 1 0 1
494 """
495 '''
487496 sys.stdout.write('Totuustaulu vs. kaavio\n')
488 v3, v4 = testaa_totuustaulu_vs_kaavio(data, oikeataulu)
489 sys.stdout.write(v4)
490 sys.stdout.write('Virheet: ' + str(v3) + '\n\n')
497 v5, v6 = testaa_totuustaulu_vs_kaavio(data, oikeataulu)
498 sys.stdout.write(v6)
499 sys.stdout.write('Virheet: ' + str(v5) + '\n\n')