1 // Copyright (C) 2006-2019 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // ----------------------------------------------------------------------------
22 %define SALOMEDOCSTRING
23 "Implementation of nodes for SALOME platform."
26 %module(directors="1",docstring=SALOMEDOCSTRING) SALOMERuntime
28 //work around SWIG bug #1863647
29 #if SWIG_VERSION >= 0x010336
30 #define SwigPyIterator SALOMERuntime_PySwigIterator
32 #define PySwigIterator SALOMERuntime_PySwigIterator
35 %feature("autodoc", "1");
37 %include engtypemaps.i
43 // ----------------------------------------------------------------------------
46 #include "SalomeContainer.hxx"
47 #include "SalomeHPContainer.hxx"
48 #include "RuntimeSALOME.hxx"
49 #include "SALOMEDispatcher.hxx"
50 #include "SalomeProc.hxx"
51 #include "PythonNode.hxx"
52 #include "PythonPorts.hxx"
53 #include "PresetNode.hxx"
54 #include "PresetPorts.hxx"
55 #include "CORBANode.hxx"
56 #include "CORBAPorts.hxx"
57 #include "StudyNodes.hxx"
58 #include "StudyPorts.hxx"
59 #include "TypeConversions.hxx"
60 #include "TypeCode.hxx"
61 #include "VisitorSaveSalomeSchema.hxx"
62 #include "VisitorSalomeSaveState.hxx"
63 #include "SalomeOptimizerLoop.hxx"
64 #include "DistributedPythonNode.hxx"
65 #include "PyOptimizerAlg.hxx"
66 #include "PyStdout.hxx"
67 #include "ExecutorSwig.hxx"
71 // ----------------------------------------------------------------------------
77 PyObject* omnipy = PyImport_ImportModule((char*)"_omnipy");
80 PyErr_SetString(PyExc_ImportError,(char*)"Cannot import _omnipy");
83 PyObject* pyapi = PyObject_GetAttrString(omnipy, (char*)"API");
84 api = (omniORBpyAPI*)PyCapsule_GetPointer(pyapi,"_omnipy.API");
89 static PyObject *convertContainer2(YACS::ENGINE::Container *cont, int owner=0)
92 return SWIG_NewPointerObj((void*)cont,SWIGTYPE_p_YACS__ENGINE__Container, owner);
93 if(dynamic_cast<YACS::ENGINE::SalomeHPContainer *>(cont))
95 return SWIG_NewPointerObj((void*)dynamic_cast<YACS::ENGINE::SalomeHPContainer *>(cont),SWIGTYPE_p_YACS__ENGINE__SalomeHPContainer, owner);
97 if(dynamic_cast<YACS::ENGINE::SalomeContainer *>(cont))
99 return SWIG_NewPointerObj((void*)dynamic_cast<YACS::ENGINE::SalomeContainer *>(cont),SWIGTYPE_p_YACS__ENGINE__SalomeContainer, owner);
101 return SWIG_NewPointerObj((void*)cont,SWIGTYPE_p_YACS__ENGINE__Container, owner);
105 // ----------------------------------------------------------------------------
108 %typemap(out) YACS_ORB::Observer_ptr
110 $result = api->cxxObjRefToPyObjRef($1, 1);
113 %typemap(in) YACS_ORB::Observer_ptr
117 CORBA::Object_ptr obj = api->pyObjRefToCxxObjRef($input,1);
118 $1 = YACS_ORB::Observer::_narrow(obj);
122 PyErr_SetString(PyExc_RuntimeError, "not a valid CORBA object ptr");
127 %typemap(out) YACS::ENGINE::PyObj * "Py_INCREF($1); $result = $1;";
131 // ----------------------------------------------------------------------------
135 %rename(getSALOMERuntime) YACS::ENGINE::getSALOMERuntime; // to suppress a 503 warning
136 %ignore omniORBpyAPI;
138 %include <YACSRuntimeSALOMEExport.hxx>
139 %include "SalomeContainer.hxx"
140 %include "SalomeHPContainer.hxx"
141 %include "RuntimeSALOME.hxx"
142 %include "SALOMEDispatcher.hxx"
143 %include "SalomeProc.hxx"
144 %include "PythonNode.hxx"
145 %include "PythonPorts.hxx"
146 %include "XMLPorts.hxx"
147 %include "PresetNode.hxx"
148 %include "PresetPorts.hxx"
149 %include "CORBANode.hxx"
150 %include "CORBAPorts.hxx"
151 %include "StudyNodes.hxx"
152 %include "StudyPorts.hxx"
153 %include "SalomeOptimizerLoop.hxx"
154 %include "DistributedPythonNode.hxx"
160 void schemaSaveState(Proc* proc,
162 const std::string& xmlSchemaFile);
167 %extend YACS::ENGINE::OutputPresetPort
169 void setDataPy(PyObject *ob)
171 std::string sss = convertPyObjectXml(self->edGetType(),ob);
177 // Define the methods that can (default) or cannot (nodirector) be overloaded in Python
178 %feature("director") YACS::ENGINE::PyOptimizerAlgBase;
179 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getTCForInProxy;
180 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getTCForOutProxy;
181 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::initializeProxy;
182 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::startProxy;
183 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::takeDecisionProxy;
184 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::finishProxy;
185 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::hasError;
186 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getError;
187 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::setError;
188 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getTCForAlgoInitProxy;
189 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getTCForAlgoResultProxy;
190 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::getAlgoResultProxy;
191 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgBase::setProc;
193 %feature("director") YACS::ENGINE::PyOptimizerAlgASync;
194 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getTCForInProxy;
195 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getTCForOutProxy;
196 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::initializeProxy;
197 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::startProxy;
198 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::takeDecisionProxy;
199 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::finishProxy;
200 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::hasError;
201 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getError;
202 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::setError;
203 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::signalMasterAndWait;
204 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::signalSlaveAndWait;
205 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::start;
206 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::takeDecision;
207 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::run;
208 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getTCForAlgoInitProxy;
209 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getTCForAlgoResultProxy;
210 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::getAlgoResultProxy;
211 %feature("nodirector") YACS::ENGINE::PyOptimizerAlgASync::setProc;
213 %feature("director:except") {
214 if ($error != NULL) {
215 std::string errorMessage;
216 PyObject* new_stderr = YACS::ENGINE::newPyStdOut(errorMessage);
217 PySys_SetObject((char*)"stderr", new_stderr);
219 PySys_SetObject((char*)"stderr", PySys_GetObject((char*)"__stderr__"));
220 Py_DECREF(new_stderr);
221 throw YACS::Exception(errorMessage);
225 // Warning: as PyOptimizerAlgSync is only a typedef in PyOptimizerAlg.hxx, we have to
226 // directly rename PyOptimizerAlgBase in OptimizerAlgSync. If someday PyOptimizerAlgSync
227 // becomes a real derived class, this will have to be changed.
228 %rename(OptimizerAlgSync) YACS::ENGINE::PyOptimizerAlgBase;
229 %rename(OptimizerAlgASync) YACS::ENGINE::PyOptimizerAlgASync;
230 %include "PyOptimizerAlg.hxx"
232 %extend YACS::ENGINE::RuntimeSALOME
234 PyObject *createContainer(const std::string& kind="")
236 YACS::ENGINE::Container *ret(self->createContainer(kind));
237 return convertContainer2(ret,SWIG_POINTER_OWN | 0);