Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file owl_ext_dense_matrix.ml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067# 1 "src/owl/ext/owl_ext_dense_matrix.ml"(*
* OWL - OCaml Scientific and Engineering Computing
* Copyright (c) 2016-2019 Liang Wang <liang.wang@cl.cam.ac.uk>
*)openOwl_typesopenOwl_ext_types(* modules for packing and unpacking *)moduletypePackSig=sigtypemattypeelttypecast_matvalpack_box:mat->ext_typvalunpack_box:ext_typ->matvalpack_elt:elt->ext_typvalunpack_elt:ext_typ->eltvalpack_cast_box:cast_mat->ext_typendmodulePack_DMS=structtypemat=dmstypeelt=floattypecast_mat=dmsletpack_boxx=DMSxletunpack_box=functionDMSx->x|_->failwith"Pack_DMS:unpack_box"letpack_eltx=Fxletunpack_elt=functionFx->x|_->failwith"Pack_DMS:unpack_elt"letpack_cast_boxx=DMSxendmodulePack_DMD=structtypemat=dmdtypeelt=floattypecast_mat=dmdletpack_boxx=DMDxletunpack_box=functionDMDx->x|_->failwith"Pack_DMD:unpack_dmd:"letpack_eltx=Fxletunpack_elt=functionFx->x|_->failwith"Pack_DMD:unpack_elt"letpack_cast_boxx=DMDxendmodulePack_DMC=structtypemat=dmctypeelt=Complex.ttypecast_mat=dmsletpack_boxx=DMCxletunpack_box=functionDMCx->x|_->failwith"Pack_DMC:unpack_dmc"letpack_eltx=Cxletunpack_elt=functionCx->x|_->failwith"Pack_DMC:unpack_elt"letpack_cast_boxx=DMSxendmodulePack_DMZ=structtypemat=dmztypeelt=Complex.ttypecast_mat=dmdletpack_boxx=DMZxletunpack_box=functionDMZx->x|_->failwith"Pack_DMZ:unpack_dmz"letpack_eltx=Cxletunpack_elt=functionCx->x|_->failwith"Pack_DMZ:unpack_elt"letpack_cast_boxx=DMDxend(* module for basic matrix operations *)moduletypeBasicSig=sigtypemattypeeltvalempty:int->int->matvalcreate:int->int->elt->matvalzeros:int->int->matvalones:int->int->matvaleye:int->matvalsequential:?a:elt->?step:elt->int->int->matvaluniform:?a:elt->?b:elt->int->int->matvalgaussian:?mu:elt->?sigma:elt->int->int->matvallinspace:elt->elt->int->matvalmeshgrid:elt->elt->elt->elt->int->int->mat*matvalmeshup:mat->mat->mat*matvalshape:mat->int*intvalrow_num:mat->intvalcol_num:mat->intvalnumel:mat->intvalnnz:mat->intvaldensity:mat->floatvalsize_in_bytes:mat->intvalsame_shape:mat->mat->boolvalget:mat->int->int->eltvalset:mat->int->int->elt->unitvalget_fancy:indexlist->mat->matvalset_fancy:indexlist->mat->mat->unitvalrow:mat->int->matvalcol:mat->int->matvalrows:mat->intarray->matvalcols:mat->intarray->matvalreshape:mat->intarray->matvalflatten:mat->matvalreverse:mat->matvalreset:mat->unitvalfill:mat->elt->unitvalcopy:mat->matvalcopy_:out:mat->mat->unitvalcopy_row_to:mat->mat->int->unitvalcopy_col_to:mat->mat->int->unitvalconcat_vertical:mat->mat->matvalconcat_horizontal:mat->mat->matvaltranspose:mat->matvaldiag:?k:int->mat->matvalswap_rows:mat->int->int->unitvalswap_cols:mat->int->int->unitvaltile:mat->intarray->matvalrepeat:mat->intarray->matvaliteri:(int->elt->unit)->mat->unitvaliter:(elt->unit)->mat->unitvalmapi:(int->elt->elt)->mat->matvalmap:(elt->elt)->mat->matvalmap2i:(int->elt->elt->elt)->mat->mat->matvalmap2:(elt->elt->elt)->mat->mat->matvalfoldi:?axis:int->(int->elt->elt->elt)->elt->mat->matvalfold:?axis:int->(elt->elt->elt)->elt->mat->matvalfilteri:(int->elt->bool)->mat->intarrayvalfilter:(elt->bool)->mat->intarrayvaliteri_rows:(int->mat->unit)->mat->unitvaliter_rows:(mat->unit)->mat->unitvaliter2i_rows:(int->mat->mat->unit)->mat->mat->unitvaliter2_rows:(mat->mat->unit)->mat->mat->unitvaliteri_cols:(int->mat->unit)->mat->unitvaliter_cols:(mat->unit)->mat->unitvalfilteri_rows:(int->mat->bool)->mat->intarrayvalfilter_rows:(mat->bool)->mat->intarrayvalfilteri_cols:(int->mat->bool)->mat->intarrayvalfilter_cols:(mat->bool)->mat->intarrayvalfold_rows:('a->mat->'a)->'a->mat->'avalfold_cols:('a->mat->'a)->'a->mat->'avalmapi_rows:(int->mat->'a)->mat->'aarrayvalmap_rows:(mat->'a)->mat->'aarrayvalmapi_cols:(int->mat->'a)->mat->'aarrayvalmap_cols:(mat->'a)->mat->'aarrayvalmapi_by_row:int->(int->mat->mat)->mat->matvalmap_by_row:int->(mat->mat)->mat->matvalmapi_by_col:int->(int->mat->mat)->mat->matvalmap_by_col:int->(mat->mat)->mat->matvalmapi_at_row:(int->elt->elt)->mat->int->matvalmap_at_row:(elt->elt)->mat->int->matvalmapi_at_col:(int->elt->elt)->mat->int->matvalmap_at_col:(elt->elt)->mat->int->matvalexists:(elt->bool)->mat->boolvalnot_exists:(elt->bool)->mat->boolvalfor_all:(elt->bool)->mat->boolvalis_zero:mat->boolvalis_positive:mat->boolvalis_negative:mat->boolvalis_nonpositive:mat->boolvalis_nonnegative:mat->boolvalequal:mat->mat->boolvalnot_equal:mat->mat->boolvalgreater:mat->mat->boolvalless:mat->mat->boolvalgreater_equal:mat->mat->boolvalless_equal:mat->mat->boolvalelt_equal:mat->mat->matvalelt_not_equal:mat->mat->matvalelt_less:mat->mat->matvalelt_greater:mat->mat->matvalelt_less_equal:mat->mat->matvalelt_greater_equal:mat->mat->matvalequal_scalar:mat->elt->boolvalnot_equal_scalar:mat->elt->boolvalless_scalar:mat->elt->boolvalgreater_scalar:mat->elt->boolvalless_equal_scalar:mat->elt->boolvalgreater_equal_scalar:mat->elt->boolvalelt_equal_scalar:mat->elt->matvalelt_not_equal_scalar:mat->elt->matvalelt_less_scalar:mat->elt->matvalelt_greater_scalar:mat->elt->matvalelt_less_equal_scalar:mat->elt->matvalelt_greater_equal_scalar:mat->elt->matvaldraw_rows:?replacement:bool->mat->int->mat*intarrayvaldraw_cols:?replacement:bool->mat->int->mat*intarrayvaldraw_rows2:?replacement:bool->mat->mat->int->mat*mat*intarrayvaldraw_cols2:?replacement:bool->mat->mat->int->mat*mat*intarrayvalshuffle_rows:mat->matvalshuffle_cols:mat->matvalshuffle:mat->matvalto_array:mat->eltarrayvalof_array:eltarray->int->int->matvalto_arrays:mat->eltarrayarrayvalof_arrays:eltarrayarray->matvalto_rows:mat->matarrayvalof_rows:matarray->matvalto_cols:mat->matarrayvalof_cols:matarray->matvalprint:?max_row:int->?max_col:int->?header:bool->?fmt:(elt->string)->mat->unitvalsave:mat->string->unitvalload:string->matvalinv:mat->matvaltrace:mat->eltvalsum':mat->eltvalprod':mat->eltvalmean':mat->eltvalsum_rows:mat->matvalsum_cols:mat->matvalmean_rows:mat->matvalmean_cols:mat->matvaladd:mat->mat->matvalsub:mat->mat->matvalmul:mat->mat->matvaldiv:mat->mat->matvaladd_scalar:mat->elt->matvalsub_scalar:mat->elt->matvalmul_scalar:mat->elt->matvaldiv_scalar:mat->elt->matvalscalar_add:elt->mat->matvalscalar_sub:elt->mat->matvalscalar_mul:elt->mat->matvalscalar_div:elt->mat->matvaldot:mat->mat->matendmoduleMake_Basic(P:PackSig)(M:BasicSigwithtypemat:=P.matandtypeelt:=P.elt)=structopenPletemptymn=M.emptymn|>pack_boxletzerosmn=M.zerosmn|>pack_boxletonesmn=M.onesmn|>pack_boxleteyem=M.eyem|>pack_boxletsequential?a?stepmn=M.sequential?a?stepmn|>pack_boxletuniform?a?bmn=M.uniform?a?bmn|>pack_boxletgaussian?mu?sigmamn=M.gaussian?mu?sigmamn|>pack_boxletlinspaceabn=M.linspaceabn|>pack_boxletmeshgridxaxbyaybxnyn=letu,v=M.meshgridxaxbyaybxnynin(pack_boxu,pack_boxv)letmeshupxy=letu,v=M.meshup(unpack_boxx)(unpack_boxy)in(pack_boxu,pack_boxv)letshapex=M.shape(unpack_boxx)letrow_numx=M.row_num(unpack_boxx)letcol_numx=M.col_num(unpack_boxx)letnumelx=M.numel(unpack_boxx)letnnzx=M.nnz(unpack_boxx)letdensityx=M.density(unpack_boxx)letsize_in_bytesx=M.size_in_bytes(unpack_boxx)letsame_shapexy=M.same_shape(unpack_boxx)(unpack_boxy)letgetxij=M.get(unpack_boxx)ij|>pack_eltletsetxija=M.set(unpack_boxx)ij(unpack_elta)letget_fancyaxisx=M.get_fancyaxis(unpack_boxx)|>pack_boxletset_fancyaxisxy=M.set_fancyaxis(unpack_boxx)(unpack_boxy)letrowxi=M.row(unpack_boxx)i|>pack_boxletcolxj=M.col(unpack_boxx)j|>pack_boxletrowsxl=M.rows(unpack_boxx)l|>pack_boxletcolsxl=M.cols(unpack_boxx)l|>pack_boxletreshapexs=M.reshape(unpack_boxx)s|>pack_boxletflattenx=M.flatten(unpack_boxx)|>pack_boxletreversex=M.reverse(unpack_boxx)|>pack_boxletfillxa=M.fill(unpack_boxx)(unpack_elta)letcopyx=M.copy(unpack_boxx)|>pack_boxletcopy_~outsrc=M.copy_~out:(unpack_boxout)(unpack_boxsrc)letcopy_row_tovxi=M.copy_row_to(unpack_boxv)(unpack_boxx)iletcopy_col_tovxi=M.copy_col_to(unpack_boxv)(unpack_boxx)iletconcat_verticalxy=M.concat_vertical(unpack_boxx)(unpack_boxy)|>pack_boxletconcat_horizontalxy=M.concat_horizontal(unpack_boxx)(unpack_boxy)|>pack_boxlettransposex=M.transpose(unpack_boxx)|>pack_boxletdiagx=M.diag(unpack_boxx)|>pack_boxletswap_rowsxii'=M.swap_rows(unpack_boxx)ii'letswap_colsxjj'=M.swap_cols(unpack_boxx)jj'lettilexreps=M.tile(unpack_boxx)reps|>pack_boxletrepeatxreps=M.repeat(unpack_boxx)reps|>pack_boxletiterifx=M.iterif(unpack_boxx)letiterfx=M.iterf(unpack_boxx)letmapifx=M.mapif(unpack_boxx)|>pack_boxletmapfx=M.mapif(unpack_boxx)|>pack_boxletmap2ifxy=M.map2if(unpack_boxx)(unpack_boxy)|>pack_boxletmap2fxy=M.map2f(unpack_boxx)(unpack_boxy)|>pack_boxletfoldifax=M.foldifa(unpack_boxx)letfoldfax=M.foldfa(unpack_boxx)letfilterifx=M.filterif(unpack_boxx)letfilterfx=M.filterf(unpack_boxx)letiteri_rowsfx=M.iteri_rowsf(unpack_boxx)letiter_rowsfx=M.iter_rowsf(unpack_boxx)letiteri_colsfx=M.iteri_colsf(unpack_boxx)letiter_colsfx=M.iter_colsf(unpack_boxx)letfilteri_rowsfx=M.filteri_rowsf(unpack_boxx)letfilter_rowsfx=M.filter_rowsf(unpack_boxx)letfilteri_colsfx=M.filteri_colsf(unpack_boxx)letfilter_colsfx=M.filter_colsf(unpack_boxx)letfold_rowsfax=M.fold_rowsfa(unpack_boxx)letfold_colsfax=M.fold_colsfa(unpack_boxx)letmapi_rowsfx=M.mapi_rowsf(unpack_boxx)letmap_rowsfx=M.map_rowsf(unpack_boxx)letmapi_colsfx=M.mapi_colsf(unpack_boxx)letmap_colsfx=M.map_colsf(unpack_boxx)letmapi_by_rowdfx=M.mapi_by_rowdf(unpack_boxx)|>pack_boxletmap_by_rowdfx=M.map_by_rowdf(unpack_boxx)|>pack_boxletmapi_by_coldfx=M.mapi_by_coldf(unpack_boxx)|>pack_boxletmap_by_coldfx=M.map_by_coldf(unpack_boxx)|>pack_boxletmapi_at_rowfxi=M.mapi_at_rowf(unpack_boxx)i|>pack_boxletmap_at_rowfxi=M.map_at_rowf(unpack_boxx)i|>pack_boxletmapi_at_colfxj=M.mapi_at_colf(unpack_boxx)j|>pack_boxletmap_at_colfxj=M.map_at_colf(unpack_boxx)j|>pack_boxletexistsfx=M.existsf(unpack_boxx)letnot_existsfx=M.not_existsf(unpack_boxx)letfor_allfx=M.for_allf(unpack_boxx)letis_zerox=M.is_zero(unpack_boxx)letis_positivex=M.is_positive(unpack_boxx)letis_negativex=M.is_negative(unpack_boxx)letis_nonpositivex=M.is_nonpositive(unpack_boxx)letis_nonnegativex=M.is_nonnegative(unpack_boxx)letequalxy=M.equal(unpack_boxx)(unpack_boxy)letnot_equalxy=M.not_equal(unpack_boxx)(unpack_boxy)letgreaterxy=M.greater(unpack_boxx)(unpack_boxy)letlessxy=M.less(unpack_boxx)(unpack_boxy)letgreater_equalxy=M.greater_equal(unpack_boxx)(unpack_boxy)letless_equalxy=M.less_equal(unpack_boxx)(unpack_boxy)letelt_equalxy=M.elt_equal(unpack_boxx)(unpack_boxy)|>pack_boxletelt_not_equalxy=M.elt_not_equal(unpack_boxx)(unpack_boxy)|>pack_boxletelt_lessxy=M.elt_less(unpack_boxx)(unpack_boxy)|>pack_boxletelt_greaterxy=M.elt_greater(unpack_boxx)(unpack_boxy)|>pack_boxletelt_less_equalxy=M.elt_less_equal(unpack_boxx)(unpack_boxy)|>pack_boxletelt_greater_equalxy=M.elt_greater_equal(unpack_boxx)(unpack_boxy)|>pack_boxletequal_scalarxa=M.equal_scalar(unpack_boxx)(unpack_elta)letnot_equal_scalarxa=M.not_equal_scalar(unpack_boxx)(unpack_elta)letless_scalarxa=M.less_scalar(unpack_boxx)(unpack_elta)letgreater_scalarxa=M.greater_scalar(unpack_boxx)(unpack_elta)letless_equal_scalarxa=M.less_equal_scalar(unpack_boxx)(unpack_elta)letgreater_equal_scalarxa=M.greater_equal_scalar(unpack_boxx)(unpack_elta)letelt_equal_scalarxa=M.elt_equal_scalar(unpack_boxx)(unpack_elta)|>pack_boxletelt_not_equal_scalarxa=M.elt_not_equal_scalar(unpack_boxx)(unpack_elta)|>pack_boxletelt_less_scalarxa=M.elt_less_scalar(unpack_boxx)(unpack_elta)|>pack_boxletelt_greater_scalarxa=M.elt_greater_scalar(unpack_boxx)(unpack_elta)|>pack_boxletelt_less_equal_scalarxa=M.elt_less_equal_scalar(unpack_boxx)(unpack_elta)|>pack_boxletelt_greater_equal_scalarxa=M.elt_greater_equal_scalar(unpack_boxx)(unpack_elta)|>pack_boxletdraw_rows?(replacement=true)xc=letr,i=M.draw_rows~replacement(unpack_boxx)cin(pack_boxr),iletdraw_cols?(replacement=true)xc=letr,i=M.draw_cols~replacement(unpack_boxx)cin(pack_boxr),iletshuffle_rowsx=M.shuffle_rows(unpack_boxx)letshuffle_colsx=M.shuffle_cols(unpack_boxx)letshufflex=M.shuffle(unpack_boxx)letto_arrayx=M.to_array(unpack_boxx)letof_arrayxmn=M.of_arrayxmn|>pack_boxletto_arraysx=M.to_arrays(unpack_boxx)letof_arraysx=M.of_arraysx|>pack_boxletprintx=M.print(unpack_boxx)letsavexf=M.save(unpack_boxx)fletloadf=M.loadf|>pack_boxletinvx=M.inv(unpack_boxx)|>pack_boxlettracex=M.trace(unpack_boxx)|>pack_eltletsum'x=M.sum'(unpack_boxx)|>pack_eltletprod'x=M.prod'(unpack_boxx)|>pack_eltletmean'x=M.mean'(unpack_boxx)|>pack_eltletsum_rowsx=M.sum_rows(unpack_boxx)|>pack_boxletsum_colsx=M.sum_rows(unpack_boxx)|>pack_boxletmean_rowsx=M.sum_rows(unpack_boxx)|>pack_boxletmean_colsx=M.sum_rows(unpack_boxx)|>pack_boxletaddxy=M.add(unpack_boxx)(unpack_boxy)|>pack_boxletsubxy=M.sub(unpack_boxx)(unpack_boxy)|>pack_boxletmulxy=M.mul(unpack_boxx)(unpack_boxy)|>pack_boxletdivxy=M.div(unpack_boxx)(unpack_boxy)|>pack_boxletadd_scalarxa=M.add_scalar(unpack_boxx)(unpack_elta)|>pack_boxletsub_scalarxa=M.sub_scalar(unpack_boxx)(unpack_elta)|>pack_boxletmul_scalarxa=M.mul_scalar(unpack_boxx)(unpack_elta)|>pack_boxletdiv_scalarxa=M.div_scalar(unpack_boxx)(unpack_elta)|>pack_boxletscalar_addax=M.scalar_add(unpack_elta)(unpack_boxx)|>pack_boxletscalar_subax=M.scalar_sub(unpack_elta)(unpack_boxx)|>pack_boxletscalar_mulax=M.scalar_mul(unpack_elta)(unpack_boxx)|>pack_boxletscalar_divax=M.scalar_div(unpack_elta)(unpack_boxx)|>pack_boxletdotxy=M.dot(unpack_boxx)(unpack_boxy)|>pack_boxend(* module for float32 and float64 matrices *)moduletypeSD_Sig=sigtypemattypeeltvalmin':mat->eltvalmax':mat->eltvalminmax':mat->elt*eltvalmin_i:mat->elt*intarrayvalmax_i:mat->elt*intarrayvalminmax_i:mat->(elt*intarray)*(elt*intarray)valabs:mat->matvalabs2:mat->matvalneg:mat->matvalreci:mat->matvalsignum:mat->matvalsqr:mat->matvalsqrt:mat->matvalcbrt:mat->matvalexp:mat->matvalexp2:mat->matvalexpm1:mat->matvallog:mat->matvallog10:mat->matvallog2:mat->matvallog1p:mat->matvalsin:mat->matvalcos:mat->matvaltan:mat->matvalasin:mat->matvalacos:mat->matvalatan:mat->matvalsinh:mat->matvalcosh:mat->matvaltanh:mat->matvalasinh:mat->matvalacosh:mat->matvalatanh:mat->matvalfloor:mat->matvalceil:mat->matvalround:mat->matvaltrunc:mat->matvalerf:mat->matvalerfc:mat->matvallogistic:mat->matvalrelu:mat->matvalsoftplus:mat->matvalsoftsign:mat->matvalsoftmax:?axis:int->mat->matvalsigmoid:mat->matvallog_sum_exp':mat->eltvall1norm':mat->eltvall2norm':mat->eltvall2norm_sqr':mat->eltvalpow:mat->mat->matvalscalar_pow:elt->mat->matvalpow_scalar:mat->elt->matvalatan2:mat->mat->matvalscalar_atan2:elt->mat->matvalatan2_scalar:mat->elt->matvalhypot:mat->mat->matvalmin2:mat->mat->matvalmax2:mat->mat->matvalfmod:mat->mat->matvalfmod_scalar:mat->elt->matvalscalar_fmod:elt->mat->matvalssqr':mat->elt->eltvalssqr_diff':mat->mat->eltendmoduleMake_SD(P:PackSig)(M:SD_Sigwithtypemat:=P.matandtypeelt:=P.elt)=structopenPletmin'x=M.min'(unpack_boxx)|>pack_eltletmax'x=M.max'(unpack_boxx)|>pack_eltletminmax'x=let(a,b)=M.minmax'(unpack_boxx)in(pack_elta,pack_eltb)letmin_ix=let(a,i)=M.min_i(unpack_boxx)in(pack_elta,i)letmax_ix=let(a,i)=M.max_i(unpack_boxx)in(pack_elta,i)letminmax_ix=let(a,i),(b,j)=M.minmax_i(unpack_boxx)in(pack_elta,i),(pack_eltb,j)letabsx=M.abs(unpack_boxx)|>pack_boxletabs2x=M.abs2(unpack_boxx)|>pack_boxletnegx=M.neg(unpack_boxx)|>pack_boxletrecix=M.reci(unpack_boxx)|>pack_boxletsignumx=M.signum(unpack_boxx)|>pack_boxletsqrx=M.sqr(unpack_boxx)|>pack_boxletsqrtx=M.sqrt(unpack_boxx)|>pack_boxletcbrtx=M.cbrt(unpack_boxx)|>pack_boxletexpx=M.exp(unpack_boxx)|>pack_boxletexp2x=M.exp2(unpack_boxx)|>pack_boxletexpm1x=M.expm1(unpack_boxx)|>pack_boxletlogx=M.log(unpack_boxx)|>pack_boxletlog10x=M.log10(unpack_boxx)|>pack_boxletlog2x=M.log2(unpack_boxx)|>pack_boxletlog1px=M.log1p(unpack_boxx)|>pack_boxletsinx=M.sin(unpack_boxx)|>pack_boxletcosx=M.cos(unpack_boxx)|>pack_boxlettanx=M.tan(unpack_boxx)|>pack_boxletasinx=M.asin(unpack_boxx)|>pack_boxletacosx=M.acos(unpack_boxx)|>pack_boxletatanx=M.atan(unpack_boxx)|>pack_boxletsinhx=M.sinh(unpack_boxx)|>pack_boxletcoshx=M.cosh(unpack_boxx)|>pack_boxlettanhx=M.tanh(unpack_boxx)|>pack_boxletasinhx=M.asinh(unpack_boxx)|>pack_boxletacoshx=M.acosh(unpack_boxx)|>pack_boxletatanhx=M.atanh(unpack_boxx)|>pack_boxletfloorx=M.floor(unpack_boxx)|>pack_boxletceilx=M.ceil(unpack_boxx)|>pack_boxletroundx=M.round(unpack_boxx)|>pack_boxlettruncx=M.trunc(unpack_boxx)|>pack_boxleterfx=M.erf(unpack_boxx)|>pack_boxleterfcx=M.erfc(unpack_boxx)|>pack_boxletlogisticx=M.logistic(unpack_boxx)|>pack_boxletrelux=M.relu(unpack_boxx)|>pack_boxletsoftplusx=M.softplus(unpack_boxx)|>pack_boxletsoftsignx=M.softsign(unpack_boxx)|>pack_boxletsoftmax?axisx=M.softmax?axis(unpack_boxx)|>pack_boxletsigmoidx=M.sigmoid(unpack_boxx)|>pack_boxletlog_sum_exp'x=M.log_sum_exp'(unpack_boxx)|>pack_eltletl1norm'x=M.l1norm'(unpack_boxx)|>pack_eltletl2norm'x=M.l2norm'(unpack_boxx)|>pack_eltletl2norm_sqr'x=M.l2norm_sqr'(unpack_boxx)|>pack_eltletpowxy=M.pow(unpack_boxx)(unpack_boxy)|>pack_boxletscalar_powax=M.scalar_pow(unpack_elta)(unpack_boxx)|>pack_boxletpow_scalarxa=M.pow_scalar(unpack_boxx)(unpack_elta)|>pack_boxletatan2xy=M.atan2(unpack_boxx)(unpack_boxy)|>pack_boxletscalar_atan2ax=M.scalar_atan2(unpack_elta)(unpack_boxx)|>pack_boxletatan2_scalarxa=M.atan2_scalar(unpack_boxx)(unpack_elta)|>pack_boxlethypotxy=M.hypot(unpack_boxx)(unpack_boxy)|>pack_boxletmin2xy=M.min2(unpack_boxx)(unpack_boxy)|>pack_boxletmax2xy=M.max2(unpack_boxx)(unpack_boxy)|>pack_boxletfmodxy=M.fmod(unpack_boxx)(unpack_boxy)|>pack_boxletfmod_scalarxa=M.fmod_scalar(unpack_boxx)(unpack_elta)|>pack_boxletscalar_fmodax=M.scalar_fmod(unpack_elta)(unpack_boxx)|>pack_boxletssqr'xa=M.ssqr'(unpack_boxx)(unpack_elta)|>pack_eltletssqr_diff'xy=M.ssqr_diff'(unpack_boxx)(unpack_boxy)|>pack_eltend(* module for complex32 and complex64 matrices *)moduletypeCZ_Sig=sigtypemattypeelttypecast_matvalre:mat->cast_matvalim:mat->cast_matvalabs:mat->matvalabs2:mat->matvalconj:mat->matvalneg:mat->matvalreci:mat->matvall1norm':mat->eltvall2norm':mat->eltvall2norm_sqr':mat->eltvalssqr':mat->elt->eltvalssqr_diff':mat->mat->eltendmoduleMake_CZ(P:PackSig)(M:CZ_Sigwithtypemat:=P.matandtypeelt:=P.eltandtypecast_mat:=P.cast_mat)=structopenPletrex=M.re(unpack_boxx)|>pack_cast_boxletimx=M.im(unpack_boxx)|>pack_cast_boxletabsx=M.abs(unpack_boxx)|>pack_boxletabs2x=M.abs2(unpack_boxx)|>pack_boxletconjx=M.conj(unpack_boxx)|>pack_boxletnegx=M.neg(unpack_boxx)|>pack_boxletrecix=M.reci(unpack_boxx)|>pack_boxletl1norm'x=M.l1norm'(unpack_boxx)|>pack_eltletl2norm'x=M.l2norm'(unpack_boxx)|>pack_eltletl2norm_sqr'x=M.l2norm_sqr'(unpack_boxx)|>pack_eltletssqr'xa=M.ssqr'(unpack_boxx)(unpack_elta)|>pack_eltletssqr_diff'xy=M.ssqr_diff'(unpack_boxx)(unpack_boxy)|>pack_eltend(* matrix modules of four types *)moduleS=structincludeMake_Basic(Pack_DMS)(Owl_dense_matrix.S)includeMake_SD(Pack_DMS)(Owl_dense_matrix.S)endmoduleD=structincludeMake_Basic(Pack_DMD)(Owl_dense_matrix.D)includeMake_SD(Pack_DMD)(Owl_dense_matrix.D)endmoduleC=structincludeMake_Basic(Pack_DMC)(Owl_dense_matrix.C)includeMake_CZ(Pack_DMC)(Owl_dense_matrix.C)endmoduleZ=structincludeMake_Basic(Pack_DMZ)(Owl_dense_matrix.Z)includeMake_CZ(Pack_DMZ)(Owl_dense_matrix.Z)end