- Switched from C99 to C11 to avoid compilation warnings about atomics.
- Obsolete
base-bytes
andbase-bigarray
dependencies.
- Moved incorrect
Bool_val
out of blocking section.
-O3
,-ffast-math
, and-march=native
flags due to risk as defaults.
- Rewrote README and improved changelog.
- Reformatted all C-code using
clang-format
and OCaml code usingocamlformat
.
- GitHub workflow.
- Platform configuration bug.
-
Bug in bytecode bindings for
lamch
, affectingsyevr
.Thanks to Philippe Veber [email protected] for the bug report.
-
Support for Apple Silicon.
Thanks to Marcello Seri [email protected] for this contribution.
- Dune build rules.
- Detection of (complex)
dotu
anddotc
calling conventions.
-
Package dependencies on
stdio
andbase
for OCaml multicore testing.Thanks to Anthony Scemama for this contribution.
- Support for const char strings in stubs due to stricter OCaml runtimes.
- Switched to OPAM file generation via
dune-project
.
- Missing autogenerated dependencies to
dune
file to avoid race conditions.
- Warnings in C-stubs.
-
API misspecification in
ptsv
, leading to incorrect results.Thanks to Nicolas Ratier [email protected] for the bug report.
- Portability bug in (complex)
dotu
anddotc
due to BLAS API differences.
- Switched to dune, dune-release, and OPAM 2.0.
- Warnings and errors in configuration code due to upstream changes.
- Bug in
Vec.ssqr
.
- User code changes required for functions
potrf
,potri
, andpotrs
.
Mat.add_const_diag
for adding a constant to the diagonal of a matrix.
orgqr
now raises an exception ifm < n
.- Improved documentation.
- Eigenvalue offsets should work now.
- Bugs accessing lower pentagonal matrix patterns.
- Library override issue on Mac OS X.
- Wrongly capitalized build targets missed due to Mac OS X file system case insensitivity.
- Switched to jbuilder and topkg.
- New functions:
Mat.sum_prod
.
- C-code for better SIMD compiler optimizations.
- Documentation.
- Configuration and build process.
2017-06-28: Release version 10.0.0:
Dropped label used by `trmm` and `trsm` for API consistency.
2017-05-23: Release version 9.3.2:
Fixed the API of ger and syr. These functions now don't return
the modified matrix anymore. This makes more sense, because
addition to the updated matrix is an intrinsic part of these
operations. You cannot use them to initialize a freshly allocated
matrix. This change can break some code (rare), but is trivial
to fix.
2017-05-03: Internalized some modules to improve type error messages in user
code.
Thanks to Christophe Troestler <[email protected]>
for the improvements.
2017-03-09: Fixed bug in Vec.acos (affects bytecode applications).
2017-01-18: Minor release version 9.2.1:
Added more functions:
* Vec.has_zero_dim
* Mat.has_zero_dim
Added missing checks for empty vectors and matrices to prevent
BLAS functions from exiting the program.
2016-07-12: Minor release version 9.1.1:
Fixed FreeBSD linking problem.
Thanks to Mykola Stryebkov <[email protected]> for the patch.
2016-07-06: Minor release version 9.1.0:
More functions from the C standard library (math.h):
* Vec/Mat.cbrt
* Vec/Mat.log2
* Vec/Mat.round
* Vec/Mat.trunc
Improved some operations that can exploit fused multiply add (FMA).
2016-04-01: Major release version 9.0.0:
Added portable vector and matrix functions from the C standard
library (math.h):
* Vec/Mat.exp2
* Vec/Mat.log10
* Vec/Mat.asin
* Vec/Mat.acos
* Vec/Mat.atan
* Vec/Mat.sinh
* Vec/Mat.cosh
* Vec/Mat.tanh
* Vec/Mat.asinh
* Vec/Mat.acosh
* Vec/Mat.atanh
* Vec/Mat.floor
* Vec/Mat.ceil
* Vec/Mat.erf
* Vec/Mat.erfc
* Vec/Mat.pow
* Vec/Mat.atan2
* Vec/Mat.hypot
Added missing vector and matrix functionality:
* Vec/Mat.signum
* Vec/Mat.min2
* Vec/Mat.max2
* Vec/Mat.logistic
* Vec/Mat.relu
* Vec/Mat.softplus
* Vec/Mat.softsign
* Vec/Mat.log_sum_exp
2016-04-01: Minor release version 8.1.0:
* Added Vec.abs and Mat.abs (for real numbers for now)
2016-03-03: Minor release version 8.0.7:
* Fixed offset checking bugs
2016-02-24: Minor release version 8.0.6:
* Fixed Mat.of_diag matrix initialization bug
Thanks to Leonid Rozenberg for the patch.
2016-02-18: Minor release version 8.0.5:
* Fixed incorrect comments that made ocamldoc fail, thus
preventing the generation of API documentation
2016-02-14: Minor release version 8.0.4:
* Fixed a matrix bounds checking bug
* Fixed build issues for backward compatibility with
OCaml versions < 4.1
2016-02-12: Major release version 8.0.0:
* Added types Vec.t and Mat.t
* Changes to vector and matrix parameter checking
code, which should fix some corner case bugs and make the
checks more reusable.
* Added new vector functions
* sqr, sqrt, exp, log, sin, cos, tan, tanh
* zpxy, zmxy
* swap
* tan, tanh
* expm1, log1p
* Added new matrix functions
* of_list, to_list
* of_col_vecs_list, to_col_vecs_list
* laswp and lapmt
* neg, reci, sqr, sqrt, exp, log, sin, cos, tan, tanh
* cpab, cmab
* swap
* add, sub, mul, div
* ssqr_diff
* Replaced Mat.transpose with Mat.transpose_copy and changed
documented behavior
* Improved API of Mat.of_diag and Mat.copy_diag
* Miscellaneous bug fixes and improvements
2015-07-01: Fixed a bug in the complex version of Vec.ssqr_diff.
Thanks to Akinori Abe for the patch.
2015-06-30: Fixed Oasis-related linking problem (again).
Annoying, but Oasis still generates code that prevents proper
linking.
2015-06-29: Improved portability to some Linux-platforms.
Thanks to Akinori Abe for the patch.
2015-06-03: Fixed Oasis-related linking problem (again).
2015-05-31: Fixed offset calculation bugs for certain default argument
combinations.
Thanks to Chris Hardin <[email protected]> for the first
patch.
2015-03-16: Added support for the general Schur factorization for both real
and complex numbers:
* gees
Thanks to Florent Hoareau <[email protected]> for this
contribution.
2014-10-22: Fixed string handling for new OCaml version 4.02 (String/Bytes
modules). Requires new findlib version (>= 1.5).
2014-10-02: Improved separate compilation and executable sizes when compiling
with OCaml 4.02. Added some support for continuous integration
with Travis.
Thanks to Christophe Troestler <[email protected]>
for the improvements.
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 <[email protected]>
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 be rebuilt manually
before a release.
Added more examples from NAG (Numerical Algorithm Group):
http://www.nag.com/lapack-ex/node3.html
Thanks to Christophe Troestler <[email protected]>
for the examples and improvements.
2012-12-20: Fixed a bug in vector functions in the handling of offsets and
increments. Minor fixes and cleanups. Documentation improvements.
2012-11-09: Added new functions:
* Vec.{reci,exp,log,sin,cos} (for real numbers)
2012-07-20: Downgraded findlib version constraint to support the Debian
testing branch.
2012-07-15: Minor release version 7.0.2:
* Rewrote README in Markdown
* Added stricter compilation flags
* Fixed minor bugs discovered due to improved warnings
2012-06-11: 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 <[email protected]>
for most changes.
2012-02-28: Previous configuration bug fix did not work, but should 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 <[email protected]> for contributing
this function.
2011-06-25: Added new function:
* sbev
Thanks to Christophe Troestler <[email protected]>
for contributing this function.
2011-03-23: Greatly improved API documentation.
Thanks to Christophe Troestler <[email protected]>
for contributing this large patch.
Renamed a function for consistency. This breaks
backward-compatibility, but is 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 <[email protected]>
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 <[email protected]>
for contributing sygv.
* orgqr
* lauum
Added example for QR-factorization.
2009-09-09: Fixed 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 <[email protected]>
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 some 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 (for complex numbers)
* dotc (for complex numbers)
* ger (all numbers)
* lassq
* Mat.syrk_trace
* Mat.symm2_trace
Fixed some functions to allow for complex multipliers:
gemv, gbmv, symv, gemm, symm, trmm, syrk, syr2k.
Added new "stable" flag to Vec.sqr_nrm2 for over/underflow
protection.
Some 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 <[email protected]>
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 matrices by 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 ***
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 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 <[email protected]> for the patch.
2008-02-13: Fixed a bug when implicitly allocating result matrices
with user-specified offsets. It may cause segfaults and
affects a lot of functions (though infrequently so).
Thanks to Shun Sakuraba <[email protected]> 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 previous
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
<[email protected]> for reporting.
Greatly improved performance of matrix copying. Cleaned up
some code. Removed dependency on F2C library (gfortran
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, Lacaml did not account for that.
2006-07-24: Tightened parameter checks on functions that accept square
matrices 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 <[email protected]>
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).
Normalized, simplified, and documented API.
ATTENTION: THE ORDER OF VECTOR ARGUMENTS TO FUNCTION AXPY
HAS CHANGED, AND PARAMETER X HAS A LABEL. 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 <[email protected]> for
this contribution.
Added specific build rules for MacOS X. Thanks to Patrick
Cousot <[email protected]> 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 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 severe bugs (uninitialized data) in some 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 <[email protected]> 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"
is incompatible with external functions that make use of
`caml_enter_blocking_section`.
2004-08-01: New matrix function:
* map
Thanks to Liam Stewart <[email protected]> again for
his help.
2004-07-23: Major feature additions.
New LAPACK- and BLAS-functions (computational routines):
* syr, syrk
* lansy
* sytrf, sytrs, sytri, sycon
* getrs
* potrs
Thanks to Liam Stewart <[email protected]> again for this
major contribution.
2004-07-15: Major feature additions.
New LAPACK- and BLAS-functions (computational routines):
* gecon
* pocon
* gemm
* symm
* lange
* getrf
* getri
* potrf
* potri
Thanks to Liam Stewart <[email protected]> for this
major 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.
Interfaces to complex code (CZ) are not compatible.
Thanks to Liam Stewart <[email protected]> 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 some 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
<[email protected]>.
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 not 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.
Thanks to Christophe Troestler <[email protected]>
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: 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 the code compile in label mode.
2001-03-30: Added annotation "noalloc" to some functions.
This lets OCaml slightly improve efficiency of function calls.
2001-02-21: Updated README.
2001-02-20: Added checks for increment-parameters: this prevents segfaults if
the user passes invalid arguments.
Added new module "vec_SD.ml" and supplementary C-files for
(non-BLAS) vector operations. It 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 extendable.
2001-01-24: First release.