Struct ha_ndarray::ArrayBase

source ·
pub struct ArrayBase<Buf> { /* private fields */ }

Implementations§

source§

impl<Buf> ArrayBase<Buf>

source

pub fn into_inner(self) -> Buf

source§

impl<T: CDatatype> ArrayBase<Vec<T>>

source

pub fn new(shape: Shape, data: Vec<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Vec<T> ) -> Result<Self, Error>

Examples found in repository?
examples/benchmarks.rs (lines 15-19)
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
fn broadcast_and_multiply(context: &Context) -> Result<(), Error> {
    for m in 0..4 {
        let dim = 10usize.pow(m);
        let shape = vec![3, dim, 5, 10];
        let size = shape.iter().product::<usize>();
        let queue = Queue::new(context.clone(), size)?;

        let left = ArrayBase::<Vec<_>>::with_context(
            context.clone(),
            vec![dim, 5, 10],
            vec![1.0f64; dim * 5 * 10],
        )?;

        let right = ArrayBase::<Vec<_>>::with_context(
            context.clone(),
            vec![3, dim, 1, 10],
            vec![1.0f64; 3 * dim * 10],
        )?;

        println!(
            "broadcast and multiply {:?} and {:?} (size {})...",
            left, right, size
        );

        let product = left.broadcast(shape.to_vec())? * right.broadcast(shape)?;

        for _ in 0..ITERATIONS {
            let start = Instant::now();
            product.read(&queue)?;
            let duration = start.elapsed();
            println!("{:?} us", duration.as_micros());
        }
    }

    Ok(())
}

fn matmul(context: &Context) -> Result<(), Error> {
    for m in 1..16usize {
        let dim = 2usize.pow(m as u32);

        let l = ArrayBase::<Vec<_>>::with_context(
            context.clone(),
            vec![16 * m, dim],
            vec![1.0f32; 16 * m * dim],
        )?;

        let r = ArrayBase::<Vec<_>>::with_context(
            context.clone(),
            vec![dim, m * 32],
            vec![1.0f32; dim * m * 32],
        )?;

        let num_ops = 16 * 32 * dim;
        println!("matmul {:?} with {:?} ({} ops)", l, r, num_ops);

        let x = l.matmul(r)?;
        let queue = Queue::new(context.clone(), x.size())?;

        for _ in 0..ITERATIONS {
            let start = Instant::now();
            let _output = x.read(&queue)?;
            let duration = start.elapsed();
            let rate = num_ops as f32 / duration.as_secs_f32();
            println!("{:?} us @ {} M/s", duration.as_micros(), rate / 1_000_000.);
        }
    }

    Ok(())
}

fn reduce_sum_axis(context: &Context) -> Result<(), Error> {
    let shape = vec![10, 20, 30, 40, 50];
    let size = shape.iter().product();
    let queue = Queue::new(context.clone(), size)?;
    let x = ArrayBase::<Vec<_>>::with_context(context.clone(), shape, vec![1; size])?;

    println!("reduce axis {} of {:?} (size {})", 2, x, x.size());

    let reduced = x.sum(vec![2], false)?;

    for _ in 0..ITERATIONS {
        let start = Instant::now();
        let _output = reduced.read(&queue)?;
        let duration = start.elapsed();
        println!("{:?} ms", duration.as_millis());
    }

    Ok(())
}

fn reduce_sum_all(context: &Context) -> Result<(), Error> {
    for m in 2..8 {
        let shape = (1..m).map(|dim| dim * 10).collect::<Vec<usize>>();
        let size = shape.iter().product();
        let x = ArrayBase::<Arc<Vec<_>>>::with_context(
            context.clone(),
            shape,
            Arc::new(vec![1; size]),
        )?;

        println!("reduce {:?} (size {})...", x, x.size());

        for _ in 0..ITERATIONS {
            let start = Instant::now();
            let _x = x.clone().sum_all()?;
            let duration = start.elapsed();
            println!("{:?} us", duration.as_micros());
        }
    }

    Ok(())
}

fn transpose(context: &Context) -> Result<(), Error> {
    let shape = vec![10, 20, 30, 40, 50];
    let size = shape.iter().product();
    let permutation = vec![2, 4, 3, 0, 1];

    let queue = Queue::new(context.clone(), size)?;
    let x = ArrayBase::<Vec<_>>::with_context(context.clone(), shape, vec![1; size])?;

    println!("transpose axes {permutation:?} of {x:?}...");

    let transposed = x.transpose(Some(permutation))?;
    for _ in 0..ITERATIONS {
        let start = Instant::now();
        transposed.read(&queue)?;
        let duration = start.elapsed();
        println!("{:?} ms", duration.as_millis());
    }

    Ok(())
}
source§

impl<T: CDatatype> ArrayBase<Arc<Vec<T>>>

source

pub fn new(shape: Shape, data: Arc<Vec<T>>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Arc<Vec<T>> ) -> Result<Self, Error>

Examples found in repository?
examples/benchmarks.rs (lines 103-107)
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
fn reduce_sum_all(context: &Context) -> Result<(), Error> {
    for m in 2..8 {
        let shape = (1..m).map(|dim| dim * 10).collect::<Vec<usize>>();
        let size = shape.iter().product();
        let x = ArrayBase::<Arc<Vec<_>>>::with_context(
            context.clone(),
            shape,
            Arc::new(vec![1; size]),
        )?;

        println!("reduce {:?} (size {})...", x, x.size());

        for _ in 0..ITERATIONS {
            let start = Instant::now();
            let _x = x.clone().sum_all()?;
            let duration = start.elapsed();
            println!("{:?} us", duration.as_micros());
        }
    }

    Ok(())
}
source§

impl<T: CDatatype> ArrayBase<Buffer<T>>

source

pub fn new(shape: Shape, data: Buffer<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Buffer<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<Buffer<T>>>

source

pub fn new(shape: Shape, data: Arc<Buffer<T>>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Arc<Buffer<T>> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Vec<T>>>>

source

pub fn new(shape: Shape, data: Vec<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Vec<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Buffer<T>>>>

source

pub fn new(shape: Shape, data: Buffer<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Buffer<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Vec<T>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

source

pub fn as_slice(&self) -> &[T]

source§

impl<T: CDatatype> ArrayBase<Arc<Vec<T>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

source

pub fn as_slice(&self) -> &[T]

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Vec<T>>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Buffer<T>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Examples found in repository?
examples/backprop.rs (line 32)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
fn main() -> Result<(), Error> {
    let context = Context::default()?;
    let weights = RandomNormal::with_context(context.clone(), 2)?;
    let weights = ArrayOp::new(vec![2, 1], weights) - 0.5;
    let mut weights = ArrayBase::<Arc<RwLock<Buffer<f32>>>>::copy(&weights)?;

    let inputs = RandomUniform::with_context(context, vec![NUM_EXAMPLES, 2])?;
    let inputs = ArrayOp::new(vec![NUM_EXAMPLES, 2], inputs) * 2.;
    let inputs = ArrayBase::<Arc<Buffer<f32>>>::copy(&inputs)?;

    let inputs_bool = inputs.clone().lt_scalar(1.0)?;

    let inputs_left = inputs_bool
        .clone()
        .slice(vec![(0..NUM_EXAMPLES).into(), 0.into()])?;

    let inputs_right = inputs_bool.slice(vec![(0..NUM_EXAMPLES).into(), 1.into()])?;

    let labels = inputs_left
        .and(inputs_right)?
        .expand_dims(vec![1])?
        .cast()?;

    let labels = ArrayBase::<Buffer<f32>>::copy(&labels)?;

    let output = inputs.matmul(weights.clone())?;
    let error = labels.sub(output)?;
    let loss = error.clone().pow_scalar(2.)?;

    let d_loss = error * 2.;
    let weights_t = weights.clone().transpose(None)?;
    let gradient = d_loss.matmul(weights_t)?;
    let deltas = gradient.sum(vec![0], false)?.expand_dims(vec![1])?;
    let new_weights = weights.clone().add(deltas * LEARNING_RATE)?;

    let mut i = 0;
    loop {
        let loss = ArrayBase::<Buffer<f32>>::copy(&loss)?;

        if loss.clone().lt_scalar(1.0)?.all()? {
            return Ok(());
        }

        if i % 100 == 0 {
            println!(
                "loss: {} (max {})",
                loss.clone().sum_all()?,
                loss.clone().max_all()?
            );
        }

        assert!(!loss.clone().is_inf()?.any()?, "divergence at iteration {i}");
        assert!(!loss.is_nan()?.any()?, "unstable by iteration {i}");

        weights.write(&new_weights)?;

        i += 1;
    }
}
source§

impl<T: CDatatype> ArrayBase<Arc<Buffer<T>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Examples found in repository?
examples/backprop.rs (line 17)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
fn main() -> Result<(), Error> {
    let context = Context::default()?;
    let weights = RandomNormal::with_context(context.clone(), 2)?;
    let weights = ArrayOp::new(vec![2, 1], weights) - 0.5;
    let mut weights = ArrayBase::<Arc<RwLock<Buffer<f32>>>>::copy(&weights)?;

    let inputs = RandomUniform::with_context(context, vec![NUM_EXAMPLES, 2])?;
    let inputs = ArrayOp::new(vec![NUM_EXAMPLES, 2], inputs) * 2.;
    let inputs = ArrayBase::<Arc<Buffer<f32>>>::copy(&inputs)?;

    let inputs_bool = inputs.clone().lt_scalar(1.0)?;

    let inputs_left = inputs_bool
        .clone()
        .slice(vec![(0..NUM_EXAMPLES).into(), 0.into()])?;

    let inputs_right = inputs_bool.slice(vec![(0..NUM_EXAMPLES).into(), 1.into()])?;

    let labels = inputs_left
        .and(inputs_right)?
        .expand_dims(vec![1])?
        .cast()?;

    let labels = ArrayBase::<Buffer<f32>>::copy(&labels)?;

    let output = inputs.matmul(weights.clone())?;
    let error = labels.sub(output)?;
    let loss = error.clone().pow_scalar(2.)?;

    let d_loss = error * 2.;
    let weights_t = weights.clone().transpose(None)?;
    let gradient = d_loss.matmul(weights_t)?;
    let deltas = gradient.sum(vec![0], false)?.expand_dims(vec![1])?;
    let new_weights = weights.clone().add(deltas * LEARNING_RATE)?;

    let mut i = 0;
    loop {
        let loss = ArrayBase::<Buffer<f32>>::copy(&loss)?;

        if loss.clone().lt_scalar(1.0)?.all()? {
            return Ok(());
        }

        if i % 100 == 0 {
            println!(
                "loss: {} (max {})",
                loss.clone().sum_all()?,
                loss.clone().max_all()?
            );
        }

        assert!(!loss.clone().is_inf()?.any()?, "divergence at iteration {i}");
        assert!(!loss.is_nan()?.any()?, "unstable by iteration {i}");

        weights.write(&new_weights)?;

        i += 1;
    }
}
source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Buffer<T>>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Examples found in repository?
examples/backprop.rs (line 13)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
fn main() -> Result<(), Error> {
    let context = Context::default()?;
    let weights = RandomNormal::with_context(context.clone(), 2)?;
    let weights = ArrayOp::new(vec![2, 1], weights) - 0.5;
    let mut weights = ArrayBase::<Arc<RwLock<Buffer<f32>>>>::copy(&weights)?;

    let inputs = RandomUniform::with_context(context, vec![NUM_EXAMPLES, 2])?;
    let inputs = ArrayOp::new(vec![NUM_EXAMPLES, 2], inputs) * 2.;
    let inputs = ArrayBase::<Arc<Buffer<f32>>>::copy(&inputs)?;

    let inputs_bool = inputs.clone().lt_scalar(1.0)?;

    let inputs_left = inputs_bool
        .clone()
        .slice(vec![(0..NUM_EXAMPLES).into(), 0.into()])?;

    let inputs_right = inputs_bool.slice(vec![(0..NUM_EXAMPLES).into(), 1.into()])?;

    let labels = inputs_left
        .and(inputs_right)?
        .expand_dims(vec![1])?
        .cast()?;

    let labels = ArrayBase::<Buffer<f32>>::copy(&labels)?;

    let output = inputs.matmul(weights.clone())?;
    let error = labels.sub(output)?;
    let loss = error.clone().pow_scalar(2.)?;

    let d_loss = error * 2.;
    let weights_t = weights.clone().transpose(None)?;
    let gradient = d_loss.matmul(weights_t)?;
    let deltas = gradient.sum(vec![0], false)?.expand_dims(vec![1])?;
    let new_weights = weights.clone().add(deltas * LEARNING_RATE)?;

    let mut i = 0;
    loop {
        let loss = ArrayBase::<Buffer<f32>>::copy(&loss)?;

        if loss.clone().lt_scalar(1.0)?.all()? {
            return Ok(());
        }

        if i % 100 == 0 {
            println!(
                "loss: {} (max {})",
                loss.clone().sum_all()?,
                loss.clone().max_all()?
            );
        }

        assert!(!loss.clone().is_inf()?.any()?, "divergence at iteration {i}");
        assert!(!loss.is_nan()?.any()?, "unstable by iteration {i}");

        weights.write(&new_weights)?;

        i += 1;
    }
}

Trait Implementations§

source§

impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T, LB, RB> Add<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayOp<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArraySlice<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayView<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Add<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: T) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype> AsBuffer for ArrayBase<Buffer<T>>

source§

fn as_buffer(&self) -> BufferConverter<'_, Self::DType>

source§

fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>

source§

impl<T: CDatatype> AsBuffer for ArrayBase<Vec<T>>

source§

fn as_buffer(&self) -> BufferConverter<'_, Self::DType>

source§

fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>

source§

impl<Buf: Clone> Clone for ArrayBase<Buf>

source§

fn clone(&self) -> ArrayBase<Buf>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<Buf: BufferInstance> Debug for ArrayBase<Buf>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T, LB, RB> Div<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayOp<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArraySlice<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayView<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Div<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: T) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype> From<ArrayBase<Arc<Buffer<T>, Global>>> for Array<T>

source§

fn from(base: ArrayBase<Arc<Buffer<T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Arc<Vec<T, Global>, Global>>> for Array<T>

source§

fn from(base: ArrayBase<Arc<Vec<T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Box<dyn BufferRead<DType = T>, Global>>> for Array<T>

source§

fn from(base: ArrayBase<Box<dyn BufferRead<DType = T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Buffer<T>>> for Array<T>

source§

fn from(base: ArrayBase<Buffer<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Buffer<T>>> for ArrayBase<Arc<Buffer<T>>>

source§

fn from(base: ArrayBase<Buffer<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T, Global>>> for Array<T>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T, Global>>> for ArrayBase<Arc<Buffer<T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T, Global>>> for ArrayBase<Arc<Vec<T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T, Global>>> for ArrayBase<Box<dyn BufferRead<DType = T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T, Global>>> for ArrayBase<Buffer<T>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T, LB, RB> Mul<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayOp<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArraySlice<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayView<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Mul<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: T) -> Self::Output

Performs the * operation. Read more
source§

impl<Buf: BufferInstance> NDArray for ArrayBase<Buf>

§

type DType = <Buf as BufferInstance>::DType

source§

fn context(&self) -> &Context

source§

fn shape(&self) -> &[usize]

source§

fn ndim(&self) -> usize

source§

fn size(&self) -> usize

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Buffer<T>>>

source§

fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Buffer<T>>>>

source§

fn read(&self, queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Vec<T>>>>

source§

fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Vec<T>>>

source§

fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Box<dyn BufferRead<DType = T>>>

source§

fn read( &self, _queue: &Queue ) -> Result<BufferConverter<'_, Self::DType>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Buffer<T>>

source§

fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Vec<T>>

source§

fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>

source§

fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>

source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

source§

impl<Buf: BufferInstance> NDArrayTransform for ArrayBase<Buf>where Self: NDArrayRead,

§

type Broadcast = ArrayView<ArrayBase<Buf>>

§

type Expand = ArrayBase<Buf>

§

type Reshape = ArrayBase<Buf>

§

type Slice = ArraySlice<ArrayBase<Buf>>

§

type Transpose = ArrayView<ArrayBase<Buf>>

source§

fn broadcast(self, shape: Shape) -> Result<ArrayView<Self>, Error>

source§

fn expand_dims(self, axes: Vec<usize>) -> Result<Self::Expand, Error>

source§

fn reshape(self, shape: Shape) -> Result<Self, Error>

source§

fn slice(self, bounds: Vec<AxisBound>) -> Result<ArraySlice<Self>, Error>

source§

fn transpose(self, axes: Option<Vec<usize>>) -> Result<ArrayView<Self>, Error>

source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Buffer<T>>>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

source§

fn write_value(&mut self, value: T) -> Result<(), Error>

source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Vec<T>>>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

source§

fn write_value(&mut self, value: T) -> Result<(), Error>

source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Buffer<T>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

source§

fn write_value(&mut self, value: T) -> Result<(), Error>

source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Vec<T>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

source§

fn write_value(&mut self, value: T) -> Result<(), Error>

source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

source§

impl<Buf: BufferInstance> Neg for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayUnary<<Buf as BufferInstance>::DType, <<Buf as BufferInstance>::DType as CDatatype>::Neg, ArrayBase<Buf>>>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl<Buf: BufferInstance> Not for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayUnary<<Buf as BufferInstance>::DType, u8, ArrayBase<Buf>>>

The resulting type after applying the ! operator.
source§

fn not(self) -> Self::Output

Performs the unary ! operation. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T, LB, RB> Rem<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayOp<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArraySlice<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayView<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Rem<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: T) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T, LB, RB> Sub<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayOp<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArraySlice<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayView<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Sub<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: T) -> Self::Output

Performs the - operation. Read more

Auto Trait Implementations§

§

impl<Buf> RefUnwindSafe for ArrayBase<Buf>where Buf: RefUnwindSafe,

§

impl<Buf> Send for ArrayBase<Buf>where Buf: Send,

§

impl<Buf> Sync for ArrayBase<Buf>where Buf: Sync,

§

impl<Buf> Unpin for ArrayBase<Buf>where Buf: Unpin,

§

impl<Buf> UnwindSafe for ArrayBase<Buf>where Buf: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<A> MatrixMath for Awhere A: NDArray + Debug,

source§

fn diagonal(self) -> Result<ArrayOp<MatDiag<Self>>, Error>where Self: Sized,

source§

fn matmul<O>( self, other: O ) -> Result<ArrayOp<MatMul<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Debug, Self: Sized,

source§

impl<T, A, O> NDArrayBoolean<O> for Awhere T: CDatatype, A: NDArray<DType = T>, O: NDArray<DType = T>,

source§

fn and( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

source§

fn or( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

source§

fn xor( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

source§

impl<T, A> NDArrayBooleanScalar for Awhere T: CDatatype, A: NDArray<DType = T>,

source§

fn and_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>

source§

fn or_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>

source§

fn xor_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>

source§

impl<A> NDArrayCast for Awhere A: NDArray,

source§

fn cast<O: CDatatype>(self) -> Result<ArrayOp<ArrayCast<Self, O>>, Error>

source§

impl<A, O> NDArrayCompare<O> for Awhere A: NDArray, O: NDArray<DType = <A as NDArray>::DType> + NDArray,

source§

fn eq( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

fn gt( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

fn ge( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

fn lt( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

fn le( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

fn ne( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

source§

impl<A> NDArrayCompareScalar for Awhere A: NDArray,

source§

fn eq_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

source§

fn gt_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

source§

fn ge_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

source§

fn lt_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

source§

fn le_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

source§

fn ne_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>where Self: Sized,

source§

impl<A> NDArrayMath for Awhere A: NDArray,

source§

fn add<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn checked_div<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn div<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn mul<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn rem<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn sub<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,

source§

fn log<O>( self, base: O ) -> Result<ArrayOp<ArrayDualFloat<Self::DType, Self, O>>, Error>where O: NDArray<DType = <Self::DType as CDatatype>::Float> + Sized,

source§

fn pow<O>( self, exp: O ) -> Result<ArrayOp<ArrayDualFloat<Self::DType, Self, O>>, Error>where O: NDArray<DType = <Self::DType as CDatatype>::Float> + Sized,

source§

impl<A> NDArrayMathScalar for Awhere A: NDArray,

source§

fn add_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

source§

fn div_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

source§

fn mul_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

source§

fn rem_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

source§

fn sub_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

source§

fn log_scalar( self, base: <Self::DType as CDatatype>::Float ) -> Result<ArrayOp<ArrayScalarFloat<Self::DType, Self>>, Error>

source§

fn pow_scalar( self, exp: <Self::DType as CDatatype>::Float ) -> Result<ArrayOp<ArrayScalarFloat<Self::DType, Self>>, Error>

source§

impl<A> NDArrayReduceAll for Awhere A: NDArrayRead,

source§

fn max_all(&self) -> Result<Self::DType, Error>

source§

fn min_all(&self) -> Result<Self::DType, Error>

source§

fn product_all(&self) -> Result<Self::DType, Error>

source§

fn sum_all(&self) -> Result<Self::DType, Error>

source§

impl<A> NDArrayReduceBoolean for Awhere A: NDArrayRead,

source§

fn all(&self) -> Result<bool, Error>

source§

fn any(&self) -> Result<bool, Error>

source§

impl<A> NDArrayTrig for Awhere A: NDArray,

source§

fn asin( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn sin( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn sinh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn acos( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn cos( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn cosh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn atan( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn tan( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

fn tanh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

source§

impl<A> NDArrayUnary for Awhere A: NDArray,

source§

fn abs( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

source§

fn exp( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

source§

fn ln( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

source§

fn not(self) -> Result<ArrayOp<ArrayUnary<Self::DType, u8, Self>>, Error>

source§

fn round( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

source§

impl<A> NDArrayWhere for Awhere A: NDArray<DType = u8> + Debug,

source§

fn cond<T, L, R>( self, then: L, or_else: R ) -> Result<ArrayOp<GatherCond<Self, T, L, R>>, Error>where T: CDatatype, L: NDArray<DType = T> + Debug, R: NDArray<DType = T> + Debug, Self: Sized,

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for Twhere T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,