1 // Copyright (C) 2007-2013 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.
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
19 // Author : Anthony Geay (CEA/DEN)
23 static PyObject* convertMEDFileMesh(ParaMEDMEM::MEDFileMesh* mesh, int owner) throw(INTERP_KERNEL::Exception)
31 if(dynamic_cast<ParaMEDMEM::MEDFileUMesh *>(mesh))
32 ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDFileUMesh,owner);
33 if(dynamic_cast<ParaMEDMEM::MEDFileCMesh *>(mesh))
34 ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDFileCMesh,owner);
35 if(dynamic_cast<ParaMEDMEM::MEDFileCurveLinearMesh *>(mesh))
36 ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDFileCurveLinearMesh,owner);
38 throw INTERP_KERNEL::Exception("Not recognized type of MEDFileMesh on downcast !");
42 static PyObject* convertMEDFileParameter1TS(ParaMEDMEM::MEDFileParameter1TS* p1ts, int owner) throw(INTERP_KERNEL::Exception)
50 if(dynamic_cast<MEDFileParameterDouble1TS *>(p1ts))
51 ret=SWIG_NewPointerObj((void*)p1ts,SWIGTYPE_p_ParaMEDMEM__MEDFileParameterDouble1TS,owner);
52 if(dynamic_cast<MEDFileParameterDouble1TSWTI *>(p1ts))
53 ret=SWIG_NewPointerObj((void*)p1ts,SWIGTYPE_p_ParaMEDMEM__MEDFileParameterDouble1TSWTI,owner);
55 throw INTERP_KERNEL::Exception("Not recognized type of MEDFileParameter1TS on downcast !");
59 static PyObject* convertMEDFileField1TS(ParaMEDMEM::MEDFileAnyTypeField1TS *p, int owner) throw(INTERP_KERNEL::Exception)
67 if(dynamic_cast<MEDFileField1TS *>(p))
68 ret=SWIG_NewPointerObj((void*)p,SWIGTYPE_p_ParaMEDMEM__MEDFileField1TS,owner);
69 if(dynamic_cast<MEDFileIntField1TS *>(p))
70 ret=SWIG_NewPointerObj((void*)p,SWIGTYPE_p_ParaMEDMEM__MEDFileIntField1TS,owner);
72 throw INTERP_KERNEL::Exception("Not recognized type of MEDFileAnyTypeField1TS on downcast !");
76 static PyObject* convertMEDFileFieldMultiTS(ParaMEDMEM::MEDFileAnyTypeFieldMultiTS *p, int owner) throw(INTERP_KERNEL::Exception)
84 if(dynamic_cast<MEDFileFieldMultiTS *>(p))
85 ret=SWIG_NewPointerObj((void*)p,SWIGTYPE_p_ParaMEDMEM__MEDFileFieldMultiTS,owner);
86 if(dynamic_cast<MEDFileIntFieldMultiTS *>(p))
87 ret=SWIG_NewPointerObj((void*)p,SWIGTYPE_p_ParaMEDMEM__MEDFileIntFieldMultiTS,owner);
89 throw INTERP_KERNEL::Exception("Not recognized type of MEDFileAnyTypeFieldMultiTS on downcast !");
93 static std::vector<std::pair<int,int> > convertTimePairIdsFromPy(PyObject *pyLi) throw(INTERP_KERNEL::Exception)
95 std::vector<std::pair<int,int> > ret;
96 if(PyList_Check(pyLi))
98 int size=PyList_Size(pyLi);
100 for(int i=0;i<size;i++)
102 PyObject *o=PyList_GetItem(pyLi,i);
105 std::pair<int,int> p;
106 int size2=PyTuple_Size(o);
108 throw INTERP_KERNEL::Exception("tuples in list must be of size 2 (dt,it) !");
109 PyObject *o0=PyTuple_GetItem(o,0);
111 p.first=(int)PyInt_AS_LONG(o0);
113 throw INTERP_KERNEL::Exception("First elem of tuples in list must be integer : dt !");
114 PyObject *o1=PyTuple_GetItem(o,1);
116 p.second=(int)PyInt_AS_LONG(o1);
118 throw INTERP_KERNEL::Exception("Second elem of tuples in list must be integer : dt !");
122 throw INTERP_KERNEL::Exception("list must contain tuples only");
126 throw INTERP_KERNEL::Exception("convertTimePairIdsFromPy : not a list");
130 static void converPyListToVecString(PyObject *pyLi, std::vector<std::string>& v)
132 if(PyList_Check(pyLi))
134 int size=PyList_Size(pyLi);
136 for(int i=0;i<size;i++)
138 PyObject *o=PyList_GetItem(pyLi,i);
139 if(!PyString_Check(o))
140 throw INTERP_KERNEL::Exception("In list passed in argument some elements are NOT strings ! Expected a list containing only strings !");
141 const char *st=PyString_AsString(o);
142 v[i]=std::string(st);
145 else if(PyTuple_Check(pyLi))
147 int size=PyTuple_Size(pyLi);
149 for(int i=0;i<size;i++)
151 PyObject *o=PyTuple_GetItem(pyLi,i);
152 if(!PyString_Check(o))
153 throw INTERP_KERNEL::Exception("In tuple passed in argument some elements are NOT strings ! Expected a tuple containing only strings !");
154 const char *st=PyString_AsString(o);
155 v[i]=std::string(st);
158 else if(PyString_Check(pyLi))
161 v[0]=std::string((const char *)PyString_AsString(pyLi));
165 throw INTERP_KERNEL::Exception("Unrecognized python argument : expected a list of string or tuple of string or string !");
169 static PyObject *convertFieldDoubleVecToPy(const std::vector<ParaMEDMEM::MEDCouplingFieldDouble *>& li)
172 PyObject *ret=PyList_New(sz);
173 for(int i=0;i<sz;i++)
175 PyObject *o=SWIG_NewPointerObj((void*)li[i],SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,SWIG_POINTER_OWN | 0);
176 PyList_SetItem(ret,i,o);
181 PyObject *convertVecPairVecStToPy(const std::vector< std::pair<std::vector<std::string>, std::string > >& vec)
183 int sz=(int)vec.size();
184 PyObject *ret=PyList_New(sz);
185 for(int i=0;i<sz;i++)
187 PyObject *t=PyTuple_New(2);
188 int sz2=(int)vec[i].first.size();
189 PyObject *ll=PyList_New(sz2);
190 for(int j=0;j<sz2;j++)
191 PyList_SetItem(ll,j,PyString_FromString(vec[i].first[j].c_str()));
192 PyTuple_SetItem(t,0,ll);
193 PyTuple_SetItem(t,1,PyString_FromString(vec[i].second.c_str()));
194 PyList_SetItem(ret,i,t);
199 std::vector< std::pair<std::string, std::string > > convertVecPairStStFromPy(PyObject *pyLi)
201 std::vector< std::pair<std::string, std::string > > ret;
202 const char *msg="convertVecPairStStFromPy : Expecting PyList of Tuples of size 2 ! The first elt in tuple is one string and the 2nd one a string !";
203 if(PyList_Check(pyLi))
205 int size=PyList_Size(pyLi);
207 for(int i=0;i<size;i++)
209 PyObject *o=PyList_GetItem(pyLi,i);
212 std::pair<std::string, std::string> p;
213 int size2=PyTuple_Size(o);
215 throw INTERP_KERNEL::Exception(msg);
216 PyObject *o0=PyTuple_GetItem(o,0);
217 if(PyString_Check(o0))
218 p.first=std::string(PyString_AsString(o0));
220 throw INTERP_KERNEL::Exception(msg);
221 PyObject *o1=PyTuple_GetItem(o,1);
222 if(PyString_Check(o1))
223 p.second=std::string(PyString_AsString(o1));
225 throw INTERP_KERNEL::Exception(msg);
229 throw INTERP_KERNEL::Exception(msg);
233 throw INTERP_KERNEL::Exception(msg);
236 std::vector< std::pair<std::vector<std::string>, std::string > > convertVecPairVecStFromPy(PyObject *pyLi)
238 std::vector< std::pair<std::vector<std::string>, std::string > > ret;
239 const char *msg="convertVecPairVecStFromPy : Expecting PyList of Tuples of size 2 ! The first elt in tuple is a list of strings and the 2nd one a string !";
240 if(PyList_Check(pyLi))
242 int size=PyList_Size(pyLi);
244 for(int i=0;i<size;i++)
246 PyObject *o=PyList_GetItem(pyLi,i);
249 std::pair<std::vector<std::string>, std::string> p;
250 int size2=PyTuple_Size(o);
252 throw INTERP_KERNEL::Exception(msg);
253 PyObject *o0=PyTuple_GetItem(o,0);
256 int size3=PyList_Size(o0);
257 p.first.resize(size3);
258 for(int j=0;j<size3;j++)
260 PyObject *o0j=PyList_GetItem(o0,j);
261 if(PyString_Check(o0j))
263 p.first[j]=std::string(PyString_AsString(o0j));
266 throw INTERP_KERNEL::Exception(msg);
270 throw INTERP_KERNEL::Exception(msg);
271 PyObject *o1=PyTuple_GetItem(o,1);
272 if(PyString_Check(o1))
273 p.second=std::string(PyString_AsString(o1));
275 throw INTERP_KERNEL::Exception(msg);
279 throw INTERP_KERNEL::Exception(msg);
283 throw INTERP_KERNEL::Exception(msg);
287 * Called by MEDFileAnyTypeFieldMultiTS::__getitem__ when \a elt0 is neither a list nor a slice.
288 * In this case a MEDFileAnyTypeField1TS object is returned.
290 int MEDFileAnyTypeFieldMultiTSgetitemSingleTS__(const MEDFileAnyTypeFieldMultiTS *self, PyObject *elt0) throw(INTERP_KERNEL::Exception)
292 if(elt0 && PyInt_Check(elt0))
294 return PyInt_AS_LONG(elt0);
296 else if(elt0 && PyTuple_Check(elt0))
298 if(PyTuple_Size(elt0)==2)
300 PyObject *o0=PyTuple_GetItem(elt0,0);
301 PyObject *o1=PyTuple_GetItem(elt0,1);
302 if(PyInt_Check(o0) && PyInt_Check(o1))
304 int iter=PyInt_AS_LONG(o0);
305 int order=PyInt_AS_LONG(o1);
306 return self->getPosOfTimeStep(iter,order);
309 throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::__getitem__ : invalid input param ! input is a tuple of size 2 but two integers are expected in this tuple to request a time steps !");
312 throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::__getitem__ : invalid input param ! input is a tuple of size != 2 ! two integers are expected in this tuple to request a time steps !");
314 else if(elt0 && PyFloat_Check(elt0))
316 double val=PyFloat_AS_DOUBLE(elt0);
317 return self->getPosGivenTime(val);
320 throw INTERP_KERNEL::Exception("MEDFileAnyTypeFieldMultiTS::__getitem__ : invalid input params ! expected fmts[int], fmts[int,int], or fmts[double] to request one time step ! To request a series of time steps invoke fmts[slice], fmts[list of int], fmts[list of double], or fmts[list of int,int] !");
324 * Called by MEDFileAnyTypeFieldMultiTS::__getitem__ when \a obj is neither a list nor a slice.
325 * In this case a MEDFileAnyTypeField1TS object is returned.
327 int MEDFileFieldsgetitemSingleTS__(const MEDFileFields *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
331 return (int)PyInt_AS_LONG(obj);
333 else if(PyString_Check(obj))
335 return self->getPosFromFieldName(PyString_AsString(obj));
338 throw INTERP_KERNEL::Exception("MEDFileFields::__getitem__ : only integer or string with fieldname supported !");