/[escript]/trunk/escript/py_src/generatediff
ViewVC logotype

Diff of /trunk/escript/py_src/generatediff

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

revision 443 by gross, Fri Jan 20 06:22:38 2006 UTC revision 530 by gross, Wed Feb 15 07:11:00 2006 UTC
# Line 184  def makeArray(shape,rng): Line 184  def makeArray(shape,rng):
184         raise SystemError,"rank is restricted to 5"         raise SystemError,"rank is restricted to 5"
185     return out             return out        
186    
187    def makeNumberedArray(shape,s=1.):
188       out=numarray.zeros(shape,numarray.Float64)
189       if len(shape)==0:
190           out=s*1.
191       elif len(shape)==1:
192           for i0 in range(shape[0]):
193                       out[i0]=s*i0
194       elif len(shape)==2:
195           for i0 in range(shape[0]):
196              for i1 in range(shape[1]):
197                       out[i0,i1]=s*(i1+shape[1]*i0)
198       elif len(shape)==3:
199           for i0 in range(shape[0]):
200              for i1 in range(shape[1]):
201                 for i2 in range(shape[2]):
202                       out[i0,i1,i2]=s*(i2+shape[2]*i1+shape[2]*shape[1]*i0)
203       elif len(shape)==4:
204           for i0 in range(shape[0]):
205              for i1 in range(shape[1]):
206                 for i2 in range(shape[2]):
207                    for i3 in range(shape[3]):
208                       out[i0,i1,i2,i3]=s*(i3+shape[3]*i2+shape[3]*shape[2]*i1+shape[3]*shape[2]*shape[1]*i0)
209       else:
210           raise SystemError,"rank is restricted to 4"
211       return out        
212    
213  def makeResult(val,test_expr):  def makeResult(val,test_expr):
214     if isinstance(val,float):     if isinstance(val,float):
# Line 524  def mkCode(txt,args=[],intend=""): Line 549  def mkCode(txt,args=[],intend=""):
549      for r in args:      for r in args:
550        out=out.replace("%%a%s%%"%c,r)        out=out.replace("%%a%s%%"%c,r)
551      return out        return out  
552    #=======================================================================================================
553    # eigenvalues
554    #=======================================================================================================
555    import numarray.linear_algebra
556    name="eigenvalues"
557    for case0 in ["array","Symbol","constData","taggedData","expandedData"]:
558      for sh0 in [ (1,1), (2,2), (3,3)]:
559                  text="   #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
560                  tname="test_%s_%s_dim%s"%(name,case0,sh0[0])
561                  text+="   def %s(self):\n"%tname
562                  a_0=makeArray(sh0,[-1.,1])
563                  a_0=(a_0+numarray.transpose(a_0))/2.
564                  ev=numarray.linear_algebra.eigenvalues(a_0)
565                  ev.sort()
566                  if case0 in ["taggedData", "expandedData"]:
567                      a1_0=makeArray(sh0,[-1.,1])
568                      a1_0=(a1_0+numarray.transpose(a1_0))/2.
569                      ev1=numarray.linear_algebra.eigenvalues(a1_0)
570                      ev1.sort()
571                  else:
572                      a1_0=a_0                  
573                      ev1=ev
574                  text+=mkText(case0,"arg",a_0,a1_0)
575                  text+="      res=%s(arg)\n"%name
576                  if case0=="Symbol":
577                     text+=mkText("array","s",a_0,a1_0)
578                     text+="      sub=res.substitute({arg:s})\n"
579                     res="sub"
580                     text+=mkText("array","ref",ev,ev1)
581                  else:
582                     res="res"
583                     text+=mkText(case0,"ref",ev,ev1)  
584                  text+=mkTypeAndShapeTest(case0,(sh0[0],),"res")
585                  text+="      self.failUnless(Lsup(%s-ref)<=self.RES_TOL*Lsup(ref),\"wrong result\")\n"%res
586                  
587                  if case0 == "taggedData" :
588                      t_prog_with_tags+=text
589                  else:              
590                      t_prog+=text
591    print test_header
592    # print t_prog
593    print t_prog_with_tags
594    print test_tail          
595    1/0
596    
597    #=======================================================================================================
598    # slicing
599    #=======================================================================================================
600    for case0 in ["constData","taggedData","expandedData","Symbol"]:
601      for sh0 in [ (3,), (3,4), (3,4,3) ,(4,3,5,3)]:
602        # get perm:
603        if len(sh0)==2:
604            check=[[1,0]]
605        elif len(sh0)==3:
606            check=[[1,0,2],
607                   [1,2,0],
608                   [2,1,0],
609                   [2,0,2],
610                   [0,2,1]]
611        elif len(sh0)==4:
612            check=[[0,1,3,2],
613                   [0,2,1,3],
614                   [0,2,3,1],
615                   [0,3,2,1],
616                   [0,3,1,2] ,          
617                   [1,0,2,3],
618                   [1,0,3,2],
619                   [1,2,0,3],
620                   [1,2,3,0],
621                   [1,3,2,0],
622                   [1,3,0,2],
623                   [2,0,1,3],
624                   [2,0,3,1],
625                   [2,1,0,3],
626                   [2,1,3,0],
627                   [2,3,1,0],
628                   [2,3,0,1],
629                   [3,0,1,2],
630                   [3,0,2,1],
631                   [3,1,0,2],
632                   [3,1,2,0],
633                   [3,2,1,0],
634                   [3,2,0,1]]
635        else:
636             check=[]
637        
638        # create the test cases:
639        processed=[]
640        l=["R","U","L","P","C","N"]
641        c=[""]
642        for i in range(len(sh0)):
643           tmp=[]
644           for ci in c:
645              tmp+=[ci+li for li in l]
646           c=tmp
647        # SHUFFLE
648        c2=[]
649        while len(c)>0:
650            i=int(random.random()*len(c))
651            c2.append(c[i])
652            del c[i]
653        c=c2
654        for ci in c:
655          t=""
656          sh=()
657          for i in range(len(ci)):
658              if ci[i]=="R":
659                 s="%s:%s"%(1,sh0[i]-1)
660                 sh=sh+(sh0[i]-2,)            
661              if ci[i]=="U":
662                  s=":%s"%(sh0[i]-1)
663                  sh=sh+(sh0[i]-1,)            
664              if ci[i]=="L":
665                  s="2:"
666                  sh=sh+(sh0[i]-2,)            
667              if ci[i]=="P":
668                  s="%s"%(int(sh0[i]/2))
669              if ci[i]=="C":
670                  s=":"
671                  sh=sh+(sh0[i],)            
672              if ci[i]=="N":
673                  s=""
674                  sh=sh+(sh0[i],)
675              if len(s)>0:
676                 if not t=="": t+=","
677                 t+=s
678          N_found=False
679          noN_found=False
680          process=len(t)>0
681          for i in ci:
682             if i=="N":
683                if not noN_found and N_found: process=False
684                N_found=True
685             else:
686               if N_found: process=False
687               noNfound=True
688          # is there a similar one processed allready
689          if process and ci.find("N")==-1:
690             for ci2 in processed:
691               for chi in check:
692                   is_perm=True
693                   for i in range(len(chi)):
694                       if not ci[i]==ci2[chi[i]]: is_perm=False
695                   if is_perm: process=False
696          # if not process: print ci," rejected"
697          if process:
698           processed.append(ci)
699           text="   #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
700           tname="test_getslice_%s_rank%s_%s"%(case0,len(sh0),ci)
701           text+="   def %s(self):\n"%tname
702           a_0=makeNumberedArray(sh0,s=1)
703           if case0 in ["taggedData", "expandedData"]:
704                a1_0=makeNumberedArray(sh0,s=-1.)
705           else:
706                a1_0=a_0
707           r=eval("a_0[%s]"%t)
708           r1=eval("a1_0[%s]"%t)
709           text+=mkText(case0,"arg",a_0,a1_0)
710           text+="      res=arg[%s]\n"%t
711           if case0=="Symbol":
712               text+=mkText("array","s",a_0,a1_0)
713               text+="      sub=res.substitute({arg:s})\n"
714               res="sub"
715               text+=mkText("array","ref",r,r1)
716           else:
717               res="res"
718               text+=mkText(case0,"ref",r,r1)
719           text+=mkTypeAndShapeTest(case0,sh,"res")
720           text+="      self.failUnless(Lsup(%s-ref)<=self.RES_TOL*Lsup(ref),\"wrong result\")\n"%res
721                  
722           if case0 == "taggedData" :
723                t_prog_with_tags+=text
724           else:              
725                t_prog+=text
726    
727    print test_header
728    # print t_prog
729    print t_prog_with_tags
730    print test_tail          
731    1/0
732    #============================================================================================
733  def innerTEST(arg0,arg1):  def innerTEST(arg0,arg1):
734      if isinstance(arg0,float):      if isinstance(arg0,float):
735         out=numarray.array(arg0*arg1)         out=numarray.array(arg0*arg1)
# Line 1020  def unrollLoopsOfL2(b,where,arg,tap=""): Line 1225  def unrollLoopsOfL2(b,where,arg,tap=""):
1225      else:      else:
1226         out+="+(%s))\n"%(zop*0.5**2)         out+="+(%s))\n"%(zop*0.5**2)
1227      return out      return out
1228    #=======================================================================================================
1229    # transpose
1230    #=======================================================================================================
1231    def transposeTest(r,offset):
1232        if isinstance(r,float): return r
1233        s=r.shape
1234        s1=1
1235        for i in s[:offset]: s1*=i
1236        s2=1
1237        for i in s[offset:]: s2*=i
1238        out=numarray.reshape(r,(s1,s2))
1239        out.transpose()
1240        return numarray.resize(out,s[offset:]+s[:offset])
1241    
1242    name,tt="transpose",transposeTest
1243    for case0 in ["array","Symbol","constData","taggedData","expandedData"]:
1244      for sh0 in [ (), (3,), (4,5), (6,2,2),(3,2,3,4)]:
1245        for offset in range(len(sh0)+1):
1246                  text="   #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
1247                  tname="test_%s_%s_rank%s_offset%s"%(name,case0,len(sh0),offset)
1248                  text+="   def %s(self):\n"%tname
1249                  sh_t=sh0[offset:]+sh0[:offset]
1250    
1251    #              sh_t=list(sh0)
1252    #              sh_t[offset+1]=sh_t[offset]
1253    #              sh_t=tuple(sh_t)
1254    #              sh_r=[]
1255    #              for i in range(offset): sh_r.append(sh0[i])
1256    #              for i in range(offset+2,len(sh0)): sh_r.append(sh0[i])              
1257    #              sh_r=tuple(sh_r)
1258    
1259                  a_0=makeArray(sh0,[-1.,1])
1260                  if case0 in ["taggedData", "expandedData"]:
1261                      a1_0=makeArray(sh0,[-1.,1])
1262                  else:
1263                      a1_0=a_0
1264                  r=tt(a_0,offset)
1265                  r1=tt(a1_0,offset)
1266                  text+=mkText(case0,"arg",a_0,a1_0)
1267                  text+="      res=%s(arg,%s)\n"%(name,offset)
1268                  if case0=="Symbol":
1269                     text+=mkText("array","s",a_0,a1_0)
1270                     text+="      sub=res.substitute({arg:s})\n"
1271                     res="sub"
1272                     text+=mkText("array","ref",r,r1)
1273                  else:
1274                     res="res"
1275                     text+=mkText(case0,"ref",r,r1)
1276                  text+=mkTypeAndShapeTest(case0,sh_t,"res")
1277                  text+="      self.failUnless(Lsup(%s-ref)<=self.RES_TOL*Lsup(ref),\"wrong result\")\n"%res
1278                  
1279                  if case0 == "taggedData" :
1280                      t_prog_with_tags+=text
1281                  else:              
1282                      t_prog+=text
1283    
1284    print test_header
1285    # print t_prog
1286    print t_prog_with_tags
1287    print test_tail          
1288    1/0
1289  #=======================================================================================================  #=======================================================================================================
1290  # L2  # L2
1291  #=======================================================================================================  #=======================================================================================================

Legend:
Removed from v.443  
changed lines
  Added in v.530

  ViewVC Help
Powered by ViewVC 1.1.26