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

SCM Repository

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

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

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

trunk/src/basis/basis-vars.sml revision 83, Wed May 26 18:50:44 2010 UTC trunk/src/compiler/basis/basis-vars.sml revision 470, Tue Nov 2 16:33:48 2010 UTC
# Line 1  Line 1 
1  (* basis-vars.sml  (* basis-vars.sml
2   *   *
3   * COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu)   * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4   * All rights reserved.   * All rights reserved.
5   *   *
6   * This module defines the AST variables for the built in operators and functions.   * This module defines the AST variables for the built in operators and functions.
# Line 21  Line 21 
21    
22      (* short names for kinds *)      (* short names for kinds *)
23        val TK : unit -> Ty.meta_var = Ty.TYPE o MV.newTyVar        val TK : unit -> Ty.meta_var = Ty.TYPE o MV.newTyVar
24        fun DK () = Ty.DIFF(MV.newDiffVar 0)        fun DK () : Ty.meta_var = Ty.DIFF(MV.newDiffVar 0)
25        val SK : unit -> Ty.meta_var = Ty.SHAPE o MV.newShapeVar        val SK : unit -> Ty.meta_var = Ty.SHAPE o MV.newShapeVar
26        val NK : unit -> Ty.meta_var = Ty.DIM o MV.newDimVar        val NK : unit -> Ty.meta_var = Ty.DIM o MV.newDimVar
27    
# Line 54  Line 54 
54     *    b  -- bool     *    b  -- bool
55     *    r  -- real (tensor[])     *    r  -- real (tensor[])
56     *    t  -- tensor[shape]     *    t  -- tensor[shape]
57       *    f  -- field#k(d)[shape]
58     *)     *)
59    
60      val add_ii = monoVar(N.op_add, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)      val add_ii = monoVar(N.op_add, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)
# Line 62  Line 63 
63              in              in
64                [t, t] --> t                [t, t] --> t
65              end))              end))
66        val add_ff = polyVar(N.op_add, all([DK,NK,SK],
67              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
68                val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
69                in
70                  [t, t] --> t
71                end))
72    
73      val sub_ii = monoVar(N.op_sub, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)      val sub_ii = monoVar(N.op_sub, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)
74      val sub_tt = polyVar(N.op_sub, all([SK], fn [Ty.SHAPE dd] => let      val sub_tt = polyVar(N.op_sub, all([SK], fn [Ty.SHAPE dd] => let
# Line 69  Line 76 
76              in              in
77                [t, t] --> t                [t, t] --> t
78              end))              end))
79        val sub_ff = polyVar(N.op_sub, all([DK,NK,SK],
80              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
81                val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
82                in
83                  [t, t] --> t
84                end))
85    
86    (* note that we assume that operators are tested in the order defined here, so that mul_rr    (* note that we assume that operators are tested in the order defined here, so that mul_rr
87     * takes precedence over mul_rt and mul_tr!     * takes precedence over mul_rt and mul_tr!
# Line 85  Line 98 
98              in              in
99                [t, Ty.realTy] --> t                [t, Ty.realTy] --> t
100              end))              end))
101        val mul_rf = polyVar(N.op_mul, all([DK,NK,SK],
102              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
103                val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
104                in
105                  [Ty.realTy, t] --> t
106                end))
107        val mul_fr = polyVar(N.op_mul, all([DK,NK,SK],
108              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
109                val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
110                in
111                  [t, Ty.realTy] --> t
112                end))
113    
114      val div_ii = monoVar(N.op_div, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)      val div_ii = monoVar(N.op_div, [Ty.T_Int, Ty.T_Int] --> Ty.T_Int)
115      val div_rr = monoVar(N.op_div, [Ty.realTy, Ty.realTy] --> Ty.realTy)      val div_rr = monoVar(N.op_div, [Ty.realTy, Ty.realTy] --> Ty.realTy)
# Line 93  Line 118 
118              in              in
119                [t, Ty.realTy] --> t                [t, Ty.realTy] --> t
120              end))              end))
121        val div_fr = polyVar(N.op_div, all([DK,NK,SK],
122              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
123                val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.ShapeVar dd}
124                in
125                  [t, Ty.realTy] --> t
126                end))
127    
128      val lt_ii = monoVar(N.op_lt, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)      val lt_ii = monoVar(N.op_lt, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)
129      val lt_rr = monoVar(N.op_lt, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)      val lt_rr = monoVar(N.op_lt, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)
# Line 141  Line 172 
172                  [field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd                  [field(k, d, dd), tensor[d]] --> Ty.T_Tensor dd
173                end))                end))
174    
175    (* NOTE: this should be overloaded to allow both v*h and h*v orders *)
176        val op_convolve = polyVar (N.op_convolve, all([DK, NK, SK],
177                fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
178                    val k = Ty.DiffVar(k, 0)
179                    val d = Ty.DimVar d
180                    val dd = Ty.ShapeVar dd
181                    in
182                      [Ty.T_Image{dim=d, shape=dd}, Ty.T_Kernel k]
183                        --> field(k, d, dd)
184                    end))
185    
186      val op_D = polyVar (N.op_D, all([DK, NK, SK],      val op_D = polyVar (N.op_D, all([DK, NK, SK],
187            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
188                val k0 = Ty.DiffVar(k, 0)                val k0 = Ty.DiffVar(k, 0)
# Line 148  Line 190 
190                val d = Ty.DimVar d                val d = Ty.DimVar d
191                val dd = Ty.ShapeVar dd                val dd = Ty.ShapeVar dd
192                in                in
193                  [field(k0, d, dd), tensor[d]]                  [field(k0, d, dd)]
194                    --> field(km1, d, Ty.ShapeExt(dd, d))                    --> field(km1, d, Ty.ShapeExt(dd, d))
195                end))                end))
196    
# Line 157  Line 199 
199    
200      val op_not = monoVar (N.op_not, [Ty.T_Bool] --> Ty.T_Bool)      val op_not = monoVar (N.op_not, [Ty.T_Bool] --> Ty.T_Bool)
201    
   
202    (* functions *)    (* functions *)
203      val fn_CL = polyVar (N.fn_CL, ty([tensor[N3, N3]] --> Ty.vec3Ty))      val fn_CL = monoVar (N.fn_CL, [tensor[N3, N3]] --> Ty.realTy)
204    
205    (* the following is depreciated in favor of the infix operator *)
206      val fn_convolve = polyVar (N.fn_convolve, all([DK, NK, SK],      val fn_convolve = polyVar (N.fn_convolve, all([DK, NK, SK],
207              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
208                  val k = Ty.DiffVar(k, 0)                  val k = Ty.DiffVar(k, 0)
# Line 171  Line 213 
213                      --> field(k, d, dd)                      --> field(k, d, dd)
214                  end))                  end))
215    
216      val fn_cos = polyVar (N.fn_cos, ty([Ty.realTy] --> Ty.realTy))      val fn_cos = monoVar (N.fn_cos, [Ty.realTy] --> Ty.realTy)
217    
218      val fn_dot = polyVar (N.fn_dot, allNK(fn tv => [tensor[Ty.DimVar tv]] --> tensor[Ty.DimVar tv]))      val fn_dot = polyVar (N.fn_dot, allNK(fn tv => let
219              val t = tensor[Ty.DimVar tv]
220              in
221                [t, t] --> Ty.realTy
222              end))
223    
224      val fn_inside = polyVar (N.fn_inside,       all([DK, NK, SK],      val fn_inside = polyVar (N.fn_inside,       all([DK, NK, SK],
225              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd] => let
# Line 193  Line 239 
239                    [Ty.T_String] --> Ty.T_Image{dim=d, shape=dd}                    [Ty.T_String] --> Ty.T_Image{dim=d, shape=dd}
240                  end))                  end))
241    
242        val fn_max = monoVar (N.fn_max, [Ty.realTy, Ty.realTy] --> Ty.realTy)
243        val fn_min = monoVar (N.fn_min, [Ty.realTy, Ty.realTy] --> Ty.realTy)
244    
245      val fn_modulate = polyVar (N.fn_modulate, all([NK],      val fn_modulate = polyVar (N.fn_modulate, all([NK],
246              fn [Ty.DIM d] => let              fn [Ty.DIM d] => let
247                  val t = Ty.T_Tensor(Ty.Shape[Ty.DimVar d])                  val t = Ty.T_Tensor(Ty.Shape[Ty.DimVar d])
# Line 200  Line 249 
249                    [t, t] --> t                    [t, t] --> t
250                  end))                  end))
251    
252      val fn_pow = polyVar (N.fn_pow, ty([Ty.realTy, Ty.realTy] --> Ty.realTy))      val fn_pow = monoVar (N.fn_pow, [Ty.realTy, Ty.realTy] --> Ty.realTy)
253    
254  (*      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],
255      val fn_principleEvec = Atom.atom "principleEvec"              fn [Ty.DIM d] => let
256  *)                  val d = Ty.DimVar d
257                    in
258                      [tensor[d,d]] --> tensor[d]
259                    end))
260    
261      val fn_sin = polyVar (N.fn_sin, ty([Ty.realTy] --> Ty.realTy))      val fn_sin = monoVar (N.fn_sin, [Ty.realTy] --> Ty.realTy)
262    
263    (* kernels *)    (* kernels *)
264    (* FIXME: we should really get the continuity info from the kernels themselves *)
265      val kn_bspln3 = monoVar (N.kn_bspln3, Ty.T_Kernel(Ty.DiffConst 2))      val kn_bspln3 = monoVar (N.kn_bspln3, Ty.T_Kernel(Ty.DiffConst 2))
266        val kn_bspln5 = monoVar (N.kn_bspln5, Ty.T_Kernel(Ty.DiffConst 4))
267        val kn_ctmr = monoVar (N.kn_ctmr, Ty.T_Kernel(Ty.DiffConst 2))
268      val kn_tent = monoVar (N.kn_tent, Ty.T_Kernel(Ty.DiffConst 0))      val kn_tent = monoVar (N.kn_tent, Ty.T_Kernel(Ty.DiffConst 0))
269    
270    (* internal variables *)    (* internal variables *)

Legend:
Removed from v.83  
changed lines
  Added in v.470

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