quine07112026LaTeX.py

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}")