package Ġcom . github . j om of . k ane . impl . functions Ċ Ċ import Ġcom . github . j om of . k ane .* Ċ import Ġcom . github . j om of . k ane . impl .* ĊĊ Ċ val ĠC ROSS Ġby ĠBinary Op ( op Ġ= Ġ" Ġcross Ġ", Ġprecedence Ġ= Ġ 5 , Ġassoci ative Ġ= Ġfalse , Ġin fix Ġ= Ġtrue ) Ċ Ċ // ĠCross ĠProduct Ċ infix Ġfun ĠMatrix Expr . cross ( right Ġ: ĠMatrix Expr ) Ġ: ĠMatrix Expr Ġ{ ĊĠĠĠ Ġfun Ġlm () Ġ= Ġif Ġ( this Ġis ĠNamed Expr ) Ġ" matrix Ġ'$ name '" Ġelse Ġ" left Ġmatrix " ĊĠĠĠ Ġfun Ġrm () Ġ= Ġif Ġ( right Ġis ĠNamed Expr ) Ġ" matrix Ġ'${ right . name } '" Ġelse Ġ" right Ġmatrix " ĊĠĠĠ Ġassert ( columns Ġ== Ġright . rows ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"${ lm ()} Ġcolumns Ġ$ columns Ġdid Ġnot Ġequal Ġ${ rm ()} Ġrows Ġ${ right . rows }" ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġouter Ġ= Ġthis ĊĠĠĠ Ġreturn ĠAl gebra ic Deferred Data Matrix ( ĊĠĠĠĠĠĠĠ ĠC ROSS , ĊĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠ Ġright , ĊĠĠĠĠĠĠĠ Ġmatrix Of ( right . columns , Ġrows ) Ġ{ Ġ( column , Ġrow ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 Ġuntil Ġcolumns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( outer [ 0 , Ġrow ] Ġ* Ġright [ column , Ġ 0 ]) Ġ{ Ġprior : ĠScalar Expr , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprior Ġ+ Ġouter [ i , Ġrow ] Ġ* Ġright [ column , Ġi ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ