Salome HOME
Updating copyright date information
[modules/adao.git] / resources / ADAOSchemaCatalog.xml
1 <?xml version='1.0' encoding='iso-8859-1' ?>
2 <!--
3   Copyright (C) 2008-2017 EDF R&D
4
5   This file is part of SALOME ADAO module
6
7   This library is free software; you can redistribute it and/or
8   modify it under the terms of the GNU Lesser General Public
9   License as published by the Free Software Foundation; either
10   version 2.1 of the License.
11
12   This library is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15   Lesser General Public License for more details.
16
17   You should have received a copy of the GNU Lesser General Public
18   License along with this library; if not, write to the Free Software
19   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
20
21   See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22   
23   Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
24 -->
25 <proc>
26
27   <objref name="computeAD" id="python:computeAD:1.0">
28     <base>pyobj</base>
29   </objref>
30
31   <!-- Types for parametric computations -->
32   <!-- TODO On devrait pouvoir le lire depuis le KERNEL !!!-->
33   <type name="long" kind="int"/>
34   <struct name="SALOME_TYPES/Parameter">
35     <member type="string" name="name"></member>
36     <member type="string" name="value"></member>
37   </struct>
38   <sequence content="SALOME_TYPES/Parameter" name="SALOME_TYPES/ParameterList"></sequence>
39   <sequence content="double" name="SALOME_TYPES/Variable"></sequence>
40   <sequence content="SALOME_TYPES/Variable" name="SALOME_TYPES/VariableSequence"></sequence>
41   <sequence content="SALOME_TYPES/VariableSequence" name="SALOME_TYPES/StateSequence"></sequence>
42   <sequence content="SALOME_TYPES/StateSequence" name="SALOME_TYPES/TimeSequence"></sequence>
43   <sequence content="string" name="SALOME_TYPES/VarList"></sequence>
44   <struct name="SALOME_TYPES/ParametricInput">
45     <member type="SALOME_TYPES/VarList" name="inputVarList"></member>
46     <member type="SALOME_TYPES/VarList" name="outputVarList"></member>
47     <member type="SALOME_TYPES/TimeSequence" name="inputValues"></member>
48     <member type="SALOME_TYPES/ParameterList" name="specificParameters"></member>
49   </struct>
50   <struct name="SALOME_TYPES/ParametricOutput">
51     <member type="SALOME_TYPES/TimeSequence" name="outputValues"></member>
52     <member type="SALOME_TYPES/ParameterList" name="specificOutputInfos"></member>
53     <member type="long" name="returnCode"></member>
54     <member type="string" name="errorMessage"></member>
55   </struct>
56
57
58   <inline name="CreateAssimilationStudy">
59     <script><code>
60
61 <![CDATA[
62 import numpy, logging
63 logging.debug("CREATE Entering in CreateAssimilationStudy")
64 print "Entering in the assimilation study"
65 print "Name is set to........:", Name
66 print "Algorithm is set to...:", Algorithm
67
68 # Create Assimilation study
69 from daYacsIntegration.daStudy import *
70 assim_study = daStudy(Name, Algorithm, Debug)
71
72 logging.debug("CREATE Data entered are:")
73
74 # Algorithm parameters
75 try:
76   AlgorithmParameters
77 except NameError:
78   pass
79 else:
80   logging.debug("CREATE AlgorithmParameters is %s"%AlgorithmParameters)
81   assim_study.setAlgorithmParameters(AlgorithmParameters)
82
83 # Background
84 try:
85   Background
86 except NameError:
87   pass
88 else:
89   logging.debug("CREATE Background is set")
90   logging.debug("CREATE BackgroundType is %s"%BackgroundType)
91   logging.debug("CREATE BackgroundStored is %s"%BackgroundStored)
92   assim_study.setBackgroundType(BackgroundType)
93   assim_study.setBackgroundStored(BackgroundStored)
94   assim_study.setBackground(Background)
95
96 # CheckingPoint
97 try:
98   CheckingPoint
99 except NameError:
100   pass
101 else:
102   logging.debug("CREATE CheckingPoint is set")
103   logging.debug("CREATE CheckingPointType is %s"%CheckingPointType)
104   logging.debug("CREATE CheckingPointStored is %s"%CheckingPointStored)
105   assim_study.setCheckingPointType(CheckingPointType)
106   assim_study.setCheckingPointStored(CheckingPointStored)
107   assim_study.setCheckingPoint(CheckingPoint)
108
109 # ControlInput
110 try:
111   ControlInput
112 except NameError:
113   pass
114 else:
115   logging.debug("CREATE ControlInput is set")
116   logging.debug("CREATE ControlInputType is %s"%ControlInputType)
117   logging.debug("CREATE ControlInputStored is %s"%ControlInputStored)
118   assim_study.setControlInputType(ControlInputType)
119   assim_study.setControlInputStored(ControlInputStored)
120   assim_study.setControlInput(ControlInput)
121
122 # Observation
123 try:
124   Observation
125 except NameError:
126   pass
127 else:
128   logging.debug("CREATE Observation is set")
129   logging.debug("CREATE ObservationType is %s"%ObservationType)
130   logging.debug("CREATE ObservationStored is %s"%ObservationStored)
131   assim_study.setObservationType(ObservationType)
132   assim_study.setObservationStored(ObservationStored)
133   assim_study.setObservation(Observation)
134
135 # BackgroundError
136 try:
137   BackgroundError
138 except NameError:
139   pass
140 else:
141   logging.debug("CREATE BackgroundError is set")
142   logging.debug("CREATE BackgroundErrorType is %s"%BackgroundErrorType)
143   logging.debug("CREATE BackgroundErrorStored is %s"%BackgroundErrorStored)
144   assim_study.setBackgroundErrorType(BackgroundErrorType)
145   assim_study.setBackgroundErrorStored(BackgroundErrorStored)
146   assim_study.setBackgroundError(BackgroundError)
147
148 # ObservationError
149 try:
150   ObservationError
151 except NameError:
152   pass
153 else:
154   logging.debug("CREATE ObservationError is set")
155   logging.debug("CREATE ObservationErrorType is %s"%ObservationErrorType)
156   logging.debug("CREATE ObservationErrorStored is %s"%ObservationErrorStored)
157   assim_study.setObservationErrorType(ObservationErrorType)
158   assim_study.setObservationErrorStored(ObservationErrorStored)
159   assim_study.setObservationError(ObservationError)
160
161 # EvolutionError
162 try:
163   EvolutionError
164 except NameError:
165   pass
166 else:
167   logging.debug("CREATE EvolutionError is set")
168   logging.debug("CREATE EvolutionErrorType is %s"%EvolutionErrorType)
169   logging.debug("CREATE EvolutionErrorStored is %s"%EvolutionErrorStored)
170   assim_study.setEvolutionErrorType(EvolutionErrorType)
171   assim_study.setEvolutionErrorStored(EvolutionErrorStored)
172   assim_study.setEvolutionError(EvolutionError)
173
174 # ObservationOperator
175 ObservationOperatorOk = 0
176 try:
177   ObservationOperator
178 except NameError:
179   pass
180 else:
181   logging.debug("CREATE ObservationOperator is set")
182   logging.debug("CREATE ObservationOperatorType is %s"%ObservationOperatorType)
183   assim_study.setObservationOperatorType("Matrix", ObservationOperatorType)
184   assim_study.setObservationOperator("Matrix", ObservationOperator)
185   ObservationOperatorOk = 1
186
187 if ObservationOperatorOk == 0:
188   try:
189     ObservationOperatorDirect
190   except NameError:
191     pass
192   else:
193     logging.debug("CREATE ObservationOperatorDirect is %s"%ObservationOperatorDirect)
194     assim_study.setObservationOperatorType("Direct", "Function")
195     assim_study.setObservationOperator("Direct", ObservationOperatorDirect)
196   try:
197     ObservationOperatorTangent
198   except NameError:
199     pass
200   else:
201     logging.debug("CREATE ObservationOperatorTangent is %s"%ObservationOperatorTangent)
202     assim_study.setObservationOperatorType("Tangent", "Function")
203     assim_study.setObservationOperator("Tangent", ObservationOperatorTangent)
204   try:
205     ObservationOperatorAdjoint
206   except NameError:
207     pass
208   else:
209     logging.debug("CREATE ObservationOperatorAdjoint is %s"%ObservationOperatorAdjoint)
210     assim_study.setObservationOperatorType("Adjoint", "Function")
211     assim_study.setObservationOperator("Adjoint", ObservationOperatorAdjoint)
212
213 # EvolutionModel
214 EvolutionModelOk = 0
215 try:
216   EvolutionModel
217 except NameError:
218   pass
219 else:
220   logging.debug("CREATE EvolutionModel is set")
221   logging.debug("CREATE EvolutionModelType is %s"%EvolutionModelType)
222   assim_study.setEvolutionModelType("Matrix", EvolutionModelType)
223   assim_study.setEvolutionModel("Matrix", EvolutionModel)
224   EvolutionModelOk = 1
225
226 if EvolutionModelOk == 0:
227   try:
228     EvolutionModelDirect
229   except NameError:
230     pass
231   else:
232     logging.debug("CREATE EvolutionModelDirect is %s"%EvolutionModelDirect)
233     assim_study.setEvolutionModelType("Direct", "Function")
234     assim_study.setEvolutionModel("Direct", EvolutionModelDirect)
235   try:
236     EvolutionModelTangent
237   except NameError:
238     pass
239   else:
240     logging.debug("CREATE EvolutionModelTangent is %s"%EvolutionModelTangent)
241     assim_study.setEvolutionModelType("Tangent", "Function")
242     assim_study.setEvolutionModel("Tangent", EvolutionModelTangent)
243   try:
244     EvolutionModelAdjoint
245   except NameError:
246     pass
247   else:
248     logging.debug("CREATE EvolutionModelAdjoint is %s"%EvolutionModelAdjoint)
249     assim_study.setEvolutionModelType("Adjoint", "Function")
250     assim_study.setEvolutionModel("Adjoint", EvolutionModelAdjoint)
251
252 # Variables
253 for name, size in zip(InputVariablesNames, InputVariablesSizes):
254   assim_study.setInputVariable(name, size)
255 for name, size in zip(OutputVariablesNames, OutputVariablesSizes):
256   assim_study.setOutputVariable(name, size)
257
258 if has_observers:
259   logging.debug("CREATE Observers keys are %s"%observers.keys())
260   # Adding observers to the study
261   for observer_name in observers.keys():
262     scheduler = ""
263     info = ""
264     number = str(observers[observer_name]["number"])
265     if "scheduler" in observers[observer_name].keys():
266       scheduler = observers[observer_name]["scheduler"]
267     if "info" in observers[observer_name].keys():
268       info = observers[observer_name]["info"]
269     assim_study.addObserver(observer_name, scheduler, info, number)
270 Study = assim_study
271 ]]>
272
273 </code></script>
274     <inport name="Name" type="string"/>
275     <inport name="Algorithm" type="string"/>
276     <inport name="Debug" type="bool"/>
277     <inport name="InputVariablesNames" type="stringvec"/>
278     <inport name="InputVariablesSizes" type="intvec"/>
279     <inport name="OutputVariablesNames" type="stringvec"/>
280     <inport name="OutputVariablesSizes" type="intvec"/>
281     <inport name="has_observers" type="bool"/>
282     <inport name="observers" type="pyobj"/>
283     <outport name="Study" type="pyobj"/>
284   </inline>
285
286   <inline name="CreateNumpyMatrixFromString">
287     <script><code><![CDATA[
288 import numpy, logging
289 logging.debug("CREATE Entering in CreateNumpyMatrixFromString")
290 matrix = numpy.matrix(matrix_in_string)
291 type = "Matrix"
292 logging.debug("CREATE Matrix is %s"%matrix)
293 ]]></code></script>
294     <inport name="matrix_in_string" type="string"/>
295     <outport name="matrix" type="pyobj"/>
296     <outport name="type" type="string"/>
297     <outport name="stored" type="bool"/>
298   </inline>
299
300   <inline name="CreateNumpyScalarSparseMatrixFromString">
301     <script><code><![CDATA[
302 import numpy, logging
303 logging.debug("CREATE Entering in CreateNumpyScalarSparseMatrixFromString")
304 matrix = numpy.matrix(matrix_in_string)
305 type = "ScalarSparseMatrix"
306 logging.debug("CREATE ScalarSparseMatrix is %s"%matrix)
307 ]]></code></script>
308     <inport name="matrix_in_string" type="string"/>
309     <outport name="matrix" type="pyobj"/>
310     <outport name="type" type="string"/>
311     <outport name="stored" type="bool"/>
312   </inline>
313
314   <inline name="CreateNumpyDiagonalSparseMatrixFromString">
315     <script><code><![CDATA[
316 import numpy, logging
317 logging.debug("CREATE Entering in CreateNumpyDiagonalSparseMatrixFromString")
318 matrix = numpy.matrix(matrix_in_string)
319 type = "DiagonalSparseMatrix"
320 logging.debug("CREATE DiagonalSparseMatrix is %s"%matrix)
321 ]]></code></script>
322     <inport name="matrix_in_string" type="string"/>
323     <outport name="matrix" type="pyobj"/>
324     <outport name="type" type="string"/>
325     <outport name="stored" type="bool"/>
326   </inline>
327
328   <inline name="CreateNumpyMatrixFromScript">
329     <script><code><![CDATA[
330 import logging, sys, os
331 logging.debug("CREATE Entering in CreateNumpyMatrixFromScript")
332 type = "Matrix"
333
334 # Get file path and filename
335 try:
336     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
337         sys.path.insert(0,studydir)
338 except:
339     pass
340 filepath = os.path.dirname(script)
341 filename = os.path.basename(script)
342 module_name = os.path.splitext(filename)[0]
343 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
344     sys.path.insert(0,filepath)
345
346 ]]></code></script>
347     <inport name="script" type="string"/>
348     <outport name="type" type="string"/>
349     <outport name="stored" type="bool"/>
350   </inline>
351
352   <inline name="CreateNumpyScalarSparseMatrixFromScript">
353     <script><code><![CDATA[
354 import logging, sys, os
355 logging.debug("CREATE Entering in CreateNumpyScalarSparseMatrixFromScript")
356 type = "ScalarSparseMatrix"
357
358 # Get file path and filename
359 try:
360     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
361         sys.path.insert(0,studydir)
362 except:
363     pass
364 filepath = os.path.dirname(script)
365 filename = os.path.basename(script)
366 module_name = os.path.splitext(filename)[0]
367 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
368     sys.path.insert(0,filepath)
369
370 ]]></code></script>
371     <inport name="script" type="string"/>
372     <outport name="type" type="string"/>
373     <outport name="stored" type="bool"/>
374   </inline>
375
376   <inline name="CreateNumpyDiagonalSparseMatrixFromScript">
377     <script><code><![CDATA[
378 import logging, sys, os
379 logging.debug("CREATE Entering in CreateNumpyDiagonalSparseMatrixFromScript")
380 type = "DiagonalSparseMatrix"
381
382 # Get file path and filename
383 try:
384     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
385         sys.path.insert(0,studydir)
386 except:
387     pass
388 filepath = os.path.dirname(script)
389 filename = os.path.basename(script)
390 module_name = os.path.splitext(filename)[0]
391 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
392     sys.path.insert(0,filepath)
393
394 ]]></code></script>
395     <inport name="script" type="string"/>
396     <outport name="type" type="string"/>
397     <outport name="stored" type="bool"/>
398   </inline>
399
400   <inline name="CreateNumpyVectorFromString">
401     <script><code><![CDATA[
402 import numpy, logging
403 logging.debug("CREATE Entering in CreateNumpyVectorFromString")
404 vector = numpy.matrix(vector_in_string)
405 type = "Vector"
406 logging.debug("Vector is %s"%vector)
407 ]]></code></script>
408     <inport name="vector_in_string" type="string"/>
409     <outport name="vector" type="pyobj"/>
410     <outport name="type" type="string"/>
411     <outport name="stored" type="bool"/>
412   </inline>
413
414   <inline name="CreateNumpyVectorFromScript">
415     <script><code><![CDATA[
416 import logging, sys, os
417 logging.debug("CREATE Entering in CreateNumpyVectorFromScript")
418 type = "Vector"
419
420 # Get file path and filename
421 try:
422     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
423         sys.path.insert(0,studydir)
424 except:
425     pass
426 filepath = os.path.dirname(script)
427 filename = os.path.basename(script)
428 module_name = os.path.splitext(filename)[0]
429 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
430     sys.path.insert(0,filepath)
431
432 ]]></code></script>
433     <inport name="script" type="string"/>
434     <outport name="type" type="string"/>
435     <outport name="stored" type="bool"/>
436   </inline>
437
438   <inline name="CreateNumpyVectorSerieFromString">
439     <script><code><![CDATA[
440 import numpy, logging
441 logging.debug("CREATE Entering in CreateNumpyVectorSerieFromString")
442 vector_in_list = eval(str(vector_in_string),{},{})
443 vector = numpy.matrix(vector_in_list)
444 type = "VectorSerie"
445 logging.debug("VectorSerie is %s"%vector)
446 ]]></code></script>
447     <inport name="vector_in_string" type="string"/>
448     <outport name="vector" type="pyobj"/>
449     <outport name="type" type="string"/>
450     <outport name="stored" type="bool"/>
451   </inline>
452
453   <inline name="CreateNumpyVectorSerieFromScript">
454     <script><code><![CDATA[
455 import logging, sys, os
456 logging.debug("CREATE Entering in CreateNumpyVectorSerieFromScript")
457 type = "VectorSerie"
458
459 # Get file path and filename
460 try:
461     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
462         sys.path.insert(0,studydir)
463 except:
464     pass
465 filepath = os.path.dirname(script)
466 filename = os.path.basename(script)
467 module_name = os.path.splitext(filename)[0]
468 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
469     sys.path.insert(0,filepath)
470
471 ]]></code></script>
472     <inport name="script" type="string"/>
473     <outport name="type" type="string"/>
474     <outport name="stored" type="bool"/>
475   </inline>
476
477   <inline name="SimpleExecuteDirectAlgorithm">
478     <script><code><![CDATA[
479 import logging
480 logging.debug("EXECUTE Entering in SimpleExecuteDirectAlgorithm")
481 from daYacsIntegration.daStudy import *
482 ADD = Study.getResults()
483 ADD.analyze()
484 ]]></code></script>
485     <inport name="Study" type="pyobj"/>
486     <outport name="Study" type="pyobj"/>
487   </inline>
488
489   <inline name="SimpleUserAnalysis">
490     <script><code><![CDATA[
491 #-*-coding:iso-8859-1-*-
492 import logging
493 logging.debug("TERMINATE Entering in SimpleUserAnalysis")
494 ADD = Study.getResults()
495 # User code is below
496
497 ]]></code></script>
498     <inport name="Study" type="pyobj"/>
499   </inline>
500
501   <inline name="FakeOptimizerLoopNode">
502     <script><code><![CDATA[
503 import logging
504 logging.debug("EXECUTE Entering in FakeOptimizerLoopNode")
505 result = None
506 ]]></code></script>
507     <inport name="computation" type="SALOME_TYPES/ParametricInput"/>
508     <outport name="result" type="SALOME_TYPES/ParametricOutput"/>
509   </inline>
510
511   <inline name="CreateDictFromString">
512     <script><code><![CDATA[
513 import logging, sys, os
514 logging.debug("CREATE Entering in CreateDictFromString")
515 dico = eval(dict_in_string)
516 ]]></code></script>
517     <inport name="dict_in_string" type="string"/>
518   </inline>
519
520   <inline name="CreateDictFromScript">
521     <script><code><![CDATA[
522 import logging, sys, os
523 logging.debug("CREATE Entering in CreateDictFromScript")
524
525 # Get file path and filename
526 try:
527     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
528         sys.path.insert(0,studydir)
529 except:
530     pass
531 filepath = os.path.dirname(script)
532 filename = os.path.basename(script)
533 module_name = os.path.splitext(filename)[0]
534 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
535     sys.path.insert(0,filepath)
536
537 ]]></code></script>
538     <inport name="script" type="string"/>
539   </inline>
540
541   <inline name="UserDataInitFromScript">
542     <script><code><![CDATA[
543 import logging, sys, os
544 logging.debug("CREATE Entering in UserDataInitFromScript")
545
546 # Get file path and filename
547 try:
548     if sys.path.count(studydir)==0 or (sys.path.count(studydir)>0 and sys.path.index(studydir)>0):
549         sys.path.insert(0,studydir)
550 except:
551     pass
552 filepath = os.path.dirname(script)
553 filename = os.path.basename(script)
554 module_name = os.path.splitext(filename)[0]
555 if sys.path.count(filepath)==0 or (sys.path.count(filepath)>0 and sys.path.index(filepath)>0):
556     sys.path.insert(0,filepath)
557
558 ]]></code></script>
559     <inport name="script" type="string"/>
560     <outport name="init_data" type="pyobj"/>
561   </inline>
562
563   <inline name="ReadForSwitchNode">
564     <script><code><![CDATA[
565 import logging
566 logging.debug("CREATE Entering in ReadForSwitchNode")
567 logging.debug("       with input data : "+str(data["specificParameters"]))
568 switch_value = -1
569 for param in data["specificParameters"]:
570   if param["name"] == "switch_value":
571     switch_value = int(param["value"])
572 logging.debug("       switching to value : "+str(switch_value))
573 ]]></code></script>
574     <inport name="data" type="SALOME_TYPES/ParametricInput"/>
575     <outport name="data" type="SALOME_TYPES/ParametricInput"/>
576     <outport name="switch_value" type="int"/>
577   </inline>
578
579   <inline name="ExtractDataNode">
580     <script><code><![CDATA[
581 import logging
582 logging.debug("TERMINATE Entering in ExtractDataNode")
583 import cPickle
584 from daCore.AssimilationStudy import AssimilationStudy
585 var = None
586 info = None
587 for param in data["specificParameters"]:
588   if param["name"] == "var":
589     var = cPickle.loads(param["value"])
590   if param["name"] == "info":
591     info = param["value"]
592 ]]></code></script>
593     <inport name="data" type="SALOME_TYPES/ParametricInput"/>
594     <outport name="var" type="pyobj"/>
595     <outport name="info" type="pyobj"/>
596   </inline>
597
598   <inline name="ObservationNodeString">
599     <script><code><![CDATA[]]></code></script>
600     <inport name="var" type="pyobj"/>
601     <inport name="info" type="pyobj"/>
602   </inline>
603
604   <inline name="ObservationNodeFile">
605     <script><code><![CDATA[execfile(script)]]></code></script>
606     <inport name="var"    type="pyobj"/>
607     <inport name="info"   type="pyobj"/>
608     <inport name="script" type="string"/>
609   </inline>
610
611   <inline name="EndObservationNode">
612     <script><code><![CDATA[
613 # Create a fake output object.
614 # An observer is always successful.
615 output = {}
616 output["outputValues"]        = [[[[]]]]
617 output["specificOutputInfos"] = []
618 output["returnCode"]          = 0
619 output["errorMessage"]        = ""
620 ]]></code></script>
621     <outport name="output" type="SALOME_TYPES/ParametricOutput"/>
622   </inline>
623
624   <inline name="SetObserversNode">
625     <script><code><![CDATA[
626 #print "Setting observers"
627 ]]></code></script>
628     <outport name="has_observers" type="bool"/>
629     <outport name="observers" type="pyobj"/>
630   </inline>
631 </proc>