package Ġto mas vol ker . num er iko . complex . interfaces . array 2 d Ċ Ċ import Ġto mas vol ker . num er iko . complex . primitives . Complex Ċ import Ġto mas vol ker . num er iko . complex . interfaces . factory . complex Z eros Ċ import Ġto mas vol ker . num er iko . complex . primitives . j Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . generic . forEach Index Ċ import Ġto mas vol ker . num er iko . core . pre conditions . require Same Shape Ċ Ċ inline Ġfun Ġelement Wise ( ĊĠĠĠĠĠĠĠ Ġsource : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġdestination : ĠMutable Complex Array 2 D , ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex ) Ġ-> ĠComplex Ċ ) Ġ{ ĊĠĠĠ Ġrequire Same Shape ( source , Ġdestination ) ĊĠĠĠ Ġsource . forEach Index Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠ Ġdestination [ i 0 , Ġi 1 ] Ġ= Ġoperation ( source [ i 0 , Ġi 1 ]) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġelement Wise ( ĊĠĠĠĠĠĠĠ Ġsource 1 : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġsource 2 : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġdestination : ĠMutable Complex Array 2 D , ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex , ĠComplex ) Ġ-> ĠComplex Ċ ) Ġ{ ĊĠĠĠ Ġrequire Same Shape ( source 1 , Ġsource 2 ) ĊĠĠĠ Ġrequire Same Shape ( source 1 , Ġdestination ) ĊĠĠĠ Ġsource 1 . forEach Index Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠ Ġdestination [ i 0 , Ġi 1 ] Ġ= Ġoperation ( source 1 [ i 0 , Ġi 1 ], Ġsource 2 [ i 0 , Ġi 1 ]) ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun ĠComplex Array 2 D . element Wise ( ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex ) Ġ-> ĠComplex Ċ ): ĠComplex Array 2 D Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcomplex Z eros ( shape 0 , Ġshape 1 ). as Mutable () ĊĠĠĠ Ġelement Wise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= Ġoperation ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ inline Ġfun ĠMutable Complex Array 2 D . apply Element Wise ( ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex ) Ġ-> ĠComplex Ċ ): ĠMutable Complex Array 2 D Ġ{ ĊĠĠĠ Ġelement Wise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= Ġoperation ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ inline Ġfun Ġelement Wise ( ĊĠĠĠĠĠĠĠ Ġarray 1 : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġarray 2 : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex , ĠComplex ĊĠĠĠĠĠĠĠ Ġ) Ġ-> ĠComplex ): ĠComplex Array 2 D Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġcomplex Z eros ( array 1 . shape 0 , Ġarray 2 . shape 1 ). as Mutable () ĊĠĠĠ Ġelement Wise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource 1 Ġ= Ġarray 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource 2 Ġ= Ġarray 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= Ġoperation ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġresult Ċ Ċ } Ċ Ċ inline Ġfun ĠMutable Complex Array 2 D . apply Element Wise ( ĊĠĠĠĠĠĠĠ Ġother : ĠComplex Array 2 D , ĊĠĠĠĠĠĠĠ Ġoperation : Ġ( Complex , ĠComplex ) Ġ-> ĠComplex Ċ ): ĠMutable Complex Array 2 D Ġ{ ĊĠĠĠ Ġrequire Same Shape ( this , Ġother ) ĊĠĠĠ Ġelement Wise ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource 1 Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource 2 Ġ= Ġother , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Ġ= Ġoperation ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġthis Ċ } Ċ Ċ inline Ġfun ĠComplex Array 2 D . sum By ( operation : Ġ( Complex ) Ġ-> ĠComplex ): ĠComplex Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ 0 . 0 . j ĊĠĠĠ ĠforEach Index Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġoperation ( this [ i 0 , Ġi 1 ]) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ