/[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 97 by jgs, Tue Dec 14 05:39:33 2004 UTC revision 100 by jgs, Wed Dec 15 03:48:48 2004 UTC
# Line 1  Line 1 
1  import sys  from finley import *
 import unittest  
 import os  
                                                                                                                   
 esys_root=os.getenv('ESYS_ROOT')  
 sys.path.append(esys_root+'/finley/lib')  
 sys.path.append(esys_root+'/escript/lib')  
 sys.path.append(esys_root+'/escript/py_src')  
                                                                                                                   
 from escript import *  
 import finley  
 import numarray  
 from util import *  
2    
3  """  """
4  tests arithmetic operations on Data:  tests arithmetic operations on Data:
# Line 40  Version $Id$ Line 28  Version $Id$
28    
29  """  """
30    
31    from Data import *
32  from numarray import array,Float64,ones,greater  from numarray import array,Float64,ones,greater
33    from Constants import EPSILON
34    
35  Tag1=10  Tag1=10
36  Tag2=11  Tag2=11
# Line 49  tol=1.E-15 Line 39  tol=1.E-15
39    
40  #  #
41  #  list of arguments: a list item has the form [a0,a1,a2]  #  list of arguments: a list item has the form [a0,a1,a2]
42  #  what a0 is the default value and a1 is used for tag Tag1  #  where a0 is the default value and a1 is used for tag Tag1
43  #  and a2 for tag2. a0,a1,a2 are converted into numarrays.  #  and a2 for tag2. a0,a1,a2 are converted into numarrays.
44  #    #  
45  #  binary operations are tested on all pairs from arglist  #  binary operations are tested on all pairs from arglist
# Line 68  tol=1.E-15 Line 58  tol=1.E-15
58  #  test are performed.  #  test are performed.
59  #    #  
60    
61  arglist = [ \  arglist = [    \
62  [ [3,4], [-5,6.], [2,3] ], \  [ [3,4],[-5,6.],[2,3]                          ],  \
63  [ [[1,2],[3,4]], [[5,6],[7,8]], [[-5,-6],[7,8]] ], \  [ [[1,2],[3,4]],[[5,6],[7,8]],[[-5,-6],[7,8]]     ],  \
64  [ [[15,8],[12,8]], [[-9,9],[13,8]], [[7,34],[19,7]] ], \  [ [[15,8],[12,8]],[[-9,9],[13,8]],[[7,34],[19,7]] ],  \
65  [ [[[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]]]                          ], \
66  [ 3.0, 6.0, 3 ] \  [ [3.],[6.],[3]                                ]  \
67  ]  ]
68    
69  # these are used to test slicing:  #  these are used test slicing:
70  a_r1=[ [1,2,3], [-1,-2,-3], [100,200,300] ]  a_r1=[[1,2,3],[-1,-2,-3],[100,200,300]]
71  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]]
72  a_r4=[ \  a_r4=[ \
73  [ [ [[ 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]]  ] ], \
74  [ [ [[ -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]]  ] ], \
75  [ [[[ 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]]  ] ] ]
76  a_r4_in=[ \  a_r4_in=[ \
77  [ [ [[ 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]]  ] ], \
78  [ [ [[ -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]]  ] ], \
79  [ [[[ 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]]  ] ] ]
80    
81    
82  def turnToArray(val,tagged):  def turnToArray(val,tagged):
83       if tagged=="Tagged1":       if tagged=="Tagged1":
# Line 102  def prepareArg(val,ex,wh): Line 93  def prepareArg(val,ex,wh):
93          out=val[0]          out=val[0]
94       else:       else:
95          if ex=="Expanded":          if ex=="Expanded":
96              exx=True              exx=TRUE
97          else:          else:
98              exx=False              exx=FALSE
99          out=Data(val[0],what=wh,expand=exx)          out=Data(val[0],where=wh,expand=exx)
100          if ex=="Tagged1":          if ex=="Tagged1":
101             out.setTaggedValue(Tag1,val[1])             out.addTaggedValue(Tag1,val[1])
102          elif ex=="Tagged2":          elif ex=="Tagged2":
103             out.setTaggedValue(Tag1,val[1])             out.addTaggedValue(Tag1,val[1])
104             out.setTaggedValue(Tag2,val[2])             out.addTaggedValue(Tag2,val[2])
105       return out       return out
106    
107  def checkResult(text,res,val0,val1,val2,wh):  def checkResult(text,res,val0,val1,val2,wh):
108       ref=Data(val0,what=wh,expand=False)       ref=Data(val0,where=wh,expand=TRUE)
109       ref.setTaggedValue(Tag1,val1)       ref.addTaggedValue(Tag1,val1)
110       ref.setTaggedValue(Tag2,val2)       ref.addTaggedValue(Tag2,val2)
111       norm=Lsup(ref)+tol       norm=ref.L2()+tol
112       error=Lsup(ref-res)/norm       error=(ref-res.expand()).L2()/norm
113       print "@@ %s, shape %s: error = %e"%(text,ref.getShape(),error)       print "@@ %s at %s, shape %s: error = %e"%(text,wh,ref.getShape(),error)
114       if error>tol:       if error>tol:
115         #raise SystemError,"@@ %s at %s: error is too large"%(text,wh)         raise SystemError,"@@ %s at %s: error is too large"%(text,wh)
        print "**** %s: error is too large"%(text)  
116    
117  def getRank(arg):  def getRank(arg):
118      if isinstance(arg,Data):      if isinstance(arg,Data):
# Line 150  def isScalar(arg): Line 140  def isScalar(arg):
140             else:             else:
141                return None                return None
142    
143  msh=finley.Rectangle(20,6,1)  msh=Finley.Rectangle(20,6,1)
144  for wh in [ContinuousFunction(msh),Function(msh)]:  for wh in [msh.Nodes(),msh.Elements()]:
   
145  #  #
146  # ==============================================================  # ==============================================================
147  #  #
148  # test slicing:  #   test slicing
149  #  #
150      for ex1 in ["Array","Single","Expanded","Tagged1","Tagged2"]:
151    for ex1 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:        # rank 2
   
       print "Slice getting: ", ex1, ":"  
   
       # slice getting  
   
       # rank 1  
152        arg=prepareArg(a_r1,ex1,wh)        arg=prepareArg(a_r1,ex1,wh)
153        arrays=turnToArray(a_r1,ex1)        arrays=turnToArray(a_r1,ex1)
154        if isinstance(arg,Data):        if isinstance(arg,Data):
155            checkResult("slicing: rank=1 [:] "+ex1,arg[:], \            checkResult("slicing: rank=1,[:],"+ex1,arg[:], \
156                          arrays[0][:], \                          arrays[0][:], \
157                          arrays[1][:], \                          arrays[1][:], \
158                          arrays[2][:], \                          arrays[2][:], \
159                          wh)                          wh)
160            checkResult("slicing: rank=1 [1] "+ex1,arg[1], \            checkResult("slicing: rank=1 [1]"+ex1,arg[1], \
161                          arrays[0][1], \                          arrays[0][1], \
162                          arrays[1][1], \                          arrays[1][1], \
163                          arrays[2][1], \                          arrays[2][1], \
164                          wh)                          wh)
165            checkResult("slicing: rank=1 [1:3] "+ex1,arg[1:3], \            checkResult("slicing: rank=1 [1:3]"+ex1,arg[1:3], \
166                          arrays[0][1:3], \                          arrays[0][1:3], \
167                          arrays[1][1:3], \                          arrays[1][1:3], \
168                          arrays[2][1:3], \                          arrays[2][1:3], \
169                          wh)                          wh)
   
170        # rank 4        # rank 4
171        arg=prepareArg(a_r4,ex1,wh)        arg=prepareArg(a_r4,ex1,wh)
172        arrays=turnToArray(a_r4,ex1)        arrays=turnToArray(a_r4,ex1)
173        if isinstance(arg,Data):        if isinstance(arg,Data):
174            checkResult("slicing: rank=4 [:] "+ex1,arg[:], \            checkResult("slicing: rank=4,[:],"+ex1,arg[:], \
175                          arrays[0][:], \                          arrays[0][:], \
176                          arrays[1][:], \                          arrays[1][:], \
177                          arrays[2][:], \                          arrays[2][:], \
178                          wh)                          wh)
179            checkResult("slicing: rank=4 [1] "+ex1,arg[1], \            checkResult("slicing: rank=4 [1]"+ex1,arg[1], \
180                          arrays[0][1], \                          arrays[0][1], \
181                          arrays[1][1], \                          arrays[1][1], \
182                          arrays[2][1], \                          arrays[2][1], \
183                          wh)                          wh)
184            checkResult("slicing: rank=4 [1:3] "+ex1,arg[1:3], \            checkResult("slicing: rank=4 [1:3]"+ex1,arg[1:3], \
185                          arrays[0][1:3], \                          arrays[0][1:3], \
186                          arrays[1][1:3], \                          arrays[1][1:3], \
187                          arrays[2][1:3], \                          arrays[2][1:3], \
188                          wh)                          wh)
189            checkResult("slicing: rank=4 [:,:] "+ex1,arg[:,:], \            checkResult("slicing: rank=4,[:,:],"+ex1,arg[:,:], \
190                          arrays[0][:,:], \                          arrays[0][:,:], \
191                          arrays[1][:,:], \                          arrays[1][:,:], \
192                          arrays[2][:,:], \                          arrays[2][:,:], \
193                          wh)                          wh)
194            checkResult("slicing: rank=4 [:,1] "+ex1,arg[:,1], \            checkResult("slicing: rank=4 [:,1]"+ex1,arg[:,1], \
195                          arrays[0][:,1], \                          arrays[0][:,1], \
196                          arrays[1][:,1], \                          arrays[1][:,1], \
197                          arrays[2][:,1], \                          arrays[2][:,1], \
198                          wh)                          wh)
199            checkResult("slicing: rank=4 [:,1:3] "+ex1,arg[:,1:3], \            checkResult("slicing: rank=4 [:,1:3]"+ex1,arg[:,1:3], \
200                          arrays[0][:,1:3], \                          arrays[0][:,1:3], \
201                          arrays[1][:,1:3], \                          arrays[1][:,1:3], \
202                          arrays[2][:,1:3], \                          arrays[2][:,1:3], \
203                          wh)                          wh)
204            checkResult("slicing: rank=4 [1:2,1:3] "+ex1,arg[1:2,1:3], \  
205              checkResult("slicing: rank=4 [1:2,1:3]"+ex1,arg[1:2,1:3], \
206                          arrays[0][1:2,1:3], \                          arrays[0][1:2,1:3], \
207                          arrays[1][1:2,1:3], \                          arrays[1][1:2,1:3], \
208                          arrays[2][1:2,1:3], \                          arrays[2][1:2,1:3], \
209                          wh)                          wh)
210            checkResult("slicing: rank=4 [1:2,1:3,1,1] "+ex1,arg[1:2,1:3,1,1], \  
211              checkResult("slicing: rank=4 [1:2,1:3,1,1]"+ex1,arg[1:2,1:3,1,1], \
212                          arrays[0][1:2,1:3,1,1], \                          arrays[0][1:2,1:3,1,1], \
213                          arrays[1][1:2,1:3,1,1], \                          arrays[1][1:2,1:3,1,1], \
214                          arrays[2][1:2,1:3,1,1], \                          arrays[2][1:2,1:3,1,1], \
215                          wh)                          wh)
216            checkResult("slicing: rank=4 [1:2,1:3,:,1] "+ex1,arg[1:2,1:3,:,1], \  
217              checkResult("slicing: rank=4 [1:2,1:3,:,1]"+ex1,arg[1:2,1:3,:,1], \
218                          arrays[0][1:2,1:3,:,1], \                          arrays[0][1:2,1:3,:,1], \
219                          arrays[1][1:2,1:3,:,1], \                          arrays[1][1:2,1:3,:,1], \
220                          arrays[2][1:2,1:3,:,1], \                          arrays[2][1:2,1:3,:,1], \
221                          wh)                          wh)
222            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,:], \
223                          arrays[0][1:2,1:3,0,:], \                          arrays[0][1:2,1:3,0,:], \
224                          arrays[1][1:2,1:3,0,:], \                          arrays[1][1:2,1:3,0,:], \
225                          arrays[2][1:2,1:3,0,:], \                          arrays[2][1:2,1:3,0,:], \
226                          wh)                          wh)
227            checkResult("slicing: rank=4 [1:2,1:3,0,1] "+ex1,arg[1:2,1:3,0,1], \  
228              checkResult("slicing: rank=4 [1:2,1:3,0,1]"+ex1,arg[1:2,1:3,0,1], \
229                          arrays[0][1:2,1:3,0,1], \                          arrays[0][1:2,1:3,0,1], \
230                          arrays[1][1:2,1:3,0,1], \                          arrays[1][1:2,1:3,0,1], \
231                          arrays[2][1:2,1:3,0,1], \                          arrays[2][1:2,1:3,0,1], \
232                          wh)                          wh)
233            checkResult("slicing: rank=4 [1,1,0,1] "+ex1,arg[1,1,0,1], \  
234              checkResult("slicing: rank=4 [1,1,0,1]"+ex1,arg[1,1,0,1], \
235                          arrays[0][1,1,0,1], \                          arrays[0][1,1,0,1], \
236                          arrays[1][1,1,0,1], \                          arrays[1][1,1,0,1], \
237                          arrays[2][1,1,0,1], \                          arrays[2][1,1,0,1], \
238                          wh)                          wh)
239              # inserting:
240            # slice setting            for ex2 in ["Array","Single","Expanded","Tagged1","Tagged2"]:
241                    # ranks 1:
           #for ex2 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:  
           for ex2 in ["Expanded"]:  
   
                 print "Slice setting: ", ex1, ",", ex2, ":"  
   
                 # rank 1  
   
242                  arrays_in=turnToArray(a_r1_in,ex2)                  arrays_in=turnToArray(a_r1_in,ex2)
243    
244                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
# Line 268  for wh in [ContinuousFunction(msh),Funct Line 248  for wh in [ContinuousFunction(msh),Funct
248                  arrays2[0][:]=a_in[0]                  arrays2[0][:]=a_in[0]
249                  arrays2[1][:]=a_in[1]                  arrays2[1][:]=a_in[1]
250                  arrays2[2][:]=a_in[2]                  arrays2[2][:]=a_in[2]
251                  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)
252    
253                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
254                  arrays2=turnToArray(a_r1,ex1)                  arrays2=turnToArray(a_r1,ex1)
# Line 277  for wh in [ContinuousFunction(msh),Funct Line 257  for wh in [ContinuousFunction(msh),Funct
257                  arrays2[0][1]=a_in[0]                  arrays2[0][1]=a_in[0]
258                  arrays2[1][1]=a_in[1]                  arrays2[1][1]=a_in[1]
259                  arrays2[2][1]=a_in[2]                  arrays2[2][1]=a_in[2]
260                  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)
261    
262                  arg2=prepareArg(a_r1,ex1,wh)                  arg2=prepareArg(a_r1,ex1,wh)
263                  arrays2=turnToArray(a_r1,ex1)                  arrays2=turnToArray(a_r1,ex1)
# Line 286  for wh in [ContinuousFunction(msh),Funct Line 266  for wh in [ContinuousFunction(msh),Funct
266                  arrays2[0][1:3]=a_in[0]                  arrays2[0][1:3]=a_in[0]
267                  arrays2[1][1:3]=a_in[1]                  arrays2[1][1:3]=a_in[1]
268                  arrays2[2][1:3]=a_in[2]                  arrays2[2][1:3]=a_in[2]
269                  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)
270    
                 # rank 4  
271    
272                    # ranks 4:
273                  arrays_in=turnToArray(a_r4_in,ex2)                  arrays_in=turnToArray(a_r4_in,ex2)
274    
275                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
# Line 299  for wh in [ContinuousFunction(msh),Funct Line 279  for wh in [ContinuousFunction(msh),Funct
279                  arrays2[0][:]=a_in[0]                  arrays2[0][:]=a_in[0]
280                  arrays2[1][:]=a_in[1]                  arrays2[1][:]=a_in[1]
281                  arrays2[2][:]=a_in[2]                  arrays2[2][:]=a_in[2]
282                  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)
283    
284                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
285                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 308  for wh in [ContinuousFunction(msh),Funct Line 288  for wh in [ContinuousFunction(msh),Funct
288                  arrays2[0][1]=a_in[0]                  arrays2[0][1]=a_in[0]
289                  arrays2[1][1]=a_in[1]                  arrays2[1][1]=a_in[1]
290                  arrays2[2][1]=a_in[2]                  arrays2[2][1]=a_in[2]
291                  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)
292    
293                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
294                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 317  for wh in [ContinuousFunction(msh),Funct Line 297  for wh in [ContinuousFunction(msh),Funct
297                  arrays2[0][1:3]=a_in[0]                  arrays2[0][1:3]=a_in[0]
298                  arrays2[1][1:3]=a_in[1]                  arrays2[1][1:3]=a_in[1]
299                  arrays2[2][1:3]=a_in[2]                  arrays2[2][1:3]=a_in[2]
300                  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)
301    
302                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
303                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 326  for wh in [ContinuousFunction(msh),Funct Line 306  for wh in [ContinuousFunction(msh),Funct
306                  arrays2[0][:,:]=a_in[0]                  arrays2[0][:,:]=a_in[0]
307                  arrays2[1][:,:]=a_in[1]                  arrays2[1][:,:]=a_in[1]
308                  arrays2[2][:,:]=a_in[2]                  arrays2[2][:,:]=a_in[2]
309                  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)
310    
311                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
312                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
313                  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]]
314                    print "WWW",a_in[0].shape,prepareArg(a_in,ex2,wh).shape
315                  arg2[:,1]=prepareArg(a_in,ex2,wh)                  arg2[:,1]=prepareArg(a_in,ex2,wh)
316                  arrays2[0][:,1]=a_in[0]                  arrays2[0][:,1]=a_in[0]
317                  arrays2[1][:,1]=a_in[1]                  arrays2[1][:,1]=a_in[1]
318                  arrays2[2][:,1]=a_in[2]                  arrays2[2][:,1]=a_in[2]
319                  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)
320    
321                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
322                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 344  for wh in [ContinuousFunction(msh),Funct Line 325  for wh in [ContinuousFunction(msh),Funct
325                  arrays2[0][:,1:3]=a_in[0]                  arrays2[0][:,1:3]=a_in[0]
326                  arrays2[1][:,1:3]=a_in[1]                  arrays2[1][:,1:3]=a_in[1]
327                  arrays2[2][:,1:3]=a_in[2]                  arrays2[2][:,1:3]=a_in[2]
328                  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)
329    
330                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
331                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 353  for wh in [ContinuousFunction(msh),Funct Line 334  for wh in [ContinuousFunction(msh),Funct
334                  arrays2[0][1:2,1:3]=a_in[0]                  arrays2[0][1:2,1:3]=a_in[0]
335                  arrays2[1][1:2,1:3]=a_in[1]                  arrays2[1][1:2,1:3]=a_in[1]
336                  arrays2[2][1:2,1:3]=a_in[2]                  arrays2[2][1:2,1:3]=a_in[2]
337                  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)
338    
339                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
340                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 362  for wh in [ContinuousFunction(msh),Funct Line 343  for wh in [ContinuousFunction(msh),Funct
343                  arrays2[0][1:2,1:3,1,1]=a_in[0]                  arrays2[0][1:2,1:3,1,1]=a_in[0]
344                  arrays2[1][1:2,1:3,1,1]=a_in[1]                  arrays2[1][1:2,1:3,1,1]=a_in[1]
345                  arrays2[2][1:2,1:3,1,1]=a_in[2]                  arrays2[2][1:2,1:3,1,1]=a_in[2]
346                  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)
347    
348                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
349                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 371  for wh in [ContinuousFunction(msh),Funct Line 352  for wh in [ContinuousFunction(msh),Funct
352                  arrays2[0][1:2,1:3,:,1]=a_in[0]                  arrays2[0][1:2,1:3,:,1]=a_in[0]
353                  arrays2[1][1:2,1:3,:,1]=a_in[1]                  arrays2[1][1:2,1:3,:,1]=a_in[1]
354                  arrays2[2][1:2,1:3,:,1]=a_in[2]                  arrays2[2][1:2,1:3,:,1]=a_in[2]
355                  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)
356    
357                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
358                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 380  for wh in [ContinuousFunction(msh),Funct Line 361  for wh in [ContinuousFunction(msh),Funct
361                  arrays2[0][1:2,1:3,0,:]=a_in[0]                  arrays2[0][1:2,1:3,0,:]=a_in[0]
362                  arrays2[1][1:2,1:3,0,:]=a_in[1]                  arrays2[1][1:2,1:3,0,:]=a_in[1]
363                  arrays2[2][1:2,1:3,0,:]=a_in[2]                  arrays2[2][1:2,1:3,0,:]=a_in[2]
364                  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)
365    
366                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
367                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 389  for wh in [ContinuousFunction(msh),Funct Line 370  for wh in [ContinuousFunction(msh),Funct
370                  arrays2[0][1:2,1:3,0,1]=a_in[0]                  arrays2[0][1:2,1:3,0,1]=a_in[0]
371                  arrays2[1][1:2,1:3,0,1]=a_in[1]                  arrays2[1][1:2,1:3,0,1]=a_in[1]
372                  arrays2[2][1:2,1:3,0,1]=a_in[2]                  arrays2[2][1:2,1:3,0,1]=a_in[2]
373                  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)
374    
375                  arg2=prepareArg(a_r4,ex1,wh)                  arg2=prepareArg(a_r4,ex1,wh)
376                  arrays2=turnToArray(a_r4,ex1)                  arrays2=turnToArray(a_r4,ex1)
# Line 398  for wh in [ContinuousFunction(msh),Funct Line 379  for wh in [ContinuousFunction(msh),Funct
379                  arrays2[0][1,1,0,1]=a_in[0]                  arrays2[0][1,1,0,1]=a_in[0]
380                  arrays2[1][1,1,0,1]=a_in[1]                  arrays2[1][1,1,0,1]=a_in[1]
381                  arrays2[2][1,1,0,1]=a_in[2]                  arrays2[2][1,1,0,1]=a_in[2]
382                  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)
   
383  #  #
384  # ==============================================================  # ==============================================================
385  #  #
386  # test operators:  #   test operators:
387  #  #
388      for ex1 in ["Array","Single","Expanded","Tagged1","Tagged2"]:
389    
   #for ex1 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:  
   for ex1 in ["Array","Constant","Expanded"]:  
390    
391        for a1 in arglist:        # test slicing
392    
393          for a1 in arglist:
394          arg1=prepareArg(a1,ex1,wh)          arg1=prepareArg(a1,ex1,wh)
395          arrays1=turnToArray(a1,ex1)          arrays1=turnToArray(a1,ex1)
396          if isScalar(arg1):          if isScalar(arg1):
397             t1="(scalar)"             t1="(scalar)"
398          else:          else:
399             t1=""             t1=""
   
400          #          #
401          #   unary operations:          #   unitary operation:
402            #
403            #   the argument must be an object of class Data
404          #          #
   
         print "Unary ops: ", ex1, ":"  
   
405          if isinstance(arg1,Data):          if isinstance(arg1,Data):
   
406             # pos:             # pos:
407             #ref=checkResult("+"+ex1,+arg1, \             ref=checkResult("+"+ex1,+arg1, \
408             #                  +arrays1[0], \                               +arrays1[0], \
409             #                  +arrays1[1], \                               +arrays1[1], \
410             #                  +arrays1[2], \                               +arrays1[2], \
411             #                  wh)                               wh)
412             # neg:             # neg:
413             #ref=checkResult("-"+ex1,-arg1, \             ref=checkResult("-"+ex1,-arg1, \
414             #                  -arrays1[0], \                               -arrays1[0], \
415             #                  -arrays1[1], \                               -arrays1[1], \
416             #                  -arrays1[2], \                               -arrays1[2], \
417             #                  wh)                               wh)
418             # pos:             # pos:
419             ref=checkResult("where positive("+ex1+")",(arg1-3).wherePositive(), \             ref=checkResult("where positive("+ex1+")",(arg1-3).wherePositive(), \
420                               numarray.greater(arrays1[0],3.), \                               numarray.greater(arrays1[0],3.), \
421                               numarray.greater(arrays1[1],3.), \                               numarray.greater(arrays1[1],3.), \
422                               numarray.greater(arrays1[2],3.), \                               numarray.greater(arrays1[2],3.), \
423                               wh)                               wh)
424             # negative:  
            ref=checkResult("where negative("+ex1+")",(arg1-3).whereNegative(), \  
                              numarray.greater(3.,arrays1[0]), \  
                              numarray.greater(3.,arrays1[1]), \  
                              numarray.greater(3.,arrays1[2]), \  
                              wh)  
425             # non-negative:             # non-negative:
426             ref=checkResult("where nonnegative("+ex1+")",(arg1-3).whereNonNegative(), \             ref=checkResult("where nonnegative("+ex1+")",(arg1-3).whereNonnegative(), \
427                               numarray.greater_equal(arrays1[0],3.), \                               numarray.greater_equal(arrays1[0],3.), \
428                               numarray.greater_equal(arrays1[1],3.), \                               numarray.greater_equal(arrays1[1],3.), \
429                               numarray.greater_equal(arrays1[2],3.), \                               numarray.greater_equal(arrays1[2],3.), \
430                               wh)                               wh)
431             # non-positive:  
432             ref=checkResult("where nonpositive("+ex1+")",(arg1-3).whereNonPositive(), \             # negative:
433                               numarray.greater_equal(3.,arrays1[0]), \             ref=checkResult("where negative("+ex1+")",(arg1-3).whereNegative(), \
434                               numarray.greater_equal(3.,arrays1[1]), \                               numarray.greater(3.,arrays1[0]), \
435                               numarray.greater_equal(3.,arrays1[2]), \                               numarray.greater(3.,arrays1[1]), \
436                                 numarray.greater(3.,arrays1[2]), \
437                               wh)                               wh)
438    
439             # zero:             # zero:
440             ref=checkResult("where zero("+ex1+")",(arg1-3).whereZero(), \             ref=checkResult("where zero("+ex1+")",(arg1-3).whereZero(), \
441                               numarray.less_equal(numarray.abs(arrays1[0]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[0]-3.),EPSILON), \
442                               numarray.less_equal(numarray.abs(arrays1[1]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[1]-3.),EPSILON), \
443                               numarray.less_equal(numarray.abs(arrays1[2]-3.),EPSILON), \                               numarray.less_equal(numarray.abs(arrays1[2]-3.),EPSILON), \
444                               wh)                               wh)
445    
446             # non-zero:             # non-zero:
447             ref=checkResult("where nonzero("+ex1+")",(arg1-3).whereNonZero(), \             ref=checkResult("where nonzero("+ex1+")",(arg1-3).whereNonzero(), \
448                               numarray.greater(numarray.abs(arrays1[0]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[0]-3.),EPSILON), \
449                               numarray.greater(numarray.abs(arrays1[1]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[1]-3.),EPSILON), \
450                               numarray.greater(numarray.abs(arrays1[2]-3.),EPSILON), \                               numarray.greater(numarray.abs(arrays1[2]-3.),EPSILON), \
451                               wh)                               wh)
452    
453    
454          #          #
455          #  binary operations          #  binary operations
456          #          #
457            for ex2 in ["Array","Single","Expanded","Tagged1","Tagged2"]:
         for ex2 in ["Array","Constant","Expanded","Tagged1","Tagged2"]:  
   
           print "Binary ops: ", ex1, ",", ex2, ":"  
   
458            for a2 in arglist:            for a2 in arglist:
   
459               arg2=prepareArg(a2,ex2,wh)               arg2=prepareArg(a2,ex2,wh)
460               arrays2=turnToArray(a2,ex2)               arrays2=turnToArray(a2,ex2)
461               if isScalar(arg2):               if isScalar(arg2):
462                  t2="(scalar)"                  t2="(scalar)"
463               else:               else:
464                  t2=""                  t2=""
465                 #   at least of of the argument must be an object of class Data
466               if isinstance(arg1,Data) or isinstance(arg2,Data):               if isinstance(arg1,Data) or isinstance(arg2,Data):
   
467                  # the shape must match or at least one argument is sclar:                  # the shape must match or at least one argument is sclar:
468                  if (getRank(arg1)==getRank(arg2)) or isScalar(arg1) or isScalar(arg2):                  if getRank(arg1)==getRank(arg2) or isScalar(arg1) or isScalar(arg2) :
   
469                    # sum                    # sum
470                    checkResult(ex1+t1+"+"+ex2+t2,arg1+arg2, \                    checkResult(ex1+t1+"+"+ex2+t2,arg1+arg2, \
471                                       arrays1[0]+arrays2[0], \                                       arrays1[0]+arrays2[0], \
# Line 505  for wh in [ContinuousFunction(msh),Funct Line 474  for wh in [ContinuousFunction(msh),Funct
474                                       wh)                                       wh)
475                    # sub                    # sub
476                    checkResult(ex1+t1+"-"+ex2+t2,arg1-arg2, \                    checkResult(ex1+t1+"-"+ex2+t2,arg1-arg2, \
477                                       arrays1[0]-arrays2[0], \                                      arrays1[0]-arrays2[0], \
478                                       arrays1[1]-arrays2[1], \                                     arrays1[1]-arrays2[1], \
479                                       arrays1[2]-arrays2[2], \                                     arrays1[2]-arrays2[2], \
480                                       wh)                                  wh)
481                    # mul                    # mul
482                    checkResult(ex1+t1+"*"+ex2+t2,arg1*arg2, \                    checkResult(ex1+t1+"*"+ex2+t2,arg1*arg2, \
483                                       arrays1[0]*arrays2[0], \                                       arrays1[0]*arrays2[0], \
# Line 520  for wh in [ContinuousFunction(msh),Funct Line 489  for wh in [ContinuousFunction(msh),Funct
489                                       arrays1[0]/arrays2[0], \                                       arrays1[0]/arrays2[0], \
490                                       arrays1[1]/arrays2[1], \                                       arrays1[1]/arrays2[1], \
491                                       arrays1[2]/arrays2[2], \                                       arrays1[2]/arrays2[2], \
492                                       wh)                                      wh)
493                    # pow                    # pow
494                      # this is needed because of a bug in python2.2
495                    if isinstance(arg1,Data):                    if isinstance(arg1,Data):
496                      a=arg1                        a=arg1
497                    else:                    else:
498                      a=Data(value=arg1,what=arg2.getFunctionSpace())                        a=Data(value=arg1,where=arg2.getAtoms())
499                    checkResult(ex1+t1+"^"+ex2+t2,a**arg2, \                    checkResult(ex1+t1+"^"+ex2+t2,a**arg2, \
500                                       arrays1[0]**arrays2[0], \                                      arrays1[0]**arrays2[0], \
501                                       arrays1[1]**arrays2[1], \                                      arrays1[1]**arrays2[1], \
502                                       arrays1[2]**arrays2[2], \                                      arrays1[2]**arrays2[2], \
503                                       wh)                                      wh)
504                      
505                    # inplace for arg2 which must be of class Data                    # inplace for arg2 which must be of class Data
506                    # if arg1 is expanded arg2 must be expanded                    # if arg1 is expanded arg2 must be expanded
507                    if isinstance(arg2,Data):                    if isinstance(arg2,Data)  :
508                        # and not (not ex2=="Expanded" and ex1=="Expanded") :
509                       # if arg2 is scalar arg1 must be scalar:                       # if arg2 is scalar arg1 must be scalar:
510                       #if not (isScalar(arg2) and not isScalar(arg1)):                       if not (isScalar(arg2) and not isScalar(arg1)):
                      if not(isScalar(arg2)) and not(isScalar(arg1)):  
   
511                          # inplace add:                          # inplace add:
512                          arrays2[0]+=arrays1[0]                          arrays2[0]+=arrays1[0]
513                          arrays2[1]+=arrays1[1]                          arrays2[1]+=arrays1[1]
# Line 560  for wh in [ContinuousFunction(msh),Funct Line 528  for wh in [ContinuousFunction(msh),Funct
528                                         arrays2[1], \                                         arrays2[1], \
529                                         arrays2[2], \                                         arrays2[2], \
530                                         wh)                                         wh)
531    
532                          # inplace mul:                          # inplace mul:
533                          arrays2[0]*=arrays1[0]                          arrays2[0]*=arrays1[0]
534                          arrays2[1]*=arrays1[1]                          arrays2[1]*=arrays1[1]
# Line 581  for wh in [ContinuousFunction(msh),Funct Line 550  for wh in [ContinuousFunction(msh),Funct
550                                         arrays2[2], \                                         arrays2[2], \
551                                         wh)                                         wh)
552    
553  # end  # $Log$
554    # Revision 1.3  2004/12/15 03:48:44  jgs
555    # *** empty log message ***
556    #
557    # Revision 1.1.1.1  2004/10/26 06:53:56  jgs
558    # initial import of project esys2
559    #
560    # Revision 1.1  2004/09/21 03:39:42  jgs
561    # copied over DataTest.py script from esysproto
562    #
563    # Revision 1.5  2004/05/21 05:55:59  gross
564    # PDE class added
565    #
566    # Revision 1.4  2003/09/11 08:09:48  gross
567    # slicing for Data class object tested and fixed. DataTest successfully run
568    #

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

  ViewVC Help
Powered by ViewVC 1.1.26