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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/ein/mk-operators.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/ein/mk-operators.sml

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

revision 3478, Thu Dec 3 17:26:24 2015 UTC revision 3494, Fri Dec 11 20:12:40 2015 UTC
# Line 63  Line 63 
63      val colonFT : dim * shape * ids -> Ein.ein      val colonFT : dim * shape * ids -> Ein.ein
64      val colonTF : dim * shape * ids -> Ein.ein      val colonTF : dim * shape * ids -> Ein.ein
65    
66      val magnitudeTT : shape -> Ein.ein      val normT : shape -> Ein.ein
67      val magnitudeFF : dim * shape -> Ein.ein      val normF : dim * shape -> Ein.ein
68    
69      val normalizeTT : shape -> Ein.ein      val normalizeTT : shape -> Ein.ein
70      val normalizeFF : dim * shape -> Ein.ein      val normalizeFF : dim * shape -> Ein.ein
# Line 95  Line 95 
95      val asinF : dim -> Ein.ein      val asinF : dim -> Ein.ein
96      val tanF  : dim -> Ein.ein      val tanF  : dim -> Ein.ein
97      val atanF : dim -> Ein.ein      val atanF : dim -> Ein.ein
98        val sqrtR : Ein.ein
99        val cosR  : Ein.ein
100        val acosR : Ein.ein
101        val sinR  : Ein.ein
102        val asinR : Ein.ein
103        val tanR  : Ein.ein
104        val atanR :  Ein.ein
105    
106      val modulate : dim -> Ein.ein      val modulate : dim -> Ein.ein
107    
# Line 547  Line 554 
554          * normalize only implemented for vectors and use mid il-op          * normalize only implemented for vectors and use mid il-op
555          *)          *)
556    (* get norm, but without the sqrt. Implemented as a summation over a modulate *)    (* get norm, but without the sqrt. Implemented as a summation over a modulate *)
557      fun magnitudeTT alpha = let    fun normTT alpha = let
558            val expindex = specialize(alpha, 0)            val expindex = specialize(alpha, 0)
559            val sx = sumIds(length alpha, 0, alpha)      val sx= sumIds(length(alpha),0,alpha)
560            in            in
561               E.EIN{               E.EIN{
562                   params = [E.TEN(subst_flag,alpha), E.TEN(subst_flag,alpha)],          params = [E.TEN(subst_flag,alpha)],
563                   index = [],                   index = [],
564                   body = E.Sum(sx,          body = E.Op1(E.Sqrt,E.Sum(sx, E.Opn(E.Prod,[E.Tensor(0, expindex), E.Tensor(0, expindex)])))
                  E.Opn(E.Prod, [E.Tensor(0, expindex), E.Tensor(1, expindex)]))  
565                 }                 }
566            end            end
567    
568      fun magnitudeFF (dim, []) = E.EIN{    fun normFF(dim,alpha) =let
             params = [E.FLD dim, E.FLD dim], index = [], body = E.Field(0, [])  
           }  
       | magnitudeFF (dim, alpha) =let  
569            val expindex = specialize(alpha, 0)            val expindex = specialize(alpha, 0)
570            val sx = sumIds(length alpha, 0, alpha)      val sx= sumIds(length(alpha),0,alpha)
571            in            in
572              E.EIN{              E.EIN{
573                  params = [E.FLD dim, E.FLD dim],      params = [E.FLD(dim)],
574                  index = [],                  index = [],
575                  body = E.Op1(E.Sqrt,      body = E.Op1(E.Sqrt,E.Sum(sx, E.Opn(E.Prod,[E.Field(0, expindex),E.Field(0,expindex)])))
                   E.Sum(sx, E.Opn(E.Prod, [E.Field(0, expindex), E.Field(1, expindex)])))  
576                }                }
577            end            end
578    
579      fun normalizeTT [] = E.EIN{      fun normalizeTT alpha = let
             params = [E.TEN(subst_flag, [])], index = [], body = E.Tensor(0, [])  
           }  
       | normalizeTT alpha = let  
580            val expindex = specialize(alpha, 0)            val expindex = specialize(alpha, 0)
         (* shift indices in the inner product *)  
581            val len = length alpha            val len = length alpha
582            val expindexDot = specialize(alpha, len)            val expindexDot = specialize(alpha, len)
583            val sx = sumIds(len, len, alpha)            val sx = sumIds(len, len, alpha)
# Line 595  Line 593 
593                }                }
594            end            end
595    
596      fun normalizeFF (dim, []) = E.EIN{      fun normalizeFF (dim, alpha as i::_) = let
             params = [E.FLD dim], index = [], body = E.Field(0, [])  
           }  
       | normalizeFF (dim, alpha as i::_) = let  
597            val expindex = specialize(alpha, 0)            val expindex = specialize(alpha, 0)
         (*shift indices in the inner product*)  
598            val len = length alpha            val len = length alpha
599            val expindexDot = specialize(alpha, len)            val expindexDot = specialize(alpha, len)
600            val sx = sumIds(len, len, alpha)            val sx = sumIds(len, len, alpha)
# Line 750  Line 744 
744    
745    (************************* Lifted single-argument math functions *************************)    (************************* Lifted single-argument math functions *************************)
746      local      local
747        fun liftFn f dim = E.EIN{        fun liftFn op1 dim = E.EIN{
748                params = [E.FLD dim],                params = [E.FLD dim],
749                index = [],                index = [],
750                body = E.Op1(E.Cosine, E.Field(0, []))                body = E.Op1(op1, E.Field(0, []))
751                }
752            fun op1Fn op0= E.EIN{
753                params = [E.TEN(0,[])],
754                index = [],
755                body = E.Op1(op0, E.Field(0, []))
756              }              }
757      in      in
758      fun powF (dim, n) = E.EIN{      fun powF (dim, n) = E.EIN{
# Line 767  Line 766 
766      val asinF = liftFn E.ArcSine      val asinF = liftFn E.ArcSine
767      val tanF = liftFn E.Tangent      val tanF = liftFn E.Tangent
768      val atanF = liftFn E.ArcTangent      val atanF = liftFn E.ArcTangent
769        val sqrtR =op1Fn E.Sqrt
770        val acosR = op1Fn E.ArcCosine
771        val sinR = op1Fn E.Sine
772        val asinR = op1Fn E.ArcSine
773        val tanR = op1Fn E.Tangent
774        val atanR = op1Fn E.ArcTangent
775      end (* local *)      end (* local *)
776    
777    (************************* other tensor ops *************************)    (************************* other tensor ops *************************)

Legend:
Removed from v.3478  
changed lines
  Added in v.3494

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