[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[oMetah-devel] ometah/experiment interface.py metahtest.py
From: |
Jean-Philippe Aumasson |
Subject: |
[oMetah-devel] ometah/experiment interface.py metahtest.py |
Date: |
Fri, 10 Jun 2005 05:17:17 -0400 |
CVSROOT: /cvsroot/ometah
Module name: ometah
Branch:
Changes by: Jean-Philippe Aumasson <address@hidden> 05/06/10 09:17:16
Modified files:
experiment : interface.py metahtest.py
Log message:
* working dir made with pb and metah names
* all output files renamed
* float conversion made at reading instead of plottin
* plan B for r.bitmap's SegFault bug (????????????)
* more logs and errors
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/experiment/interface.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/experiment/metahtest.py.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
Patches:
Index: ometah/experiment/interface.py
diff -u ometah/experiment/interface.py:1.2 ometah/experiment/interface.py:1.3
--- ometah/experiment/interface.py:1.2 Fri Jun 10 06:28:42 2005
+++ ometah/experiment/interface.py Fri Jun 10 09:17:15 2005
@@ -32,9 +32,10 @@
def __init__(self, args):
""" constructor, from command line arguments """
self.__argv = [''] + args[1:]
- self.__defaultFileName = ""
+ self.__defaultFileName = "metahtest"
+ self.__temp = "."
self.__path = "."
- self.__logfile = self.__defaultFileName + self.datedFileName("",
".log")
+ self.__logfile = "%s.log" % (self.__defaultFileName)
def getXmlFromExecOmetah(self, path):
""" execute ometah with given arguments,
@@ -65,7 +66,7 @@
plist = list of Point objects
breaks = number of breaks in the histogram """
vlist = []
- vlist = [float(x.value) for x in plist]
+ vlist = [x.value for x in plist]
r.hist(vlist, breaks, col='green', main='Distribution', xlab='Values',
ylab='Frequency')
def plotValuesIterationsGraph(self, plist, dimension):
@@ -74,7 +75,7 @@
dimension = dimension of the problem """
if dimension == 1 :
vlist = []
- vlist = [float(x.value) for x in plist]
+ vlist = [x.value for x in plist]
r.plot(vlist, type='o', col='red', main='Values evolution',
xlab='Points', ylab='Value')
elif dimension == 2:
self.log('ERROR : dimension 2
[Interface.plotValuesIterationsGraph]\n')
@@ -89,7 +90,7 @@
for i in range(iterations): # for each iteration
buf = [] # buf is a set of points for an
iteration
for j in range(ppi): # for each point of the cluster
- buf.append( float((plist[i * (ppi-1) + j]).value) )
+ buf.append( (plist[i * (ppi-1) + j]).value )
clist.append(buf) # add the created cluster to our
plotted list
r.boxplot(clist, style='quantile', col='orange', main='Boxes of
samples', xlab='Iterations')
@@ -104,7 +105,7 @@
for i in range(iterations):
buf = []
for j in range(ppi):
- buf.append( float((plist[i * (ppi-1) + j]).value))
+ buf.append( (plist[i * (ppi-1) + j]).value)
bflist.append(buf)
for i in bflist:
sdlist.append(r.sd(i))
@@ -127,19 +128,23 @@
def setPostscriptOutput(self, filename="default"):
""" set a postscript output file """
if filename == "default":
- s = "%s/%s" % (self.__path,
self.datedFileName(self.__defaultFileName, '.ps'))
+ # s = "%s/%s" % (self.__path,
self.datedFileName(self.__defaultFileName, '.ps'))
+ s = "%s/%s.ps" % (self.__path, self.__defaultFileName)
else:
- s = "%s/%s" % (self.__path, self.datedFileName(filename, '.ps'))
+ #s = "%s/%s" % (self.__path, self.datedFileName(filename, '.ps'))
+ s = "%s/%s.ps" % (self.__path, filename)
r.postscript(s, paper='letter')
def setBitmapOutput(self, filename="default"):
""" set a bitmap (png) output file """
if filename == "default":
- s = "%s/%s" % (self.__path,
self.datedFileName(self.__defaultFileName, '.png'))
+ #s = "%s/%s" % (self.__path,
self.datedFileName(self.__defaultFileName, '.png'))
+ s = "%s.png" % (self.__defaultFileName)
else:
- s = "%s/%s" % (self.__path, self.datedFileName(filename, '.png'))
- r.bitmap(s, res=150)
-
+ #s = "%s/%s" % (self.__path, self.datedFileName(filename, '.png'))
+ s = "%s.png" % (filename)
+ r.bitmap(s, res=150) # ??????? SEGFAULT ????????
+
def datedFileName(self, name, extension):
""" return a string of toda
y's date + given string """
@@ -154,7 +159,7 @@
""" set the path where will be saved the output files (ps &| png) """
try:
os.listdir(path)
- except:
+ except: # if can't ls the dir, create it :
try:
os.mkdir(path)
except:
@@ -164,7 +169,7 @@
def copyToDisk(self, rfd, filename=""):
""" copy the file open with fd to a new file on disk
used to cp XML output on disk """
- xfile = "%s/%s" % (self.__path, self.datedFileName(filename, '.xml'))
+ xfile = "%s/%s.xml" % (self.__path, filename)
try:
wfd = open(xfile, 'w')
except:
@@ -176,9 +181,18 @@
wfd.close()
return xfile
+ def setTemp(self, path):
+ """ set the path to the temporary directory """
+ self.__temp = path
+
def moveLog(self):
""" move the log file to the new path value """
- src = "./%s" % (self.__logfile)
+ src = "%s/%s" % (self.__temp, self.__logfile)
tar = "%s/" % (self.__path)
- # TODO !!!!!!!!!!!!
- # !!! pas de os.cp / os.mv ??? ...fchdir ?
+ try:
+ cmd = "mv %s %s" % (src, tar)
+ os.system(cmd)
+ except:
+ self.log('ERROR : cannot move log file [Interface.moveLog]\n')
+
+
Index: ometah/experiment/metahtest.py
diff -u ometah/experiment/metahtest.py:1.12 ometah/experiment/metahtest.py:1.13
--- ometah/experiment/metahtest.py:1.12 Fri Jun 10 06:28:42 2005
+++ ometah/experiment/metahtest.py Fri Jun 10 09:17:15 2005
@@ -40,9 +40,6 @@
W Organisation fichiers (arborescence ? noms fichiers ? clé/ID unique ? ..?)
-W Interface pour N runs, en plottant le nécessaire à chaque fois...
-1000 < N < 100 000
-
D renommer fonctions de plot selon les conventions
P [déjà bcp de methodes, redondances dans les noms..] interface plus simple
pour lancer un plottage
@@ -54,9 +51,6 @@
D récupérer infos sur le problème à partir du header XML, et instancier un
Header à remplir selon les vars parsées
-plottage de distribution : distrib pour chaque iteration, et pas pour
l'ensemble...superposition des distributions ?
--> distrib pour optima
-
W modulariser le prog
D création d'un répertoire pour placer les sortie, methode dans Interface pour
fixer le path, et pour le nom de fichier par défaut
@@ -69,9 +63,31 @@
D privater les méthodes non publiques ( add __ )
-passer directements les coodronnées lues en float, au lieu de le faire au
plotting -> économies de float()
+10/06/05
+
+W Interface pour N runs, en plottant le nécessaire à chaque fois...
+1000 < N < 100 000
+
+
+plottage de distribution : distrib pour chaque iteration, et pas pour
l'ensemble...superposition des distributions ?
+-> distrib pour optima
+
+D passer directements les coodronnées lues en float, au lieu de le faire au
plotting -> économies de float()
+
+D (inutile) renommer logfile et sortie XML APRES, because on ne connaît pas
encore le titre (nom pb + algo)
+
+W nommer fichier sortie image / ps : pb_algo_type_(date), trop long avec
date...
+-> la mettre pour le nom du répertoire : pb_algo_date
+
+D fonction pour déplacer le fichier de log
+
+copier valeur Header dans log
-renommer logfile et sortie XML APRES, because on ne connaît pas encore le
titre (nom pb + algo)
+Header.toString : pour mettre dans le log
+
+nettoyer le code, le lisibiliser
+
+print execution time in log
/----
@@ -142,10 +158,10 @@
def __getText(self, node):
return node.childNodes[0].nodeValue
- def __getList(self, nodes):
+ def __getListFloat(self, nodes):
li = []
for n in nodes:
- li.append(self.__getText(n))
+ li.append(float(self.__getText(n)))
return li
def getPoints(self):
@@ -163,8 +179,8 @@
if point.nodeType == point.ELEMENT_NODE:
p = Point()
try:
- p.value =
self.__getText(point.getElementsByTagName('values')[0])
- p.coords =
self.__getList(point.getElementsByTagName('solution')) #returns a list
+ p.value =
float(self.__getText(point.getElementsByTagName('values')[0]))
+ p.coords =
self.__getListFloat(point.getElementsByTagName('solution')) #returns a list
except:
self.__interface.log('ERROR : XML element
missing [XMLParser.getPoints]\n')
self.__pointsList__.append(p)
@@ -192,21 +208,21 @@
if point.nodeType == point.ELEMENT_NODE:
p = Point()
p.value =
self.__getText(point.getElementsByTagName('values')[0])
- p.coords =
self.__getList(point.getElementsByTagName('solution'))
+ p.coords =
self.__getListFloat(point.getElementsByTagName('solution'))
self.__header__.problem.optimum.append(p)
bounds = probl.getElementsByTagName('bounds')[0]
mini = bounds.getElementsByTagName('minimums')[0]
for point in mini.getElementsByTagName('point'):
if point.nodeType == point.ELEMENT_NODE:
p = Point()
- p.coords =
self.__getList(point.getElementsByTagName('solution'))
+ p.coords =
self.__getListFloat(point.getElementsByTagName('solution'))
self.__header__.problem.min_bound.append(p)
- maxi = bounds.getElementsByTagName('maximums')[0]
- for point in maxi.getElementsByTagName('point'):
- if point.nodeType == point.ELEMENT_NODE:
- p = Point()
- p.coords =
self.__getList(point.getElementsByTagName('solution'))
- self.__header__.problem.min_bound.append(p)
+ maxi = bounds.getElementsByTagName('maximums')[0]
+ for point in maxi.getElementsByTagName('point'):
+ if point.nodeType == point.ELEMENT_NODE:
+ p = Point()
+ p.coords =
self.__getListFloat(point.getElementsByTagName('solution'))
+ self.__header__.problem.max_bound.append(p)
except:
self.__interface.log('ERROR : XML exploration error for <problem>
[XMLParser.getHeader]\n')
@@ -268,8 +284,12 @@
pass
def toString(self):
- """ to generate a file name for the interface """
- s = "%s_%s " % (self.problem.name, self.metah.acronym)
+ """ return a long string with long description """
+ return "s"
+
+ def getTitle(self):
+ """ return a short string for titling files """
+ s = "%s_%s_" % (self.problem.name, self.metah.acronym)
return s
class Point:
@@ -295,7 +315,6 @@
import sys
import interface
-
# path to ometah binary
__OMETAH_PATH = "../ometah"
@@ -306,6 +325,12 @@
# nb of breaks in the distribution histogram
__HIST_BREAKS = 20
+ # name of the xml output file
+ __OMETAH_OUTPUT = 'ometah_output'
+
+ # temp directory to save files before final directory created
+ __TEMP_DIR = "."
+
# create a new Interface instance
intfc = interface.Interface(sys.argv)
@@ -313,7 +338,12 @@
intfc.setLog(1)
# set path to save logs and output files
- intfc.setPath("tests")
+ # temporarly current dir, because we don't know yet the name to give to
the dir
+ # files (xml and log) shall be moved later
+ intfc.setPath(__TEMP_DIR)
+
+ # to be used after __path updated
+ intfc.setTemp(__TEMP_DIR)
slog = "\n[ Starting at " + time.ctime() + " ] \n"
intfc.log(slog)
@@ -322,11 +352,13 @@
fd = intfc.getXmlFromExecOmetah(__OMETAH_PATH)
intfc.log('ometah execution ... OK\n')
+ """
# to get xml output from a file
# fd = intfc.getXmlFromFile(pathToTheFile)
-
+ """
+
# plan B to output XML, cos seek => error (file objects and FDs)
- fileOut = intfc.copyToDisk(fd, 'ometah_output')
+ fileOut = intfc.copyToDisk(fd, filename=__OMETAH_OUTPUT)
fd.close()
fd = open(fileOut, 'r')
@@ -343,9 +375,23 @@
# get header informations
header = parser.getHeader()
- title = header.toString()
-
- """
+ title = header.getTitle()
+
+ # NOW CAN CREATE THE DIR AND MOVE LOGFILE AND XMLOUTPUT
+
+ newpath = intfc.datedFileName(title, '')
+ # 1: create the new directory, and update interface's path value
+ intfc.setPath(newpath)
+ # 2: move log to the new place
+ intfc.moveLog()
+ # 3: move xml output to the new place
+ try:
+ cmd = "mv %s.xml %s &> /dev/null" % (__OMETAH_OUTPUT, newpath)
+ os.system(cmd)
+ except:
+ intfc.log('ERROR : cannot move XML file [main]\n')
+
+ """
intfc.setBitmapOutput(filename = 'valuesDistribHist')
intfc.plotValuesIterationsDistribHist(pointsList, __HIST_BREAKS)
r.dev_off()
@@ -357,23 +403,30 @@
r.dev_off()
interface.log('outputing results : plotValues(...) ... OK\n')
"""
- """
- intfc.setBitmapOutput(filename = 'valuesBoxes')
+
+ # set file name... strange segfault if use commented args (cf.
Interface.setBitmap..)
+ name = 'valueBoxes' # "%s_%s" % (title, 'valueBoxes')
+ intfc.setBitmapOutput(filename = name)
intfc.plotValuesIterationsBoxes(pointsList, 10)
r.dev_off()
intfc.log('outputing results : plotValuesIterationsBoxes(...) ... OK\n')
-
- intfc.setBitmapOutput(filename = 'valuesStD')
+
+ name = 'valueStdGraph'
+ intfc.setBitmapOutput(filename = name)
intfc.plotValuesIterationsStdGraph(pointsList, 10)
r.dev_off()
intfc.log('outputing results : plotValuesIterationsStdGraph(...) ...
OK\n')
- """
- slog = "\n[ End at " + time.ctime() + " ] \n"
- intfc.log(slog)
+
+ # plan B for r.bitmap's segfault : move all png and ps files to our
working directory
+ cmd = 'mv *.png *.ps %s &> /dev/null' % (newpath)
+ os.system(cmd)
- print "time :", (time.time()-t)
+ slog = "\nTotal time : %f\n" % ( time.time()-t )
+ intfc.log(slog)
+ slog = "\n[ End at " + time.ctime() + " ] \n"
+ intfc.log(slog)
if __name__ == '__main__':