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

SCM Repository

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

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

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

revision 3493, Fri Dec 11 18:29:21 2015 UTC revision 3494, Fri Dec 11 20:12:40 2015 UTC
# Line 74  Line 74 
74    
75      fun simpleEOp rator (y, _, xs) = [assignEin(y, rator, xs)]      fun simpleEOp rator (y, _, xs) = [assignEin(y, rator, xs)]
76    
77        fun dist(y,dd1,xs)= let
78                val t0 = IL.Var.new("t0", DstTy.TensorTy(dd1))
79                in [assignEin(t0, Mk.subTT(dd1),xs),assignEin(y, Mk.normTT(dd1),[t0])] end
80    
81    
82    (* build a table that maps Basis variables to their translation functions *)    (* build a table that maps Basis variables to their translation functions *)
83      val tbl : ((IR.var * Ty.meta_arg list * IR.var list) -> IR.assignment list) VTbl.hash_table = let      val tbl : ((IR.var * Ty.meta_arg list * IR.var list) -> IR.assignment list) VTbl.hash_table = let
84            val tbl = VTbl.mkTable (128, Fail "Translate table")            val tbl = VTbl.mkTable (128, Fail "Translate table")
# Line 210  Line 215 
215                                            [assignEin(y, Mk.dotimes(d1, dd@[d2]), xs)]),                                            [assignEin(y, Mk.dotimes(d1, dd@[d2]), xs)]),
216                  (BV.op_Ddot,            fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>                  (BV.op_Ddot,            fn (y, [_, Ty.DIM d1,  Ty.SHAPE dd, Ty.DIM d2], xs) =>
217                                            [assignEin(y, Mk.divergence(d1, dd), xs)] ),                                            [assignEin(y, Mk.divergence(d1, dd), xs)] ),
218  (* FIXME: should scalar norm be an op or an EIN?                  (BV.op_norm_t,            fn (y, [sv], xs) =>let
219                  (BV.op_norm_t,          fn (y, [sv], xs) =>  assign(y, Op.Norm(shapeVarToTensor sv), xs)),                                          val DstTy.TensorTy dd1 = shapeVarToTensor sv
220  *)                                          in (case (dd1,xs)
221                  (BV.op_norm_f,          fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) =>                                              of ([],[arg0])=> [IL.ASSGN(y,IL.VAR arg0)]
222                                            [assignEin(y, Mk.magnitudeFF(d1, dd), xs@xs)]),                                              | _ => [assignEin(y, Mk.normT(dd1),xs)])
223                                            end),
224                    (BV.op_norm_f,            fn (y, [ _,Ty.DIM d1, Ty.SHAPE dd1], xs) =>
225                                                (case (dd1,xs)
226                                                of ([],[arg0])=> [IL.ASSGN(y,IL.VAR arg0)]
227                                                | _ => [assignEin(y, Mk.normF(d1, dd1),xs)])),
228                  (BV.op_not,             simpleOp Op.Not),                  (BV.op_not,             simpleOp Op.Not),
229                  (BV.op_cross3_tt,       simpleEOp Mk.cross3TT),                  (BV.op_cross3_tt,       simpleEOp Mk.cross3TT),
230                  (BV.op_cross2_tt,       simpleEOp Mk.cross2TT),                  (BV.op_cross2_tt,       simpleEOp Mk.cross2TT),
# Line 261  Line 271 
271                  (*  modulate is vector * vector pointwise multiplication *)                  (*  modulate is vector * vector pointwise multiplication *)
272                  (BV.fn_modulate,        fn (y, [Ty.DIM dd1], xs) =>                  (BV.fn_modulate,        fn (y, [Ty.DIM dd1], xs) =>
273                                            [assignEin(y, (Mk.modulate dd1), xs)]),                                            [assignEin(y, (Mk.modulate dd1), xs)]),
 (* FIXME: should scalar normormalize be an op or an EIN?  
274                  (BV.fn_normalize_t,     fn (y, [shp], xs) => let                  (BV.fn_normalize_t,     fn (y, [shp], xs) => let
275                                            val DstTy.TensorTy dd1 = shapeVarToTensor shp                                            val DstTy.TensorTy dd1 = shapeVarToTensor shp
276                                            in                                          in (case (dd1,xs)
277                                              case dd1                                              of ([],[arg0])=> [IL.ASSGN(y,IL.VAR arg0)]
278                                               of [_] => assign(y, Op.Normalize(DstTy.TensorTy dd1), xs)                                              | (_,[arg0]) => [assignEin(y, Mk.normalizeTT(dd1),xs)]
279  (* FIXME: looks right but causes precision error for regresstion tests. change later *)                                          (*end case*))
                                               | _ => [assignEin(y, Mk.normalizeTT dd1, xs@xs)]  
                                             (* end case *)  
280                                            end),                                            end),
281  *)                  (BV.fn_normalize_f,   fn (y, [ _,Ty.DIM d1, Ty.SHAPE dd1], xs) =>
282                  (BV.fn_normalize_f,     fn (y, [ _, Ty.DIM d1, Ty.SHAPE dd], xs) => (case dd                                          (case (dd1,xs)
283                                             of [] => [assignEin(y, Mk.normalizeFF(d1, []), xs)]                                              of ([],[arg0])=> [IL.ASSGN(y,IL.VAR arg0)]
284                                              | _ => [assignEin(y, Mk.normalizeFF(d1, dd), xs@xs)]                                              | (_,[arg0]) => [assignEin(y, Mk.normalizeFF(d1, dd1),xs@xs)]
285                                            (* end case *))),                                          end)),
286                  (BV.fn_trace_t,         fn (y, [Ty.DIM d], xs) =>                  (BV.fn_trace_t,         fn (y, [Ty.DIM d], xs) =>
287                                            [assignEin(y, (Mk.traceT d), xs)]),                                            [assignEin(y, (Mk.traceT d), xs)]),
288                  (BV.fn_trace_f,         fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>                  (BV.fn_trace_f,         fn (y, [_, Ty.DIM d, Ty.SHAPE dd], xs) =>
# Line 288  Line 295 
295                  (BV.fn_det3_t,          simpleEOp (Mk.det3T)),                  (BV.fn_det3_t,          simpleEOp (Mk.det3T)),
296                  (BV.fn_det2_f,          simpleEOp (Mk.det2F)),                  (BV.fn_det2_f,          simpleEOp (Mk.det2F)),
297                  (BV.fn_det3_f,          simpleEOp (Mk.det3F)),                  (BV.fn_det3_f,          simpleEOp (Mk.det3F)),
 (* FIXME: BV.fn_sqrt_r *)  
298                  (BV.fn_sqrt_s,          fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_sqrt_s,          fn (y, [_, Ty.DIM d1], xs) =>
299                                            [assignEin(y, Mk.sqrtF d1, xs)]),                                            [assignEin(y, Mk.sqrtF d1, xs)]),
300  (* FIXME: BV.fn_cos_r *)                  (BV.fn_sqrt_t,    fn (y, _, xs) =>
301                                                [assignEin(y, Mk.sqrtR, xs)]),
302    (*
303                    (BV.fn_cos_r,           fn (y, _, xs) =>
304                                                [assignEin(y, Mk.cosR, xs)]),
305    *)
306                  (BV.fn_cos_s,           fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_cos_s,           fn (y, [_, Ty.DIM d1], xs) =>
307                                            [assignEin(y, Mk.cosF d1, xs)]),                                            [assignEin(y, Mk.cosF d1, xs)]),
308  (* FIXME: BV.fn_acos_r *)  (*
309                    (BV.fn_acos_r,           fn (y, _, xs) =>
310                                              [assignEin(y, Mk.acosR, xs)]),
311    *)
312                  (BV.fn_acos_s,          fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_acos_s,          fn (y, [_, Ty.DIM d1], xs) =>
313                                            [assignEin(y, Mk.acosF d1, xs)]),                                            [assignEin(y, Mk.acosF d1, xs)]),
314  (* FIXME: BV.fn_sin_r *)  (*
315                    (BV.fn_sin_r,           fn (y, _, xs) =>
316                                                [assignEin(y, Mk.sinR, xs)]),
317    *)
318                  (BV.fn_sin_s,           fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_sin_s,           fn (y, [_, Ty.DIM d1], xs) =>
319                                            [assignEin(y, Mk.sinF d1, xs)]),                                            [assignEin(y, Mk.sinF d1, xs)]),
320  (* FIXME: BV.fn_asin_r *)  (*
321                    (BV.fn_asin_r,           fn (y, _, xs) =>
322                                                [assignEin(y, Mk.asinR, xs)]),
323    *)
324                  (BV.fn_asin_s,          fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_asin_s,          fn (y, [_, Ty.DIM d1], xs) =>
325                                            [assignEin(y, Mk.asinF d1, xs)]),                                            [assignEin(y, Mk.asinF d1, xs)]),
326  (* FIXME: BV.fn_tan_r *)  (*
327                    (BV.fn_tan_r,           fn (y, _, xs) =>
328                                                [assignEin(y, Mk.tanR, xs)]),
329    *)
330                  (BV.fn_tan_s,           fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_tan_s,           fn (y, [_, Ty.DIM d1], xs) =>
331                                            [assignEin(y, Mk.tanF d1, xs)]),                                            [assignEin(y, Mk.tanF d1, xs)]),
332  (* FIXME: BV.fn_atan_r *)  (*
333                    (BV.fn_atan_r,           fn (y, _, xs) =>
334                                               [assignEin(y, Mk.atanR, xs)]),
335    *)
336                  (BV.fn_atan_s,          fn (y, [_, Ty.DIM d1], xs) =>                  (BV.fn_atan_s,          fn (y, [_, Ty.DIM d1], xs) =>
337                                            [assignEin(y, Mk.atanF d1, xs)]),                                            [assignEin(y, Mk.atanF d1, xs)]),
338                  (BV.fn_exp_r,           fn (y, _, xs) =>                  (BV.fn_exp_r,           fn (y, _, xs) =>
# Line 405  Line 431 
431                                            in                                            in
432                                              assign(y, Op.BorderCtlWrap info, args)                                              assign(y, Op.BorderCtlWrap info, args)
433                                            end),                                            end),
434                  (BV.dist2_t,            simpleOp (Op.Dist(DstTy.TensorTy[2]))),                  (BV.dist2_t,           fn (y,_,xs)=>dist(y,[2],args)),
435                  (BV.dist3_t,            simpleOp (Op.Dist(DstTy.TensorTy[3]))),                  (BV.dist3_t,           fn (y,_,xs)=>dist(y,[3],args)),
436                  (BV.red_all,            fn (y, _, args as [e, v, k]) =>                  (BV.red_all,            fn (y, _, args as [e, v, k]) =>
437                                            assign(y, Op.R_All(IR.Var.ty v), args)),                                            assign(y, Op.R_All(IR.Var.ty v), args)),
438                  (BV.red_exists,         fn (y, _, args as [e, v, k]) =>                  (BV.red_exists,         fn (y, _, args as [e, v, k]) =>

Legend:
Removed from v.3493  
changed lines
  Added in v.3494

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