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

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