/[escript]/branches/arrexp_trunk2098/escript/src/Data.cpp
ViewVC logotype

Diff of /branches/arrexp_trunk2098/escript/src/Data.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2115 by jfenwick, Mon Dec 1 01:16:18 2008 UTC revision 2116 by jfenwick, Tue Dec 2 01:58:34 2008 UTC
# Line 39  extern "C" { Line 39  extern "C" {
39  #include <boost/python/extract.hpp>  #include <boost/python/extract.hpp>
40  #include <boost/python/long.hpp>  #include <boost/python/long.hpp>
41    
42    #include "WrappedArray.h"
43    
44  using namespace std;  using namespace std;
45  using namespace boost::python;  using namespace boost::python;
46  using namespace boost;  using namespace boost;
# Line 48  using namespace escript; Line 50  using namespace escript;
50  // The idea was that we could add an optional warning whenever a resolve is forced  // The idea was that we could add an optional warning whenever a resolve is forced
51  #define FORCERESOLVE if (isLazy()) {resolve();}  #define FORCERESOLVE if (isLazy()) {resolve();}
52    
53    
54    void escript::jtest(boost::python::object& obj)
55    {
56        WrappedArray w(obj);
57        DataTypes::ShapeType shape=w.getShape();
58        size_t rank=shape.size();
59        cout << "Rank=" << rank << endl;
60        for (unsigned int i=0;i<rank;++i)
61        {
62           cout << shape[i] << ",";
63        }
64        DataVector vec(DataTypes::noValues(shape));
65        cout << endl;
66        if (rank==1)
67        {
68           int i=0;
69           try
70           {
71             for (i=0;i<shape[0];++i)
72             {
73            vec[i]=w.getElt(i);
74             }
75           }
76           catch (...)
77           {
78            PyErr_Clear();
79            ostringstream oss;
80            oss << "Array filter - Error reading element " << i;
81            throw DataException(oss.str());
82           }
83        }
84        else if (rank==2)
85        {
86           int i=0;
87           int j=0;
88           try
89           {
90             for (i=0;i<shape[0];++i)       // element
91             {
92            for (j=0;j<shape[1];++j)    // row
93            {
94               vec[DataTypes::getRelIndex(shape,i,j)]=w.getElt(i,j);
95            }
96             }
97           }
98           catch (...)
99           {
100            PyErr_Clear();
101            ostringstream oss;
102            oss << "Array filter - Error reading element " << i << ',' << j;
103            throw DataException(oss.str());
104           }
105        }
106        else if (rank==3)
107        {
108           int i=0;
109           int j=0;
110           int k=0;
111           try
112           {
113             for (i=0;i<shape[0];++i)
114             {
115            for (j=0;j<shape[1];++j)
116            {
117               for (k=0;k<shape[2];++k)
118               {
119                  vec[DataTypes::getRelIndex(shape,i,j,k)]=w.getElt(i,j,k);
120               }
121            }
122             }
123           }
124           catch (...)
125           {
126            PyErr_Clear();
127            ostringstream oss;
128            oss << "Array filter - Error reading element " << i << ',' << j << ',' << k;
129            throw DataException(oss.str());
130           }
131        }
132        else if (rank==4)
133        {
134           int i=0;
135           int j=0;
136           int k=0;
137           int m=0;
138           try
139           {
140             for (i=0;i<shape[0];++i)
141             {
142            for (j=0;j<shape[1];++j)
143            {
144               for (k=0;k<shape[2];++k)
145               {
146                  for (m=0;m<shape[3];++m)
147                  {
148                     vec[DataTypes::getRelIndex(shape,i,j,k,m)]=w.getElt(i,j,k,m);
149                  }
150               }
151            }
152             }
153           }
154           catch (...)
155           {
156            PyErr_Clear();
157            ostringstream oss;
158            oss << "Array filter - Error reading element " << i << ',' << j << ',' << k << ',' << m;
159            throw DataException(oss.str());
160           }
161        }
162        for (int i=0;i<vec.size();++i)
163        {
164           cout << vec[i] << " ";
165        }
166        cout << endl;
167    }
168    
169    
170    
171    
172    
173    
174    /*
175        ArrayTools::getObjShape(obj,shape);
176        size_t rank=shape.size();
177        cout << "Rank=" << rank << endl;
178        for (unsigned int i=0;i<rank;++i)
179        {
180           cout << shape[i] << ",";
181        }
182        DataVector vec(DataTypes::noValues(shape));
183        cout << endl;
184        if (rank==1)
185        {
186           int i=0;
187           try
188           {
189             for (i=0;i<shape[0];++i)
190             {
191            vec[i]=extract<double>(obj[i]);
192             }
193           }
194           catch (...)
195           {
196            PyErr_Clear();
197            ostringstream oss;
198            oss << "Array filter - Error reading element " << i;
199            throw DataException(oss.str());
200           }
201        }
202        else if (rank==2)
203        {
204           int i=0;
205           int j=0;
206           try
207           {
208             for (i=0;i<shape[0];++i)       // element
209             {
210            for (j=0;j<shape[1];++j)    // row
211            {
212               vec[DataTypes::getRelIndex(shape,i,j)]=extract<double>(obj[i][j]);
213            }
214             }
215           }
216           catch (...)
217           {
218            PyErr_Clear();
219            ostringstream oss;
220            oss << "Array filter - Error reading element " << i << ',' << j;
221            throw DataException(oss.str());
222           }
223        }
224        else if (rank==3)
225        {
226           int i=0;
227           int j=0;
228           int k=0;
229           try
230           {
231             for (i=0;i<shape[0];++i)
232             {
233            for (j=0;j<shape[1];++j)
234            {
235               for (k=0;k<shape[2];++k)
236               {
237                  vec[DataTypes::getRelIndex(shape,i,j,k)]=extract<double>(obj[i][j][k]);
238               }
239            }
240             }
241           }
242           catch (...)
243           {
244            PyErr_Clear();
245            ostringstream oss;
246            oss << "Array filter - Error reading element " << i << ',' << j << ',' << k;
247            throw DataException(oss.str());
248           }
249        }
250        else if (rank==4)
251        {
252           int i=0;
253           int j=0;
254           int k=0;
255           int m=0;
256           try
257           {
258             for (i=0;i<shape[0];++i)
259             {
260            for (j=0;j<shape[1];++j)
261            {
262               for (k=0;k<shape[2];++k)
263               {
264                  for (m=0;m<shape[3];++m)
265                  {
266                     vec[DataTypes::getRelIndex(shape,i,j,k,m)]=extract<double>(obj[i][j][k][m]);
267                  }
268               }
269            }
270             }
271           }
272           catch (...)
273           {
274            PyErr_Clear();
275            ostringstream oss;
276            oss << "Array filter - Error reading element " << i << ',' << j << ',' << k << ',' << m;
277            throw DataException(oss.str());
278           }
279        }
280    */
281    
282    
283    
284    
285    
286    
287    
288    
289    
290    
291    
292    
293    // void escript::jtest()
294    // {
295    // //    string s=extract<std::string>(obj.attr("__str__")());
296    // //    cout << "[" << s << "]" << endl;
297    // //     int len=extract<int>(obj.attr("__len__")());
298    // // cerr << "Length=" << len << endl;
299    // //     for (int j=0;j<len;++j)
300    // //     {
301    // //   object it=obj.attr("__getitem__")(j);
302    // //   string s=extract<std::string>(it.attr("__str__")());
303    // //   cerr << "Item: " << j << s;
304    // //     }
305    //
306    // //     try
307    // //     {
308    // //   object z=obj.attr("nothere");
309    // //     }
310    // //     catch(...)
311    // //     {
312    // //   cout << "Caught exception\n";
313    // //     }
314    //
315    //     // 1 test capabilities -- check for required methods - write this later
316    //     // 2 compute rank and shape
317    //     // 3 get values
318    //
319    //     DataTypes::ShapeType shape;
320    //     object t=obj;
321    // //     int len=0;
322    // //     while (len=extract<int>(obj.attr("__len__")()),len>=1)
323    // //     {
324    // //   shape.push_back(len);
325    // //
326    // //     }
327    //
328    //    try
329    //    {
330    //  object z=t.attr("__getitem__");
331    //  if (z==0)
332    //  {
333    //      cerr << "Found null" << endl;
334    //  }
335    //    }
336    //    catch (...)
337    //    {
338    //  cerr << "Type does not support __getitem__" << endl;
339    //  boost::python::handle_exception();
340    //  return;
341    //    }
342    //    try
343    //    {
344    //  object z=t.attr("__len__")();
345    //    }
346    //    catch (...)
347    //    {
348    //  cerr << "Object does not support __len__" << endl;
349    //  boost::python::handle_exception();
350    //  return;
351    //    }
352    //
353    // cerr << "Loop entry" << endl;
354    //     bool done=false;
355    //     do
356    //     {
357    //  string s=extract<std::string>(t.attr("__str__")());
358    // cerr << "Processing: " <<  s<< endl;
359    //  int len=extract<int>(t.attr("__len__")());
360    // cerr << "Length is " << len << endl;
361    //  if (len<1)
362    //  {
363    //     throw DataException("Array filter - No empty elements please.");
364    //  }
365    //  shape.push_back(len);
366    //  if (shape.size()>ESCRIPT_MAX_DATA_RANK)
367    //  {
368    //     throw DataException("ArrayFilter - Maximum permitted rank is 4");
369    //  }
370    // cerr << "About to call [0]" << endl;
371    // //   t=t.attr("__getitem__")(0);
372    //  t=t[0];
373    //  try
374    //  {
375    // cerr << "About to test __getitem__ " << endl;
376    // //       object o=t.attr("__getitem__"); // test if the object has the method
377    //      object o=t[0];
378    // cerr << "Call to test succeeded" << endl;
379    //  }
380    //  catch (...)
381    //  {
382    //     done=true;
383    // cerr << "In catch" << endl;
384    //     boost::python::handle_exception();
385    //  }
386    // cerr << "Bottom of the loop" << endl;
387    //     } while (!done);
388    //     cout << "Rank=" << shape.size() << endl;
389    //     for (int i=0;i<shape.size(); ++i)
390    //     {
391    //  cout << shape[i] << endl;
392    //     }
393    // }
394    
395  Data::Data()  Data::Data()
396  {  {
397    //    //

Legend:
Removed from v.2115  
changed lines
  Added in v.2116

  ViewVC Help
Powered by ViewVC 1.1.26