Skip to content

Commit c0d6dbb

Browse files
committed
Restore trace
1 parent 76f4237 commit c0d6dbb

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,6 @@ pub mod triangular;
6060
pub mod generate;
6161
pub mod assert;
6262
pub mod norm;
63+
pub mod trace;
6364

6465
pub mod prelude;

src/prelude.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11

2-
pub use types::*;
3-
pub use generate::*;
42
pub use assert::*;
3+
pub use generate::*;
4+
pub use types::*;
55

6-
pub use qr::*;
7-
pub use svd::*;
6+
pub use cholesky::*;
7+
pub use eigh::*;
8+
pub use norm::*;
89
pub use opnorm::*;
10+
pub use qr::*;
911
pub use solve::*;
10-
pub use eigh::*;
11-
pub use cholesky::*;
12+
pub use svd::*;
13+
pub use trace::*;
1214
pub use triangular::*;
13-
pub use norm::*;

src/trace.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
use ndarray::*;
3+
4+
use super::types::*;
5+
use super::error::*;
6+
use super::layout::*;
7+
8+
pub trait Trace {
9+
type Output;
10+
fn trace(&self) -> Result<Self::Output>;
11+
}
12+
13+
impl<A, S> Trace for ArrayBase<S, Ix2>
14+
where A: Field,
15+
S: Data<Elem = A>
16+
{
17+
type Output = A;
18+
19+
fn trace(&self) -> Result<Self::Output> {
20+
let (n, _) = self.square_layout()?.size();
21+
Ok((0..n as usize).map(|i| self[(i, i)]).sum())
22+
}
23+
}

0 commit comments

Comments
 (0)