Skip to content

Commit

Permalink
Merge branch 'master' into lapack
Browse files Browse the repository at this point in the history
  • Loading branch information
termoshtt committed Jul 2, 2020
2 parents f4e5e81 + cb4f764 commit 33d4b1a
Show file tree
Hide file tree
Showing 91 changed files with 836 additions and 759 deletions.
58 changes: 58 additions & 0 deletions .github/workflows/ndarray-linalg.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: ndarray-linalg

on:
push:
branches:
- master
pull_request: {}

jobs:
windows:
runs-on: windows-2019
steps:
- uses: actions/checkout@v1
- uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path=ndarray-linalg/Cargo.toml --features=intel-mkl --no-default-features

macos:
runs-on: macos-10.15
env:
CC: gcc-9
FC: gfortran-9
LIBRARY_PATH: /usr/local/opt/gcc/lib/gcc/9
strategy:
fail-fast: false
matrix:
feature:
- netlib
- openblas
- intel-mkl
steps:
- uses: actions/checkout@v1
- uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path=ndarray-linalg/Cargo.toml --features=${{ matrix.feature }} --no-default-features

linux:
runs-on: ubuntu-18.04
strategy:
fail-fast: false
matrix:
feature:
- netlib
- openblas
- intel-mkl
steps:
- uses: actions/checkout@v1
- name: apt-install gfortran
run: |
sudo apt update
sudo apt install -y gfortran
if: ${{ matrix.feature != 'intel-mkl' }}
- uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path=ndarray-linalg/Cargo.toml --features=${{ matrix.feature }} --no-default-features
50 changes: 0 additions & 50 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,56 +7,6 @@ on:
pull_request: {}

jobs:
windows:
runs-on: windows-2019
steps:
- uses: actions/checkout@v1
- uses: actions-rs/cargo@v1
with:
command: test
args: --features=intel-mkl --no-default-features

macos:
runs-on: macos-10.15
env:
CC: gcc-9
FC: gfortran-9
LIBRARY_PATH: /usr/local/opt/gcc/lib/gcc/9
strategy:
fail-fast: false
matrix:
feature:
- netlib
- openblas
- intel-mkl
steps:
- uses: actions/checkout@v1
- uses: actions-rs/cargo@v1
with:
command: test
args: --features=${{ matrix.feature }} --no-default-features

linux:
runs-on: ubuntu-18.04
strategy:
fail-fast: false
matrix:
feature:
- netlib
- openblas
- intel-mkl
steps:
- uses: actions/checkout@v1
- name: apt-install gfortran
run: |
sudo apt update
sudo apt install -y gfortran
if: ${{ matrix.feature != 'intel-mkl' }}
- uses: actions-rs/cargo@v1
with:
command: test
args: --features=${{ matrix.feature }} --no-default-features

check-format:
runs-on: ubuntu-18.04
steps:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated by Cargo
# will have compiled files and executables
/target/
target/
*.rustfmt
rusty-tags.*

Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Unreleased

Changed
--------
- Use thiserror crate https://github.com/rust-ndarray/ndarray-linalg/pull/208
- Fix for clippy, and add CI check https://github.com/rust-ndarray/ndarray-linalg/pull/205

0.12.1 - 28 June 2020
Expand Down
72 changes: 5 additions & 67 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,67 +1,5 @@
[package]
name = "ndarray-linalg"
version = "0.13.0-alpha.0"
authors = ["Toshiki Teramura <[email protected]>"]
edition = "2018"

description = "Linear algebra package for rust-ndarray using LAPACK"
documentation = "https://docs.rs/ndarray-linalg/"
repository = "https://github.com/rust-ndarray/ndarray-linalg"
keywords = ["ndarray", "lapack", "matrix"]
license = "MIT"
readme = "README.md"
categories = ["algorithms", "science"]

[features]
default = []
intel-mkl = ["lapack-src/intel-mkl", "blas-src/intel-mkl"]
netlib = ["lapack-src/netlib", "blas-src/netlib"]
openblas = ["lapack-src/openblas", "blas-src/openblas"]
serde-1 = ["ndarray/serde-1", "num-complex/serde"]

static = ["openblas-static"]
openblas-static = ["openblas", "openblas-src"]

[dependencies]
lapacke = "0.2.0"
num-traits = "0.2.11"
cauchy = "0.2.2"
num-complex = "0.2.4"
rand = "0.5"
lapack = "0.16.0"
blas = "0.20.0"

[dependencies.ndarray]
version = "0.13.0"
features = ["blas", "approx"]
default-features = false

[dependencies.blas-src]
version = "0.6.1"
default-features = false

[dependencies.lapack-src]
version = "0.6.0"
default-features = false

[dependencies.openblas-src]
version = "0.9.0"
default-features = false
features = ["static"]
optional = true

[dev-dependencies]
paste = "0.1.9"
criterion = "0.3.1"
approx = { version = "0.3.2", features = ["num-complex"] }

[[bench]]
name = "truncated_eig"
harness = false

[[bench]]
name = "eigh"
harness = false

[package.metadata.docs.rs]
rustdoc-args = ["--html-in-header", "katex-header.html"]
[workspace]
members = [
"ndarray-linalg",
"lax",
]
33 changes: 33 additions & 0 deletions lax/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[package]
name = "lax"
version = "0.1.0"
authors = ["Toshiki Teramura <[email protected]>"]
edition = "2018"

[features]
default = []
intel-mkl = ["lapack-src/intel-mkl", "blas-src/intel-mkl"]
netlib = ["lapack-src/netlib", "blas-src/netlib"]
openblas = ["lapack-src/openblas", "blas-src/openblas"]

[dependencies]
thiserror = "1"
cauchy = "0.2"
lapacke = "0.2.0"
num-traits = "0.2"
lapack = "0.16.0"
blas = "0.20.0"

[dependencies.blas-src]
version = "0.6.1"
default-features = false

[dependencies.lapack-src]
version = "0.6.0"
default-features = false

[dependencies.openblas-src]
version = "0.9.0"
default-features = false
features = ["static"]
optional = true
21 changes: 10 additions & 11 deletions src/lapack/cholesky.rs → lax/src/cholesky.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
//! Cholesky decomposition
use crate::error::*;
use crate::layout::MatrixLayout;
use crate::types::*;

use super::{into_result, UPLO};
use super::*;
use crate::{error::*, layout::MatrixLayout};
use cauchy::*;

pub trait Cholesky_: Sized {
/// Cholesky: wrapper of `*potrf`
Expand All @@ -25,14 +23,14 @@ macro_rules! impl_cholesky {
impl Cholesky_ for $scalar {
unsafe fn cholesky(l: MatrixLayout, uplo: UPLO, a: &mut [Self]) -> Result<()> {
let (n, _) = l.size();
let info = $trf(l.lapacke_layout(), uplo as u8, n, a, n);
into_result(info, ())
$trf(l.lapacke_layout(), uplo as u8, n, a, n).as_lapack_result()?;
Ok(())
}

unsafe fn inv_cholesky(l: MatrixLayout, uplo: UPLO, a: &mut [Self]) -> Result<()> {
let (n, _) = l.size();
let info = $tri(l.lapacke_layout(), uplo as u8, n, a, l.lda());
into_result(info, ())
$tri(l.lapacke_layout(), uplo as u8, n, a, l.lda()).as_lapack_result()?;
Ok(())
}

unsafe fn solve_cholesky(
Expand All @@ -44,8 +42,9 @@ macro_rules! impl_cholesky {
let (n, _) = l.size();
let nrhs = 1;
let ldb = 1;
let info = $trs(l.lapacke_layout(), uplo as u8, n, nrhs, a, l.lda(), b, ldb);
into_result(info, ())
$trs(l.lapacke_layout(), uplo as u8, n, nrhs, a, l.lda(), b, ldb)
.as_lapack_result()?;
Ok(())
}
}
};
Expand Down
19 changes: 9 additions & 10 deletions src/lapack/eig.rs → lax/src/eig.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
//! Eigenvalue decomposition for general matrices
use crate::{error::*, layout::MatrixLayout};
use cauchy::*;
use num_traits::Zero;

use crate::error::*;
use crate::layout::MatrixLayout;
use crate::types::*;

use super::into_result;

/// Wraps `*geev` for real/complex
pub trait Eig_: Scalar {
unsafe fn eig(
Expand All @@ -30,7 +26,7 @@ macro_rules! impl_eig_complex {
let mut w = vec![Self::Complex::zero(); n as usize];
let mut vl = Vec::new();
let mut vr = vec![Self::Complex::zero(); (n * n) as usize];
let info = $ev(
$ev(
l.lapacke_layout(),
b'N',
jobvr,
Expand All @@ -42,8 +38,9 @@ macro_rules! impl_eig_complex {
n,
&mut vr,
n,
);
into_result(info, (w, vr))
)
.as_lapack_result()?;
Ok((w, vr))
}
}
};
Expand Down Expand Up @@ -82,6 +79,7 @@ macro_rules! impl_eig_real {
.zip(wi.iter())
.map(|(&r, &i)| Self::Complex::new(r, i))
.collect();

// If the j-th eigenvalue is real, then
// eigenvector = [ vr[j], vr[j+n], vr[j+2*n], ... ].
//
Expand Down Expand Up @@ -121,7 +119,8 @@ macro_rules! impl_eig_real {
})
.collect();

into_result(info, (w, v))
info.as_lapack_result()?;
Ok((w, v))
}
}
};
Expand Down
11 changes: 6 additions & 5 deletions src/lapack/eigh.rs → lax/src/eigh.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
//! Eigenvalue decomposition for Symmetric/Hermite matrices
use super::*;
use crate::{error::*, layout::MatrixLayout, types::*};
use crate::{error::*, layout::MatrixLayout};
use cauchy::*;
use num_traits::Zero;

pub trait Eigh_: Scalar {
Expand Down Expand Up @@ -52,7 +53,7 @@ macro_rules! impl_eigh {
&mut info,
);
}
info.as_lapack_error()?;
info.as_lapack_result()?;
Ok(eigs)
}

Expand Down Expand Up @@ -86,7 +87,7 @@ macro_rules! impl_eigh {
&mut info,
);
}
info.as_lapack_error()?;
info.as_lapack_result()?;
Ok(eigs)
}
}
Expand Down Expand Up @@ -129,7 +130,7 @@ macro_rules! impl_eighc {
&mut info,
)
};
info.as_lapack_error()?;
info.as_lapack_result()?;
Ok(eigs)
}

Expand Down Expand Up @@ -166,7 +167,7 @@ macro_rules! impl_eighc {
&mut info,
)
};
info.as_lapack_error()?;
info.as_lapack_result()?;
Ok(eigs)
}
}
Expand Down
Loading

0 comments on commit 33d4b1a

Please sign in to comment.