/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" D uplicated Code ") Ċ Ċ package Ġorg . jetbrains . kotlin x . mult ik . jvm . linalg Ċ Ċ import Ġorg . jetbrains . kotlin x . mult ik . ndarray . complex .* Ċ import Ġorg . jetbrains . kotlin x . mult ik . ndarray . data .* ĊĊ Ċ // ------------------- dot MM ---------------- ---------- Ċ internal Ġfun Ġ< T Ġ: ĠNumber > Ġdot Matrix ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 2 >): ĠD 2 Array < T > Ġ= ĊĠĠĠ Ġdot Matrix Common ( a , Ġb ) Ċ Ċ internal Ġfun Ġ< T Ġ: ĠComplex > Ġdot Matrix Complex ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 2 >): ĠD 2 Array < T > Ġ= ĊĠĠĠ Ġdot Matrix Common ( a , Ġb ) Ċ Ċ private Ġfun Ġ< T > Ġdot Matrix Common ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 2 >): ĠD 2 Array < T > Ġ{ ĊĠĠĠ Ġrequire Dot Shape ( a . shape , Ġb . shape ) ĊĠĠĠ Ġval Ġnew Shape Ġ= Ġint ArrayOf ( a . shape [ 0 ], Ġb . shape [ 1 ]) ĊĠĠĠ Ġval Ġsize Ġ= Ġnew Shape . reduce ( Int :: times ) ĊĠĠĠ Ġval Ġret Ġ= ĠD 2 Array < T >( init Memory View ( size , Ġa . dtype ), Ġ 0 , Ġnew Shape , Ġdim Ġ= ĠD 2 ) ĊĠĠĠ Ġwhen Ġ( a . dtype ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDataType . Float DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Float Array (), Ġa . offset , Ġa . strides , Ġb . data . get Float Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . get Float Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Int DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getInt Array (), Ġa . offset , Ġa . strides , Ġb . data . getInt Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . getInt Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Double DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getDouble Array (), Ġa . offset , Ġa . strides , Ġb . data . getDouble Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . getDouble Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Long DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getLong Array (), Ġa . offset , Ġa . strides , Ġb . data . getLong Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . getLong Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Complex Double DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Double Array (), Ġa . offset , Ġa . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Complex Double Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . get Complex Double Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Complex Float DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Float Array (), Ġa . offset , Ġa . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Complex Float Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . get Complex Float Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Short DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Short Array (), Ġa . offset , Ġa . strides , Ġb . data . get Short Array (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . get Short Array (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Byte DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get ByteArray (), Ġa . offset , Ġa . strides , Ġb . data . get ByteArray (), Ġb . offset , Ġb . strides , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġnew Shape [ 1 ], Ġa . shape [ 1 ], Ġret . data . get ByteArray (), Ġret . strides [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠByteArray , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠByteArray , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠByteArray , Ġd Stride s : ĠInt Ċ ): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ= Ġ( destination [ d Ind Ġ+ Ġj ] Ġ+ Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ]). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠShort Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠShort Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠShort Array , Ġd Stride s : ĠInt Ċ ): ĠShort Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ= Ġ( destination [ d Ind Ġ+ Ġj ] Ġ+ Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ]). to Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠInt Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠInt Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠInt Array , Ġd Stride s : ĠInt Ċ ): ĠInt Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠLong Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠLong Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠLong Array , Ġd Stride s : ĠInt Ċ ): ĠLong Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠFloat Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠFloat Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠFloat Array , Ġd Stride s : ĠInt Ċ ): ĠFloat Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix ( ĊĠĠĠ Ġleft : ĠDouble Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠDouble Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠDouble Array , Ġd Stride s : ĠInt Ċ ): ĠDouble Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix Complex ( ĊĠĠĠ Ġleft : ĠComplex Double Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠComplex Double Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠComplex Double Array , Ġd Stride s : ĠInt Ċ ): ĠComplex Double Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Matrix Complex ( ĊĠĠĠ Ġleft : ĠComplex Float Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠComplex Float Array , Ġright Offset : ĠInt , Ġright Stride s : ĠInt Array , ĊĠĠĠ Ġn : ĠInt , Ġm : ĠInt , Ġt : ĠInt , Ġdestination : ĠComplex Float Array , Ġd Stride s : ĠInt Ċ ): ĠComplex Float Array Ġ{ ĊĠĠĠ Ġval Ġ( left Stride _ 0 , Ġleft Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġval Ġ( right Stride _ 0 , Ġright Stride _ 1 ) Ġ= Ġright Stride s ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ind Ġ= Ġi Ġ* Ġd Stride s ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġleft Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( k Ġin Ġ 0 Ġuntil Ġt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġceil Ġ= Ġleft [ l Ind Ġ+ Ġk Ġ* Ġleft Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ind Ġ= Ġk Ġ* Ġright Stride _ 0 Ġ+ Ġright Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ d Ind Ġ+ Ġj ] Ġ+= Ġceil Ġ* Ġright [ r Ind Ġ+ Ġj Ġ* Ġright Stride _ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } ĊĊ Ċ // ------------------- dot MV ------------------------ Ċ internal Ġfun Ġ< T Ġ: ĠNumber > Ġdot Matrix To Vector ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 1 >): ĠD 1 Array < T > Ġ= ĊĠĠĠ Ġdot Matrix To Vector Common ( a , Ġb ) Ċ Ċ internal Ġfun Ġ< T Ġ: ĠComplex > Ġdot Matrix To Vector Complex ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 1 >): ĠD 1 Array < T > Ġ= ĊĠĠĠ Ġdot Matrix To Vector Common ( a , Ġb ) Ċ Ċ private Ġfun Ġ< T > Ġdot Matrix To Vector Common ( a : ĠMulti Array < T , ĠD 2 >, Ġb : ĠMulti Array < T , ĠD 1 >): ĠD 1 Array < T > Ġ{ ĊĠĠĠ Ġrequire Dot Shape ( a . shape , Ġb . shape ) ĊĠĠĠ Ġval Ġnew Shape Ġ= Ġint ArrayOf ( a . shape [ 0 ]) ĊĠĠĠ Ġval Ġret Ġ= ĠD 1 Array < T >( init Memory View ( new Shape [ 0 ], Ġa . dtype ), Ġ 0 , Ġnew Shape , Ġdim Ġ= ĠD 1 ) ĊĊĠĠĠ Ġwhen Ġ( a . dtype ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDataType . Float DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Float Array (), Ġa . offset , Ġa . strides , Ġb . data . get Float Array (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . get Float Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Int DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getInt Array (), Ġa . offset , Ġa . strides , Ġb . data . getInt Array (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . getInt Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Double DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getDouble Array (), Ġa . offset , Ġa . strides , Ġb . data . getDouble Array (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . getDouble Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Long DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getLong Array (), Ġa . offset , Ġa . strides , Ġb . data . getLong Array (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . getLong Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Complex Double DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Double Array (), Ġa . offset , Ġa . strides , Ġb . data . get Complex Double Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . offset , Ġb . strides [ 0 ], Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . get Complex Double Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Complex Float DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Float Array (), Ġa . offset , Ġa . strides , Ġb . data . get Complex Float Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . offset , Ġb . strides [ 0 ], Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . get Complex Float Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Short DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Short Array (), Ġa . offset , Ġa . strides , Ġb . data . get Short Array (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . get Short Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠDataType . Byte DataType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdot Vector ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get ByteArray (), Ġa . offset , Ġa . strides , Ġb . data . get ByteArray (), Ġb . offset , Ġb . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Shape [ 0 ], Ġb . shape [ 0 ], Ġret . data . get ByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠFloat Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠFloat Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠFloat Array Ċ ): ĠFloat Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠInt Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠInt Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠInt Array Ċ ): ĠInt Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠDouble Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠDouble Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠDouble Array Ċ ): ĠDouble Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠLong Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠLong Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠLong Array Ċ ): ĠLong Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠShort Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠShort Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠShort Array Ċ ): ĠShort Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( destination [ i ] Ġ+ Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ]). to Short () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector ( ĊĠĠĠ Ġleft : ĠByteArray , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠByteArray , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠByteArray Ċ ): ĠByteArray Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( destination [ i ] Ġ+ Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ]). to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector Complex ( ĊĠĠĠ Ġleft : ĠComplex Double Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠComplex Double Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠComplex Double Array Ċ ): ĠComplex Double Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } Ċ Ċ private Ġfun Ġdot Vector Complex ( ĊĠĠĠ Ġleft : ĠComplex Float Array , Ġleft Offset : ĠInt , Ġleft Stride s : ĠInt Array , ĊĠĠĠ Ġright : ĠComplex Float Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt , Ġm : ĠInt , Ġdestination : ĠComplex Float Array Ċ ): ĠComplex Float Array Ġ{ ĊĠĠĠ Ġval Ġ( l Stride _ 0 , Ġl Stride _ 1 ) Ġ= Ġleft Stride s ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ind Ġ= Ġi Ġ* Ġl Stride _ 0 Ġ+ Ġleft Offset ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination [ i ] Ġ+= Ġleft [ l Ind Ġ+ Ġj Ġ* Ġl Stride _ 1 ] Ġ* Ġright [ j Ġ* Ġr Stride Ġ+ Ġright Offset ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdestination Ċ } ĊĊ Ċ // ------------- Vec To Vec ----------- Ċ Ċ internal Ġfun Ġ< T Ġ: ĠNumber > Ġdot Vec To Vec ( a : ĠMulti Array < T , ĠD 1 >, Ġb : ĠMulti Array < T , ĠD 1 >): ĠT Ġ= Ġwhen Ġ( a . dtype ) Ġ{ ĊĠĠĠ ĠDataType . Float DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Float Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Float Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Int DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getInt Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . getInt Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Double DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getDouble Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . getDouble Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Long DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . getLong Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . getLong Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Short DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Short Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Short Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Byte DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get ByteArray (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get ByteArray (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () Ċ } Ġas ĠT Ċ Ċ internal Ġfun Ġ< T Ġ: ĠComplex > Ġdot Vec To Vec Complex ( a : ĠMulti Array < T , ĠD 1 >, Ġb : ĠMulti Array < T , ĠD 1 >): ĠT Ġ= Ġwhen Ġ( a . dtype ) Ġ{ ĊĠĠĠ ĠDataType . Complex Float DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Float Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Complex Float Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ ĠDataType . Complex Double DataType Ġ-> ĊĠĠĠĠĠĠĠ Ġdot Vec To Vec Complex ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . data . get Complex Double Array (), Ġa . offset , Ġa . strides [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . data . get Complex Double Array (), Ġb . offset , Ġb . strides [ 0 ], Ġa . size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () Ċ } Ġas ĠT Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠFloat Array , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠFloat Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠFloat Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 f ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠInt Array , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠInt Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠDouble Array , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠDouble Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠDouble Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 . 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠLong Array , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠLong Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠLong Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 L ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠShort Array , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠShort Array , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠShort Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret . to Short () Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec ( ĊĠĠĠ Ġleft : ĠByteArray , Ġleft Offset : ĠInt , Ġl Stride : ĠInt , Ġright : ĠByteArray , Ġright Offset : ĠInt , Ġr Stride : ĠInt , Ġn : ĠInt Ċ ): ĠByte Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret . to Byte () Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec Complex ( ĊĠĠĠ Ġleft : ĠComplex Float Array , ĊĠĠĠ Ġleft Offset : ĠInt , ĊĠĠĠ Ġl Stride : ĠInt , ĊĠĠĠ Ġright : ĠComplex Float Array , ĊĠĠĠ Ġright Offset : ĠInt , ĊĠĠĠ Ġr Stride : ĠInt , ĊĠĠĠ Ġn : ĠInt Ċ ): ĠComplex Float Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= ĠComplex Float . zero ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ Ċ private Ġfun Ġdot Vec To Vec Complex ( ĊĠĠĠ Ġleft : ĠComplex Double Array , ĊĠĠĠ Ġleft Offset : ĠInt , ĊĠĠĠ Ġl Stride : ĠInt , ĊĠĠĠ Ġright : ĠComplex Double Array , ĊĠĠĠ Ġright Offset : ĠInt , ĊĠĠĠ Ġr Stride : ĠInt , ĊĠĠĠ Ġn : ĠInt Ċ ): ĠComplex Double Ġ{ ĊĠĠĠ Ġvar Ġret Ġ= ĠComplex Double . zero ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġret Ġ+= Ġleft [ left Offset Ġ+ Ġl Stride Ġ* Ġi ] Ġ* Ġright [ right Offset Ġ+ Ġr Stride Ġ* Ġi ] ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġret Ċ } Ċ