Resolving conflicts
authorHamed Gorjiara <hgorjiar@uci.edu>
Fri, 14 Dec 2018 23:48:48 +0000 (15:48 -0800)
committerHamed Gorjiara <hgorjiar@uci.edu>
Fri, 14 Dec 2018 23:48:48 +0000 (15:48 -0800)
src/analyzer/plot.py [new file with mode: 0644]
src/analyzer/report/makefile [new file with mode: 0644]
src/analyzer/report/paper.bib [new file with mode: 0644]
src/analyzer/report/paper.tex [new file with mode: 0644]
src/analyzer/report/tech.tex [new file with mode: 0644]
src/analyzer/tunerloganalyzer.py

diff --git a/src/analyzer/plot.py b/src/analyzer/plot.py
new file mode 100644 (file)
index 0000000..dfd73f0
--- /dev/null
@@ -0,0 +1,42 @@
+import numpy as np
+import matplotlib.pyplot as plt
+IMAGEDIR = "report/pics/"
+
+def generateHistograms(X, header):
+       global IMAGEDIR
+       for i, c in enumerate(X.T):
+               plt.hist(c)
+               plt.savefig(IMAGEDIR + header[i] + "-hist.pdf")
+               plt.clf()
+
+def generateScatterPlot(X, Y, header):
+       global IMAGEDIR
+       for i, feature in enumerate(X.T):
+               values = np.unique(feature)
+               values = np.sort(values)
+               geomean = []
+               for value in values:
+                       a =Y[np.where(feature == value)]
+                       a = np.array(map(lambda x :  x**(1.0/len(a)), a))
+                       geomean.append(a.prod())
+               plt.plot(feature, Y, 'r.')
+               for ii in range(0, len(geomean)-1):
+                       plt.plot(values[ii:ii + 2], geomean[ii:ii + 2], 'bo-')
+               plt.savefig(IMAGEDIR + header[i] + "-scat.pdf")
+               plt.clf()
+
+def plot(data, header):
+       global IMAGEDIR
+       header=header[6:-1]
+       data = np.array(data)
+       X = data[:, 6:-4]
+       X[X==''] = '-1'
+       X = X.astype(np.float)
+       Y = data[:, -2]
+       Y = Y.astype(np.float)
+       generateHistograms(X, header)
+       generateScatterPlot(X, Y, header)
+
+       
+
+
diff --git a/src/analyzer/report/makefile b/src/analyzer/report/makefile
new file mode 100644 (file)
index 0000000..9dd7774
--- /dev/null
@@ -0,0 +1,92 @@
+LATEX := pdflatex -halt-on-error
+FIGURES :=
+.SUFFIXES : .tex .bbl .aux .eps .ps .dot .pdf
+
+.tex.bbl:
+       bibtex $*
+
+.tex.aux:
+       latex $*
+
+%.eps: %.ps
+       ps2epsi $< $@
+
+%.ps: %.dot
+       dot -Tps $< -o $@
+
+%.pdf: %.dot
+       dot -Tpdf $< -o $@
+
+%.png: %.dot
+       dot -Tpng $< -o $@
+
+%.aux: %.tex
+       $(LATEX) $<
+
+#%.dot: %.dotpiece $(FIGHEAD) $(FIGFOOT)
+#      cat $(FIGHEAD) $< $(FIGFOOT) > $@
+
+# latex the paper (default)
+new:   biblinks newpaper
+
+# latex + bibtex the paper
+bib:   bibpaper newpaper
+
+# save a backup of tex files in BACKUPS
+bak:   backuppaper
+
+biblinks: figures
+       $(LATEX) paper.tex
+       $(LATEX) paper.tex
+
+bibsuppl: figures
+       $(LATEX) suppl.tex
+       $(LATEX) suppl.tex
+
+cl: cover-letter.tex
+       $(LATEX) cover-letter.tex
+
+newpaper: figures biblinks
+       $(LATEX) paper.tex
+
+suppl: figures bibsuppl
+       $(LATEX) suppl.tex
+
+
+bibpaper: paper.aux paper.bbl
+       latex paper.tex
+
+
+backuppaper: 
+       @if [ ! -d BACKUPS ]; then mkdir BACKUPS; fi;   \
+       crtdate=`date '+%m-%d-%y--%H:%M:%S'`;           \
+       bakdir=BACKUPS/$$crtdate;                       \
+       mkdir $$bakdir;                                 \
+       cp *.tex $$bakdir
+
+spell:
+       @for i in *.tex; \
+       do if [ $$i != "paper.tex" ]; then aspell -c $$i -p ./spell.lst; fi;\
+       done
+
+total:
+       pdflatex paper.tex
+       pdflatex paper.tex
+       pdflatex paper.tex
+       @echo ================================================================
+       pdflatex paper.tex | grep -E 'arning|erfull'
+       @echo ================================================================
+
+figures: $(FIGURES)
+
+errinjfig:
+       gnuplot err-inj-fig/nve2latex.cmds
+       epstopdf injectErrorFig.eps
+       mv injectErrorFig.* figures
+
+
+clean:
+       rm -f *.dvi *.log *.aux *.blg *.bbl *~ err-inj-fig/*~
+       rm -f paper.ps paper.pdf 
+       rm -f injectErrorFig*
+       rm -rf $(PDF_DIR)
diff --git a/src/analyzer/report/paper.bib b/src/analyzer/report/paper.bib
new file mode 100644 (file)
index 0000000..1443ef4
--- /dev/null
@@ -0,0 +1,19 @@
+@BOOK{Smith:2012qr,
+       title = {{B}ook {T}itle},
+       publisher = {Publisher},
+       author = {Smith, J.~M. and Jones, A.~B.},
+       year = {2012},
+       edition = {7th},
+}
+
+@ARTICLE{Smith:2013jd,
+       author = {Jones, A.~B. and Smith, J.~M.},
+       title = {{A}rticle {T}itle},
+       journal = {Journal title},
+       year = {2013},
+       volume = {13},
+       pages = {123-456},
+       number = {52},
+       month = {March},
+       publisher = {Publisher}
+}
\ No newline at end of file
diff --git a/src/analyzer/report/paper.tex b/src/analyzer/report/paper.tex
new file mode 100644 (file)
index 0000000..146460e
--- /dev/null
@@ -0,0 +1,35 @@
+\documentclass[a4paper, 11pt]{article} % Font size (can be 10pt, 11pt or 12pt) and paper size (remove a4paper for US letter paper)\r
+\r
+\usepackage[protrusion=true,expansion=true]{microtype} % Better typography\r
+\usepackage{graphicx} % Required for including pictures\r
+\usepackage{wrapfig} % Allows in-line images\r
+\r
+\usepackage{mathpazo} % Use the Palatino font\r
+\usepackage[T1]{fontenc} % Required for accented characters\r
+\usepackage{float}\r
+\linespread{1.05} % Change line spacing here, Palatino benefits from a slight increase by default\r
+\r
+%---------------------------------------------------------------------------------------tyle{acmnumeric}\r
+%      TITLE\r
+%----------------------------------------------------------------------------------------\r
+\r
+\title{\textbf{SATTune Tuning Report}}\r
+\r
+%\author{\textsc{Ford Prefect} % Author\r
+%\\{\textit{Interstellar University}}} % Institution\r
+\r
+%\date{\today} % Date\r
+\r
+%----------------------------------------------------------------------------------------\r
+\r
+\begin{document}\r
+\r
+\maketitle % Print the title section\r
+\r
+\r
+\input{tech}\r
+\r
+%\bibliographystyle{unsrt}\r
+%\bibliography{paper}\r
+\r
+\end{document}\r
diff --git a/src/analyzer/report/tech.tex b/src/analyzer/report/tech.tex
new file mode 100644 (file)
index 0000000..38fcf91
--- /dev/null
@@ -0,0 +1,160 @@
+\section{Evaluation}\label{sec:eval}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/EDGEENCODING-hist.pdf}\r
+       \caption{Encoding Edge Histogram}\r
+       \label{fig:edgeencoding}\r
+\end{figure}\r
+\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ELEMENTOPTSETS-hist.pdf}\r
+       \caption{Element Opt Set Histogram}\r
+       \label{fig:elementoptset}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ELEMENTOPT-hist.pdf}\r
+       \caption{Element Opt Histogram}\r
+       \label{fig:elementopt}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ENCODINGGRAPHOPT-hist.pdf}\r
+       \caption{Encoding Graph Optimization Histogram}\r
+       \label{fig:encodinggraph}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/MUSTEDGEPRUNE-hist.pdf}\r
+       \caption{Must Prune Histogram}\r
+       \label{fig:mustedgeprune}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/MUSTVALUE-hist.pdf}\r
+       \caption{Must Value Histogram}\r
+       \label{fig:mustvalue}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/NODEENCODING-hist.pdf}\r
+       \caption{Node Encoding Histogram}\r
+       \label{fig:nodeencoding}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/NAIVEENCODER-hist.pdf}\r
+       \caption{Naive Encoder Histogram}\r
+       \label{fig:naiveencoder}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/PREPROCESS-hist.pdf}\r
+       \caption{Preprocess Histogram}\r
+       \label{fig:preprocess}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/PROXYVARIABLE-hist.pdf}\r
+       \caption{Proxy Variable Histogram}\r
+       \label{fig:proxyvariable}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/VARIABLEORDER-hist.pdf}\r
+       \caption{Variable Order Histogram}\r
+       \label{fig:variableorder}\r
+\end{figure}\r
+\r
+\clearpage\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/EDGEENCODING-scat.pdf}\r
+       \caption{Encoding Edge plot}\r
+       \label{fig:edgeencodings}\r
+\end{figure}\r
+\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ELEMENTOPTSETS-scat.pdf}\r
+       \caption{Element Opt Set plot}\r
+       \label{fig:elementoptsets}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ELEMENTOPT-scat.pdf}\r
+       \caption{Element Opt plot}\r
+       \label{fig:elementopts}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/ENCODINGGRAPHOPT-scat.pdf}\r
+       \caption{Encoding Graph Optimization plot}\r
+       \label{fig:encodinggraphs}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/MUSTEDGEPRUNE-scat.pdf}\r
+       \caption{Must Prune plot}\r
+       \label{fig:mustedgeprunes}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/MUSTVALUE-scat.pdf}\r
+       \caption{Must Value plot}\r
+       \label{fig:mustvalues}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/NODEENCODING-scat.pdf}\r
+       \caption{Node Encoding plot}\r
+       \label{fig:nodeencodings}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/NAIVEENCODER-scat.pdf}\r
+       \caption{Naive Encoder plot}\r
+       \label{fig:naiveencoders}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/PREPROCESS-scat.pdf}\r
+       \caption{Preprocess Plot}\r
+       \label{fig:preprocesss}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/PROXYVARIABLE-scat.pdf}\r
+       \caption{Proxy Variable plot}\r
+       \label{fig:proxyvariables}\r
+\end{figure}\r
+\r
+\begin{figure}[htb]\r
+       \centering\r
+       \includegraphics[scale=0.6]{pics/VARIABLEORDER-scat.pdf}\r
+       \caption{Variable Order Plot}\r
+       \label{fig:variableorders}\r
+\end{figure}\r
+\r
index 24176217ba747e762266b24e7a202393fd1eabfb..d47df1f41c2e5eb88d2e09cb13c725324c4760f1 100644 (file)
@@ -2,7 +2,7 @@ import re
 import argparse
 import sys
 import os
-
+import plot as pl
 
 class AutoTunerArgParser:
        def __init__(self):
@@ -62,10 +62,13 @@ def printHeader(file):
 def dump(file, row):
        global TUNABLEHEADER
        mystr=""
+       data = []
        for i in range(len(TUNABLEHEADER)):
                mystr += row[TUNABLEHEADER[i]]+ ","
-       print "mystr is:"+ mystr
+               data.append(row[TUNABLEHEADER[i]])
+       print ("mystr is:"+ mystr)
        print >>file, mystr
+       return data
 
 def loadTunerInfo(row, filename):
        with open(filename) as f:
@@ -109,6 +112,7 @@ def analyzeLogs(file):
        argprocess = AutoTunerArgParser()
        printHeader(file)
        rows = []
+       data = []
        for i in range(argprocess.getRunNumber()):
                row = {"DECOMPOSEORDER" : "",
                        "MUSTREACHGLOBAL" : "",
@@ -136,9 +140,9 @@ def analyzeLogs(file):
                loadTunerInfo(row, argprocess.getFolder()+"/tuner"+str(i)+"used")
                loadSolverTime(row, argprocess.getFolder()+"/log"+str(i))
                loadProblemName(row, argprocess.getFolder()+"/problem"+str(i))
-               dump(file, row)
+               data.append(dump(file, row))
                rows.append(row)
-       return rows
+       return rows, data
 
 def tunerCountAnalysis(file, rows):
        global TUNABLEHEADER
@@ -160,7 +164,7 @@ def tunerCountAnalysis(file, rows):
                        tunernumber[mystr] += "-" + str(row["TUNERNUMBER"])
 
        problems = set(map(lambda x: x["PROBLEM"], rows))
-       print "Number of repititive tuners"
+       print ("Number of repititive tuners")
        for key in tunercount:
                if tunercount[key] > 1:
                        print key + "(ids:" + tunernumber[key]  + ") = #" + str(tunercount[key])
@@ -179,12 +183,19 @@ def combineRowForEachTuner(rows):
                        newRows.append(combined)
        return newRows
 
+def transformDataset(rows):
+       print(rows)
+
+
 def main():
+       global TUNABLEHEADER
        file = open("tuner.csv", "w")
-       rows = analyzeLogs(file)
+       rows, data = analyzeLogs(file)
        tunerCountAnalysis(file, combineRowForEachTuner(rows) )
        file.close()
-       return
+       #transformDataset(data)
+       pl.plot(data, TUNABLEHEADER)
+
 
 if __name__ == "__main__":
        main()