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

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

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

type Element[src]

The element type.

type Container: AsRefSlice<Element = Self::Element>[src]

The container used by the tensor.

Loading content...

Required methods

fn as_tensor(&self) -> &Tensor<Self::Container>[src]

Returns a reference to the enclosed tensor.

Loading content...

Implementors

impl<'a, Element> AsRefTensor for BootstrapKey<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for BootstrapKey<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for CleartextList<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for CleartextList<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for PlaintextList<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for PlaintextList<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GgswCiphertext<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GgswCiphertext<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GgswLevelMatrix<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GgswLevelMatrix<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GgswLevelRow<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GgswLevelRow<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweBody<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweBody<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweCiphertext<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweCiphertext<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweList<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweList<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweMask<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweMask<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweMaskElement<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweMaskElement<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for LweCiphertext<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for LweCiphertext<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for LweKeyswitchKey<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for LweKeyswitchKey<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for LweList<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for LweList<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for LweMask<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for LweMask<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for GlweSecretKey<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for GlweSecretKey<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for LweSecretKey<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for LweSecretKey<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for FourierPolynomial<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for FourierPolynomial<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for Monomial<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for Monomial<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for Polynomial<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for Polynomial<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<'a, Element> AsRefTensor for PolynomialList<&'a [Element]>[src]

type Element = Element

type Container = &'a [Element]

impl<'a, Element> AsRefTensor for PolynomialList<&'a mut [Element]>[src]

type Element = Element

type Container = &'a mut [Element]

impl<Cont> AsRefTensor for Tensor<Cont> where
    Cont: AsRefSlice
[src]

type Element = Cont::Element

type Container = Cont

impl<Element> AsRefTensor for BootstrapKey<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for BootstrapKey<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for BootstrapKey<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for CleartextList<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for CleartextList<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for CleartextList<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for PlaintextList<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for PlaintextList<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for PlaintextList<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GgswCiphertext<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GgswCiphertext<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GgswCiphertext<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GgswLevelMatrix<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GgswLevelMatrix<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GgswLevelMatrix<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GgswLevelRow<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GgswLevelRow<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GgswLevelRow<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweBody<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweBody<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweBody<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweCiphertext<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweCiphertext<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweCiphertext<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweList<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweList<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweList<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweMask<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweMask<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweMask<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweMaskElement<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweMaskElement<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweMaskElement<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for LweCiphertext<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for LweCiphertext<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for LweCiphertext<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for LweKeyswitchKey<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for LweKeyswitchKey<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for LweKeyswitchKey<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for LweList<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for LweList<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for LweList<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for LweMask<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for LweMask<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for LweMask<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for GlweSecretKey<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for GlweSecretKey<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for GlweSecretKey<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for LweSecretKey<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for LweSecretKey<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for LweSecretKey<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for FourierPolynomial<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for FourierPolynomial<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for FourierPolynomial<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for Monomial<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for Monomial<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for Monomial<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for Polynomial<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for Polynomial<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for Polynomial<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

impl<Element> AsRefTensor for PolynomialList<[Element; 1]>[src]

type Element = Element

type Container = [Element; 1]

impl<Element> AsRefTensor for PolynomialList<Vec<Element>>[src]

type Element = Element

type Container = Vec<Element>

impl<Element> AsRefTensor for PolynomialList<AlignedVec<Element>>[src]

type Element = Element

type Container = AlignedVec<Element>

Loading content...