Home My Page Projects Code Snippets Project Openings diderot

# SCM Repository

[diderot] Diff of /branches/ein16/src/compiler/basis/basis-vars.sml
 [diderot] / branches / ein16 / src / compiler / basis / basis-vars.sml

# Diff of /branches/ein16/src/compiler/basis/basis-vars.sml

revision 3997, Sun Jun 19 15:55:49 2016 UTC revision 3998, Sun Jun 19 17:12:03 2016 UTC
# Line 206  Line 206
206              in              in
207                  [f,s] --> f                  [f,s] --> f
208              end))              end))
209        val div_ts = polyVar(N.op_div, all([DK,NK,SK],
210                fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
211                val t = Ty.T_Tensor(Ty.ShapeVar dd)
212                val s = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape []}
213                val f = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
214                    in
215            [t, s] --> f
216            end))
217
218
219    (* exponentiation; we distinguish between integer and real exponents to allow x^2 to be compiled    (* exponentiation; we distinguish between integer and real exponents to allow x^2 to be compiled
220     * as x*x.     * as x*x.
# Line 580  Line 589
589      val fn_max = monoVar (N.fn_max, [Ty.realTy, Ty.realTy] --> Ty.realTy)      val fn_max = monoVar (N.fn_max, [Ty.realTy, Ty.realTy] --> Ty.realTy)
590      val fn_min = monoVar (N.fn_min, [Ty.realTy, Ty.realTy] --> Ty.realTy)      val fn_min = monoVar (N.fn_min, [Ty.realTy, Ty.realTy] --> Ty.realTy)
591
592      val fn_modulate = polyVar (N.fn_modulate, all([NK],      val fn_modulate_tt = polyVar (N.fn_modulate, all([SK],
593            fn [Ty.DIM d] => let            fn [Ty.SHAPE dd] => let
594                val t = Ty.T_Tensor(Ty.Shape[Ty.DimVar d])                val t = Ty.T_Tensor(Ty.ShapeVar dd)
595                in                in
596                  [t, t] --> t                  [t, t] --> t
597                end))                end))
598
599        val fn_modulate_tf = polyVar (N.op_dot, all([DK ,NK, SK],
600            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1] => let
601                val k = Ty.DiffVar(k, 0)
602                val d = Ty.DimVar d
603                val t1 = Ty.T_Tensor(Ty.ShapeVar dd1)
604                val t2 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd1}
605            in
606                [t1, t2] --> t2
607            end))
608
609        val fn_modulate_ft = polyVar (N.op_dot, all([DK, NK, SK],
610            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1] => let
611            val k = Ty.DiffVar(k, 0)
612            val d = Ty.DimVar d
613            val t1 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd1}
614            val t2 = Ty.T_Tensor(Ty.ShapeVar dd1)
615            in
616            [t1, t2] --> t1
617            end))
618
619        val fn_modulate_ff = polyVar (N.fn_modulate, all([DK, NK, SK],
620            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1] => let
621                val k0 = Ty.DiffVar(k, 0)
622                val d' = Ty.DimVar d
623                val f1 = Ty.T_Field{diff = k0, dim = d', shape = Ty.ShapeVar dd1}
624                in
625                    [f1,f1] --> f1
626                end))
627
628          val fn_normalize_t = polyVar (N.fn_normalize, all([SK],          val fn_normalize_t = polyVar (N.fn_normalize, all([SK],
629              fn [Ty.SHAPE dd] => let              fn [Ty.SHAPE dd] => let
630                  val t = Ty.T_Tensor(Ty.ShapeVar dd)                  val t = Ty.T_Tensor(Ty.ShapeVar dd)

Legend:
 Removed from v.3997 changed lines Added in v.3998