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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/translate/translate-basis.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/translate/translate-basis.sml

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

revision 2628, Wed May 21 04:02:06 2014 UTC revision 2668, Thu Jun 12 03:29:04 2014 UTC
# Line 76  Line 76 
76      fun  simpleEOp rator (y, _,xs) = [assignEin(y, rator, xs)]      fun  simpleEOp rator (y, _,xs) = [assignEin(y, rator, xs)]
77    
78    
79        fun mkNorm (shape,A) =let
80            val RTy=DstTy.TensorTy []
81            val b=IL.Var.new("dot" ,RTy)
82            val c=IL.Var.new("sqrt" ,RTy)
83            val rator=(case shape
84                of [_]=>mk.innerProduct(shape,shape)
85                | [_,_]=>mk.doubleDot(shape,shape)
86                | _ => raise Fail "unsupported norm"
87                (*end case*))
88            val dot=assignEin(b,rator, [A,A])
89            val rator= IL.OP(Op.Sqrt, [b])
90            in (c,rator,dot)
91            end
92    
93    
94    
95    
# Line 208  Line 222 
222                                          [assignEin(y, mk.divergence(d1, dd),xs)] ),                                          [assignEin(y, mk.divergence(d1, dd),xs)] ),
223    
224    
225                  (BV.op_norm,            fn (y, [sv], xs) => (case shapeVarToTensor sv                  (BV.op_norm,            fn (y, [sv], [x]) => (case shapeVarToTensor sv
226                                             of DstTy.TensorTy[] => assign(y, Op.Abs DstTy.realTy, xs)                                             of DstTy.TensorTy[] => assign(y, Op.Abs DstTy.realTy, [x])
227                                              | ty => assign(y, Op.Norm ty, xs)                                              | DstTy.TensorTy dd=> let
228                                                    val RTy=DstTy.TensorTy []
229                                                    val (_,sqrtop,dot)= mkNorm (dd,x)
230                                                    in
231                                                        [dot ,IL.ASSGN (y,sqrtop)]
232                                                    end
233    
234    
235                                                | ty => assign(y, Op.Norm ty, [x])
236                                            (* end case *))),                                            (* end case *))),
237                  (BV.op_not,             simpleOp Op.Not),                  (BV.op_not,             simpleOp Op.Not),
238                  (BV.op_cross,            simpleEOp mk.crossProduct),                  (BV.op_cross,            simpleEOp mk.crossProduct),
# Line 260  Line 282 
282                  (BV.evals3x3,           eigenVal (Op.Eigen3x3, 3)),                  (BV.evals3x3,           eigenVal (Op.Eigen3x3, 3)),
283                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),                  (BV.evecs2x2,           eigenVec (Op.Eigen2x2, 2)),
284                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),                  (BV.evecs3x3,           eigenVec (Op.Eigen3x3, 3)),
285    
286    
287                  (BV.fn_max,             simpleOp Op.Max),                  (BV.fn_max,             simpleOp Op.Max),
288                  (BV.fn_min,             simpleOp Op.Min),                  (BV.fn_min,             simpleOp Op.Min),
289    
290                  (*  modulate is vector * vector pointwise multiplication *)                  (*  modulate is vector * vector pointwise multiplication *)
291                  (BV.fn_modulate,        fn (y,[Ty.DIM dd1], xs) =>                  (BV.fn_modulate,        fn (y,[Ty.DIM dd1], xs) =>
292                                  [assignEin(y, (mk.modulate dd1),xs)]),                                  [assignEin(y, (mk.modulate dd1),xs)]),
293                  (BV.fn_normalize,       vectorOp Op.Normalize),  (*
294    vectorOp Op.Normalize),*)
295                    (*only supports vectors *)
296                    (BV.fn_normalize, fn (y, [Ty.DIM i], [x]) =>let
297                                val (c,sqrtop,dot)= mkNorm ([i],x)
298                                val d = IL.Var.new ("int", DstTy.intTy)
299                                val e=IL.Var.new("divide" ,DstTy.TensorTy [])
300                        in     [dot ,IL.ASSGN (c,sqrtop),
301                                IL.ASSGN (d, IL.LIT(Literal.Int 1)),
302                                assignEin(e,mk.divScalar,[d,c]),
303                                assignEin(y,mk.scaleTen [i],[e,x])]
304                        end),
305    
306                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),                  (BV.fn_principleEvec,   vectorOp Op.PrincipleEvec),
307                  (BV.fn_trace,           fn (y, [Ty.DIM d], xs) =>                  (BV.fn_trace,           fn (y, [Ty.DIM d], xs) =>
308                                            [assignEin(y,(mk.trace d), xs)]),                                            [assignEin(y,(mk.trace d), xs)]),

Legend:
Removed from v.2628  
changed lines
  Added in v.2668

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