123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117(*
* Eigen - an OCaml interface to C++ Eigen library
* Copyright (c) 2016-2017 Liang Wang <liang.wang@cl.cam.ac.uk>
*)openCtypesopenEigen_types.SPMAT_Cletcreate?(reserve=0.01)mn=lets=max1024(float_of_int(m*n)*.reserve|>int_of_float)inletx=ml_eigen_new(Int64.of_ints)(Int64.of_intm)(Int64.of_intn)inGc.finaliseml_eigen_deletex;xletdeletex=ml_eigen_deletexleteyem=ml_eigen_eye(Int64.of_intm)letrowsx=ml_eigen_rowsx|>Int64.to_intletcolsx=ml_eigen_colsx|>Int64.to_intletnnzx=ml_eigen_nnzx|>Int64.to_intletgetxij=ml_eigen_getx(Int64.of_inti)(Int64.of_intj)letsetxija=ml_eigen_setx(Int64.of_inti)(Int64.of_intj)aletinsertxija=ml_eigen_insertx(Int64.of_inti)(Int64.of_intj)aletresetx=ml_eigen_resetxletis_compressedx=ml_eigen_is_compressedx=1letcompressx=ml_eigen_compressxletuncompressx=ml_eigen_uncompressxletreshapexmn=ml_eigen_reshapex(Int64.of_intm)(Int64.of_intn)letprunexre=ml_eigen_prunexreletvalueptrx=letl=allocateint64_t(Signed.Int64.of_int0)inletraw=ml_eigen_valueptrxlinletl=Signed.Int64.to_int!@linbigarray_of_ptrarray1lBigarray.complex32rawletinnerindexptrx=letraw=ml_eigen_innerindexptrxinbigarray_of_ptrarray1(nnzx)Bigarray.int64rawletouterindexptrx=letraw=ml_eigen_outerindexptrxinbigarray_of_ptrarray1(rowsx+1)Bigarray.int64rawletclonex=ml_eigen_clonexletrowxi=ml_eigen_rowx(Int64.of_inti)letcolxi=ml_eigen_colx(Int64.of_inti)lettransposex=ml_eigen_transposexletadjointx=ml_eigen_adjointxletdiagonalx=ml_eigen_diagonalxlettracex=ml_eigen_tracexletis_zerox=ml_eigen_is_zerox=1letis_positivex=ml_eigen_is_positivex=1letis_negativex=ml_eigen_is_negativex=1letis_nonpositivex=ml_eigen_is_nonpositivex=1letis_nonnegativex=ml_eigen_is_nonnegativex=1letis_equalxy=ml_eigen_is_equalxy=1letis_unequalxy=ml_eigen_is_unequalxy=1letis_greaterxy=ml_eigen_is_greaterxy=1letis_smallerxy=ml_eigen_is_smallerxy=1letequal_or_greaterxy=ml_eigen_equal_or_greaterxy=1letequal_or_smallerxy=ml_eigen_equal_or_smallerxy=1letaddxy=ml_eigen_addxyletsubxy=ml_eigen_subxyletmulxy=ml_eigen_mulxyletdivxy=ml_eigen_divxyletgemmxy=ml_eigen_gemmxyletadd_scalarxa=ml_eigen_add_scalarxaletsub_scalarxa=ml_eigen_sub_scalarxaletmul_scalarxa=ml_eigen_mul_scalarxaletdiv_scalarxa=ml_eigen_div_scalarxaletsumx=ml_eigen_sumxletnegx=ml_eigen_negxletsqrtx=ml_eigen_sqrtxletprintx=ml_eigen_printx