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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/ein/equal.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/ein/equal.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2553 - (view) (download)

1 : cchiw 2463 (*Test transform function*)
2 : cchiw 2553 structure EqualEin = struct
3 : cchiw 2463
4 :     local
5 :     structure E = Ein
6 : cchiw 2553 structure P=Printer
7 : cchiw 2463 in
8 :    
9 :    
10 :     fun isIndex([],[])=0
11 : cchiw 2553 | isIndex(i::ix,j::jx)=if(i=j) then isIndex(ix, jx) else (print "Index-false";1)
12 : cchiw 2463
13 :     fun isEqual(e1,e2)=(case (e1,e2)
14 :     of (E.Field(id,ix),E.Field(id2,ix2))=> if(id=id2) then isIndex(ix, ix2) else 1
15 : cchiw 2553 | (E.Tensor(id,ix),E.Tensor(id2,ix2))=>(print "Tensor";if(id=id2) then isIndex(ix, ix2) else (print"Tensor-False";1))
16 : cchiw 2463 | (E.Const c1,E.Const c2) =>
17 :     if(c1>c2) then 1
18 :     else if (c2>c1) then 1
19 :     else 0
20 : cchiw 2496 | (E.Krn(tid,ix,pos),E.Krn (jid,jx,pos2))=>
21 :     if(tid=jid) then isIndex(ix,jx)+ isEqual(pos,pos2)
22 :     else 1
23 : cchiw 2463 | (E.Delta(ix,jx), E.Delta(ix2,jx2))=>isIndex([ix, jx],[ix2, jx2])
24 : cchiw 2553 | (E.Epsilon(i,j,k),E.Epsilon(i2,j2,k2))=>(print "EPs-";
25 :     isIndex([i,j,k], [i2, j2, k2]))
26 : cchiw 2463 | (E.Neg e1, E.Neg e2)=> isEqual(e1,e2)
27 : cchiw 2496 | (E.Add es, E.Add es2)=>let
28 : cchiw 2463 fun filter([],[])=0
29 :     | filter(a::ax,b::bx)=let
30 :     val v=isEqual(a,b)
31 :     in if(v>0) then 1
32 :     else filter(ax,bx)
33 :     end
34 :     in filter(es, es2)
35 :     end
36 :    
37 :     | (E.Sub(a,b),E.Sub(c,d))=> isEqual(a,c)+isEqual(b,d)
38 :     | (E.Prod es, E.Prod es2)=>let
39 : cchiw 2553 fun filter([],[])=(print "Prod-true";0)
40 : cchiw 2463 | filter(a::ax,b::bx)=let
41 :     val v=isEqual(a,b)
42 : cchiw 2553 in if(v>0) then (print "Prod-FALSE-";1)
43 : cchiw 2463 else filter(ax,bx)
44 :     end
45 :     in filter(es, es2) end
46 :     | (E.Div(a,b), E.Div(c,d))=>isEqual(a,c)+isEqual(b,d)
47 :     | (E.Partial ix, E.Partial jx)=>isIndex(ix,jx)
48 :     | (E.Apply(a,b),E.Apply(c,d))=> isEqual(a,c)+isEqual(b,d)
49 : cchiw 2496 | (E.Conv(fid,alpha,tid,ix),E.Conv(fid2,alpha2,tid2,jx))=>
50 :     if(fid=fid2) andalso (tid=tid2) then
51 :     isIndex(alpha,alpha2)+ isIndex(ix,jx)
52 :     else 0
53 : cchiw 2463 | (E.Probe(a,b),E.Probe(c,d))=> isEqual(a,c)+isEqual(b,d)
54 : cchiw 2496 | (E.Img(id1,ix1,pos1),E.Img (id2,ix2,pos2))=>let
55 : cchiw 2463 fun filter([],[])=0
56 :     | filter(a::ax,b::bx)=let
57 :     val v=isEqual(a,b)
58 :     in if(v>0) then 1
59 :     else filter(ax,bx)
60 :     end
61 : cchiw 2496 in filter(pos1, pos2) end
62 : cchiw 2553 | (E.Sum(c,e1), E.Sum(c2,e2))=> let val gg=isEqual(e1,e2)
63 :     val ii= (case gg of 0=> print "sum true" |_=> print "Sum-not true")
64 :     in gg end
65 :     | _ =>(print "else";1)
66 : cchiw 2463
67 :     (*end case*))
68 :    
69 :    
70 : cchiw 2553 fun isEinEqual(e1,e2)=let
71 :     val E.EIN{params, index, body}=e1
72 :     val pp=print(String.concat["\n EQUAL",P.printerE(e1), P.printerE(e2)])
73 :     val body1=body
74 :     val E.EIN{params, index, body}=e2
75 :     val n=isEqual(body1,body)
76 :     in
77 :     if(n=0) then (print "\n TRUE";true)
78 :     else (print "\n FALSE";false)
79 :     end
80 : cchiw 2463 end; (* local *)
81 :    
82 :     end (* local *)

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