Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/charisee_dev/src/compiler/ein/equal.sml
ViewVC logotype

Diff of /branches/charisee_dev/src/compiler/ein/equal.sml

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

revision 3343, Thu Oct 22 14:15:20 2015 UTC revision 3344, Fri Oct 23 04:38:49 2015 UTC
# Line 25  Line 25 
25    
26          (*isIndex: mu list *mu list -> int *)          (*isIndex: mu list *mu list -> int *)
27          fun isIndex([],[])=true          fun isIndex([],[])=true
28            | isIndex(i::ix,j::jx)=if(i=j) then isIndex(ix, jx) else false   | isIndex((E.V i)::ix,(E.V j)::jx)= if(i=j) then isIndex(ix, jx) else false
29     | isIndex((E.C i)::ix,(E.C j)::jx)= if(i=j) then isIndex(ix, jx) else false
30            | isIndex _ = false            | isIndex _ = false
31    
32    fun isKx([],[])=true
33    | isKx((E.V i,_)::ix,(E.V j,_)::jx)= if(i=j) then isKx(ix, jx) else false
34    | isKx((E.C i,_)::ix,(E.C j,_)::jx)= if(i=j) then isKx(ix, jx) else false
35    | isKx _ = false
36    
37    
38          fun isSx([],[])=true          fun isSx([],[])=true
39           | isSx((i,_,_)::ix,(j,_,_)::jx)=if(i=j) then isSx(ix, jx) else false           | isSx((i,_,_)::ix,(j,_,_)::jx)=if(i=j) then isSx(ix, jx) else false
40           | isSx _ = false           | isSx _ = false
# Line 43  Line 51 
51              | (E.Tensor(id,ix),E.Tensor(id2,ix2))       => (id=id2) andalso isIndex(ix, ix2)              | (E.Tensor(id,ix),E.Tensor(id2,ix2))       => (id=id2) andalso isIndex(ix, ix2)
52              | (E.Const c1,E.Const c2)                   => (c1=c2)              | (E.Const c1,E.Const c2)                   => (c1=c2)
53              | (E.Krn(tid,ix,pos),E.Krn (jid,jx,pos2))   =>              | (E.Krn(tid,ix,pos),E.Krn (jid,jx,pos2))   =>
54                      (tid=jid) andalso isIndex(ix,jx) andalso isEqual(pos,pos2)                      (tid=jid) andalso isKx(ix,jx) andalso isEqual(pos,pos2)
55              | (E.Delta(ix,jx), E.Delta(ix2,jx2))        => isIndex([ix, jx],[ix2, jx2])              | (E.Delta(ix,jx), E.Delta(ix2,jx2))        => isIndex([ix, jx],[ix2, jx2])
56              | (E.Epsilon(i,j,k),E.Epsilon(i2,j2,k2))    => isIndex([i,j,k], [i2, j2, k2])              | (E.Epsilon(i,j,k),E.Epsilon(i2,j2,k2))    => isIndex([E.V i,E.V j,E.V k], [E.V i2, E.V j2, E.V k2])
57              | (E.Eps2(i,j),E.Eps2(i2,j2))               => isIndex([i,j], [i2, j2])              | (E.Eps2(i,j),E.Eps2(i2,j2))               => isIndex([E.V i,E.V j], [E.V i2, E.V j2])
58              | (E.Lift e1, E.Lift e2)                    => isEqual(e1,e2)              | (E.Lift e1, E.Lift e2)                    => isEqual(e1,e2)
59              | (E.Sqrt c1, E.Sqrt c2)                    => isEqual(c1,c2)              | (E.Sqrt c1, E.Sqrt c2)                    => isEqual(c1,c2)
60              | (E.Neg e1, E.Neg e2)                      => isEqual(e1,e2)              | (E.Neg e1, E.Neg e2)                      => isEqual(e1,e2)
# Line 58  Line 66 
66              | (E.Apply(a,b),E.Apply(c,d))               => iter([a,b],[c,d])              | (E.Apply(a,b),E.Apply(c,d))               => iter([a,b],[c,d])
67              | (E.Conv(fid,alpha,tid,ix),E.Conv(fid2,alpha2,tid2,jx)) =>              | (E.Conv(fid,alpha,tid,ix),E.Conv(fid2,alpha2,tid2,jx)) =>
68                      (fid=fid2) andalso (tid=tid2)   andalso  isIndex(alpha,alpha2) andalso  isIndex(ix,jx)                      (fid=fid2) andalso (tid=tid2)   andalso  isIndex(alpha,alpha2) andalso  isIndex(ix,jx)
69              | (E.Probe(a,b),E.Probe(c,d))               => iter([a,b],[c,d])  | (E.Probe(a,b),E.Probe(c,d))               =>
70    ((String.concat[(P.printbody e1),"tooo",(P.printbody e2)]);(iter([a,b],[c,d])))
71              | (E.Img(id1,ix1,pos1),E.Img (id2,ix2,pos2))=>              | (E.Img(id1,ix1,pos1),E.Img (id2,ix2,pos2))=>
72                    (id1=id2) andalso  iter(pos1, pos2) andalso  isIndex(ix1, ix2)                    (id1=id2) andalso  iter(pos1, pos2) andalso  isIndex(ix1, ix2)
   
             | (E.Sum(sx1,E.Prod[E.Img(id1,ix1,pos1), E.Krn(tidx1,ixx1,posx1),E.Krn(tidy1,ixy1,posy1),E.Krn(tidz1,ixz1,posz1)]),  
                E.Sum(sx2,E.Prod[E.Img(id2,ix2,pos2), E.Krn(tidx2,ixx2,posx2),E.Krn(tidy2,ixy2,posy2),E.Krn(tidz2,ixz2,posz2)]))  
                 =>let  
                 val isImg= (isSx(sx1,sx2) andalso (id1=id2) andalso  iter(pos1, pos2) andalso  isIndex(ix1, ix2))  
                 val isKrn=  isIndex(ixx1,ixx2)  
                 val rtn=(isImg andalso isKrn)  
                 val a = String.concat["\nComparing expressions:\n\t",P.printbody e1, "\nto\n\t",P.printbody e2]  
                 val b = String.concat["\n isImage got ",boolToString isImg, "iKrn got",boolToString isKrn,"\n","rtn got ",boolToString rtn]  
   
                 val _= (a^b)  
                 in rtn  
                 end  
   
   
73              | (E.Sum(c,e1), E.Sum(c2,e2))               => isSx(c,c2) andalso isEqual(e1,e2)              | (E.Sum(c,e1), E.Sum(c2,e2))               => isSx(c,c2) andalso isEqual(e1,e2)
74              | (E.Value i, E.Value j)                    => isIndex([i],[j])              | (E.Value i, E.Value j)                    => isIndex([E.V i],[E.V j])
75              | (E.Cosine e1 , E.Cosine e2)               => isEqual(e1,e2)              | (E.Cosine e1 , E.Cosine e2)               => isEqual(e1,e2)
76              | (E.ArcCosine e1, E.ArcCosine e2)          => isEqual(e1,e2)              | (E.ArcCosine e1, E.ArcCosine e2)          => isEqual(e1,e2)
77              | (E.Sine e1 , E.Sine e2)                   => isEqual(e1,e2)              | (E.Sine e1 , E.Sine e2)                   => isEqual(e1,e2)

Legend:
Removed from v.3343  
changed lines
  Added in v.3344

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0