# Diff of /trunk/escript/py_src/generateutil

revision 516 by gross, Fri Feb 3 02:18:45 2006 UTC revision 517 by gross, Tue Feb 14 02:25:02 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 525  def mkCode(txt,args=[],intend=""): Line 550  def mkCode(txt,args=[],intend=""):
550        out=out.replace("%%a%s%%"%c,r)        out=out.replace("%%a%s%%"%c,r)
551      return out        return out
552
553    #=======================================================================================================
554    # slicing
555    #=======================================================================================================
556    for case0 in ["constData","taggedData","expandedData","Symbol"]:
557      for sh0 in [ (3,), (3,4), (3,4,3) ,(4,3,5,3)]:
558        # get perm:
559        if len(sh0)==2:
560            check=[[1,0]]
561        elif len(sh0)==3:
562            check=[[1,0,2],
563                   [1,2,0],
564                   [2,1,0],
565                   [2,0,2],
566                   [0,2,1]]
567        elif len(sh0)==4:
568            check=[[0,1,3,2],
569                   [0,2,1,3],
570                   [0,2,3,1],
571                   [0,3,2,1],
572                   [0,3,1,2] ,
573                   [1,0,2,3],
574                   [1,0,3,2],
575                   [1,2,0,3],
576                   [1,2,3,0],
577                   [1,3,2,0],
578                   [1,3,0,2],
579                   [2,0,1,3],
580                   [2,0,3,1],
581                   [2,1,0,3],
582                   [2,1,3,0],
583                   [2,3,1,0],
584                   [2,3,0,1],
585                   [3,0,1,2],
586                   [3,0,2,1],
587                   [3,1,0,2],
588                   [3,1,2,0],
589                   [3,2,1,0],
590                   [3,2,0,1]]
591        else:
592             check=[]
593
594        # create the test cases:
595        processed=[]
596        l=["R","U","L","P","C","N"]
597        c=[""]
598        for i in range(len(sh0)):
599           tmp=[]
600           for ci in c:
601              tmp+=[ci+li for li in l]
602           c=tmp
603        # SHUFFLE
604        c2=[]
605        while len(c)>0:
606            i=int(random.random()*len(c))
607            c2.append(c[i])
608            del c[i]
609        c=c2
610        for ci in c:
611          t=""
612          sh=()
613          for i in range(len(ci)):
614              if ci[i]=="R":
615                 s="%s:%s"%(1,sh0[i]-1)
616                 sh=sh+(sh0[i]-2,)
617              if ci[i]=="U":
618                  s=":%s"%(sh0[i]-1)
619                  sh=sh+(sh0[i]-1,)
620              if ci[i]=="L":
621                  s="2:"
622                  sh=sh+(sh0[i]-2,)
623              if ci[i]=="P":
624                  s="%s"%(int(sh0[i]/2))
625              if ci[i]=="C":
626                  s=":"
627                  sh=sh+(sh0[i],)
628              if ci[i]=="N":
629                  s=""
630                  sh=sh+(sh0[i],)
631              if len(s)>0:
632                 if not t=="": t+=","
633                 t+=s
634          N_found=False
635          noN_found=False
636          process=len(t)>0
637          for i in ci:
638             if i=="N":
639                if not noN_found and N_found: process=False
640                N_found=True
641             else:
642               if N_found: process=False
643               noNfound=True
644          # is there a similar one processed allready
645          if process and ci.find("N")==-1:
646             for ci2 in processed:
647               for chi in check:
648                   is_perm=True
649                   for i in range(len(chi)):
650                       if not ci[i]==ci2[chi[i]]: is_perm=False
651                   if is_perm: process=False
652          # if not process: print ci," rejected"
653          if process:
654           processed.append(ci)
655           text="   #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
656           tname="test_getslice_%s_rank%s_%s"%(case0,len(sh0),ci)
657           text+="   def %s(self):\n"%tname
658           a_0=makeNumberedArray(sh0,s=1)
659           if case0 in ["taggedData", "expandedData"]:
660                a1_0=makeNumberedArray(sh0,s=-1.)
661           else:
662                a1_0=a_0
663           r=eval("a_0[%s]"%t)
664           r1=eval("a1_0[%s]"%t)
665           text+=mkText(case0,"arg",a_0,a1_0)
666           text+="      res=arg[%s]\n"%t
667           if case0=="Symbol":
668               text+=mkText("array","s",a_0,a1_0)
669               text+="      sub=res.substitute({arg:s})\n"
670               res="sub"
671               text+=mkText("array","ref",r,r1)
672           else:
673               res="res"
674               text+=mkText(case0,"ref",r,r1)
675           text+=mkTypeAndShapeTest(case0,sh,"res")
676           text+="      self.failUnless(Lsup(%s-ref)<=self.RES_TOL*Lsup(ref),\"wrong result\")\n"%res
677
678           if case0 == "taggedData" :
679                t_prog_with_tags+=text
680           else:
681                t_prog+=text
682
684    # print t_prog
685    print t_prog_with_tags
686    print test_tail
687    1/0
688    #============================================================================================
689  def innerTEST(arg0,arg1):  def innerTEST(arg0,arg1):
690      if isinstance(arg0,float):      if isinstance(arg0,float):
691         out=numarray.array(arg0*arg1)         out=numarray.array(arg0*arg1)

Legend:
 Removed from v.516 changed lines Added in v.517