numpy

Struct PyUntypedArray

Source
pub struct PyUntypedArray(/* private fields */);
Expand description

A safe, untyped wrapper for NumPy’s ndarray class.

Unlike PyArray<T,D>, this type does not constrain either element type T nor the dimensionality D. This can be useful to inspect function arguments, but it prevents operating on the elements without further downcasts.

When both element type T and index type D are known, these values can be downcast to PyArray<T, D>. In addition, PyArray<T, D> can be dereferenced to a PyUntypedArray and can therefore automatically access its methods.

§Example

Taking PyUntypedArray can be helpful to implement polymorphic entry points:

use pyo3::exceptions::PyTypeError;
use numpy::{Element, PyUntypedArray, PyArray1, dtype};
use numpy::{PyUntypedArrayMethods, PyArrayMethods, PyArrayDescrMethods};

#[pyfunction]
fn entry_point(py: Python<'_>, array: &Bound<'_, PyUntypedArray>) -> PyResult<()> {
    fn implementation<T: Element>(array: &Bound<'_, PyArray1<T>>) -> PyResult<()> {
        /* .. */

        Ok(())
    }

    let element_type = array.dtype();

    if element_type.is_equiv_to(&dtype::<f32>(py)) {
        let array = array.downcast::<PyArray1<f32>>()?;

        implementation(array)
    } else if element_type.is_equiv_to(&dtype::<f64>(py)) {
        let array = array.downcast::<PyArray1<f64>>()?;

        implementation(array)
    } else {
        Err(PyTypeError::new_err(format!("Unsupported element type: {}", element_type)))
    }
}

Trait Implementations§

Source§

impl PyTypeInfo for PyUntypedArray

Source§

const NAME: &'static str = "PyUntypedArray"

Class name.
Source§

const MODULE: Option<&'static str>

Module name, if any.
Source§

fn type_object_raw<'py>(py: Python<'py>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
Source§

fn is_type_of(ob: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
§

fn type_object(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
§

fn type_object_bound(py: Python<'_>) -> Bound<'_, PyType>

👎Deprecated since 0.23.0: renamed to PyTypeInfo::type_object
Deprecated name for [PyTypeInfo::type_object].
§

fn is_type_of_bound(object: &Bound<'_, PyAny>) -> bool

👎Deprecated since 0.23.0: renamed to PyTypeInfo::is_type_of
Deprecated name for [PyTypeInfo::is_type_of].
§

fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
§

fn is_exact_type_of_bound(object: &Bound<'_, PyAny>) -> bool

👎Deprecated since 0.23.0: renamed to PyTypeInfo::is_exact_type_of
Deprecated name for [PyTypeInfo::is_exact_type_of].
Source§

impl DerefToPyAny for PyUntypedArray

Auto Trait Implementations§

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.

§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

§

const NAME: &'static str = <T as PyTypeInfo>::NAME

Name of self. This is used in error messages, for example.
§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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.