Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file mat2_S.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861(* File: mat_SD.ml
Copyright (C) 2001-
Markus Mottl
email: markus.mottl@gmail.com
WWW: http://www.ocaml.info
Christophe Troestler
email: Christophe.Troestler@umons.ac.be
WWW: http://math.umh.ac.be/an/
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*)openBigarrayopenMat4_SopenUtilsopenFloat32lethilbertn=letmat=createnninforcol=1tondoforrow=1tondomat.{row,col}<-1./.float(row+col-1)donedone;matlethankeln=ifn=0thenemptyelseletmat=makenn0.inletn1=n+1inletrecloopcr=mat.{r,c}<-float(c+r-1);ifc+r>=n1thenifc=nthenmatelseloop(c+1)1elseloopc(r+1)inloop11letpascaln=letmat=makenn1.inforr=2tondoforc=2tondomat.{r,c}<-mat.{r-1,c}+.mat.{r,c-1}donedone;matletrosser_ar=[|[|611.;196.;-192.;407.;-8.;-52.;-49.;29.;|];[|196.;899.;113.;-192.;-71.;-43.;-8.;-44.;|];[|-192.;113.;899.;196.;61.;49.;8.;52.;|];[|407.;-192.;196.;611.;8.;44.;59.;-23.;|];[|-8.;-71.;61.;8.;411.;-599.;208.;208.;|];[|-52.;-43.;49.;44.;-599.;411.;208.;208.;|];[|-49.;-8.;8.;59.;208.;208.;99.;-911.;|];[|29.;-44.;52.;-23.;208.;208.;-911.;99.;|];|]letrosser()=Array2.of_arrayprecfortran_layoutrosser_arlettoeplitz(v:vec)=letlen=Array1.dimviniflen=0thenemptyelseiflen=1thenmake11v.{1}else(iflenmod2<>1theninvalid_arg"toeplitz: v has even number of elements";letn=(len+1)/2inletmat=createnninletreclooprci=mat.{r,c}<-v.{i};ifr=nthenifc=nthenloop12(i+1)elseloop(n-c)1(i+1)elseifc=nthenifr=1thenmatelseloop1(n-r+2)(i+1)elseloop(r+1)(c+1)iinloopn11)letvandermonde(v:vec)=letn=Array1.dimvinifn=0thenemptyelseifn=1thenmake111.0else(letmat=createnninfori=1tondomat.{i,1}<-1.0done;fori=1tondomat.{i,2}<-v.{i}done;forpow=2ton-1doletfpow=floatpowinfori=1tondomat.{i,pow+1}<-v.{i}**fpowdonedone;mat)letwilkinsonn=ifn<3theninvalid_arg"wilkinson: n < 3";ifnmod2<>1theninvalid_arg"wilkinson: n is an even number";letmat=makenn0.0infori=2tondoleti_1=i-1inmat.{i,i_1}<-1.0;mat.{i_1,i}<-1.0done;letn_2=n/2inletn1_2=n_2+1infori=1ton_2domat.{i,i}<-float(n1_2-i)done;fori=n1_2+1tondomat.{i,i}<-float(i-n1_2)done;matletrandom?rnd_state?(from=-1.)?(range=2.)mn=letmat=createmninletstate=matchrnd_statewith|None->Random.get_state()|Somestate->stateinforrow=1tomdoforcol=1tondomat.{row,col}<-Random.State.floatstaterange+.fromdonedone;ifrnd_state=NonethenRandom.set_statestate;mat(* Unary matrix operations *)letunopdirectloc=letloc="Lacaml.S.Mat."^locinfun?patt?m?n?(br=1)?(bc=1)?b?(ar=1)?(ac=1)a->letm=get_dim1_matloca_straarm_strminletn=get_dim2_matloca_straacn_strninletb=get_matlocb_strcreatebrbcbmninletpkind,pinit=Mat_patt.normalize_args~loc~m~npattindirect~pkind~pinit~m~n~ar~ac~a~br~bc~b;bexternaldirect_abs:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sabs_mat_stub_bc""lacaml_Sabs_mat_stub"letabs=unopdirect_abs"abs"externaldirect_signum:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssignum_mat_stub_bc""lacaml_Ssignum_mat_stub"letsignum=unopdirect_signum"signum"externaldirect_sqr:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssqr_mat_stub_bc""lacaml_Ssqr_mat_stub"letsqr=unopdirect_sqr"sqr"externaldirect_sqrt:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssqrt_mat_stub_bc""lacaml_Ssqrt_mat_stub"letsqrt=unopdirect_sqrt"sqrt"externaldirect_cbrt:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Scbrt_mat_stub_bc""lacaml_Scbrt_mat_stub"letcbrt=unopdirect_cbrt"cbrt"externaldirect_exp:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sexp_mat_stub_bc""lacaml_Sexp_mat_stub"letexp=unopdirect_exp"exp"externaldirect_exp2:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sexp2_mat_stub_bc""lacaml_Sexp2_mat_stub"letexp2=unopdirect_exp2"exp2"externaldirect_expm1:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sexpm1_mat_stub_bc""lacaml_Sexpm1_mat_stub"letexpm1=unopdirect_expm1"expm1"externaldirect_log:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Slog_mat_stub_bc""lacaml_Slog_mat_stub"letlog=unopdirect_log"log"externaldirect_log10:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Slog10_mat_stub_bc""lacaml_Slog10_mat_stub"letlog10=unopdirect_log10"log10"externaldirect_log2:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Slog2_mat_stub_bc""lacaml_Slog2_mat_stub"letlog2=unopdirect_log2"log2"externaldirect_log1p:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Slog1p_mat_stub_bc""lacaml_Slog1p_mat_stub"letlog1p=unopdirect_log1p"log1p"externaldirect_sin:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssin_mat_stub_bc""lacaml_Ssin_mat_stub"letsin=unopdirect_sin"sin"externaldirect_cos:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Scos_mat_stub_bc""lacaml_Scos_mat_stub"letcos=unopdirect_cos"cos"externaldirect_tan:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Stan_mat_stub_bc""lacaml_Stan_mat_stub"lettan=unopdirect_tan"tan"externaldirect_asin:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sasin_mat_stub_bc""lacaml_Sasin_mat_stub"letasin=unopdirect_asin"asin"externaldirect_acos:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sacos_mat_stub_bc""lacaml_Sacos_mat_stub"letacos=unopdirect_acos"acos"externaldirect_atan:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Satan_mat_stub_bc""lacaml_Satan_mat_stub"letatan=unopdirect_atan"atan"externaldirect_sinh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssinh_mat_stub_bc""lacaml_Ssinh_mat_stub"letsinh=unopdirect_sinh"sinh"externaldirect_cosh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Scosh_mat_stub_bc""lacaml_Scosh_mat_stub"letcosh=unopdirect_cosh"cosh"externaldirect_tanh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Stanh_mat_stub_bc""lacaml_Stanh_mat_stub"lettanh=unopdirect_tanh"tanh"externaldirect_asinh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sasinh_mat_stub_bc""lacaml_Sasinh_mat_stub"letasinh=unopdirect_asinh"asinh"externaldirect_acosh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sacosh_mat_stub_bc""lacaml_Sacosh_mat_stub"letacosh=unopdirect_acosh"acosh"externaldirect_atanh:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Satanh_mat_stub_bc""lacaml_Satanh_mat_stub"letatanh=unopdirect_atanh"atanh"externaldirect_floor:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sfloor_mat_stub_bc""lacaml_Sfloor_mat_stub"letfloor=unopdirect_floor"floor"externaldirect_ceil:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sceil_mat_stub_bc""lacaml_Sceil_mat_stub"letceil=unopdirect_ceil"ceil"externaldirect_round:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Sround_mat_stub_bc""lacaml_Sround_mat_stub"letround=unopdirect_round"round"externaldirect_trunc:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Strunc_mat_stub_bc""lacaml_Strunc_mat_stub"lettrunc=unopdirect_trunc"trunc"externaldirect_erf:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Serf_mat_stub_bc""lacaml_Serf_mat_stub"leterf=unopdirect_erf"erf"externaldirect_erfc:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Serfc_mat_stub_bc""lacaml_Serfc_mat_stub"leterfc=unopdirect_erfc"erfc"externaldirect_logistic:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Slogistic_mat_stub_bc""lacaml_Slogistic_mat_stub"letlogistic=unopdirect_logistic"logistic"externaldirect_relu:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Srelu_mat_stub_bc""lacaml_Srelu_mat_stub"letrelu=unopdirect_relu"relu"externaldirect_softplus:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssoftplus_mat_stub_bc""lacaml_Ssoftplus_mat_stub"letsoftplus=unopdirect_softplus"softplus"externaldirect_softsign:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->unit="lacaml_Ssoftsign_mat_stub_bc""lacaml_Ssoftsign_mat_stub"letsoftsign=unopdirect_softsign"softsign"(* Binary matrix operations *)letbinopdirectloc=letloc="Lacaml.S.Mat."^locinfun?patt?m?n?(cr=1)?(cc=1)?c?(ar=1)?(ac=1)a?(br=1)?(bc=1)b->letm=get_dim1_matloca_straarm_strminletn=get_dim2_matloca_straacn_strnincheck_dim_matlocb_strbrbcbmn;letc=get_matlocc_strcreatecrcccmninletpkind,pinit=Mat_patt.normalize_args~loc~m~npattindirect~pkind~pinit~m~n~ar~ac~a~br~bc~b~cr~cc~c;cexternaldirect_pow:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Spow_mat_stub_bc""lacaml_Spow_mat_stub"letpow=binopdirect_pow"pow"externaldirect_atan2:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Satan2_mat_stub_bc""lacaml_Satan2_mat_stub"letatan2=binopdirect_atan2"atan2"externaldirect_hypot:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Shypot_mat_stub_bc""lacaml_Shypot_mat_stub"lethypot=binopdirect_hypot"hypot"externaldirect_min2:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Smin2_mat_stub_bc""lacaml_Smin2_mat_stub"letmin2=binopdirect_min2"min2"externaldirect_max2:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Smax2_mat_stub_bc""lacaml_Smax2_mat_stub"letmax2=binopdirect_max2"max2"externaldirect_sum_prod:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->(float[@unboxed])="lacaml_Ssum_prod_mat_stub_bc""lacaml_Ssum_prod_mat_stub"letsum_prod?patt?m?n?(ar=1)?(ac=1)a?(br=1)?(bc=1)b=letloc="Lacaml.S.Mat.sum_prod"inletm=get_dim1_matloca_straarm_strminletn=get_dim2_matloca_straacn_strnincheck_dim_matlocb_strbrbcbmn;letpkind,pinit=Mat_patt.normalize_args~loc~m~npattindirect_sum_prod~pkind~pinit~m~n~ar~ac~a~br~bc~b(* Ternary matrix operations *)letcqabdirectloc=letloc="Lacaml.S.Mat."^locinfun?patt?m?n?(cr=1)?(cc=1)c?(ar=1)?(ac=1)a?(br=1)?(bc=1)b->letm=get_dim1_matloca_straarm_strminletn=get_dim2_matloca_straacn_strnincheck_dim_matlocb_strbrbcbmn;check_dim_matlocc_strcrcccmn;letpkind,pinit=Mat_patt.normalize_args~loc~m~npattindirect~pkind~pinit~m~n~ar~ac~a~br~bc~b~cr~cc~cexternaldirect_cpab:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Scpab_stub_bc""lacaml_Scpab_stub"letcpab=cqabdirect_cpab"cpab"externaldirect_cmab:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->br:(int[@untagged])->bc:(int[@untagged])->b:mat->cr:(int[@untagged])->cc:(int[@untagged])->c:mat->unit="lacaml_Scmab_stub_bc""lacaml_Scmab_stub"letcmab=cqabdirect_cmab"cmab"(* Misc functions *)externaldirect_log_sum_exp:pkind:Mat_patt.kind->pinit:(int[@untagged])->m:(int[@untagged])->n:(int[@untagged])->ar:(int[@untagged])->ac:(int[@untagged])->a:mat->(float[@unboxed])="lacaml_Slog_sum_exp_mat_stub_bc""lacaml_Slog_sum_exp_mat_stub"letlog_sum_exp?patt?m?n?(ar=1)?(ac=1)a=letloc="Lacaml.S.Mat.log_sum_exp"inletm=get_dim1_matloca_straarm_strminletn=get_dim2_matloca_straacn_strninletpkind,pinit=Mat_patt.normalize_args~loc~m~npattindirect_log_sum_exp~pkind~pinit~m~n~ar~ac~a