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

# SCM Repository

[diderot] Diff of /branches/ein16/src/compiler/high-il/normalize-ein.sml
 [diderot] / branches / ein16 / src / compiler / high-il / normalize-ein.sml

# Diff of /branches/ein16/src/compiler/high-il/normalize-ein.sml

revision 2604, Fri Apr 25 18:23:44 2014 UTC revision 2605, Wed Apr 30 01:46:09 2014 UTC
# Line 7  Line 7
7      structure P=Printer      structure P=Printer
8      structure F=Filter      structure F=Filter
9      structure G=EpsHelpers      structure G=EpsHelpers
10
11      in      in
12
13  fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])  fun err str=raise Fail (String.concat["Ill-formed EIN Operator",str])
14    val testing=0
15
16
17
18    fun prodAppPartial(es,p1)=(case es
19  fun prodAppPartial ([e1],p1)= E.Apply(E.Partial p1,e1)      of []      => raise Fail "Empty App Partial"
20    | prodAppPartial((e1::e2),p1)=let      | [e1]     => E.Apply(E.Partial p1,e1)
21        | (e1::e2) => let
22      val l= prodAppPartial(e2,p1)      val l= prodAppPartial(e2,p1)
23      val (_,e2')= F.mkProd[e1,l]      val (_,e2')= F.mkProd[e1,l]
24      val (_,e1')=F.mkProd(e2@ [E.Apply(E.Partial p1, e1)])      val (_,e1')=F.mkProd(e2@ [E.Apply(E.Partial p1, e1)])
25      in      in
26          E.Add[e1',e2']          E.Add[e1',e2']
27      end      end
28        (* end case *))
29
30  (*rewritten Sum*)  (*rewritten Sum*)
31  fun mkSum(c1,e1)=(case e1  fun mkSum(c1,e1)=(case e1
# Line 60  Line 63
63      | E.Apply(E.Partial d2,e2)  => let      | E.Apply(E.Partial d2,e2)  => let
64                          val E.Partial d3=d1                          val E.Partial d3=d1
65                          in (1,E.Apply(E.Partial(d3@d2),e2)) end                          in (1,E.Apply(E.Partial(d3@d2),e2)) end
66        | E.Apply _   => raise Fail" Apply of non-Partial expression"
67      | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))      | E.Neg e2    => (1,E.Neg(E.Apply(d1,e2)))
68      | E.Sum(c2,e2)=> (1,E.Sum(c2,E.Apply(d1,e2)))      | E.Sum(c2,e2)=> (1,E.Sum(c2,E.Apply(d1,e2)))
69      | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))      | E.Add e     => (1,E.Add (List.map (fn(a)=>E.Apply(d1,a)) e))
# Line 107  Line 111
111
112
113
(*print summation range*)
fun handleIndex e= (case e
of E.C(cx)=> String.concat["'",Int.toString(cx),"'"]
|  E.V(ix)=> Int.toString(ix)
(*end case *))
114
fun handleSumRange (mu,lb,ub)= print(String.concat[(handleIndex mu),"[",Int.toString(lb),"-",Int.toString(ub),"]"])
fun printSx e=(print "\n \$";List.map handleSumRange e; print "\$")
115
116  fun K gg=String.concatWith "," (List.map (fn (E.V e1,_,_)=> (Int.toString(e1))) gg)  (*fun K gg=String.concatWith "," (List.map (fn (E.V e1,_,_)=> (Int.toString(e1))) gg)*)
117    fun K _= " "
118  fun Kt gg=List.map (fn e1=> print(String.concat["[", (K e1),"]"])) gg  fun Kt gg=List.map (fn e1=> print(String.concat["[", (K e1),"]"])) gg
119
120  (*Apply normalize to each term in product list  (*Apply normalize to each term in product list
# Line 126  Line 124
124        val changed = ref false        val changed = ref false
125        val sumIndex=ref []        val sumIndex=ref []
126
127        fun rewriteBody body =        fun rewriteBody body =(case body
(case body
128               of E.Const _=> body               of E.Const _=> body
129                | E.Tensor _ =>body                | E.Tensor _ =>body
130                | E.Field _=> body                | E.Field _=> body
# Line 162  Line 159
159                  val (c,e3)=mkapply(E.Partial d1,e2)                  val (c,e3)=mkapply(E.Partial d1,e2)
160                  in (case c of 1=>(changed:=true;e3)| _ =>e3 (*end case*))                  in (case c of 1=>(changed:=true;e3)| _ =>e3 (*end case*))
161                  end                  end
162                | E.Apply(E.Prod e1,e2)=>E.Apply(E.Partial(F.filterPartial e1), rewriteBody e2)              | E.Apply _=> raise Fail" Not well-formed Apply expression"
163                | E.Sum([],e)=> (changed:=true;rewriteBody e)                | E.Sum([],e)=> (changed:=true;rewriteBody e)
164                | E.Sum(c,e)=>let                | E.Sum(c,e)=>let
165                  val ref x=sumIndex                  val ref x=sumIndex
# Line 185  Line 182
182                  end                  end
183
184                  (*************Product**************)                  (*************Product**************)
185                  | E.Prod [] => raise Fail"missing elements in product"
186                | E.Prod [e1] => rewriteBody e1                | E.Prod [e1] => rewriteBody e1
187                | E.Prod((E.Div(e2,e3))::e4)=>                | E.Prod((E.Div(e2,e3))::e4)=>
188                  (changed :=true; E.Div(E.Prod([e2]@e4), e3 ))                  (changed :=true; E.Div(E.Prod([e2]@e4), e3 ))
# Line 201  Line 199
199
200                  (*************Product EPS **************)                  (*************Product EPS **************)
201
(* Apply (d, e) shoudl be convereted to Conv operator *)
202                | E.Prod(E.Epsilon(i,j,k)::E.Apply(E.Partial d,e)::es)=>let                | E.Prod(E.Epsilon(i,j,k)::E.Apply(E.Partial d,e)::es)=>let
203                   val change= G.matchEps(0,d,[],[i,j,k])                   val change= G.matchEps(0,d,[],[i,j,k])
204                   in case (change,es)                   in case (change,es)
# Line 301  Line 298
298
299                             in                             in
300                if !changed                if !changed
301                  then (print(String.concat["\nN =>",Int.toString(count),"--",P.printbody(body')]);                  then let
302                  changed := false ;sumIndex:=[];loop(body',count+1))                      val _= (case testing
303                            of 1=> (print(String.concat["\nN =>",Int.toString(count),"--",P.printbody(body')]);1)
304                            | _=> 1)
305                        in
306                            (changed := false ;sumIndex:=[];loop(body',count+1))
307                        end
308                  else (body',count)                  else (body',count)
309              end              end
310
311      val (b,count) = loop(body,0)      val (b,count) = loop(body,0)
312      val _ = print(String.concat["\n out of normalize \n",P.printbody(b),"\n Final CounterXX:",Int.toString(count),"\n\n"])      val _ =(case testing
313            of 1 => (print(String.concat["\n out of normalize \n",P.printbody(b),"\n    Final CounterXX:",Int.toString(count),"\n\n"]);1)
314            | _=> 1
315            (*end case*))
316      in      in
317                  (Ein.EIN{params=params, index=index, body=b},count)                  (Ein.EIN{params=params, index=index, body=b},count)
318      end      end

Legend:
 Removed from v.2604 changed lines Added in v.2605

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