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

revision 2844, Tue Dec 9 18:05:29 2014 UTC revision 2845, Fri Dec 12 06:46:23 2014 UTC
# Line 135  Line 135 
135              in              in
136                [t, Ty.realTy] --> t                [t, Ty.realTy] --> t
137              end))              end))
   
   
 (****MARK *)  
138      val mul_ss = polyVar(N.op_mul, all([DK,NK],      val mul_ss = polyVar(N.op_mul, all([DK,NK],
139      fn [Ty.DIFF k, Ty.DIM d] => let      fn [Ty.DIFF k, Ty.DIM d] => let
140          val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape []}          val t = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape []}
141          in          in
142          [t, t] --> t          [t, t] --> t
143          end))          end))
 (*Right now assumes same level of k*)  
144      val mul_sf = polyVar(N.op_mul, all([DK,NK,SK],      val mul_sf = polyVar(N.op_mul, all([DK,NK,SK],
145      fn [Ty.DIFF k, Ty.DIM d,Ty.SHAPE dd] => let      fn [Ty.DIFF k, Ty.DIM d,Ty.SHAPE dd] => let
146      val a = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape []}      val a = Ty.T_Field{diff = Ty.DiffVar(k, 0), dim = Ty.DimVar d, shape = Ty.Shape []}
# Line 161  Line 157 
157  [b,a] --> b  [b,a] --> b
158  end))  end))
159    
   
160      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)
161      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)
162      val div_tr = polyVar(N.op_div, all([SK], fn [Ty.SHAPE dd] => let      val div_tr = polyVar(N.op_div, all([SK], fn [Ty.SHAPE dd] => let
# Line 183  Line 178 
178              [t, t] --> t              [t, t] --> t
179          end))          end))
180    
   
181    (* 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
182     * as x*x.     * as x*x.
183     *)     *)
# Line 231  Line 225 
225      val gte_rr = monoVar(N.op_gte, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)      val gte_rr = monoVar(N.op_gte, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)
226      val gt_ii = monoVar(N.op_gt, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)      val gt_ii = monoVar(N.op_gt, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)
227      val gt_rr = monoVar(N.op_gt, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)      val gt_rr = monoVar(N.op_gt, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)
   
228      val equ_bb = monoVar(N.op_equ, [Ty.T_Bool, Ty.T_Bool] --> Ty.T_Bool)      val equ_bb = monoVar(N.op_equ, [Ty.T_Bool, Ty.T_Bool] --> Ty.T_Bool)
229      val equ_ii = monoVar(N.op_equ, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)      val equ_ii = monoVar(N.op_equ, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)
230      val equ_ss = monoVar(N.op_equ, [Ty.T_String, Ty.T_String] --> Ty.T_Bool)      val equ_ss = monoVar(N.op_equ, [Ty.T_String, Ty.T_String] --> Ty.T_Bool)
# Line 240  Line 233 
233      val neq_ii = monoVar(N.op_neq, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)      val neq_ii = monoVar(N.op_neq, [Ty.T_Int, Ty.T_Int] --> Ty.T_Bool)
234      val neq_ss = monoVar(N.op_neq, [Ty.T_String, Ty.T_String] --> Ty.T_Bool)      val neq_ss = monoVar(N.op_neq, [Ty.T_String, Ty.T_String] --> Ty.T_Bool)
235      val neq_rr = monoVar(N.op_neq, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)      val neq_rr = monoVar(N.op_neq, [Ty.realTy, Ty.realTy] --> Ty.T_Bool)
   
   
236      val neg_i = monoVar(N.op_neg, [Ty.T_Int] --> Ty.T_Int)      val neg_i = monoVar(N.op_neg, [Ty.T_Int] --> Ty.T_Int)
237      val neg_t = polyVar(N.op_neg, all([SK],      val neg_t = polyVar(N.op_neg, all([SK],
238            fn [Ty.SHAPE dd] => let            fn [Ty.SHAPE dd] => let
# Line 292  Line 283 
283      val evecs3x3 = evecs(Ty.DimConst 3)      val evecs3x3 = evecs(Ty.DimConst 3)
284      end      end
285    
   
286    (***** non-overloaded operators, etc. *****)    (***** non-overloaded operators, etc. *****)
287    
288    (* C math functions *)    (* C math functions *)
# Line 322  Line 312 
312                  [field(k0, d, Ty.Shape[])]                  [field(k0, d, Ty.Shape[])]
313                    --> field(km1, d, Ty.Shape[d])                    --> field(km1, d, Ty.Shape[d])
314                end))                end))
315    
316    (* differentiation of higher-order tensor fields *)    (* differentiation of higher-order tensor fields *)
317      val op_Dotimes = polyVar (N.op_Dotimes, all([DK, NK, SK, NK],      val op_Dotimes = polyVar (N.op_Dotimes, all([DK, NK, SK, NK],
318            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let            fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let
# Line 335  Line 326 
326                    --> field(km1, d, Ty.ShapeExt(Ty.ShapeExt(dd, d'), d))                    --> field(km1, d, Ty.ShapeExt(Ty.ShapeExt(dd, d'), d))
327                end))                end))
328    
   
   
329     (* divergence differentiation of higher-order tensor fields *)     (* divergence differentiation of higher-order tensor fields *)
330      val op_Ddot = polyVar (N.op_Ddot, all([DK, NK, SK, NK],      val op_Ddot = polyVar (N.op_Ddot, all([DK, NK, SK, NK],
331          fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let          fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd, Ty.DIM d'] => let
# Line 430  Line 419 
419              [t1,t2] --> t3              [t1,t2] --> t3
420          end))          end))
421    
   
422    (* load image from nrrd *)    (* load image from nrrd *)
423      val fn_image = polyVar (N.fn_image, all([NK, SK],      val fn_image = polyVar (N.fn_image, all([NK, SK],
424              fn [Ty.DIM d, Ty.SHAPE dd] => let              fn [Ty.DIM d, Ty.SHAPE dd] => let
# Line 476  Line 464 
464                  end))                  end))
465    
466    (* outer products*)    (* outer products*)
   
467      local      local
468        fun mkOuter [Ty.DIM d1, Ty.DIM d2] = let        fun mkOuter [Ty.DIM d1, Ty.DIM d2] = let
469              val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])              val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])
470              val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2])              val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2])
471              val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2])              val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2])
   
   
   
   
472              in              in
473                [vt1, vt2] --> mt                [vt1, vt2] --> mt
474              end              end
# Line 493  Line 476 
476      val op_outer = polyVar (N.op_outer, all([NK, NK], mkOuter))      val op_outer = polyVar (N.op_outer, all([NK, NK], mkOuter))
477      end      end
478    
   
   
   
   
479      fun field' (k, d, dd) = field(k, Ty.DimConst d, Ty.Shape(List.map Ty.DimConst dd))      fun field' (k, d, dd) = field(k, Ty.DimConst d, Ty.Shape(List.map Ty.DimConst dd))
480    
481      local      local
# Line 504  Line 483 
483          val k0=Ty.DiffVar(k, 0)          val k0=Ty.DiffVar(k, 0)
484          val d' = Ty.DimVar d          val d' = Ty.DimVar d
485          val f = field(k0, d', Ty.Shape[d'])          val f = field(k0, d', Ty.Shape[d'])
        (* val h = field(k0, d',  Ty.Shape[d',d'])*)  
486          val h = field(k0, d',  Ty.Shape[ d', d'])          val h = field(k0, d',  Ty.Shape[ d', d'])
487          in          in
488              [f, f] --> h              [f, f] --> h
# Line 512  Line 490 
490      in      in
491          val op_outerField = polyVar (N.op_outer, all([DK,NK], mkOuterField))          val op_outerField = polyVar (N.op_outer, all([DK,NK], mkOuterField))
492      end      end
 (*  
     local  
     fun mkOuterFieldTen [Ty.DIFF k, Ty.DIM d] = let  
         val k0=Ty.DiffVar(k, 0)  
         val d' = Ty.DimVar d  
   
         val t = Ty.T_Tensor(Ty.Shape[d'])  
         val f = field(k0, d', Ty.Shape[d'])  
         val h = field(k0, d',  Ty.Shape[d',d'])  
   
         in  
             [f, t] --> h  
         end  
     in  
         val op_outerFieldTen = polyVar (N.op_outer, all([DK,NK], mkOuterFieldTen))  
     end  
 *)  
   
   
   
 (* Fields of any shape, and dimension  
 fun mkOuterField [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2] = let  
 val d1 = Ty.ShapeVar dd1  
 val d2 = Ty.ShapeVar dd2  
 val k0=Ty.DiffVar(k, 0)  
 val d' = Ty.DimVar d  
   
 val f = field(k0, d', d1)  
 val g = field(k0, d',  d2)  
 val h = field'(k0, 2,  [2,2])  
   
   
 in  
 [f, g] --> h  
 end  
 in  
 val op_outerField = polyVar (N.op_outer, all([DK,NK, SK,SK], mkOuterField))  
 end  
   
   
 *)  
   
493      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],
494              fn [Ty.DIM d] => let              fn [Ty.DIM d] => let
495                  val d = Ty.DimVar d                  val d = Ty.DimVar d
# Line 577  Line 513 
513      in      in
514          val fn_traceField = polyVar (N.fn_trace, all([DK,NK,SK], mktraceField))          val fn_traceField = polyVar (N.fn_trace, all([DK,NK,SK], mktraceField))
515  end  end
   
   
   
516      val fn_transpose = polyVar (N.fn_transpose, all([NK, NK],      val fn_transpose = polyVar (N.fn_transpose, all([NK, NK],
517              fn [Ty.DIM d1, Ty.DIM d2] =>              fn [Ty.DIM d1, Ty.DIM d2] =>
518                [tensor[Ty.DimVar d1, Ty.DimVar d2]] --> tensor[Ty.DimVar d2, Ty.DimVar d1]))                [tensor[Ty.DimVar d1, Ty.DimVar d2]] --> tensor[Ty.DimVar d2, Ty.DimVar d1]))
519    
   
520      local      local
521          fun mktransposeField [Ty.DIFF k, Ty.DIM d,Ty.DIM a, Ty.DIM b] = let          fun mktransposeField [Ty.DIFF k, Ty.DIM d,Ty.DIM a, Ty.DIM b] = let
522          val k0=Ty.DiffVar(k, 0)          val k0=Ty.DiffVar(k, 0)
# Line 600  Line 532 
532          val fn_transposeField = polyVar (N.fn_transpose, all([DK,NK,NK,NK], mktransposeField))          val fn_transposeField = polyVar (N.fn_transpose, all([DK,NK,NK,NK], mktransposeField))
533      end      end
534    
   
535    (* kernels *)    (* kernels *)
536  (* FIXME: we should really get the continuity info from the kernels themselves *)  (* FIXME: we should really get the continuity info from the kernels themselves *)
537      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))

Legend:
Removed from v.2844  
changed lines
  Added in v.2845

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