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

SCM Repository

[diderot] Diff of /trunk/src/basis/basis.sml
ViewVC logotype

Diff of /trunk/src/basis/basis.sml

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

revision 74, Mon May 24 16:38:42 2010 UTC revision 75, Mon May 24 20:41:18 2010 UTC
# Line 11  Line 11 
11      local      local
12        structure N = BasisNames        structure N = BasisNames
13        structure Ty = Types        structure Ty = Types
14        structure TV = TypeVar        structure MV = MetaVar
15    
16        fun --> (tys1, ty) = Ty.T_Fun(tys1, [ty])        fun --> (tys1, ty) = Ty.T_Fun(tys1, [ty])
17        infix -->        infix -->
18    
19        val N2 = Ty.NatConst 2        val N2 = Ty.DimConst 2
20        val N3 = Ty.NatConst 3        val N3 = Ty.DimConst 3
21    
22      (* short names for kinds *)      (* short names for kinds *)
23        val NK = Ty.TK_NAT        val TK : unit -> Ty.meta_var = Ty.TYPE o MV.newTyVar
24        val SK = Ty.TK_SHAPE        val DK : unit -> Ty.meta_var = Ty.DIFF o MV.newDiffVar
25        val TK = Ty.TK_TYPE        val SK : unit -> Ty.meta_var = Ty.SHAPE o MV.newShapeVar
26          val NK : unit -> Ty.meta_var = Ty.DIM o MV.newDimVar
27    
28        fun ty t = ([], t)        fun ty t = ([], t)
29        fun all (kinds, mkTy) = let        fun all (kinds, mkTy) = let
30              val tvs = List.map (fn k => TV.new k) kinds              val tvs = List.map (fn mk => mk()) kinds
31              in              in
32                (tvs, mkTy tvs)                (tvs, mkTy tvs)
33              end              end
34        fun allNK mkTy = let        fun allNK mkTy = let
35              val tv = TV.new NK              val tv = MV.newDimVar()
36              in              in
37                ([tv], mkTy tv)                ([Ty.DIM tv], mkTy tv)
38              end              end
39    
40      fun field (k, d, dd) = Ty.T_Field{diff=k, dim=d, shape=dd}      fun field (k, d, dd) = Ty.T_Field{diff=k, dim=d, shape=dd}
# Line 60  Line 61 
61    (* non-overloaded operators, etc. *)    (* non-overloaded operators, etc. *)
62      val basis = [      val basis = [
63          (* operators *)          (* operators *)
64            (N.op_at, all([NK, NK, SK],            (N.op_at, all([DK, NK, SK],
65              fn [k, d, dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
66                  val k = Ty.NatVar k                  val k = Ty.DiffVar(k, 0)
67                  val d = Ty.NatVar d                  val d = Ty.DimVar d
68                  val dd = Ty.ShapeVar dd                  val dd = Ty.ShapeVar dd
69                  in                  in
70                    [field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd                    [field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd
71                  end)),                  end)),
72            (N.op_at, all([NK, NK, SK],            (N.op_at, all([DK, NK, SK],
73              fn [k, d, dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
74                  val k = Ty.NatVar k                  val k0 = Ty.DiffVar(k, 0)
75                  val d = Ty.NatVar d                  val km1 = Ty.DiffVar(k, ~1)
76                    val d = Ty.DimVar d
77                  val dd = Ty.ShapeVar dd                  val dd = Ty.ShapeVar dd
78                  in                  in
79                    [field(k, d, dd), tensor[d]]                    [field(k0, d, dd), tensor[d]]
80                      --> field(Ty.NatExp(k, ~1), d, Ty.ShapeExt(dd, d))                      --> field(km1, d, Ty.ShapeExt(dd, d))
81                  end)),                  end)),
82            (N.op_norm, all([SK],            (N.op_norm, all([SK],
83              fn [dd] => [Ty.T_Tensor(Ty.ShapeVar dd)] --> Ty.realTy)),              fn [Ty.SHAPE dd] => [Ty.T_Tensor(Ty.ShapeVar dd)] --> Ty.realTy)),
84          (* functions *)          (* functions *)
85            (N.fn_CL,     ty([tensor[N3, N3]] --> Ty.vec3Ty)),            (N.fn_CL,     ty([tensor[N3, N3]] --> Ty.vec3Ty)),
86            (N.fn_convolve, all([NK, NK, SK],            (N.fn_convolve, all([DK, NK, SK],
87              fn [k, d, dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
88                  val k = Ty.NatVar k                  val k = Ty.DiffVar(k, 0)
89                  val d = Ty.NatVar d                  val d = Ty.DimVar d
90                  val dd = Ty.ShapeVar dd                  val dd = Ty.ShapeVar dd
91                  in                  in
92                    [Ty.T_Kernel k, Ty.T_Image{dim=d, shape=dd}]                    [Ty.T_Kernel k, Ty.T_Image{dim=d, shape=dd}]
93                      --> field(k, d, dd)                      --> field(k, d, dd)
94                  end)),                  end)),
95            (N.fn_cos,    ty([Ty.realTy] --> Ty.realTy)),            (N.fn_cos,    ty([Ty.realTy] --> Ty.realTy)),
96            (N.fn_dot,    allNK(fn tv => [tensor[Ty.NatVar tv]]            (N.fn_dot,    allNK(fn tv => [tensor[Ty.DimVar tv]]
97                            --> tensor[Ty.NatVar tv])),                            --> tensor[Ty.DimVar tv])),
98            (N.fn_inside, all([NK, NK, SK],            (N.fn_inside, all([DK, NK, SK],
99              fn [k, d, dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
100                  val k = Ty.NatVar k                  val k = Ty.DiffVar(k, 0)
101                  val d = Ty.NatVar d                  val d = Ty.DimVar d
102                  val dd = Ty.ShapeVar dd                  val dd = Ty.ShapeVar dd
103                  in                  in
104                    [Ty.T_Tensor(Ty.Shape[d]), field(k, d, dd)]                    [Ty.T_Tensor(Ty.Shape[d]), field(k, d, dd)]
105                      --> Ty.T_Bool                      --> Ty.T_Bool
106                  end)),                  end)),
107            (N.fn_load,   all([NK, SK],            (N.fn_load,   all([NK, SK],
108              fn [d, dd] => let              fn [Ty.DIM d, Ty.SHAPE dd] => let
109                  val d = Ty.NatVar d                  val d = Ty.DimVar d
110                  val dd = Ty.ShapeVar dd                  val dd = Ty.ShapeVar dd
111                  in                  in
112                    [Ty.T_String] --> Ty.T_Image{dim=d, shape=dd}                    [Ty.T_String] --> Ty.T_Image{dim=d, shape=dd}
# Line 115  Line 117 
117  *)  *)
118            (N.fn_sin,    ty([Ty.realTy] --> Ty.realTy)),            (N.fn_sin,    ty([Ty.realTy] --> Ty.realTy)),
119          (* kernels *)          (* kernels *)
120            (N.kn_bspln3, ty(Ty.T_Kernel(Ty.NatConst 2))),            (N.kn_bspln3, ty(Ty.T_Kernel(Ty.DiffConst 2))),
121            (N.kn_tent,   ty(Ty.T_Kernel(Ty.NatConst 0)))            (N.kn_tent,   ty(Ty.T_Kernel(Ty.DiffConst 0)))
122          ]          ]
123    
124      end (* local *)      end (* local *)

Legend:
Removed from v.74  
changed lines
  Added in v.75

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