import csv
import sys
import sympy as sp
from sympy.logic import boolalg
# (c) david vajda
# 07/11/2026
# quine .. 4 input var .. dnf ..
# with open('bool4tab.csv', newline='\n') as csvfile:
# bool4tab = csv.reader (csvfile, delimiter=',')
# for row in bool4tab:
# print (', '.join(row))
# galasmformula = "Y = /X2 & /X1 \# /X3 & X2 \# /X1 & /X0 \# /X3 & X0 \# X3 & /X2 & /X0"
galasmformula = sys.argv [1]
print (galasmformula)
python3formula = galasmformula.replace ("/", "not ").replace ("&", " and ").replace ("\#", " or ").replace ("Y = ", "")
print (python3formula)
print("\\begin{tabular}{|c|c|c|c||c|}")
print("\\hline")
print ("$x_3$ & $x_2$ & $x_1$ & $x_0$ & $y_0$\\\\")
print("\\hline")
with open('bool4tab.csv', newline=”) as csvfile:
bool4tab = csv.reader (csvfile,delimiter=';')
for row in bool4tab:
X0 = bool(int(row [3]))
X1 = bool(int(row [2]))
X2 = bool(int(row [1]))
X3 = bool(int(row [0]))
Y = eval(python3formula,{"X3": X3,"X2": X2,"X1": X1,"X0": X0})
# print (not X2 and not X1 or not X3 and X2 or not X1 and not X0 or not X3 and X0 or X3 and not X2 and not X0)
# print (Y)
print ("$", int(X3), "$ & $", int(X2), "$ & $", int(X1), "$ & $", int(X0), "$ & $",int(Y), "$\\\\")
print ("\\hline")
print ("\\end{tabular}")
print("\\begin{tikztimingtable}")
X0TikZTimingStr = "X0 & "
X1TikZTimingStr = "X1 & "
X2TikZTimingStr = "X2 & "
X3TikZTimingStr = "X3 & "
YTikZTimingStr = "Y & "
HighLowPegelStr = ["L", "H"]
with open('bool4tab.csv', newline=”) as csvfile:
bool4tab = csv.reader (csvfile,delimiter=';')
for row in bool4tab:
X0 = bool(int(row [3]))
X1 = bool(int(row [2]))
X2 = bool(int(row [1]))
X3 = bool(int(row [0]))
Y = eval(python3formula,{"X3": X3,"X2": X2,"X1": X1,"X0": X0})
X0TikZTimingStr = X0TikZTimingStr + "1" + str(HighLowPegelStr[X0]) + " "
X1TikZTimingStr = X1TikZTimingStr + "1" + str(HighLowPegelStr[X1]) + " "
X2TikZTimingStr = X2TikZTimingStr + "1" + str(HighLowPegelStr[X2]) + " "
X3TikZTimingStr = X3TikZTimingStr + "1" + str(HighLowPegelStr[X3]) + " "
YTikZTimingStr = YTikZTimingStr + "1" + str(HighLowPegelStr[Y]) + " "
X0TikZTimingStr = X0TikZTimingStr + "\\\\"
X1TikZTimingStr = X1TikZTimingStr + "\\\\"
X2TikZTimingStr = X2TikZTimingStr + "\\\\"
X3TikZTimingStr = X3TikZTimingStr + "\\\\"
YTikZTimingStr = YTikZTimingStr + "\\\\"
print(X0TikZTimingStr)
print(X1TikZTimingStr)
print(X2TikZTimingStr)
print(X3TikZTimingStr)
print(YTikZTimingStr)
print("\\end{tikztimingtable}")