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 3513, Fri Dec 18 20:02:39 2015 UTC revision 3514, Fri Dec 18 22:05:19 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    
509    (* 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
510     * 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
511     * 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 635 
635                [f1] --> f1                [f1] --> f1
636              end))              end))
637    
   (* 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 *)  
   
638      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],      val fn_principleEvec = polyVar (N.fn_principleEvec, all([NK],
639              fn [Ty.DIM d] => let              fn [Ty.DIM d] => let
640                  val d = Ty.DimVar d                  val d = Ty.DimVar d

Legend:
Removed from v.3513  
changed lines
  Added in v.3514

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