/[escript]/trunk/escript/test/python/DataTest.py
ViewVC logotype

Diff of /trunk/escript/test/python/DataTest.py

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

revision 82 by jgs, Tue Oct 26 06:53:54 2004 UTC revision 97 by jgs, Tue Dec 14 05:39:33 2004 UTC
# Line 1  Line 1 
1  from finley import *  import sys
2    import unittest
3    import os
4                                                                                                                    
5    esys_root=os.getenv('ESYS_ROOT')
6    sys.path.append(esys_root+'/finley/lib')
7    sys.path.append(esys_root+'/escript/lib')
8    sys.path.append(esys_root+'/escript/py_src')
9                                                                                                                    
10    from escript import *
11    import finley
12    import numarray
13    from util import *
14    
15  """  """
16  tests arithmetic operations on Data:  tests arithmetic operations on Data:
# Line 28  Version $Id$ Line 40  Version $Id$
40    
41  """  """
42    
 from Data import *  
43  from numarray import array,Float64,ones,greater  from numarray import array,Float64,ones,greater
 from Constants import EPSILON  
44    
45  Tag1=10  Tag1=10
46  Tag2=11  Tag2=11
# Line 39  tol=1.E-15 Line 49  tol=1.E-15
49    
50  #  #
51  #  list of arguments: a list item has the form [a0,a1,a2]  #  list of arguments: a list item has the form [a0,a1,a2]
52  #  where a0 is the default value and a1 is used for tag Tag1  #  what a0 is the default value and a1 is used for tag Tag1
53  #  and a2 for tag2. a0,a1,a2 are converted into numarrays.  #  and a2 for tag2. a0,a1,a2 are converted into numarrays.
54  #    #  
55  #  binary operations are tested on all pairs from arglist  #  binary operations are tested on all pairs from arglist
# Line 58  tol=1.E-15 Line 68  tol=1.E-15
68  #  test are performed.  #  test are performed.
69  #    #  
70    
71  arglist = [    \  arglist = [ \
72  [ [3,4],[-5,6.],[2,3]                          ],  \  [ [3,4], [-5,6.], [2,3] ], \
73  [ [[1,2],[3,4]],[[5,6],[7,8]],[[-5,-6],[7,8]]     ],  \  [ [[1,2],[3,4]], [[5,6],[7,8]], [[-5,-6],[7,8]] ], \
74  [ [[15,8],[12,8]],[[-9,9],[13,8]],[[7,34],[19,7]] ],  \  [ [[15,8],[12,8]], [[-9,9],[13,8]], [[7,34],[19,7]] ], \
75  [ [[[15,8],[12,8]],[[-9,9],[13,8]]] , [[[3,4],[-9,4]],[[1,-9],[7,4]]] , [[[5,2],[6,2]],[[-6,4],[7,5]]]                          ], \  [ [[[15,8],[12,8]],[[-9,9],[13,8]]], [[[3,4],[-9,4]],[[1,-9],[7,4]]], [[[5,2],[6,2]],[[-6,4],[7,5]]] ], \
76  [ [3.],[6.],[3]                                ]  \  [ 3.0, 6.0, 3 ] \
77  ]  ]
78    
79  #  these are used test slicing:  # these are used to test slicing:
80  a_r1=[[1,2,3],[-1,-2,-3],[100,200,300]]  a_r1=[ [1,2,3], [-1,-2,-3], [100,200,300] ]
81  a_r1_in=[[1./1,2,3],[-1./1,-1./2,-1./3],[1./100,1./200,1./300]]  a_r1_in=[ [1./1,2,3], [-1./1,-1./2,-1./3], [1./100,1./200,1./300] ]
82  a_r4=[ \  a_r4=[ \
83   [ [ [[ 1,2,3],[11,12,13]], [[21,22,23],[31,32,33]], [[41,42,43],[51,52,53]]  ], [ [[101,102,103],[111,112,113]], [[121,122,123],[131,132,133]], [[141,142,143],[151,152,153]]  ], [ [[201,202,203],[211,212,213]], [[221,222,223],[231,232,233]], [[241,242,243],[251,252,253]]  ] ], \  [ [ [[ 1,2,3],[11,12,13]], [[21,22,23],[31,32,33]], [[41,42,43],[51,52,53]]  ], [ [[101,102,103],[111,112,113]], [[121,122,123],[131,132,133]], [[141,142,143],[151,152,153]]  ], [ [[201,202,203],[211,212,213]], [[221,222,223],[231,232,233]], [[241,242,243],[251,252,253]]  ] ], \
84   [ [ [[ -1,-2,-3],[-11,-12,-13]], [[-21,-22,-23],[-31,-32,-33]], [[-41,-42,-43],[-51,-52,-53]]  ], [ [[-101,-102,-103],[-111,-112,-113]], [[-121,-122,-123],[-131,-132,-133]], [[-141,-142,-143],[-151,-152,-153]]  ], [ [[-201,-202,-203],[-211,-212,-213]], [[-221,-222,-223],[-231,-232,-233]], [[-241,-242,-243],[-251,-252,-253]]  ] ], \  [ [ [[ -1,-2,-3],[-11,-12,-13]], [[-21,-22,-23],[-31,-32,-33]], [[-41,-42,-43],[-51,-52,-53]]  ], [ [[-101,-102,-103],[-111,-112,-113]], [[-121,-122,-123],[-131,-132,-133]], [[-141,-142,-143],[-151,-152,-153]]  ], [ [[-201,-202,-203],[-211,-212,-213]], [[-221,-222,-223],[-231,-232,-233]], [[-241,-242,-243],[-251,-252,-253]]  ] ], \
85    [ [[[ 11,12,13],[111,112,113]], [[121,122,123],[131,132,133]], [[141,142,143],[151,152,153]]  ], [ [[1101,1102,1103],[1111,1112,1113]], [[1121,1122,1123],[1131,1132,1133]], [[1141,1142,1143],[1151,1152,1153]]  ], [ [[1201,1202,1203],[1211,1212,1213]], [[1221,1222,1223],[1231,1232,1233]], [[1241,1242,1243],[1251,1252,1253]]  ] ] ]  [ [[[ 11,12,13],[111,112,113]], [[121,122,123],[131,132,133]], [[141,142,143],[151,152,153]]  ], [ [[1101,1102,1103],[1111,1112,1113]], [[1121,1122,1123],[1131,1132,1133]], [[1141,1142,1143],[1151,1152,1153]]  ], [ [[1201,1202,1203],[1211,1212,1213]], [[1221,1222,1223],[1231,1232,1233]], [[1241,1242,1243],[1251,1252,1253]]  ] ] ]
86  a_r4_in=[ \  a_r4_in=[ \
87   [ [ [[ 1./1,1./2,1./3],[1./11,1./12,1./13]], [[1./21,1./22,1./23],[1./31,1./32,1./33]], [[1./41,1./42,1./43],[1./51,1./52,1./53]]  ], [ [[1./101,1./102,1./103],[1./111,1./112,1./113]], [[1./121,1./122,1./123],[1./131,1./132,1./133]], [[1./141,1./142,1./143],[1./151,1./152,1./153]]  ], [ [[1./201,1./202,1./203],[1./211,1./212,1./213]], [[1./221,1./222,1./223],[1./231,1./232,1./233]], [[1./241,1./242,1./243],[1./251,1./252,1./253]]  ] ], \  [ [ [[ 1./1,1./2,1./3],[1./11,1./12,1./13]], [[1./21,1./22,1./23],[1./31,1./32,1./33]], [[1./41,1./42,1./43],[1./51,1./52,1./53]]  ], [ [[1./101,1./102,1./103],[1./111,1./112,1./113]], [[1./121,1./122,1./123],[1./131,1./132,1./133]], [[1./141,1./142,1./143],[1./151,1./152,1./153]]  ], [ [[1./201,1./202,1./203],[1./211,1./212,1./213]], [[1./221,1./222,1./223],[1./231,1./232,1./233]], [[1./241,1./242,1./243],[1./251,1./252,1./253]]  ] ], \
88   [ [ [[ -1./1,-1./2,-1./3],[-1./11,-1./12,-1./13]], [[-1./21,-1./22,-1./23],[-1./31,-1./32,-1./33]], [[-1./41,-1./42,-1./43],[-1./51,-1./52,-1./53]]  ], [ [[-1./101,-1./102,-1./103],[-1./111,-1./112,-1./113]], [[-1./121,-1./122,-1./123],[-1./131,-1./132,-1./133]], [[-1./141,-1./142,-1./143],[1./-151,-1./152,-1./153]]  ], [ [[-1./201,-1./202,-1./203],[-1./211,-1./212,-1./213]], [[-1./221,-1./222,-1./223],[-1./231,-1./232,-1./233]], [[-1./241,-1./242,-1./243],[-1./251,-1./252,-1./253]]  ] ], \  [ [ [[ -1./1,-1./2,-1./3],[-1./11,-1./12,-1./13]], [[-1./21,-1./22,-1./23],[-1./31,-1./32,-1./33]], [[-1./41,-1./42,-1./43],[-1./51,-1./52,-1./53]]  ], [ [[-1./101,-1./102,-1./103],[-1./111,-1./112,-1./113]], [[-1./121,-1./122,-1./123],[-1./131,-1./132,-1./133]], [[-1./141,-1./142,-1./143],[1./-151,-1./152,-1./153]]  ], [ [[-1./201,-1./202,-1./203],[-1./211,-1./212,-1./213]], [[-1./221,-1./222,-1./223],[-1./231,-1./232,-1./233]], [[-1./241,-1./242,-1./243],[-1./251,-1./252,-1./253]]  ] ], \
89    [ [[[ 1./11,1./12,1./13],[1./111,1./112,1./113]], [[1./121,1./122,1./123],[1./131,1./132,1./133]], [[1./141,1./142,1./143],[1./151,1./152,1./153]]  ], [ [[1./1101,1./1102,1./1103],[1./1111,1./1112,1./1113]], [[1./1121,1./1122,1./1123],[1./1131,1./1132,1./1133]], [[1./1141,1./1142,1./1143],[1./1151,1./1152,1./1153]]  ], [ [[1./1201,1./1202,1./1203],[1./1211,1./1212,1./1213]], [[1./1221,1./1222,1./1223],[1./1231,1./1232,1./1233]], [[1./1241,1./1242,1./1243],[1./1251,1./1252,1./1253]]  ] ] ]  [ [[[ 1./11,1./12,1./13],[1./111,1./112,1./113]], [[1./121,1./122,1./123],[1./131,1./132,1./133]], [[1./141,1./142,1./143],[1./151,1./152,1./153]]  ], [ [[1./1101,1./1102,1./1103],[1./1111,1./1112,1./1113]], [[1./1121,1./1122,1./1123],[1./1131,1./1132,1./1133]], [[1./1141,1./1142,1./1143],[1./1151,1./1152,1./1153]]  ], [ [[1./1201,1./1202,1./1203],[1./1211,1./1212,1./1213]], [[1./1221,1./1222,1./1223],[1./1231,1./1232,1./1233]], [[1./1241,1./1242,1./1243],[1./1251,1./1252,1./1253]]  ] ] ]
   
90    
91  def turnToArray(val,tagged):  def turnToArray(val,tagged):
92       if tagged=="Tagged1":       if tagged=="Tagged1":
# Line 93  def prepareArg(val,ex,wh): Line 102  def prepareArg(val,ex,wh):
102          out=val[0]          out=val[0]
103       else:       else:
104          if ex=="Expanded":          if ex=="Expanded":
105              exx=TRUE              exx=True
106          else:          else:
107              exx=FALSE              exx=False
108          out=Data(val[0],where=wh,expand=exx)          out=Data(val[0],what=wh,expand=exx)
109          if ex=="Tagged1":          if ex=="Tagged1":
110             out.addTaggedValue(Tag1,val[1])             out.setTaggedValue(Tag1,val[1])
111          elif ex=="Tagged2":          elif ex=="Tagged2":
112             out.addTaggedValue(Tag1,val[1])             out.setTaggedValue(Tag1,val[1])
113             out.addTaggedValue(Tag2,val[2])             out.setTaggedValue(Tag2,val[2])
114       return out       return out
115    
116  def checkResult(text,res,val0,val1,val2,wh):  def checkResult(text,res,val0,val1,val2,wh):
117       ref=Data(val0,where=wh,expand=TRUE)       ref=Data(val0,what=wh,expand=False)
118       ref.addTaggedValue(Tag1,val1)       ref.setTaggedValue(Tag1,val1)
119       ref.addTaggedValue(Tag2,val2)       ref.setTaggedValue(Tag2,val2)
120       norm=ref.L2()+tol       norm=Lsup(ref)+tol
121       error=(ref-res.expand()).L2()/norm       error=Lsup(ref-res)/norm
122       print "@@ %s at %s, shape %s: error = %e"%(text,wh,ref.getShape(),error)       print "@@ %s, shape %s: error = %e"%(text,ref.getShape(),error)
123       if error>tol:       if error>tol:
124         raise SystemError,"@@ %s at %s: error is too large"%(text,wh)         #raise SystemError,"@@ %s at %s: error is too large"%(text,wh)
125           print "**** %s: error is too large"%(text)
126    
127  def getRank(arg):  def getRank(arg):
128      if isinstance(arg,Data):      if isinstance(arg,Data):
# Line 140  def isScalar(arg): Line 150  def isScalar(arg):
150             else:             else:
151                return None                return None
152    
153  msh=Finley.Rectangle(20,6,1)  msh=finley.Rectangle(20,6,1)
154  for wh in [msh.Nodes(),msh.Elements()]:  for wh in [ContinuousFunction(msh),Function(msh)]:
155    
156  #  #
157  # ==============================================================  # ==============================================================
158  #  #
159  #   test slicing  # test slicing:
160  #  #
161    for ex1 in ["Array","Single","Expanded","Tagged1","Tagged2"]:  
162        # rank 2    for ex1 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:
163    
164          print "Slice getting: ", ex1, ":"
165    
166          # slice getting
167    
168          # rank 1
169        arg=prepareArg(a_r1,ex1,wh)        arg=prepareArg(a_r1,ex1,wh)
170        arrays=turnToArray(a_r1,ex1)        arrays=turnToArray(a_r1,ex1)
171        if isinstance(arg,Data):        if isinstance(arg,Data):
172            checkResult("slicing: rank=1,[:],"+ex1,arg[:], \            checkResult("slicing: rank=1 [:] "+ex1,arg[:], \
173                          arrays[0][:], \                          arrays[0][:], \
174                          arrays[1][:], \                          arrays[1][:], \
175                          arrays[2][:], \                          arrays[2][:], \
176                          wh)                          wh)
177            checkResult("slicing: rank=1 [1]"+ex1,arg[1], \            checkResult("slicing: rank=1 [1] "+ex1,arg[1], \
178                          arrays[0][1], \                          arrays[0][1], \
179                          arrays[1][1], \                          arrays[1][1], \
180                          arrays[2][1], \                          arrays[2][1], \
181                          wh)                          wh)
182            checkResult("slicing: rank=1 [1:3]"+ex1,arg[1:3], \            checkResult("slicing: rank=1 [1:3] "+ex1,arg[1:3], \
183                          arrays[0][1:3], \                          arrays[0][1:3], \
184                          arrays[1][1:3], \                          arrays[1][1:3], \
185                          arrays[2][1:3], \                          arrays[2][1:3], \
186                          wh)                          wh)
187    
188        # rank 4        # rank 4
189        arg=prepareArg(a_r4,ex1,wh)        arg=prepareArg(a_r4,ex1,wh)
190        arrays=turnToArray(a_r4,ex1)        arrays=turnToArray(a_r4,ex1)
191        if isinstance(arg,Data):        if isinstance(arg,Data):
192            checkResult("slicing: rank=4,[:],"+ex1,arg[:], \            checkResult("slicing: rank=4 [:] "+ex1,arg[:], \
193                          arrays[0][:], \                          arrays[0][:], \
194                          arrays[1][:], \                          arrays[1][:], \
195                          arrays[2][:], \                          arrays[2][:], \
196                          wh)                          wh)
197            checkResult("slicing: rank=4 [1]"+ex1,arg[1], \            checkResult("slicing: rank=4 [1] "+ex1,arg[1], \
198                          arrays[0][1], \                          arrays[0][1], \
199                          arrays[1][1], \                          arrays[1][1], \
200                          arrays[2][1], \                          arrays[2][1], \
201                          wh)                          wh)
202            checkResult("slicing: rank=4 [1:3]"+ex1,arg[1:3], \            checkResult("slicing: rank=4 [1:3] "+ex1,arg[1:3], \
203                          arrays[0][1:3], \                          arrays[0][1:3], \
204                          arrays[1][1:3], \                          arrays[1][1:3], \
205                          arrays[2][1:3], \                          arrays[2][1:3], \
206                          wh)                          wh)
207            checkResult("slicing: rank=4,[:,:],"+ex1,arg[:,:], \            checkResult("slicing: rank=4 [:,:] "+ex1,arg[:,:], \
208                          arrays[0][:,:], \                          arrays[0][:,:], \
209                          arrays[1][:,:], \                          arrays[1][:,:], \
210                          arrays[2][:,:], \                          arrays[2][:,:], \
211                          wh)                          wh)
212            checkResult("slicing: rank=4 [:,1]"+ex1,arg[:,1], \            checkResult("slicing: rank=4 [:,1] "+ex1,arg[:,1], \
213                          arrays[0][:,1], \                          arrays[0][:,1], \
214                          arrays[1][:,1], \                          arrays[1][:,1], \
215                          arrays[2][:,1], \                          arrays[2][:,1], \
216                          wh)                          wh)
217            checkResult("slicing: rank=4 [:,1:3]"+ex1,arg[:,1:3], \            checkResult("slicing: rank=4 [:,1:3] "+ex1,arg[:,1:3], \
218                          arrays[0][:,1:3], \                          arrays[0][:,1:3], \
219                          arrays[1][:,1:3], \                          arrays[1][:,1:3], \
220                          arrays[2][:,1:3], \                          arrays[2][:,1:3], \
221                          wh)                          wh)
222              checkResult("slicing: rank=4 [1:2,1:3] "+ex1,arg[1:2,1:3], \
           checkResult("slicing: rank=4 [1:2,1:3]"+ex1,arg[1:2,1:3], \  
223                          arrays[0][1:2,1:3], \                          arrays[0][1:2,1:3], \
224                          arrays[1][1:2,1:3], \                          arrays[1][1:2,1:3], \
225                          arrays[2][1:2,1:3], \                          arrays[2][1:2,1:3], \
226                          wh)                          wh)
227              checkResult("slicing: rank=4 [1:2,1:3,1,1] "+ex1,arg[1:2,1:3,1,1], \
           checkResult("slicing: rank=4 [1:2,1:3,1,1]"+ex1,arg[1:2,1:3,1,1], \  
228                          arrays[0][1:2,1:3,1,1], \                          arrays[0][1:2,1:3,1,1], \
229                          arrays[1][1:2,1:3,1,1], \                          arrays[1][1:2,1:3,1,1], \
230                          arrays[2][1:2,1:3,1,1], \                          arrays[2][1:2,1:3,1,1], \
231                          wh)                          wh)
232              checkResult("slicing: rank=4 [1:2,1:3,:,1] "+ex1,arg[1:2,1:3,:,1], \
           checkResult("slicing: rank=4 [1:2,1:3,:,1]"+ex1,arg[1:2,1:3,:,1], \  
233                          arrays[0][1:2,1:3,:,1], \                          arrays[0][1:2,1:3,:,1], \
234                          arrays[1][1:2,1:3,:,1], \                          arrays[1][1:2,1:3,:,1], \
235                          arrays[2][1:2,1:3,:,1], \                          arrays[2][1:2,1:3,:,1], \
236                          wh)                          wh)
237            checkResult("slicing: rank=4 [1:2,1:3,0,:]"+ex1,arg[1:2,1:3,0,:], \            checkResult("slicing: rank=4 [1:2,1:3,0,:] "+ex1,arg[1:2,1:3,0,:], \
238                          arrays[0][1:2,1:3,0,:], \                          arrays[0][1:2,1:3,0,:], \
239                          arrays[1][1:2,1:3,0,:], \                          arrays[1][1:2,1:3,0,:], \
240                          arrays[2][1:2,1:3,0,:], \                          arrays[2][1:2,1:3,0,:], \
241                          wh)                          wh)
242              checkResult("slicing: rank=4 [1:2,1:3,0,1] "+ex1,arg[1:2,1:3,0,1], \
           checkResult("slicing: rank=4 [1:2,1:3,0,1]"+ex1,arg[1:2,1:3,0,1], \  
243                          arrays[0][1:2,1:3,0,1], \                          arrays[0][1:2,1:3,0,1], \
244                          arrays[1][1:2,1:3,0,1], \                          arrays[1][1:2,1:3,0,1], \
245                          arrays[2][1:2,1:3,0,1], \                          arrays[2][1:2,1:3,0,1], \
246                          wh)                          wh)
247              checkResult("slicing: rank=4 [1,1,0,1] "+ex1,arg[1,1,0,1], \
           checkResult("slicing: rank=4 [1,1,0,1]"+ex1,arg[1,1,0,1], \  
248                          arrays[0][1,1,0,1], \                          arrays[0][1,1,0,1], \
249                          arrays[1][1,1,0,1], \                          arrays[1][1,1,0,1], \
250                          arrays[2][1,1,0,1], \                          arrays[2][1,1,0,1], \
251                          wh)                          wh)
252            # inserting:  
253            for ex2 in ["Array","Single","Expanded","Tagged1","Tagged2"]:            # slice setting
254                  # ranks 1:  
255              #for ex2 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:
256              for ex2 in ["Expanded"]:
257    
258                    print "Slice setting: ", ex1, ",", ex2, ":"
259    
260                    # rank 1
261    
262                  arrays_in=turnToArray(a_r1_in,ex2)                  arrays_in=turnToArray(a_r1_in,ex2)
263    
264                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
# Line 248  for wh in [msh.Nodes(),msh.Elements()]: Line 268  for wh in [msh.Nodes(),msh.Elements()]:
268                  arrays2[0][:]=a_in[0]                  arrays2[0][:]=a_in[0]
269                  arrays2[1][:]=a_in[1]                  arrays2[1][:]=a_in[1]
270                  arrays2[2][:]=a_in[2]                  arrays2[2][:]=a_in[2]
271                  checkResult("slicing, set: rank=1,[:],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=1 [:] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
272    
273                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
274                  arrays2=turnToArray(a_r1,ex1)                  arrays2=turnToArray(a_r1,ex1)
# Line 257  for wh in [msh.Nodes(),msh.Elements()]: Line 277  for wh in [msh.Nodes(),msh.Elements()]:
277                  arrays2[0][1]=a_in[0]                  arrays2[0][1]=a_in[0]
278                  arrays2[1][1]=a_in[1]                  arrays2[1][1]=a_in[1]
279                  arrays2[2][1]=a_in[2]                  arrays2[2][1]=a_in[2]
280                  checkResult("slicing, set: rank=1,[1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=1 [1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
281    
282                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
283                  arrays2=turnToArray(a_r1,ex1)                  arrays2=turnToArray(a_r1,ex1)
# Line 266  for wh in [msh.Nodes(),msh.Elements()]: Line 286  for wh in [msh.Nodes(),msh.Elements()]:
286                  arrays2[0][1:3]=a_in[0]                  arrays2[0][1:3]=a_in[0]
287                  arrays2[1][1:3]=a_in[1]                  arrays2[1][1:3]=a_in[1]
288                  arrays2[2][1:3]=a_in[2]                  arrays2[2][1:3]=a_in[2]
289                  checkResult("slicing, set: rank=1,[1:3],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=1 [1:3] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
290    
291                    # rank 4
292    
                 # ranks 4:  
293                  arrays_in=turnToArray(a_r4_in,ex2)                  arrays_in=turnToArray(a_r4_in,ex2)
294    
295                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
# Line 279  for wh in [msh.Nodes(),msh.Elements()]: Line 299  for wh in [msh.Nodes(),msh.Elements()]:
299                  arrays2[0][:]=a_in[0]                  arrays2[0][:]=a_in[0]
300                  arrays2[1][:]=a_in[1]                  arrays2[1][:]=a_in[1]
301                  arrays2[2][:]=a_in[2]                  arrays2[2][:]=a_in[2]
302                  checkResult("slicing, set: rank=4,[:],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [:] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
303    
304                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
305                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 288  for wh in [msh.Nodes(),msh.Elements()]: Line 308  for wh in [msh.Nodes(),msh.Elements()]:
308                  arrays2[0][1]=a_in[0]                  arrays2[0][1]=a_in[0]
309                  arrays2[1][1]=a_in[1]                  arrays2[1][1]=a_in[1]
310                  arrays2[2][1]=a_in[2]                  arrays2[2][1]=a_in[2]
311                  checkResult("slicing, set: rank=4,[1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
312    
313                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
314                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 297  for wh in [msh.Nodes(),msh.Elements()]: Line 317  for wh in [msh.Nodes(),msh.Elements()]:
317                  arrays2[0][1:3]=a_in[0]                  arrays2[0][1:3]=a_in[0]
318                  arrays2[1][1:3]=a_in[1]                  arrays2[1][1:3]=a_in[1]
319                  arrays2[2][1:3]=a_in[2]                  arrays2[2][1:3]=a_in[2]
320                  checkResult("slicing, set: rank=4,[1:3],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:3] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
321    
322                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
323                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 306  for wh in [msh.Nodes(),msh.Elements()]: Line 326  for wh in [msh.Nodes(),msh.Elements()]:
326                  arrays2[0][:,:]=a_in[0]                  arrays2[0][:,:]=a_in[0]
327                  arrays2[1][:,:]=a_in[1]                  arrays2[1][:,:]=a_in[1]
328                  arrays2[2][:,:]=a_in[2]                  arrays2[2][:,:]=a_in[2]
329                  checkResult("slicing, set: rank=4,[:,:],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [:,:] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
330    
331                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
332                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
333                  a_in=[arrays_in[0][:,1],arrays_in[1][:,1],arrays_in[2][:,1]]                  a_in=[arrays_in[0][:,1],arrays_in[1][:,1],arrays_in[2][:,1]]
                 print "WWW",a_in[0].shape,prepareArg(a_in,ex2,wh).shape  
334                  arg2[:,1]=prepareArg(a_in,ex2,wh)                  arg2[:,1]=prepareArg(a_in,ex2,wh)
335                  arrays2[0][:,1]=a_in[0]                  arrays2[0][:,1]=a_in[0]
336                  arrays2[1][:,1]=a_in[1]                  arrays2[1][:,1]=a_in[1]
337                  arrays2[2][:,1]=a_in[2]                  arrays2[2][:,1]=a_in[2]
338                  checkResult("slicing, set: rank=4,[:,1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [:,1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
339    
340                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
341                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 325  for wh in [msh.Nodes(),msh.Elements()]: Line 344  for wh in [msh.Nodes(),msh.Elements()]:
344                  arrays2[0][:,1:3]=a_in[0]                  arrays2[0][:,1:3]=a_in[0]
345                  arrays2[1][:,1:3]=a_in[1]                  arrays2[1][:,1:3]=a_in[1]
346                  arrays2[2][:,1:3]=a_in[2]                  arrays2[2][:,1:3]=a_in[2]
347                  checkResult("slicing, set: rank=4,[:,1:3],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [:,1:3] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
348    
349                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
350                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 334  for wh in [msh.Nodes(),msh.Elements()]: Line 353  for wh in [msh.Nodes(),msh.Elements()]:
353                  arrays2[0][1:2,1:3]=a_in[0]                  arrays2[0][1:2,1:3]=a_in[0]
354                  arrays2[1][1:2,1:3]=a_in[1]                  arrays2[1][1:2,1:3]=a_in[1]
355                  arrays2[2][1:2,1:3]=a_in[2]                  arrays2[2][1:2,1:3]=a_in[2]
356                  checkResult("slicing, set: rank=4,[1:2,1:3],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:2,1:3] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
357    
358                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
359                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 343  for wh in [msh.Nodes(),msh.Elements()]: Line 362  for wh in [msh.Nodes(),msh.Elements()]:
362                  arrays2[0][1:2,1:3,1,1]=a_in[0]                  arrays2[0][1:2,1:3,1,1]=a_in[0]
363                  arrays2[1][1:2,1:3,1,1]=a_in[1]                  arrays2[1][1:2,1:3,1,1]=a_in[1]
364                  arrays2[2][1:2,1:3,1,1]=a_in[2]                  arrays2[2][1:2,1:3,1,1]=a_in[2]
365                  checkResult("slicing, set: rank=4,[1:2,1:3,1,1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:2,1:3,1,1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
366    
367                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
368                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 352  for wh in [msh.Nodes(),msh.Elements()]: Line 371  for wh in [msh.Nodes(),msh.Elements()]:
371                  arrays2[0][1:2,1:3,:,1]=a_in[0]                  arrays2[0][1:2,1:3,:,1]=a_in[0]
372                  arrays2[1][1:2,1:3,:,1]=a_in[1]                  arrays2[1][1:2,1:3,:,1]=a_in[1]
373                  arrays2[2][1:2,1:3,:,1]=a_in[2]                  arrays2[2][1:2,1:3,:,1]=a_in[2]
374                  checkResult("slicing, set: rank=4,[1:2,1:3,:,1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:2,1:3,:,1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
375    
376                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
377                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 361  for wh in [msh.Nodes(),msh.Elements()]: Line 380  for wh in [msh.Nodes(),msh.Elements()]:
380                  arrays2[0][1:2,1:3,0,:]=a_in[0]                  arrays2[0][1:2,1:3,0,:]=a_in[0]
381                  arrays2[1][1:2,1:3,0,:]=a_in[1]                  arrays2[1][1:2,1:3,0,:]=a_in[1]
382                  arrays2[2][1:2,1:3,0,:]=a_in[2]                  arrays2[2][1:2,1:3,0,:]=a_in[2]
383                  checkResult("slicing, set: rank=4,[1:2,1:3,0,:],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:2,1:3,0,:] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
384    
385                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
386                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 370  for wh in [msh.Nodes(),msh.Elements()]: Line 389  for wh in [msh.Nodes(),msh.Elements()]:
389                  arrays2[0][1:2,1:3,0,1]=a_in[0]                  arrays2[0][1:2,1:3,0,1]=a_in[0]
390                  arrays2[1][1:2,1:3,0,1]=a_in[1]                  arrays2[1][1:2,1:3,0,1]=a_in[1]
391                  arrays2[2][1:2,1:3,0,1]=a_in[2]                  arrays2[2][1:2,1:3,0,1]=a_in[2]
392                  checkResult("slicing, set: rank=4,[1:2,1:3,0,1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1:2,1:3,0,1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
393    
394                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
395                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 379  for wh in [msh.Nodes(),msh.Elements()]: Line 398  for wh in [msh.Nodes(),msh.Elements()]:
398                  arrays2[0][1,1,0,1]=a_in[0]                  arrays2[0][1,1,0,1]=a_in[0]
399                  arrays2[1][1,1,0,1]=a_in[1]                  arrays2[1][1,1,0,1]=a_in[1]
400                  arrays2[2][1,1,0,1]=a_in[2]                  arrays2[2][1,1,0,1]=a_in[2]
401                  checkResult("slicing, set: rank=4,[1,1,0,1],"+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)                  checkResult("slicing, set: rank=4 [1,1,0,1] "+ex1+","+ex2,arg2,arrays2[0],arrays2[1],arrays2[2],wh)
402    
403  #  #
404  # ==============================================================  # ==============================================================
405  #  #
406  #   test operators:  # test operators:
407  #  #
   for ex1 in ["Array","Single","Expanded","Tagged1","Tagged2"]:  
   
408    
409        # test slicing    #for ex1 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:
410      for ex1 in ["Array","Constant","Expanded"]:
411    
412        for a1 in arglist:        for a1 in arglist:
413    
414          arg1=prepareArg(a1,ex1,wh)          arg1=prepareArg(a1,ex1,wh)
415          arrays1=turnToArray(a1,ex1)          arrays1=turnToArray(a1,ex1)
416          if isScalar(arg1):          if isScalar(arg1):
417             t1="(scalar)"             t1="(scalar)"
418          else:          else:
419             t1=""             t1=""
420    
421          #          #
422          #   unitary operation:          #   unary operations:
         #  
         #   the argument must be an object of class Data  
423          #          #
424    
425            print "Unary ops: ", ex1, ":"
426    
427          if isinstance(arg1,Data):          if isinstance(arg1,Data):
428    
429             # pos:             # pos:
430             ref=checkResult("+"+ex1,+arg1, \             #ref=checkResult("+"+ex1,+arg1, \
431                               +arrays1[0], \             #                  +arrays1[0], \
432                               +arrays1[1], \             #                  +arrays1[1], \
433                               +arrays1[2], \             #                  +arrays1[2], \
434                               wh)             #                  wh)
435             # neg:             # neg:
436             ref=checkResult("-"+ex1,-arg1, \             #ref=checkResult("-"+ex1,-arg1, \
437                               -arrays1[0], \             #                  -arrays1[0], \
438                               -arrays1[1], \             #                  -arrays1[1], \
439                               -arrays1[2], \             #                  -arrays1[2], \
440                               wh)             #                  wh)
441             # pos:             # pos:
442             ref=checkResult("where positive("+ex1+")",(arg1-3).wherePositive(), \             ref=checkResult("where positive("+ex1+")",(arg1-3).wherePositive(), \
443                               numarray.greater(arrays1[0],3.), \                               numarray.greater(arrays1[0],3.), \
444                               numarray.greater(arrays1[1],3.), \                               numarray.greater(arrays1[1],3.), \
445                               numarray.greater(arrays1[2],3.), \                               numarray.greater(arrays1[2],3.), \
446                               wh)                               wh)
   
            # non-negative:  
            ref=checkResult("where nonnegative("+ex1+")",(arg1-3).whereNonnegative(), \  
                              numarray.greater_equal(arrays1[0],3.), \  
                              numarray.greater_equal(arrays1[1],3.), \  
                              numarray.greater_equal(arrays1[2],3.), \  
                              wh)  
   
447             # negative:             # negative:
448             ref=checkResult("where negative("+ex1+")",(arg1-3).whereNegative(), \             ref=checkResult("where negative("+ex1+")",(arg1-3).whereNegative(), \
449                               numarray.greater(3.,arrays1[0]), \                               numarray.greater(3.,arrays1[0]), \
450                               numarray.greater(3.,arrays1[1]), \                               numarray.greater(3.,arrays1[1]), \
451                               numarray.greater(3.,arrays1[2]), \                               numarray.greater(3.,arrays1[2]), \
452                               wh)                               wh)
453               # non-negative:
454               ref=checkResult("where nonnegative("+ex1+")",(arg1-3).whereNonNegative(), \
455                                 numarray.greater_equal(arrays1[0],3.), \
456                                 numarray.greater_equal(arrays1[1],3.), \
457                                 numarray.greater_equal(arrays1[2],3.), \
458                                 wh)
459               # non-positive:
460               ref=checkResult("where nonpositive("+ex1+")",(arg1-3).whereNonPositive(), \
461                                 numarray.greater_equal(3.,arrays1[0]), \
462                                 numarray.greater_equal(3.,arrays1[1]), \
463                                 numarray.greater_equal(3.,arrays1[2]), \
464                                 wh)
465             # zero:             # zero:
466             ref=checkResult("where zero("+ex1+")",(arg1-3).whereZero(), \             ref=checkResult("where zero("+ex1+")",(arg1-3).whereZero(), \
467                               numarray.less_equal(numarray.abs(arrays1[0]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[0]-3.),EPSILON), \
468                               numarray.less_equal(numarray.abs(arrays1[1]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[1]-3.),EPSILON), \
469                               numarray.less_equal(numarray.abs(arrays1[2]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[2]-3.),EPSILON), \
470                               wh)                               wh)
   
471             # non-zero:             # non-zero:
472             ref=checkResult("where nonzero("+ex1+")",(arg1-3).whereNonzero(), \             ref=checkResult("where nonzero("+ex1+")",(arg1-3).whereNonZero(), \
473                               numarray.greater(numarray.abs(arrays1[0]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[0]-3.),EPSILON), \
474                               numarray.greater(numarray.abs(arrays1[1]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[1]-3.),EPSILON), \
475                               numarray.greater(numarray.abs(arrays1[2]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[2]-3.),EPSILON), \
476                               wh)                               wh)
477    
   
478          #          #
479          #  binary operations          #  binary operations
480          #          #
481          for ex2 in ["Array","Single","Expanded","Tagged1","Tagged2"]:  
482            for ex2 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:
483    
484              print "Binary ops: ", ex1, ",", ex2, ":"
485    
486            for a2 in arglist:            for a2 in arglist:
487    
488               arg2=prepareArg(a2,ex2,wh)               arg2=prepareArg(a2,ex2,wh)
489               arrays2=turnToArray(a2,ex2)               arrays2=turnToArray(a2,ex2)
490               if isScalar(arg2):               if isScalar(arg2):
491                  t2="(scalar)"                  t2="(scalar)"
492               else:               else:
493                  t2=""                  t2=""
494               #   at least of of the argument must be an object of class Data  
495               if isinstance(arg1,Data) or isinstance(arg2,Data):               if isinstance(arg1,Data) or isinstance(arg2,Data):
496    
497                  # the shape must match or at least one argument is sclar:                  # the shape must match or at least one argument is sclar:
498                  if getRank(arg1)==getRank(arg2) or isScalar(arg1) or isScalar(arg2) :                  if (getRank(arg1)==getRank(arg2)) or isScalar(arg1) or isScalar(arg2):
499    
500                    # sum                    # sum
501                    checkResult(ex1+t1+"+"+ex2+t2,arg1+arg2, \                    checkResult(ex1+t1+"+"+ex2+t2,arg1+arg2, \
502                                       arrays1[0]+arrays2[0], \                                       arrays1[0]+arrays2[0], \
# Line 474  for wh in [msh.Nodes(),msh.Elements()]: Line 505  for wh in [msh.Nodes(),msh.Elements()]:
505                                       wh)                                       wh)
506                    # sub                    # sub
507                    checkResult(ex1+t1+"-"+ex2+t2,arg1-arg2, \                    checkResult(ex1+t1+"-"+ex2+t2,arg1-arg2, \
508                                      arrays1[0]-arrays2[0], \                                       arrays1[0]-arrays2[0], \
509                                     arrays1[1]-arrays2[1], \                                       arrays1[1]-arrays2[1], \
510                                     arrays1[2]-arrays2[2], \                                       arrays1[2]-arrays2[2], \
511                                  wh)                                       wh)
512                    # mul                    # mul
513                    checkResult(ex1+t1+"*"+ex2+t2,arg1*arg2, \                    checkResult(ex1+t1+"*"+ex2+t2,arg1*arg2, \
514                                       arrays1[0]*arrays2[0], \                                       arrays1[0]*arrays2[0], \
# Line 489  for wh in [msh.Nodes(),msh.Elements()]: Line 520  for wh in [msh.Nodes(),msh.Elements()]:
520                                       arrays1[0]/arrays2[0], \                                       arrays1[0]/arrays2[0], \
521                                       arrays1[1]/arrays2[1], \                                       arrays1[1]/arrays2[1], \
522                                       arrays1[2]/arrays2[2], \                                       arrays1[2]/arrays2[2], \
523                                      wh)                                       wh)
524                    # pow                    # pow
                   # this is needed because of a bug in python2.2  
525                    if isinstance(arg1,Data):                    if isinstance(arg1,Data):
526                        a=arg1                      a=arg1
527                    else:                    else:
528                        a=Data(value=arg1,where=arg2.getAtoms())                      a=Data(value=arg1,what=arg2.getFunctionSpace())
529                    checkResult(ex1+t1+"^"+ex2+t2,a**arg2, \                    checkResult(ex1+t1+"^"+ex2+t2,a**arg2, \
530                                      arrays1[0]**arrays2[0], \                                       arrays1[0]**arrays2[0], \
531                                      arrays1[1]**arrays2[1], \                                       arrays1[1]**arrays2[1], \
532                                      arrays1[2]**arrays2[2], \                                       arrays1[2]**arrays2[2], \
533                                      wh)                                       wh)
534                      
535                    # inplace for arg2 which must be of class Data                    # inplace for arg2 which must be of class Data
536                    # if arg1 is expanded arg2 must be expanded                    # if arg1 is expanded arg2 must be expanded
537                    if isinstance(arg2,Data)  :                    if isinstance(arg2,Data):
538                      # and not (not ex2=="Expanded" and ex1=="Expanded") :  
539                       # if arg2 is scalar arg1 must be scalar:                       # if arg2 is scalar arg1 must be scalar:
540                       if not (isScalar(arg2) and not isScalar(arg1)):                       #if not (isScalar(arg2) and not isScalar(arg1)):
541                         if not(isScalar(arg2)) and not(isScalar(arg1)):
542    
543                          # inplace add:                          # inplace add:
544                          arrays2[0]+=arrays1[0]                          arrays2[0]+=arrays1[0]
545                          arrays2[1]+=arrays1[1]                          arrays2[1]+=arrays1[1]
# Line 528  for wh in [msh.Nodes(),msh.Elements()]: Line 560  for wh in [msh.Nodes(),msh.Elements()]:
560                                         arrays2[1], \                                         arrays2[1], \
561                                         arrays2[2], \                                         arrays2[2], \
562                                         wh)                                         wh)
   
563                          # inplace mul:                          # inplace mul:
564                          arrays2[0]*=arrays1[0]                          arrays2[0]*=arrays1[0]
565                          arrays2[1]*=arrays1[1]                          arrays2[1]*=arrays1[1]
# Line 550  for wh in [msh.Nodes(),msh.Elements()]: Line 581  for wh in [msh.Nodes(),msh.Elements()]:
581                                         arrays2[2], \                                         arrays2[2], \
582                                         wh)                                         wh)
583    
584  # $Log$  # end
 # Revision 1.1  2004/10/26 06:53:56  jgs  
 # Initial revision  
 #  
 # Revision 1.1  2004/09/21 03:39:42  jgs  
 # copied over DataTest.py script from esysproto  
 #  
 # Revision 1.5  2004/05/21 05:55:59  gross  
 # PDE class added  
 #  
 # Revision 1.4  2003/09/11 08:09:48  gross  
 # slicing for Data class object tested and fixed. DataTest successfully run  
 #  

Legend:
Removed from v.82  
changed lines
  Added in v.97

  ViewVC Help
Powered by ViewVC 1.1.26