2014-07-01: Switched version control repository to GitHub. 2014-05-23: Improved library packing, renamed internal modules, and removed superfluous Real/Complex IO-modules. Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for the improvements! 2014-05-11: Fixed linking on Mac OS X Mavericks using the Accelerate framework. 2013-12-12: Added new functions: * Vec.add_const * Mat.add_const 2013-10-08: Added new functions: * Mat.sum * Mat.fill (more flexible than the Bigarray fill-function) 2013-10-02: Added new function: * Vec.fill (more flexible than the Bigarray fill-function) 2013-09-15: Added new functions: * Vec.zpxy (useful for convolutions) * Vec.zmxy (useful for convolutions) Made Vec.reci work with complex numbers. 2012-01-17: Improved build file generation to avoid regenerating build files during the development process, which would clobber the VCS changelog. The build files will now only be rebuilt manually shortly before a release. Added numerous examples from NAG (Numerical Algorithm Group): http://www.nag.com/lapack-ex/node3.html Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for the examples and improvements! 2012-12-20: Fixed a bug in vector functions concerning the handling of offsets and increments. Minor fixes and cleanups. Documentation improvements. 2012-11-09: Added new functions: * Vec.{reci,exp,log,sin,cos} (currently for real numbers only) 2012-07-20: Downgraded findlib version requirement to support the Debian testing branch. 2012-07-15: Minor release version 7.0.2: * Rewrote README in Markdown * Added stricter compilation flags * Fixed a few minor bugs discovered due to improved warnings 2012-06-11: Several fixes for the upcoming OCaml 4.00 release. 2012-04-30: New major release version 7.0.0! 1) Changed "*int_vec" to "*int32_vec" in module Common. 2) Added Vec.sort. 3) Documentation improvements. Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for most changes! 2012-02-28: Previous configuration bug fix did not work correctly, should be solved now. 2012-02-24: Fixed a configuration bug on non-Linux Unix-platforms that prevented corrected linking. 2012-02-01: New major release version 6.0.0! 1) Switched build process to Oasis 2) Removed module Impl in favor of a flat module hierarchy As a consequence of 2) instead of the following: open Lacaml.Impl.D The new way of opening double-precision functions is: open Lacaml.D 2011-08-09: Fixed a bug in the work space calculation of sbev. Thanks to Yichen Xie <yxie@cs.stanford.edu> for contributing this function! 2011-06-25: Added new function: * sbev Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing this function! 2011-03-23: Greatly improved API documentation. Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing this large patch! Renamed a function for consistency. This breaks backward-compatibility, but is extremely unlikely to affect anybody so no major release: * Common.mat_of_vec -> Common.mat_from_vec 2010-11-21: Added new function: * sbgv Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing this function! 2009-10-03: Minor API change. trmm and trsm now have a similar API wrt. variable labeling. 2009-09-21: Added new functions: * ormqr * trsm * Mat.scal_rows 2009-09-16: Added new functions: * sygv Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing sygv! * orgqr * lauum Added example for QR-factorization. 2009-09-09: Fixed a few performance bugs. Some matrix and vector types were polymorphic, thus leading to much worse element access speed. Improved compiler selection in Makefile. Improved some matrix operations. Added new function: * Mat.transpose_copy 2009-06-13: Added new function: * Mat.as_vec 2009-06-12: Added new function: * tbtrs (all numbers) Thanks to Sam Ehrlichman <sehrlichman@janestreet.com> for contributing the patch! 2009-06-07: Added workaround for OCaml performance bug wrt. bigarray access. This should make OCaml code perform much faster when accessing or modifying bigarrays directly. Changed API for Mat.scal_cols by swapping matrix and vector argument. 2009-06-01: New vector functions: * Vec.sqrt (compute square roots of a vector) * Vec.sqr (compute squares of a vector) 2009-05-30: Major overhaul: Fixed too liberal transpose parameters in several functions. The conjugate transpose was not available in some. Make convenience definitions for pp_num, pp_vec, pp_mat available on opening Lacaml.Impl.{S,D,C,Z} to be able to print more generically. Added new functions: * dotu (only for complex numbers) * dotc (only for complex numbers) * ger (all numbers) * lassq * Mat.syrk_trace * Mat.symm2_trace Fixed several functions to allow for complex multipliers: gemv, gbmv, symv, gemm, symm, trmm, syrk, syr2k. Added new "stable" flag to Vec.sqr_nrm2 if over/underflow protection is required. Numerous internal improvements to make adding functionality even easier and to improve performance and numeric stability. 2009-05-16: Added new function: * Mat.syrk_diag Renamed functions and changed API: * Mat.prod_diag -> Mat.gemm_diag * Mat.prod_trace -> Mat.gemm_trace 2009-05-03: Added new functions: * Vec.neg Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing the patch! 2009-04-28: Added new functions: * Mat.prod_diag * Mat.prod_trace 2009-04-25: Major API changes: Removed function: * Mat.copy (use lacpy instead) Modified function: * geev (differently named arguments) Added functions: * lacpy (also copies triangular matrices) * larnv (random number generation) Fixed Mac OS X build problems. Lots of internal cleanups. 2009-04-23: Improved numerical stability of Vec.ssqr for real numbers and zero mean. 2009-04-22: Added new matrix function: * scal_cols 2009-01-21: Added Vec.sqr_nrm2, which is numerically more stable than Vec.ssqr. Added nrm2 for complex numbers (BLAS-1 function). 2009-01-14: Greatly improved defaults for printing in toplevels. 2009-01-13: Added context printing options to matrices. This feature allows human-readable printing of huge matrices by only emitting specified horizontal and vertical contexts. 2008-11-12: Improved Windows portability. 2008-11-10: Fixed dynamic linking problem on Mac OS X. 2008-11-02: Added new BLAS functions: * tpmv * tpsv 2008-11-01: Added new BLAS function: * syr2k 2008-10-30: Added new BLAS function: * trsv 2008-10-26: Added two new matrix functions: * packed * unpacked 2008-10-15: Added new LAPACK function: * geqrf 2008-09-21: Added new BLAS and LAPACK functions: * trmm * trtrs * trtri Some minor API cleanups and internal improvements. 2008-09-17: Added optional jitter argument to potrf, potrs, and potri. 2008-09-08: !!! WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!! potri and potrs now implicitly call potrf by default! This will break previous code depending on these functions, but should be trivial to fix. This change was deemed necessary, because otherwise switching between sytri/potri and sytrs/potrs would cause surprises: the purely symmetric functions do already implicitly call the factorization unless a default parameter (ipiv) is overridden. Sorry for the inconvenience. 2008-07-21: Generalized Mat.transpose to support specifying sub-matrices. 2008-04-23: Fixed a parameter checking bug for syevr-related functions. 2008-04-11: Added new BLAS function: * trmv Thanks to Martin Willensdorfer <ma.wi@gmx.at> for the patch! 2008-02-13: Fixed a bug when implicitly allocating result matrices with user-specified offsets. It may cause segfaults and affects many functions (though it is presumably very rarely triggered). Thanks to Shun Sakuraba <shun.sakuraba@gmail.com> for contributing this patch! 2008-01-11: Fixed installation of new release. Added new function: * Mat.detri 2008-01-02: New major release due to restructuring. The library is now packed into a separate namespace (Lacaml), and the previously visible Lacaml-module is now called "Impl". 2007-12-27: Added new BLAS function: * symv 2007-11-22: Added Mat.scal and Mat.axpy. 2007-11-21: Fixed a bug in vector iteration functions related to negative index increments. Thanks to Fabrice Pardo <Fabrice.Pardo@lpn.cnrs.fr> for reporting! Greatly improved performance of matrix copying. Cleaned up some code. Removed dependency on F2C library (gfortran should nowadays be linked implicitly). 2007-03-30: Added lacaml_utils to installed interfaces. 2007-03-28: Fixed potential GC-bugs. Updated OCamlMakefile. 2006-11-22: Updated OCamlMakefile. 2006-09-15: Fixed bug on 64bit architectures: Fortran integers are 32bit only, Lacaml did not account for that. 2006-07-24: Tightened parameter checks on functions that accept square matrices only to prevent LAPACK from complaining (i.e. raise OCaml exceptions instead). 2006-07-06: Added Vec.concat. 2006-06-08: Fixed some GC-bugs. Cleaned up C-code. 2006-01-21: Updated copy of f2c.h to fix size-related bugs on AMD64. Fixed some warnings introduced by OCaml-3.09. 2006-01-18: Fixed a bug in pbsv and sbmv. Thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for contributing the patch! 2006-01-16: Updated OCamlMakefile. 2005-12-09: Fixed an installation problem on Darwin. 2005-10-06: Fixed META-file for better integration with the OCaml-toplevel. Added new function: * Mat.copy_row 2005-09-22: Added new function: * Mat.to_col_vecs 2005-09-21: Added new function: * Vec.random (for both real and complex numbers) 2005-08-24: Added a new function: * Vec.append 2005-07-15: Fixed two documentation generation bugs. 2005-07-14: Major release (version 3)! The API has been significantly normalized, simplified and documented to make its use more convenient. ATTENTION: THE ORDER OF VECTOR ARGUMENTS TO FUNCTION AXPY HAS CHANGED, AND PARAMETER X IS LABELED. IF YOUR COMPILER DOES NOT COMPLAIN ABOUT MISSING LABELS, YOUR PROGRAM WILL COMPILE BUT PRODUCE WRONG RESULTS. ALWAYS LABEL PARAMETER X FOR AXPY, WHICH IS ALSO MUCH MORE READABLE. New LAPACK-function: * gesvd for complex numbers Thanks to Egbert Ammicht <eammicht@lucent.com> for this contribution! Added specific build rules for MacOS X. Thanks to Patrick Cousot <Patrick.Cousot@ens.fr> for this contribution! 2005-06-20: Relaxed a runtime check in gemm to let the user specify his own "k"-value. 2005-06-17: New LAPACK-functions: * syevr * lamch New functions in Mat-module: * random Added pretty-printer for integer vectors to printers installed in the toplevel. 2005-06-15: Fixed a supposedly very rare bug in gesvd and gesdd. Changed interface of all gels?_min_lwork functions for more understandable, safer usage. 2005-06-14: New LAPACK-function: * gesdd 2005-06-08: New LAPACK-function: * syevd 2005-06-06: Tightened parameter checks for printing matrices and vectors. 2005-06-03: Fixed a bug in mvec_of_array (degenerate case when array has zero length). 2005-05-31: Fixed a couple of GC-related bugs pointed out by Saffire (an FFI-type checker). 2005-05-27: New function in Mat-module: * mvec_to_array 2005-05-17: Changed interface of swap-function to avoid parameter confusions. 2005-05-13: Added pretty-printing for int-bigarrays. 2005-05-12: Further regularisation of pretty-printing module. 2005-05-11: Greatly regularized pretty-printing module. 2005-04-05: Improved pretty-printing functions to allow for printing labels. 2005-03-28: Fixed a bug in Mat.of_col_vecs. 2005-03-28: New functions in Mat-module: * of_col_vecs 2005-03-23: Added a toplevel-specific module for installing pretty-printers, which is automatically loaded when requiring the library in the toplevel. 2005-03-22: Added a new constant parameter to function Vec.ssqr_diff. 2005-03-10: New functions in Mat-module: * mvec_of_array * from_col_vec * from_row_vec Slightly improved some examples. 2005-03-03: Improved pretty-printing functions. Changed examples to make use of new pretty-printing functions. Fixed some severe bugs (uninitialized data!) in several functions. 2005-03-02: Updated contact + copyright information. Updated OCamlMakefile. Fixed a bug in the gelsX-functions. Added module Lacaml_io for printing matrices and vectors in convenient ways. New functions in Mat-module: * copy * of_diag * col * transpose * fold_cols New functions in Vec-module: * to_array * of_list * to_list * rev 2004-11-13: Added new LAPACK-function for singular value decomposition (SVD): * gesvd Thanks to Liam Stewart <liam@cs.toronto.edu> for this contribution! 2004-08-05: Renamed a constant to prevent potential name clashes on Mac OS X. 2004-08-02: Fixed a severe thread-related bug. The attribute "noalloc" cannot be used with external functions that make use of "caml_enter_blocking_section". 2004-08-01: New matrix function: * map Thanks to Liam Stewart <liam@cs.toronto.edu> again for his help! 2004-07-23: Major feature additions. New LAPACK- and BLAS-functions (mostly computational routines): * syr, syrk * lansy * sytrf, sytrs, sytri, sycon * getrs * potrs Thanks to Liam Stewart <liam@cs.toronto.edu> again for this huge contribution! 2004-07-15: Major feature additions. New LAPACK- and BLAS-functions (mostly computational routines): * gecon * pocon * gemm * symm * lange * getrf * getri * potrf * potri Thanks to Liam Stewart <liam@cs.toronto.edu> for this huge contribution! 2004-07-15: Upgraded some internal functions as suggested by OCaml-3.08. Minor improvements to examples. New matrix function: * Mat.of_array Updated OCamlMakefile. 2004-07-04: Moved gelss-function from SDCZ to SD-code only. Interfaces to complex code (CZ) are not compatible. Thanks to Liam Stewart <liam@cs.toronto.edu> for pointing this out! Updated OCamlMakefile. 2004-04-27: Updated OCamlMakefile. 2004-03-16: Fixed a small compilation problem. Updated OCamlMakefile. 2004-02-27: Fixed a minor problem with external functions returning type unit. Added "CAMLprim" to all C-stubs. Fixed too tight type restrictions of axpy. Corrected error locations. Tightened some parameter checks, and made them more modular. Changed function interfaces (not backward compatible): * Mat.init_row * Mat.init_col Changed the "trans"-parameter in various functions from a boolean to type "trans2" or "trans3", which consist of constructors "`N", "`T", "`C" depending on them making sense in this context. New matrix functions: * Mat.dim1 * Mat.dim2 New vector functions: * Vec.dim * Vec.init * Vec.of_array * Vec.logspace New LAPACK function: * geev (General algorithm for solving eigenproblems) This function was initially contributed by Oleg Trott <ot14@columbia.edu>. Removed obsolete file myXerbla.c. Cleaned up examples. Improved documentation a bit. 2004-02-21: Added CAMLprim in the C-interface where appropriate. 2004-01-31: Added Makefile.conf again for more understandable installation. Added new functions for matrix creation: * diag * hankel * pascal * rosser * toeplitz * vandermonde * wilkinson Made Vec.min and Vec.max use the 2-norm for comparison. Removed a superfluous debug statement. Updated OCamlMakefile. 2003-12-19: Fixed a severe bug in Vec.fold. Improved element-wise vector division (prevent overflow). Added two functions for generating matrices: * init_rows * init_cols Improved functionality of Vec.iter and Vec.iteri. 2003-12-18: Update to allow shared libraries. 2003-12-16: Changed Fortran error handling to catch invalid arguments that OCaml did not detect. 2003-12-15: Fixed a bug in the examples (lin_eq). 2003-12-14: Changed the signature of a couple of functions: non-optional arguments that are overwritten and represent the result of the function will not be returned anymore (unit-functions). Relaxed the conditions of the license to allow static linking. 2003-12-12: Released new major version. Please note new module names! Added support for complex transforms. Allow accessing submatrices using labels. Updated OCamlMakefile. Changed stub names (invisible to user). 2003-01-07: Updated OCamlMakefile to make use of "findlib". 2002-09-12: Updated OCamlMakefile and license. Documented all modules for use with ocamldoc. 2002-07-24: Incorporated further extensions by Christophe Troestler. Fixed a couple of C-compiler warnings (pedantic mode). 2002-07-16: Fixed potential problem with threads and GC. 2002-07-12: Added loads of new LAPACK- and BLAS-functions! Many thanks to Christophe Troestler <Christophe.Troestler@umons.ac.be> for this major contribution! 2002-07-03: Small fix in wrong type declaration in C-code (has no effect at runtime). 2002-05-05: Updated OCamlMakefile. 2002-05-04: Revised the whole installation procedure. See INSTALL for details. 2002-04-30: Updated OcamlMakefile: it does not ask for confirmation during installation anymore! 2002-04-23: Added the file "f2c.h" to the distribution so that people don't have to install it. 2002-02-10: Removed project from Sourceforge for simpler maintainance. 2002-01-04: Changed the example a little bit to show users functionality from module "Vec_D" (i.e. basic vector operations). 2002-01-02: Removed two more unneeded object files from the f2c-library. (Thanks to John Malecki for the hint!). 2001-09-06: Removed labels referring to standard library modules from the implementation: will be deprecated in the next OCaml-release. 2001-06-30: Removed "Printexc.catch" from lin_reg-example: is going to be deprecated in upcoming OCaml-release. Bumped major version number: the existing functionality of the library seems stable enough. 2001-04-03: Minor change to make things compile in label mode. 2001-03-30: Added annotation "noalloc" to functions that benefit from it. This lets OCaml slightly improve efficiency of function calls. 2001-02-21: Updated README. 2001-02-20: Added additional checks for increment-parameters: this prevents segfaults if the user passes invalid arguments. Added new module "vec_SD.ml" and supplementary C-files for additional (non-BLAS) vector operations. It currently implements "ssqr", "add", "sub", "mul", "div" and "ssqr_diff" (see module interface for documentation). 2001-02-09: Added "asum"-function from BLAS. 2001-02-08: Added "copy"- and "dot"-functions from BLAS and restructered the code a bit to make it more extensible. 2001-01-24: First release.