ometah-devel
[Top][All Lists]
Advanced

[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__':
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]