Skip to main content

TensorRead

Enum TensorRead 

Source
pub enum TensorRead<'a> {
    Tensor(&'a Tensor),
    View(TensorView<'a>),
}
Expand description

Read-only tensor input accepted by synchronous eager kernels.

TensorRead lets kernels accept either an owned tensor reference or a borrowed TensorView without forcing callers to materialize first. The View variant preserves arbitrary strides and offsets, so kernels that support strided reads can consume transposes, slices, and broadcasts directly.

TensorRead is intentionally borrowed. It is an input-dispatch type, not an owned lazy tensor value. APIs that need to store a lazy layout result should keep an owned base tensor plus layout metadata, then expose a TensorRead only for the duration of kernel dispatch.

§Examples

use tenferro_tensor::{DType, Tensor, TensorRead};

let tensor = Tensor::from_vec_col_major(vec![2], vec![1.0_f64, 2.0]).unwrap();
let read = TensorRead::from_tensor(&tensor);

assert_eq!(read.dtype(), DType::F64);
assert_eq!(read.shape(), &[2]);

Variants§

§

Tensor(&'a Tensor)

§

View(TensorView<'a>)

Implementations§

Source§

impl<'a> TensorRead<'a>

Source

pub fn from_tensor(tensor: &'a Tensor) -> TensorRead<'a>

Source

pub fn from_view(view: TensorView<'a>) -> TensorRead<'a>

Source

pub fn tensor_view(self) -> TensorView<'a>

Convert this read target into a dtype-erased tensor view.

Owned tensors are borrowed without copying their storage. Existing views preserve their layout and placement metadata.

Source

pub fn dtype(&self) -> DType

Source

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

Source

pub fn placement(&self) -> &Placement

Return the placement metadata carried by this read target.

§Examples
use tenferro_tensor::{MemoryKind, Tensor, TensorRead};

let tensor = Tensor::from_vec_col_major(vec![1], vec![1.0_f64])?;
let read = TensorRead::from_tensor(&tensor);
assert_eq!(read.placement().memory_kind, MemoryKind::UnpinnedHost);
Source

pub fn backend_family(&self) -> Option<&'static str>

Return the physical backend family of this read target, when backend-owned.

§Examples
use tenferro_tensor::{Tensor, TensorRead};

let tensor = Tensor::from_vec_col_major(vec![1], vec![1.0_f64])?;
assert_eq!(TensorRead::from_tensor(&tensor).backend_family(), None);
Source

pub fn allocation_domain(&self) -> Option<AllocationDomainId>

Return the shared allocation domain of this read target, when present.

§Examples
use tenferro_tensor::{Tensor, TensorRead};

let tensor = Tensor::from_vec_col_major(vec![1], vec![1.0_f64])?;
assert_eq!(TensorRead::from_tensor(&tensor).allocation_domain(), None);
Source

pub fn strides(&self) -> Result<Vec<isize>, Error>

§Errors

Returns crate::Error::Validation with tenferro_tensor_core::ValidationError::IntegerOverflow when column-major stride arithmetic overflows.

Source

pub fn offset(&self) -> isize

Source

pub fn layout_linear_offset(&self, indices: &[usize]) -> Result<usize, Error>

§Errors

Returns crate::Error::Validation with tenferro_tensor_core::ValidationError::RankMismatch when indices has the wrong rank, tenferro_tensor_core::ValidationError::InvalidArgument when an index is outside its axis extent, or tenferro_tensor_core::ValidationError::IntegerOverflow when offset arithmetic overflows.

Source

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

§Errors

Returns crate::Error::Validation with tenferro_tensor_core::ValidationError::IntegerOverflow when compactness arithmetic overflows.

Source

pub fn layout_summary(&self) -> String

Source

pub fn assert_col_major_contiguous(&self) -> Result<(), Error>

§Errors

Returns crate::Error::Validation with tenferro_tensor_core::ValidationError::IntegerOverflow when compactness arithmetic overflows, or tenferro_tensor_core::ValidationError::InvalidArgument when the view is not compact column-major.

Source

pub fn as_tensor(&self) -> Option<&'a Tensor>

Trait Implementations§

Source§

impl<'a> Clone for TensorRead<'a>

Source§

fn clone(&self) -> TensorRead<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for TensorRead<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for TensorRead<'a>

§

impl<'a> !RefUnwindSafe for TensorRead<'a>

§

impl<'a> Send for TensorRead<'a>

§

impl<'a> Sync for TensorRead<'a>

§

impl<'a> Unpin for TensorRead<'a>

§

impl<'a> UnsafeUnpin for TensorRead<'a>

§

impl<'a> !UnwindSafe for TensorRead<'a>

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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 T
where 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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

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 T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSendSync for T
where T: Send + Sync,

§

impl<T> MaybeSync for T
where T: Sync,