Struct StridedMut

Source
pub struct StridedMut<'a, T> { /* private fields */ }
Expand description

A mutable strided iterator over tensor elements.

This struct provides mutable access to tensor elements with strided access patterns in single thread.

Implementations§

Source§

impl<'a, T: CommonBounds> StridedMut<'a, T>

Source

pub fn new<U: TensorInfo<T>>(tensor: U) -> Self

Creates a new StridedMut instance from a given tensor.

§Arguments
  • tensor - The tensor implementing the TensorInfo<T> trait to iterate over.
§Returns

A new instance of StridedMut initialized with the provided tensor.

Source

pub fn zip<C>(self, other: C) -> StridedZip<'a, Self, C>
where C: 'a + IterGetSet, <C as IterGetSet>::Item: Send,

Combines this StridedMut iterator with another iterator, enabling simultaneous iteration.

This method performs shape broadcasting between self and other to ensure that both iterators iterate over tensors with compatible shapes. It adjusts the strides and shapes of both iterators to match the broadcasted shape and then returns a StridedZip that allows for synchronized iteration over both iterators.

§Arguments
  • other - The other iterator to zip with. It must implement the IterGetSet trait, and its associated Item type must be Send.
§Returns

A StridedZip instance that zips together self and other, enabling synchronized iteration over their elements.

§Panics

This method will panic if the shapes of self and other cannot be broadcasted together. Ensure that the shapes are compatible before calling this method.

Trait Implementations§

Source§

impl<'a, T> IterGetSet for StridedMut<'a, T>
where T: CommonBounds + 'a,

Source§

type Item = &'a mut T

The type of the iterator’s elements.
Source§

fn set_end_index(&mut self, end_index: usize)

set the end index of the iterator, this is used when rayon perform data splitting
Source§

fn set_intervals(&mut self, intervals: Arc<Vec<(usize, usize)>>)

set the chunk intervals of the iterator, we chunk the outer loop
Source§

fn set_strides(&mut self, strides: Strides)

set the strides for the iterator, we call this method normally when we do broadcasting
Source§

fn set_shape(&mut self, shape: Shape)

set the shape for the iterator, we call this method normally when we do broadcasting
Source§

fn set_prg(&mut self, prg: Vec<i64>)

set the loop progress for the iterator
Source§

fn intervals(&self) -> &Arc<Vec<(usize, usize)>>

get the intervals of the iterator
Source§

fn strides(&self) -> &Strides

get the strides of the iterator
Source§

fn shape(&self) -> &Shape

get the shape of the iterator
Source§

fn layout(&self) -> &Layout

get the layout of the iterator
Source§

fn broadcast_set_strides(&mut self, shape: &Shape)

set the strides for all the iterators
Source§

fn outer_loop_size(&self) -> usize

get the outer loop size
Source§

fn inner_loop_size(&self) -> usize

get the inner loop size
Source§

fn next(&mut self)

update the loop progress
Source§

fn inner_loop_next(&mut self, index: usize) -> Self::Item

get the next element of the inner loop
Source§

impl<'a, T: CommonBounds> StridedIterator for StridedMut<'a, T>

Source§

fn for_each<F>(self, func: F)
where F: Fn(Self::Item),

perform scalar iteration, this method is for single thread iterator
Source§

fn for_each_init<F, INIT, T>(self, init: INIT, func: F)
where F: Fn(&mut T, Self::Item), INIT: Fn() -> T,

perform scalar iteration with init, this method is for single thread iterator
Source§

impl<'a, T: CommonBounds> StridedIteratorZip for StridedMut<'a, T>

Auto Trait Implementations§

§

impl<'a, T> Freeze for StridedMut<'a, T>

§

impl<'a, T> RefUnwindSafe for StridedMut<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for StridedMut<'a, T>

§

impl<'a, T> Sync for StridedMut<'a, T>

§

impl<'a, T> Unpin for StridedMut<'a, T>

§

impl<'a, T> UnwindSafe for StridedMut<'a, T>
where T: RefUnwindSafe,

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> 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

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

Source§

fn vzip(self) -> V