Skip to content

Commit 875cc9d

Browse files
authored
Merge pull request #262 from rust-ndarray/release-0.13.0
Ready for release 0.13.0
2 parents 1e4ee3e + f17918c commit 875cc9d

File tree

7 files changed

+155
-78
lines changed

7 files changed

+155
-78
lines changed

CHANGELOG.md

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,53 @@
1-
Unreleased (will be 0.13.0)
2-
==========================
1+
Unreleased
2+
-----------
3+
4+
0.13.0 - 20 Feb 2021
5+
=====================
36

47
https://github.com/rust-ndarray/ndarray-linalg/milestone/5
58

9+
Updated dependencies
10+
---------------------
11+
- ndarray 0.14 https://github.com/rust-ndarray/ndarray-linalg/pull/258
12+
- cauchy 0.3.0 (num-complex 0.3.1, rand 0.7.3), lapack 0.17.0 https://github.com/rust-ndarray/ndarray-linalg/pull/260
13+
14+
### optional dependencies
15+
16+
- openblas-src 0.10.2 https://github.com/rust-ndarray/ndarray-linalg/pull/253
17+
- intel-mkl-src 0.6.0 https://github.com/rust-ndarray/ndarray-linalg/pull/204
18+
619
Added
720
------
821
- Split out `ndarray_linalg::lapack` as "lax" crate https://github.com/rust-ndarray/ndarray-linalg/pull/207
922
- cargo-workspace https://github.com/rust-ndarray/ndarray-linalg/pull/209
1023

1124
Changed
1225
--------
26+
- Dual license, MIT or Apache-2.0 License https://github.com/rust-ndarray/ndarray-linalg/pull/262
1327
- Revise tests for least-square problem https://github.com/rust-ndarray/ndarray-linalg/pull/227
14-
- New features for static linking https://github.com/rust-ndarray/ndarray-linalg/pull/204
15-
- intel-mkl-src 0.6.0+mkl2020.1
16-
- Drop LAPACKE dependence https://github.com/rust-ndarray/ndarray-linalg/pull/206
17-
- Cholesky https://github.com/rust-ndarray/ndarray-linalg/pull/225
18-
- Eigenvalue for general matrix https://github.com/rust-ndarray/ndarray-linalg/pull/212
19-
- Eigenvalue for symmetric/Hermitian matrix https://github.com/rust-ndarray/ndarray-linalg/pull/217
20-
- least squares problem https://github.com/rust-ndarray/ndarray-linalg/pull/220
21-
- QR decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/224
22-
- LU decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/213
23-
- LDL decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/216
24-
- SVD https://github.com/rust-ndarray/ndarray-linalg/pull/218
25-
- SVD divid-and-conquer https://github.com/rust-ndarray/ndarray-linalg/pull/219
26-
- Tridiagonal https://github.com/rust-ndarray/ndarray-linalg/pull/235
27-
- Named struct for `MatrixLayout` https://github.com/rust-ndarray/ndarray-linalg/pull/211
28+
- Support static link to LAPACK backend https://github.com/rust-ndarray/ndarray-linalg/pull/204
29+
- Drop LAPACKE dependence, and rewrite them in Rust (see below) https://github.com/rust-ndarray/ndarray-linalg/pull/206
30+
- Named record like `C { row: i32, lda: i32 }` instead of enum for `MatrixLayout` https://github.com/rust-ndarray/ndarray-linalg/pull/211
2831
- Split LAPACK error into computational failure and invalid values https://github.com/rust-ndarray/ndarray-linalg/pull/210
2932
- Use thiserror crate https://github.com/rust-ndarray/ndarray-linalg/pull/208
30-
- Fix for clippy, and add CI check https://github.com/rust-ndarray/ndarray-linalg/pull/205
33+
34+
### LAPACKE rewrite
35+
36+
- Cholesky https://github.com/rust-ndarray/ndarray-linalg/pull/225
37+
- Eigenvalue for general matrix https://github.com/rust-ndarray/ndarray-linalg/pull/212
38+
- Eigenvalue for symmetric/Hermitian matrix https://github.com/rust-ndarray/ndarray-linalg/pull/217
39+
- least squares problem https://github.com/rust-ndarray/ndarray-linalg/pull/220
40+
- QR decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/224
41+
- LU decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/213
42+
- LDL decomposition https://github.com/rust-ndarray/ndarray-linalg/pull/216
43+
- SVD https://github.com/rust-ndarray/ndarray-linalg/pull/218
44+
- SVD divid-and-conquer https://github.com/rust-ndarray/ndarray-linalg/pull/219
45+
- Tridiagonal https://github.com/rust-ndarray/ndarray-linalg/pull/235
3146

3247
Maintenance
3348
-----------
3449
- Coverage report using codecov https://github.com/rust-ndarray/ndarray-linalg/pull/215
50+
- Fix for clippy, and add CI check https://github.com/rust-ndarray/ndarray-linalg/pull/205
3551

3652
0.12.1 - 28 June 2020
3753
======================

LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

LICENSE.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# License
2+
3+
The project is dual licensed under the terms of the Apache License, Version 2.0,
4+
and the MIT License. You may obtain copies of the two licenses at
5+
6+
* https://www.apache.org/licenses/LICENSE-2.0 and
7+
* https://opensource.org/licenses/MIT, respectively.
8+
9+
The following two notices apply to every file of the project.
10+
11+
## The Apache License
12+
13+
```
14+
Copyright 2016 The ndarray-linalg Developers
15+
16+
Licensed under the Apache License, Version 2.0 (the “License”); you may not use
17+
this file except in compliance with the License. You may obtain a copy of the
18+
License at
19+
20+
http://www.apache.org/licenses/LICENSE-2.0
21+
22+
Unless required by applicable law or agreed to in writing, software distributed
23+
under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR
24+
CONDITIONS OF ANY KIND, either express or implied. See the License for the
25+
specific language governing permissions and limitations under the License.
26+
```
27+
28+
## The MIT License
29+
30+
```
31+
Copyright 2016 The ndarray-linalg Developers
32+
33+
Permission is hereby granted, free of charge, to any person obtaining a copy of
34+
this software and associated documentation files (the “Software”), to deal in
35+
the Software without restriction, including without limitation the rights to
36+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
37+
the Software, and to permit persons to whom the Software is furnished to do so,
38+
subject to the following conditions:
39+
40+
The above copyright notice and this permission notice shall be included in all
41+
copies or substantial portions of the Software.
42+
43+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
45+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
46+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
47+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
48+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49+
```

README.md

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ ndarray-linalg
33
[![Crate](http://meritbadge.herokuapp.com/ndarray-linalg)](https://crates.io/crates/ndarray-linalg)
44
[![docs.rs](https://docs.rs/ndarray-linalg/badge.svg)](https://docs.rs/ndarray-linalg)
55

6-
Linear algebra package for Rust with [ndarray](https://github.com/bluss/ndarray) based on external LAPACK implementations.
6+
Linear algebra package for Rust with [ndarray](https://github.com/rust-ndarray/ndarray) based on external LAPACK implementations.
77

88
Examples
99
---------
@@ -22,34 +22,45 @@ and run all tests of ndarray-linalg with OpenBLAS
2222
cargo test --features=openblas
2323
```
2424

25-
BLAS/LAPACK Backend
26-
-------------------
25+
Backend Features
26+
-----------------
2727

28-
Three BLAS/LAPACK implementations are supported:
28+
There are three LAPACK source crates:
2929

30-
- [OpenBLAS](https://github.com/cmr/openblas-src)
31-
- needs `gfortran` (or other Fortran compiler)
32-
- [Netlib](https://github.com/cmr/netlib-src)
33-
- needs `cmake` and `gfortran`
34-
- [Intel MKL](https://github.com/termoshtt/rust-intel-mkl) (non-free license, see the linked page)
30+
- [openblas-src](https://github.com/blas-lapack-rs/openblas-src)
31+
- [netlib-src](https://github.com/blas-lapack-rs/netlib-src)
32+
- [intel-mkl-src](https://github.com/rust-math/rust-intel-mkl)
3533

36-
There are three features corresponding to the backend implementations (`openblas` / `netlib` / `intel-mkl`):
34+
`ndarray_linalg` must link **just one** of them for LAPACK FFI.
3735

3836
```toml
3937
[dependencies]
40-
ndarray = "0.13"
41-
ndarray-linalg = { version = "0.12", features = ["openblas"] }
38+
ndarray = "0.14"
39+
ndarray-linalg = { version = "0.13", features = ["openblas-static"] }
4240
```
4341

44-
### Tested Environments
42+
Supported features are following:
4543

46-
|Backend | Linux | Windows | macOS |
47-
|:--------|:-----:|:-------:|:-----:|
48-
|OpenBLAS |✔️ |- |- |
49-
|Netlib |✔️ |- |- |
50-
|Intel MKL|✔️ |✔️ |✔️ |
44+
| Feature | Link type | Requirements | Description |
45+
|:-----------------|:---------------|:--------------------|:-----------------------------------------------------------------------------------------------|
46+
| openblas-static | static | gcc, gfortran, make | Build OpenBLAS in your project, and link it statically |
47+
| openblas-system | dynamic/static | libopenblas-dev | Seek OpenBLAS in system, and link it |
48+
| netlib-static | static | gfortran, make | Same as openblas-static except for using reference LAPACK |
49+
| netlib-system | dynamic/static | liblapack-dev | Same as openblas-system except for using reference LAPACK |
50+
| intel-mkl-static | static | (pkg-config) | Seek static library of Intel MKL from system, or download if not found, and link it statically |
51+
| intel-mkl-system | dynamic | (pkg-config) | Seek shared library of Intel MKL from system, and link it dynamically |
52+
53+
- You must use **just one** feature of them.
54+
- `dynamic/static` means it depends on what is found in the system. When the system has `/usr/lib/libopenblas.so`, it will be linked dynamically, and `/usr/lib/libopenblas.a` will be linked statically. Dynamic linking is prior to static linking.
55+
- Requirements notices:
56+
- `gcc` and `gfortran` can be another compiler, e.g. `icc` and `ifort`.
57+
- `libopenblas-dev` is package name in Debian, Ubuntu, and other derived distributions.
58+
There are several binary packages of OpenBLAS, i.e. `libopenblas-{openmp,pthread,serial}-dev`.
59+
It can be other names in other distributions, e.g. Fedora, ArchLinux, and so on.
60+
- `pkg-config` is used for searching Intel MKL packages in system, and it is optional. See [intel-mkl-src/README.md](https://github.com/rust-math/intel-mkl-src/blob/master/README.md#how-to-find-system-mkl-libraries) for detail.
61+
62+
### For library developer
5163

52-
### For librarian
5364
If you creating a library depending on this crate, we encourage you not to link any backend:
5465

5566
```toml
@@ -58,25 +69,21 @@ ndarray = "0.13"
5869
ndarray-linalg = "0.12"
5970
```
6071

61-
### Link backend crate manually
62-
For the sake of linking flexibility, you can provide LAPACKE implementation (as an `extern crate`) yourself.
63-
You should link a LAPACKE implementation to a final crate (like binary executable or dylib) only, not to a Rust library.
72+
The cargo's feature is additive. If your library (saying `lib1`) set a feature `openblas-static`,
73+
the application using `lib1` builds ndarray_linalg with `openblas-static` feature though they want to use `intel-mkl-static` backend.
6474

65-
```toml
66-
[dependencies]
67-
ndarray = "0.13"
68-
ndarray-linalg = "0.12"
69-
openblas-src = "0.7" # or another backend of your choice
75+
See [the cargo reference](https://doc.rust-lang.org/cargo/reference/features.html) for detail
7076

71-
```
77+
Tested Environments
78+
--------------------
7279

73-
You must add `extern crate` to your code in this case:
80+
Only x86_64 system is supported currently.
7481

75-
```rust
76-
extern crate ndarray;
77-
extern crate ndarray_linalg;
78-
extern crate openblas_src; // or another backend of your choice
79-
```
82+
|Backend | Linux | Windows | macOS |
83+
|:--------|:-----:|:-------:|:-----:|
84+
|OpenBLAS |✔️ |- |- |
85+
|Netlib |✔️ |- |- |
86+
|Intel MKL|✔️ |✔️ |✔️ |
8087

8188
Generate document with KaTeX
8289
------------------------------
@@ -96,3 +103,13 @@ rustdocflags = ["--html-in-header", "katex-header.html"]
96103
```
97104

98105
But, be sure that this works only for `--no-deps`. `cargo doc` will fail with this `.cargo/config`.
106+
107+
License
108+
--------
109+
110+
**CAUTION** Be sure that if you use `intel-mkl-src` backend, you have to accept [Intel Simplified Software License](https://software.intel.com/content/www/us/en/develop/articles/end-user-license-agreement.html)
111+
in addition to the MIT-License or Apache-2.0 License.
112+
113+
Dual-licensed to be compatible with the Rust project.
114+
Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option.
115+

lax/Cargo.toml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ version = "0.1.0"
44
authors = ["Toshiki Teramura <[email protected]>"]
55
edition = "2018"
66

7+
description = "LAPACK wrapper without ndarray"
8+
documentation = "https://docs.rs/lax/"
9+
repository = "https://github.com/rust-ndarray/ndarray-linalg"
10+
keywords = ["lapack", "matrix"]
11+
license = "MIT OR Apache-2.0"
12+
readme = "README.md"
13+
categories = ["algorithms", "science"]
14+
715
[features]
816
default = []
917

@@ -21,10 +29,10 @@ intel-mkl-static = ["intel-mkl-src/mkl-static-lp64-seq", "intel-mkl-src/download
2129
intel-mkl-system = ["intel-mkl-src/mkl-dynamic-lp64-seq"]
2230

2331
[dependencies]
24-
thiserror = "1.0"
32+
thiserror = "1.0.23"
2533
cauchy = "0.3.0"
26-
num-traits = "0.2"
27-
lapack = { version = "0.17.0", git = "http://github.com/blas-lapack-rs/lapack" }
34+
num-traits = "0.2.14"
35+
lapack = "0.17.0"
2836

2937
[dependencies.intel-mkl-src]
3038
version = "0.6.0"

lax/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Linear Algebra eXtension (LAX)
2+
===============================
3+
4+
ndarray-free safe Rust wrapper for LAPACK FFI for implementing ndarray-linalg crate.
5+
This crate responsibles for
6+
7+
- Linking to LAPACK shared/static libraries
8+
- Dispatching to LAPACK routines based on scalar types by using `Lapack` trait

ndarray-linalg/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
[package]
22
name = "ndarray-linalg"
3-
version = "0.13.0-alpha.0"
3+
version = "0.13.0"
44
authors = ["Toshiki Teramura <[email protected]>"]
55
edition = "2018"
66

77
description = "Linear algebra package for rust-ndarray using LAPACK"
88
documentation = "https://docs.rs/ndarray-linalg/"
99
repository = "https://github.com/rust-ndarray/ndarray-linalg"
1010
keywords = ["ndarray", "lapack", "matrix"]
11-
license = "MIT"
12-
readme = "README.md"
11+
license = "MIT OR Apache-2.0"
12+
readme = "../README.md"
1313
categories = ["algorithms", "science"]
1414

1515
[features]

0 commit comments

Comments
 (0)