package Ġto mas vol ker . num er iko . core . operations Ċ Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 1 d . double . Double Array 1 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 1 d . generic . Array 1 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 1 d . integer . IntArray 1 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . double . Double Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . array 2 d . generic . Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . double Array 1 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . double Array 2 D Ċ import Ġto mas vol ker . num er iko . core . interfaces . factory . int Array 1 D Ċ import Ġto mas vol ker . num er iko . core . pre conditions . require Same Size Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ inline Ġfun Ġ< re ified ĠT > Ġstack ( var arg Ġarrays : ĠArray 1 D < T >): ĠArray 2 D < T > Ġ{ ĊĊĠĠĠ Ġif Ġ( arrays . isEmpty ()) Ġreturn Ġarray 2 D < T >( 0 , Ġ 0 ) Ġ{ Ġ_, Ġ_ -> ĠTODO () Ġ} ĊĊĠĠĠ Ġval Ġfirst Size Ġ= Ġarrays . first (). size ĊĠĠĠ Ġrequire ( arrays . all Ġ{ Ġit . size Ġ== Ġfirst Size Ġ}) Ġ{ Ġ" All Ġsizes Ġmust Ġbe Ġthe Ġsame " Ġ} ĊĊĠĠĠ Ġreturn Ġarray 2 D ( arrays . size , Ġfirst Size ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠ Ġarrays [ i 0 ]. getValue ( i 1 ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġstack ( arrays : ĠList < Double Array 1 D >, Ġaxis : ĠInt Ġ= Ġ 0 ): ĠDouble Array 2 D Ġ{ ĊĊĠĠĠ Ġif Ġ( axis Ġ! in Ġ 0 .. 1 ) Ġthrow ĠIllegalArgumentException (" Stack ing Ġaxis Ġmust Ġbe Ġ 0 Ġor Ġ 1 ") ĊĊĠĠĠ Ġif Ġ( arrays . isEmpty ()) Ġreturn Ġdouble Array 2 D ( 0 , Ġ 0 ) Ġ{ Ġ_, Ġ_ -> Ġ 0 . 0 Ġ} ĊĊĠĠĠ Ġval Ġfirst Size Ġ= Ġarrays . first (). size ĊĠĠĠ Ġrequire ( arrays . all Ġ{ Ġit . size Ġ== Ġfirst Size Ġ}) Ġ{ Ġ" All Ġsizes Ġmust Ġbe Ġthe Ġsame " Ġ} ĊĊĠĠĠ Ġreturn Ġwhen ( axis ) Ġ{ ĊĠĠĠĠĠĠĠĠ 0 Ġ-> Ġdouble Array 2 D ( arrays . size , Ġfirst Size ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarrays [ i 0 ][ i 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġdouble Array 2 D ( first Size , Ġarrays . size ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarrays [ i 1 ][ i 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġstack ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġarrays : ĠDouble Array 1 D , ĊĠĠĠĠĠĠĠ Ġaxis : ĠInt Ġ= Ġ 0 Ċ ): ĠDouble Array 2 D Ġ= Ġstack ( arrays . toList (), Ġaxis ) Ċ Ċ infix Ġfun ĠDouble Array 1 D . concatenate ( other : ĠDouble Array 1 D ): ĠDouble Array 1 D Ġ= ĊĠĠĠĠĠĠĠ Ġdouble Array 1 D ( this . size Ġ+ Ġother . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġthis . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i Ġ- Ġthis . size ] ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ infix Ġfun ĠInt Array 1 D . concatenate ( other : ĠInt Array 1 D ): ĠInt Array 1 D Ġ= ĊĠĠĠĠĠĠĠ ĠintArray 1 D ( this . size Ġ+ Ġother . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġthis . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i Ġ- Ġthis . size ] ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ infix Ġfun ĠInt Array 1 D . concatenate ( other : ĠInt ): ĠInt Array 1 D Ġ= ĊĠĠĠĠĠĠĠ ĠintArray 1 D ( this . size Ġ+ Ġ 1 ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġthis . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ infix Ġfun ĠDouble Array 1 D . stack ( other : ĠDouble Array 1 D ): ĠDouble Array 2 D Ġ{ ĊĠĠĠ Ġrequire Same Size ( this , Ġother ) ĊĊĠĠĠ Ġreturn Ġdouble Array 2 D ( 2 , Ġthis . size ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen ( i 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġthis [ i 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġother [ i 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠDouble Array 2 D . concatenate ( other : ĠDouble Array 1 D , Ġaxis : ĠInt Ġ= Ġ 0 ): ĠDouble Array 2 D Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( this . shape 1 Ġ== Ġother . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Array 2 D ( shape 0 + 1 , Ġshape 1 ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 0 Ġ< Ġshape 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i 0 , Ġi 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( this . shape 0 Ġ== Ġother . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Array 2 D ( shape 0 , Ġshape 1 + 1 ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 1 Ġ< Ġshape 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i 0 , Ġi 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIndex OutOfBoundsException ("$ axis ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ fun ĠDouble Array 2 D . concatenate ( other : ĠDouble Array 2 D , Ġaxis : ĠInt Ġ= Ġ 0 ): ĠDouble Array 2 D Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( this . shape 1 Ġ== Ġother . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Array 2 D ( shape 0 + 1 , Ġshape 1 ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 0 Ġ< Ġshape 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i 0 , Ġi 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i 0 Ġ- Ġshape 0 , Ġi 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( this . shape 0 Ġ== Ġother . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Array 2 D ( shape 0 , Ġshape 1 + 1 ) Ġ{ Ġi 0 , Ġi 1 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i 1 Ġ< Ġshape 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i 0 , Ġi 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother [ i 0 , Ġi 1 Ġ- Ġshape 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIndex OutOfBoundsException ("$ axis ") ĊĠĠĠĠĠĠĠ Ġ} Ċ