Salome HOME
[EDF29576] : 6 options remaining
authorAnthony Geay <anthony.geay@edf.fr>
Thu, 22 Feb 2024 14:55:53 +0000 (15:55 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Thu, 22 Feb 2024 14:55:53 +0000 (15:55 +0100)
src/runtime/VisitorSalomeSaveState.cxx
src/runtime/VisitorSalomeSaveState.hxx
src/runtime_swig/SALOMERuntime.i
src/yacsloader/driver.py

index 187f7f680c02ba1ecf4d1040f233f417d54fa4c8..830a9c3abe59b464cdcfffb2eff79e40cd895320 100644 (file)
@@ -116,6 +116,11 @@ void YACS::ENGINE::schemaSaveState(Proc* proc,
                                   const std::string& xmlSchemaFile)
 {
   YACS::BASES::AutoLocker<YACS::BASES::Mutex> alck(&(exec->getTheMutexForSchedulerUpdate()));
+  schemaSaveStateUnsafe(proc,xmlSchemaFile);
+}
+
+void YACS::ENGINE::schemaSaveStateUnsafe(Proc* proc, const std::string& xmlSchemaFile)
+{
   VisitorSalomeSaveState vss(proc);
   vss.openFileDump(xmlSchemaFile);
   proc->accept(&vss);
index 3136955142325dc653c71502574a04b4626d551f..2306a72a03785f85b82780ce9384967d1fe63170 100644 (file)
@@ -39,6 +39,7 @@ namespace YACS
     YACSLIBENGINE_EXPORT void schemaSaveState(Proc* proc,
                                               Executor* exec,
                                               const std::string& xmlSchemaFile);
+    YACSLIBENGINE_EXPORT void schemaSaveStateUnsafe(Proc* proc, const std::string& xmlSchemaFile);
   }
 }
 #endif // VISITORSALOMESAVESTATE_HXX
index 40a200ad244b428f66c54499ffddeadbc3dd37e8..0d004b274e1596e782f3ff349613f2a66a24539d 100644 (file)
@@ -161,6 +161,7 @@ namespace YACS
     void schemaSaveState(Proc* proc,
                          Executor* exec,
                          const std::string& xmlSchemaFile);
+    void schemaSaveStateUnsafe(Proc* proc, const std::string& xmlSchemaFile);
   }
 }
 
index 2670af71218949214c6a464d937224b1b415f256..0f2b1f2388cfed04f2423f811da56f4a54e3d9e5 100644 (file)
@@ -18,7 +18,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py micro_schema.xml
+# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py -v -kt micro_schema.xml
+# python3 /home/H87074/salome/990_CEA/SALOME-master-native-DB11-SRC/SOURCES/yacs/src/yacsloader/driver.py --stop-on-error --dump-on-error="popo.xml" -v -kt -ip "PyScript0.p1=7" --dump-final="tutu.xml" micro_schema2.xml
 
 import loader
 import SALOMERuntime
@@ -28,35 +29,19 @@ import logging
 """
 struct arguments
 {
-  char *args[1];
   int display = 0;
-  int verbose = 0;
-  int stop = 0;
-  std::string dumpErrorFile;
   std::string finalDump;
   int dump = 0;
-  std::string xmlSchema;
   std::string loadState;
-  int shutdown = 10; # done
   int reset = 0;
-  int killPort = 0;
-  bool squeezeMemory = true;
-  std::list<std::string> init_ports;
 };
 
     {"display",         'd', "level", 0,                   "Display dot files: 0=never to 3=very often (default 0)"},
-    {"verbose",         'v', 0,       0,                   "Produce verbose output" },
-    {"stop-on-error",   's', 0,       0,                   "Stop on first error" },
-    {"dump-on-error",   'e', "file",  OPTION_ARG_OPTIONAL, "Stop on first error and dump state"},
     {"dump-final",      'f', "file",  OPTION_ARG_OPTIONAL, "dump final state"},
     {"dump",            'g', "nbsec", OPTION_ARG_OPTIONAL, "dump state"},
     {"load-state",      'l', "file",  0,                   "Load State from a previous partial execution"},
     {"save-xml-schema", 'x', "file",  OPTION_ARG_OPTIONAL, "dump xml schema"},
-    {"shutdown",        't', "level", 0,                   "Shutdown the schema: 0=no shutdown to 3=full shutdown (default 1)"},
     {"reset",           'r', "level", 0,                   "Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state (default 0)"},
-    {"kill-port",       'k', "port",  0,                   "Kill Salome application running on the specified port if the driver process is killed (with SIGINT or SIGTERM)"},
-    {"init_port",       'i', "value", OPTION_ARG_OPTIONAL, "Initialisation value of a port, specified as bloc.node.port=value."},
-    {"donotsqueeze",    'z', "value", 0,                   "Desactivate squeeze memory optimization."},
 
 """
 
@@ -97,41 +82,72 @@ def loadGraph( xmlFileName ):
     p=l.load( xmlFileName )
     return p
 
-def patchGraph( proc, squeezeMemory):
+def patchGraph( proc, squeezeMemory, initPorts):
     """
     Args:
     -----
 
     proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
     squeezeMemory ( bool ) : squeezememory to be activated
-
-    Returns
-    -------
-
-
+    initPorts (list<string>) : list of bloc.node.port=value.
 
     """
+    def parse_init_port(input):
+      """
+      Returns
+      -------
+      node, port, value
+      """
+      node_port, value = input.split("=")
+      nodePortSpl = node_port.split(".")
+      port = nodePortSpl[-1]
+      node = ".".join( nodePortSpl[:-1] )
+      return node,port,value
+       
     if squeezeMemory:
       logging.info("SqueezeMemory requested -> update proc")
       allNodes = proc.getAllRecursiveNodes()
       for node in allNodes:
         if isinstance(proc,SALOMERuntime.PythonNode):
           node.setSqueezeStatus( True )
-
+      for initPort in initPorts:
+         node,port,value = parse_init_port(initPort)
+         init_state = proc.setInPortValue(node, port, value)
+         if init_state != value:
+            raise RuntimeError(f"Error on initialization of {initPort}")
+         
+@SALOMEInitializationNeeded
+def prepareExecution(proc, isStop, dumpErrorFile):
+  """
+  Returns
+  -------
+
+  pilot.ExecutorSwig : Instance of executor
+  """
+  import pilot
+  ex=pilot.ExecutorSwig()
+  if isStop:
+    logging.info(f"Stop has been activated with {dumpErrorFile}")
+    ex.setStopOnError( dumpErrorFile!="", dumpErrorFile )
+  return ex
 
 @SALOMEInitializationNeeded
-def executeGraph( proc ):
+def executeGraph( executor, proc, finalDump ):
     """
     Args:
     -----
-
+  
+    executor (pilot.ExecutorSwig) : Executor in charge of evaluation.
     proc ( SALOMERuntime.SalomeProc ) : YACS Proc instance to be evaluated
+    finalDump ( string ) : filename containing final result of graph, if any.
 
     """
     import pilot
-    ex=pilot.ExecutorSwig()
-    ex.RunW(proc,0)
-    pass
+    executor.RunW(proc,0)
+    if proc.getEffectiveState() != pilot.DONE:
+      raise RuntimeError( proc.getErrorReport() )
+    if finalDump:
+      SALOMERuntime.schemaSaveStateUnsafe( proc, finalDump )
 
 @SALOMEInitializationNeeded
 def destroyElementsGeneratedByExecutionOfGraph( proc, shutdown ):
@@ -153,9 +169,13 @@ if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument('xmlfilename',help = "XML file containing YACS schema to be executed")
     parser.add_argument("-v", "--verbose", dest = "verbose",help="Produce verbose output", action='store_true')
+    parser.add_argument("--stop-on-error",dest="stop",help="Stop on first error", action='store_true')
+    parser.add_argument("--dump-on-error",dest="dumpErrorFile",help="Stop on first error and dump state")
     parser.add_argument("-kt", "--kerneltrace", dest = "kerneltrace",help="Produce verbose of SALOME/KERNEL", action='store_true')
+    parser.add_argument("--dump-final", dest ="finalDump", type=str, default="", help="dump final state")
     parser.add_argument("--shutdown", dest = 'shutdown', type=int , default=1, help="Shutdown the schema: 0=no shutdown to 3=full shutdown")
     parser.add_argument("-z","--donotsqueeze", dest = "donotsqueeze", help = "Desactivate squeeze memory optimization.", action='store_true')
+    parser.add_argument("-ip","--init-port", dest = 'init_port', type=str, help="Initialisation value of a port, specified as bloc.node.port=value.")
     args = parser.parse_args()
     #
     if args.verbose:
@@ -164,6 +184,7 @@ if __name__ == "__main__":
       positionVerbosityOfLoggerRegardingState()
     #
     proc = loadGraph( args.xmlfilename )
-    patchGraph( proc, not args.donotsqueeze)
-    executeGraph( proc )
+    patchGraph( proc, not args.donotsqueeze, args.init_port.split(","))
+    executor = prepareExecution( proc, args.stop, args.dumpErrorFile)
+    executeGraph( executor, proc, args.finalDump)
     destroyElementsGeneratedByExecutionOfGraph( proc, args.shutdown )