Trait concrete_core::math::tensor::AsRefTensor[][src]

pub trait AsRefTensor {
    type Element;
    type Container: AsRefSlice<Element = <Self as AsRefTensor>::Element>;
    fn as_tensor(&self) -> &Tensor<Self::Container>;
}
Expand description

A trait for Tensor-based types, allowing to borrow the enclosed tensor.

This trait is used by the types that build on the Tensor type to implement multi-dimensional collections of various kind. In essence, this trait allows to extract a tensor properly qualified to use all the methods of the Tensor type:

use concrete_core::math::tensor::{Tensor, AsRefTensor, AsRefSlice};

pub struct Matrix<Cont>{
    tensor: Tensor<Cont>,
    row_length: usize,
}

pub struct Row<Cont>{
    tensor: Tensor<Cont>
}

impl<Cont> AsRefTensor for Matrix<Cont> where Cont: AsRefSlice{
    type Element = Cont::Element;
    type Container = Cont;
    fn as_tensor(&self) -> &Tensor<Cont> {
        &self.tensor
    }
}

impl<Cont> Matrix<Cont> {
    // Returns an iterator over the matrix rows.
    pub fn row_iter(&self) -> impl Iterator<Item = Row<&[<Self as AsRefTensor>::Element]>>
    where
        Self: AsRefTensor
    {
        self.as_tensor() // `AsRefTensor` method returning a `&Tensor<Cont>`
            .as_slice()   // Since `Cont` is `AsView`, so is `Tensor<Cont>`
            .chunks(self.row_length) // Split in chunks of the size of the rows.
            .map(|sub| Row{tensor: Tensor::from_container(sub)}) // Wraps into a row type.
    }
}

Associated Types

The element type.

The container used by the tensor.

Required methods

Returns a reference to the enclosed tensor.

Implementors