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

SCM Repository

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

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

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

revision 3511, Fri Dec 18 17:43:38 2015 UTC revision 3518, Sat Dec 19 04:45:08 2015 UTC
# Line 468  Line 468 
468                  [t1, t2] --> t3                  [t1, t2] --> t3
469                end))                end))
470    
471      (* outer product *)
472        val op_outer_tt = polyVar (N.op_outer, all([SK, SK, SK],
473              fn [Ty.SHAPE s1, Ty.SHAPE s2, Ty.SHAPE s3] =>
474                  [Ty.T_Tensor(Ty.ShapeVar s1), Ty.T_Tensor(Ty.ShapeVar s2)]
475                    --> Ty.T_Tensor(Ty.ShapeVar s1)))
476        val op_outer_tf = polyVar (N.op_outer, all([DK,NK,SK,SK,SK],
477              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2, Ty.SHAPE dd3] => let
478                val k = Ty.DiffVar(k, 0)
479                val d = Ty.DimVar d
480                val t1 = Ty.T_Tensor(Ty.ShapeVar dd1)
481                val t2 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd2}
482                val t3 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd3}
483                in
484                  [t1, t2] --> t3
485                end))
486        val op_outer_ft = polyVar (N.op_outer, all([DK, NK, SK, SK, SK],
487              fn [Ty.DIFF k, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2, Ty.SHAPE dd3] => let
488                  val k = Ty.DiffVar(k, 0)
489                  val d = Ty.DimVar d
490                  val t1 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd1}
491                  val t2 = Ty.T_Tensor(Ty.ShapeVar dd2)
492                  val t3 = Ty.T_Field{diff = k, dim = d, shape = Ty.ShapeVar dd3}
493                  in
494                    [t1, t2] --> t3
495                  end))
496        val op_outer_ff = polyVar (N.op_outer, all([DK, DK, NK, SK, SK, SK],
497              fn [Ty.DIFF k1,Ty.DIFF k2, Ty.DIM d, Ty.SHAPE dd1, Ty.SHAPE dd2, Ty.SHAPE dd3] => let
498                  val k1 = Ty.DiffVar(k1, 0)
499                  val k2 = Ty.DiffVar(k2, 0)
500                  val d = Ty.DimVar d
501                  val t1 = Ty.T_Field{diff = k1, dim = d, shape = Ty.ShapeVar dd1}
502                  val t2 = Ty.T_Field{diff = k2, dim = d, shape = Ty.ShapeVar dd2}
503                  val t3 = Ty.T_Field{diff = k1, dim = d, shape = Ty.ShapeVar dd3}
504                  in
505                    [t1, t2] --> t3
506                  end))
507    
508    (* the colon (or double-dot) product operator is treated as a special case in the    (* the colon (or double-dot) product operator is treated as a special case in the
509     * typechecker.  It is not included in the basis environment, but we define its type     * typechecker.  It is not included in the basis environment, but we define its type
510     * scheme here.  There is an implicit constraint on its type to have the following scheme:     * scheme here.  There is an implicit constraint on its type to have the following scheme:
# Line 597  Line 634 
634                [f1] --> f1                [f1] --> f1
635              end))              end))
636    
   (* outer product *)  
     local  
       fun mkOuter [Ty.DIM d1, Ty.DIM d2] = let  
             val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])  
             val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2])  
             val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2])  
             in  
               [vt1, vt2] --> mt  
             end  
     in  
     val op_outer_tt = polyVar (N.op_outer, all([NK, NK], mkOuter))  
     end (* local *)  
   
     local  
       fun mkOuter2 [Ty.DIM d1, Ty.DIM d2, Ty.DIM d3] = let  
             val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1])  
             val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d2, Ty.DimVar d3])  
             val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2, Ty.DimVar d3])  
             in  
               [vt1, vt2] --> mt  
             end  
     in  
       val op_outer_tm = polyVar (N.op_outer, all([NK, NK, NK], mkOuter2))  
     end (* local *)  
   
     local  
       fun mkOuter3 [Ty.DIM d1, Ty.DIM d2, Ty.DIM d3] = let  
             val vt1 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1,Ty.DimVar d2])  
             val vt2 = Ty.T_Tensor(Ty.Shape[Ty.DimVar d3])  
             val mt = Ty.T_Tensor(Ty.Shape[Ty.DimVar d1, Ty.DimVar d2,Ty.DimVar d3])  
             in  
               [vt1, vt2] --> mt  
             end  
     in  
       val op_outer_mt = polyVar (N.op_outer, all([NK, NK,NK], mkOuter3))  
     end (* local *)  
   
     local  
       fun mkOuterField [Ty.DIFF k, Ty.DIM d,Ty.DIM a, Ty.DIM b] = let  
             val k0 = Ty.DiffVar(k, 0)  
             val d' = Ty.DimVar d  
             val a' = Ty.DimVar a  
             val b' = Ty.DimVar b  
             val f = field(k0, d', Ty.Shape[a'])  
             val g = field(k0, d', Ty.Shape[b'])  
             val h = field(k0, d', Ty.Shape[a', b'])  
             in  
               [f, g] --> h  
             end  
     in  
     val op_outer_ff = polyVar (N.op_outer, all([DK,NK,NK,NK], mkOuterField))  
     end (* local *)  
   
637      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],
638              fn [Ty.DIM d] => let              fn [Ty.DIM d] => let
639                  val d = Ty.DimVar d                  val d = Ty.DimVar d

Legend:
Removed from v.3511  
changed lines
  Added in v.3518

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