Thread overview
Lubeck: Hight Level Linear Algebra for Dlang
Jun 13
9il
Jun 15
Nordlöw
Jun 15
Nordlöw
Jun 15
jmh530
Jun 15
Nordlöw
June 13
Hi

I am pleased to announce the Lubeck [1] linear algebra library for Dlang.
It is very easy to use and it has been tested in real world.

See the dub project example [9] to start. libblas, libcblas, and liblapack should be installed and defined in user's DUB configuration. Alternatively, user can install and link OpenBLAS, Apple Accelerate, ATLAS, or Intel MKL libraries.

The following functionality is implemented:

1. `mtimes` - General matrix-matrix, row-matrix, matrix-column, and row-column multiplications.

2. `mldivide` - Solve systems of linear equations AX = B for X. Computes minimum-norm solution to a linear least squares problem
if A is not a square matrix.

3. `inv` - Inverse of matrix.

4. `svd` - Singular value decomposition.

5. `pca` - Principal component analysis of raw data.

6. `pinv` - Moore-Penrose pseudoinverse of matrix.

7. `det`/`detSymmetric` - General/symmetric matrix determinant.

8. `eigSymmetric` - Eigenvalues and eigenvectors of symmetric matrix.


The package depends on mir-blas, mir-lapack, and mir-algorithm.

The dependency structure is:

---------------------------
cblas         ->
                   > mir-blas   ->
mir-algorithm ->                     > Lubeck
                   > mir-lapack ->
lapack        ->
---------------------------

cblas [2] and lapack [3] are plain D headers for CBLAS and LAPACK.

mir-blas [4] and mir-lapack [5] are minimal generic betterC NDSlice[6] wrappers for BLAS and LAPACK.

This work has been sponsored by Symmetry Investments[7] and Kaleidic Associates[8].

[1] http://code.dlang.org/packages/lubeck
[2] http://code.dlang.org/packages/cblas
[3] http://code.dlang.org/packages/lapack
[4] http://code.dlang.org/packages/mir-blas
[5] http://code.dlang.org/packages/mir-lapack
[6] http://code.dlang.org/packages/mir-algorithm
[7] http://symmetryinvestments.com/
[8] https://github.com/kaleidicassociates
[9] https://github.com/kaleidicassociates/lubeck/tree/master/example

Best regards,
Ilya

June 15
On Tuesday, 13 June 2017 at 08:26:20 UTC, 9il wrote:
> [1] http://code.dlang.org/packages/lubeck
> https://github.com/kaleidicassociates/lubeck/tree/master/example

Nice.

Will there be any matrix, vector, scalar, types with operator overloads?
June 15
On Thursday, 15 June 2017 at 12:22:25 UTC, Nordlöw wrote:
> On Tuesday, 13 June 2017 at 08:26:20 UTC, 9il wrote:
>> [1] http://code.dlang.org/packages/lubeck
>> https://github.com/kaleidicassociates/lubeck/tree/master/example
>
> Nice.
>
> Will there be any matrix, vector, scalar, types with operator overloads?

I'm guessing such a solution is not generic enough partly because D cannot define non-member operator overloads and partly because the algorithms operates on ranges.
June 15
On Thursday, 15 June 2017 at 13:44:33 UTC, Nordlöw wrote:
> On Thursday, 15 June 2017 at 12:22:25 UTC, Nordlöw wrote:
>> On Tuesday, 13 June 2017 at 08:26:20 UTC, 9il wrote:
>>> [1] http://code.dlang.org/packages/lubeck
>>> https://github.com/kaleidicassociates/lubeck/tree/master/example
>>
>> Nice.
>>
>> Will there be any matrix, vector, scalar, types with operator overloads?
>
> I'm guessing such a solution is not generic enough partly because D cannot define non-member operator overloads and partly because the algorithms operates on ranges.

mir.ndslice.slice has CanonicalMatrix/ContinguousMatrix, and similar versions for vectors and tensors and all the algorithms that operate on ranges in mir seem to work fine with them.

Ilya has expressed his intention in the past for higher level abstractions on mir, including operator overloading. I brought up the operator overloading issue on the gradient descent thread:
https://forum.dlang.org/post/ohjsuphzuapaxktgwfsp@forum.dlang.org
June 15
On Thursday, 15 June 2017 at 14:23:29 UTC, jmh530 wrote:
> mir.ndslice.slice has CanonicalMatrix/ContinguousMatrix, and similar versions for vectors and tensors and all the algorithms that operate on ranges in mir seem to work fine with them.
>
> Ilya has expressed his intention in the past for higher level abstractions on mir, including operator overloading. I brought up the operator overloading issue on the gradient descent thread:
> https://forum.dlang.org/post/ohjsuphzuapaxktgwfsp@forum.dlang.org

Thanks.
June 17
On Tuesday, 13 June 2017 at 08:26:20 UTC, 9il wrote:
> Hi
>
> I am pleased to announce the Lubeck [1] linear algebra library for Dlang.
> It is very easy to use and it has been tested in real world.
>
> The following functionality is implemented:
>
> 1. `mtimes` - General matrix-matrix, row-matrix, matrix-column, and row-column multiplications.
>
> 2. `mldivide` - Solve systems of linear equations AX = B for X. Computes minimum-norm solution to a linear least squares problem
> if A is not a square matrix.
>
> 3. `inv` - Inverse of matrix.
>
> 4. `svd` - Singular value decomposition.
>
> 5. `pca` - Principal component analysis of raw data.
>
> 6. `pinv` - Moore-Penrose pseudoinverse of matrix.
>
> 7. `det`/`detSymmetric` - General/symmetric matrix determinant.
>
> 8. `eigSymmetric` - Eigenvalues and eigenvectors of symmetric matrix.
>
>
> The package depends on mir-blas, mir-lapack, and mir-algorithm.

> This work has been sponsored by Symmetry Investments[7] and Kaleidic Associates[8].
>
> Best regards,
> Ilya

This is great news! as I said in a previous discussion (https://forum.dlang.org/post/nrbcrpnvcrlqvpqholuv@forum.dlang.org) a library like this is pretty important for numerical computing in D and together with Mir can form the basis of implementing algorithms for a myriad of applications in analysis.

Many thanks to all those involved!