Skip to main content

ArrayRefMut

Struct ArrayRefMut 

Source
pub struct ArrayRefMut<'a> { /* private fields */ }
Expand description

Mutable reference to a data array in metatensor-core

The data array can come from any origin, this struct provides facilities to access data that was created through the crate::Array trait, and in particular as ndarray::ArrayD instances.

Implementations§

Source§

impl<'a> ArrayRefMut<'a>

Source

pub unsafe fn from_raw(array: mts_array_t) -> ArrayRefMut<'a>

Create a new ArrayRefMut from the given raw mts_array_t

This is a VERY unsafe function, creating a lifetime out of thin air, and allowing mutable access to the mts_array_t. Make sure the lifetime is actually constrained by the lifetime of the owner of this mts_array_t; and that the owner is mutably borrowed by this ArrayRefMut.

Source

pub fn as_any(&self) -> &dyn Any

Get the underlying array as an &dyn Any instance.

This function panics if the array was not created though this crate and the crate::Array trait.

Source

pub fn to_any(self) -> &'a dyn Any

Get a reference to the underlying array as an &dyn Any instance, re-using the same lifetime as the ArrayRefMut.

This function panics if the array was not created though this crate and the crate::Array trait.

Source

pub fn to_any_mut(self) -> &'a mut dyn Any

Get the underlying array as an &mut dyn Any instance.

This function panics if the array was not created though this crate and the crate::Array trait.

Source

pub fn as_ndarray_lock<T>(&self) -> &Arc<RwLock<ArrayD<T>>>
where T: 'static,

Extract the Arc<RwLock<ArrayD<T>>> from this ArrayRef, if it contains one.

This function will panic if the data in the mts_array_t in this ArrayRefMut is a different kind of array.

Source

pub fn to_ndarray_lock<T>(self) -> &'a Arc<RwLock<ArrayD<T>>>
where T: 'static,

Extract the Arc<RwLock<ArrayD<T>>> from this ArrayRef, if it contains one, keeping the initial lifetime of the ArrayRef.

This function will panic if the data in the mts_array_t in this ArrayRefMut is a different kind of array.

Source

pub fn get_ndarray_mut<T>(self) -> &'a mut ArrayD<T>
where T: 'static,

Get a mutable reference to the underlying array, consuming this ArrayRefMut.

Since this array is already guaranteed to be unique through the mutable borrow, we do not need to lock the RwLock to get access to the ArrayD.

This function will panic if the data in the mts_array_t in this ArrayRefMut does not contain an Arc<RwLock<ArrayD<T>>>, or if the Arc already has multiple strong references.

Source

pub fn as_raw(&self) -> &mts_array_t

Get the raw underlying mts_array_t

Source

pub fn as_raw_mut(&mut self) -> &mut mts_array_t

Get a mutable reference to the raw underlying mts_array_t

Source

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

Get the origin of this array.

This corresponds to mts_array_t.origin, but with a more convenient API.

Source

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

Get the device of this array.

This corresponds to mts_array_t.device, but with a more convenient API.

Source

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

Get the dtype of this array.

This corresponds to mts_array_t.dtype, but with a more convenient API.

Source

pub fn as_dlpack( &self, device: DLDevice, stream: Option<i64>, max_version: DLPackVersion, ) -> Result<DLPackTensor, Error>

Get a dlpk::DLPackTensor from this array, if supported by the underlying data.

This corresponds to mts_array_t.as_dlpack, but with a more convenient API.

Source

pub fn shape(&self) -> Result<&[usize], Error>

Get the shape of this array.

This corresponds to mts_array_t.shape, but with a more convenient API.

Source

pub fn reshape(&mut self, shape: &[usize]) -> Result<(), Error>

Reshape the data in this array, if supported by the underlying data.

This corresponds to mts_array_t.reshape, but with a more convenient API.

Source

pub fn swap_axes(&mut self, axis_1: usize, axis_2: usize) -> Result<(), Error>

Swap two axes of the data in this array, if supported by the underlying data.

This corresponds to mts_array_t.swap_axes, but with a more convenient API.

Source

pub fn create( &self, shape: &[usize], fill_value: ArrayRef<'_>, ) -> Result<MtsArray, Error>

Create a new array with the same options as this one (dtype, device) and the given shape, filled with zeros.

This corresponds to mts_array_t.create, but with a more convenient API.

Source

pub fn copy(&self, device: DLDevice) -> Result<MtsArray, Error>

Copy the data in this array, if supported by the underlying data.

This corresponds to mts_array_t.copy, but with a more convenient API.

Source

pub fn move_data<'input>( &mut self, input: impl Into<ArrayRef<'input>>, moves: &[mts_data_movement_t], ) -> Result<(), Error>

Move the data in this array to another array, if supported by the underlying data.

This corresponds to mts_array_t.move_data, but with a more convenient API.

Trait Implementations§

Source§

impl<'a> Debug for ArrayRefMut<'a>

Source§

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

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

impl<'a> From<&'a mut MtsArray> for ArrayRefMut<'a>

Source§

fn from(array: &'a mut MtsArray) -> ArrayRefMut<'a>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'a> Freeze for ArrayRefMut<'a>

§

impl<'a> RefUnwindSafe for ArrayRefMut<'a>

§

impl<'a> !Send for ArrayRefMut<'a>

§

impl<'a> !Sync for ArrayRefMut<'a>

§

impl<'a> Unpin for ArrayRefMut<'a>

§

impl<'a> UnsafeUnpin for ArrayRefMut<'a>

§

impl<'a> !UnwindSafe for ArrayRefMut<'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> 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, 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.