#![allow(clippy::undocumented_unsafe_blocks)]
#[doc(inline)]
pub use self::any::{PyAny, PyAnyMethods};
#[doc(inline)]
pub use self::boolobject::{PyBool, PyBoolMethods};
#[doc(inline)]
pub use self::bytearray::{PyByteArray, PyByteArrayMethods};
#[doc(inline)]
pub use self::bytes::{PyBytes, PyBytesMethods};
#[doc(inline)]
pub use self::capsule::{PyCapsule, PyCapsuleMethods};
#[doc(inline)]
pub use self::code::{PyCode, PyCodeMethods};
#[doc(inline)]
pub use self::complex::{PyComplex, PyComplexMethods};
#[cfg(not(any(Py_LIMITED_API, PyPy, GraalPy, RustPython)))]
pub use self::context::PyContext;
#[doc(inline)]
pub use self::datetime::{
PyDate, PyDateAccess, PyDateTime, PyDelta, PyDeltaAccess, PyTime, PyTimeAccess, PyTzInfo,
PyTzInfoAccess,
};
#[doc(inline)]
pub use self::dict::{IntoPyDict, PyDict, PyDictMethods};
#[cfg(not(any(PyPy, GraalPy, RustPython)))]
#[doc(inline)]
pub use self::dict::{items::PyDictItems, keys::PyDictKeys, values::PyDictValues};
#[doc(inline)]
pub use self::ellipsis::PyEllipsis;
#[doc(inline)]
pub use self::float::{PyFloat, PyFloatMethods};
#[cfg(all(not(Py_LIMITED_API), not(PyPy), not(GraalPy)))]
#[doc(inline)]
pub use self::frame::{PyFrame, PyFrameMethods};
#[cfg(Py_3_15)]
#[doc(inline)]
pub use self::frozendict::{PyFrozenDict, PyFrozenDictMethods};
#[doc(inline)]
pub use self::frozenset::{PyFrozenSet, PyFrozenSetMethods};
#[doc(inline)]
pub use self::function::{PyCFunction, PyFunction};
#[doc(inline)]
pub use self::genericalias::PyGenericAlias;
#[doc(inline)]
pub use self::int::PyInt;
#[doc(inline)]
pub use self::iterator::PyIterator;
#[doc(inline)]
pub use self::list::{PyList, PyListMethods};
#[doc(inline)]
pub use self::mapping::{PyMapping, PyMappingMethods};
#[doc(inline)]
pub use self::mappingproxy::{PyMappingProxy, PyMappingProxyMethods};
#[doc(inline)]
pub use self::memoryview::PyMemoryView;
#[doc(inline)]
pub use self::module::{PyModule, PyModuleMethods};
#[doc(inline)]
pub use self::none::PyNone;
#[doc(inline)]
pub use self::notimplemented::PyNotImplemented;
#[doc(inline)]
pub use self::pysuper::PySuper;
#[doc(inline)]
pub use self::range::{PyRange, PyRangeMethods};
#[doc(inline)]
pub use self::sequence::{PySequence, PySequenceMethods};
#[doc(inline)]
pub use self::set::{PySet, PySetMethods};
#[doc(inline)]
pub use self::slice::{PySlice, PySliceMethods};
#[doc(inline)]
pub use self::string::{PyString, PyStringMethods};
#[doc(inline)]
pub use self::traceback::{PyTraceback, PyTracebackMethods};
#[doc(inline)]
pub use self::tuple::{PyTuple, PyTupleMethods};
#[doc(inline)]
pub use self::typeobject::{PyType, PyTypeMethods};
#[doc(inline)]
pub use self::weakref::{PyWeakref, PyWeakrefMethods, PyWeakrefProxy, PyWeakrefReference};
#[cfg(all(not(Py_LIMITED_API), Py_3_13, wip_feature_std))]
#[deprecated(since = "0.30.0", note = "moved to `pyo3::sync::PyMutex`")]
pub type PyMutex<T> = crate::sync::PyMutex<T>;
#[cfg(all(not(Py_LIMITED_API), Py_3_13, wip_feature_std))]
#[deprecated(since = "0.30.0", note = "moved to `pyo3::sync::PyMutexGuard`")]
pub type PyMutexGuard<'a, T> = crate::sync::PyMutexGuard<'a, T>;
#[deprecated(
since = "0.30.0",
note = "moved to `pyo3::types::capsule::CapsuleName`"
)]
pub type CapsuleName = capsule::CapsuleName;
#[deprecated(since = "0.30.0", note = "moved to `pyo3::types::code::PyCodeInput`")]
pub type PyCodeInput = code::PyCodeInput;
#[deprecated(
since = "0.30.0",
note = "moved to `pyo3::types::frozenset::PyFrozenSetBuilder`"
)]
pub type PyFrozenSetBuilder<'py> = frozenset::PyFrozenSetBuilder<'py>;
#[cfg(all(not(PyPy), Py_3_10))]
#[deprecated(
since = "0.30.0",
note = "moved to `pyo3::types::iterator::PySendResult`"
)]
pub type PySendResult<'py> = iterator::PySendResult<'py>;
#[deprecated(
since = "0.30.0",
note = "moved to `pyo3::types::slice::PySliceIndices`"
)]
pub type PySliceIndices = slice::PySliceIndices;
#[cfg(not(Py_LIMITED_API))]
#[deprecated(
since = "0.30.0",
note = "moved to `pyo3::types::string::PyStringData`"
)]
pub type PyStringData<'a> = string::PyStringData<'a>;
pub mod iter {
pub use super::dict::BoundDictIterator;
#[cfg(Py_3_15)]
pub use super::frozendict::BoundFrozenDictIterator;
pub use super::frozenset::BoundFrozenSetIterator;
pub use super::list::BoundListIterator;
pub use super::set::BoundSetIterator;
pub use super::tuple::{BorrowedTupleIterator, BoundTupleIterator};
}
pub trait DerefToPyAny {
}
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_type_named (
($name:ty $(;$generics:ident)*) => {
impl $crate::types::DerefToPyAny for $name {}
};
);
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_static_type_object(
($typeobject:expr) => {
|_py| &raw mut $typeobject
};
);
#[cfg(not(feature = "experimental-inspect"))]
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_type_info_type_hint(
($module:expr, $name:expr) => {};
);
#[cfg(feature = "experimental-inspect")]
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_type_info_type_hint(
($module:expr, $name:expr) => {
const TYPE_HINT: $crate::inspect::PyStaticExpr = $crate::type_hint_identifier!($module, $name);
};
);
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_type_info(
($name:ty, $typeobject:expr, $type_hint_module:expr, $type_hint_name:expr, $module:expr $(, #checkfunction=$checkfunction:path)? $(;$generics:ident)*) => {
unsafe impl<$($generics,)*> $crate::type_object::PyTypeInfo for $name {
$crate::pyobject_type_info_type_hint!($type_hint_module, $type_hint_name);
#[inline]
#[allow(clippy::redundant_closure_call)]
fn type_object_raw(py: $crate::Python<'_>) -> *mut $crate::ffi::PyTypeObject {
$typeobject(py)
}
$(
#[inline]
fn is_type_of(obj: &$crate::Bound<'_, $crate::PyAny>) -> bool {
#[allow(unused_unsafe, reason = "not all `$checkfunction` are unsafe fn")]
unsafe { $checkfunction(obj.as_ptr()) > 0 }
}
)?
}
impl $name {
#[doc(hidden)]
pub const _PYO3_DEF: $crate::impl_::pymodule::AddTypeToModule<Self> = $crate::impl_::pymodule::AddTypeToModule::new();
#[allow(dead_code)]
#[doc(hidden)]
pub const _PYO3_INTROSPECTION_ID: &'static str = concat!(stringify!($module), stringify!($name));
}
};
);
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_type_core {
($name:ty, $typeobject:expr, $type_hint_module:expr, $type_hint_name:expr, #module=$module:expr $(, #checkfunction=$checkfunction:path)? $(;$generics:ident)*) => {
$crate::pyobject_native_type_named!($name $(;$generics)*);
$crate::pyobject_native_type_info!($name, $typeobject, $type_hint_module, $type_hint_name, $module $(, #checkfunction=$checkfunction)? $(;$generics)*);
};
($name:ty, $typeobject:expr, $type_hint_module:expr, $type_hint_name:expr, #module=$module:expr $(, #checkfunction=$checkfunction:path)? $(;$generics:ident)*) => {
$crate::pyobject_native_type_core!($name, $typeobject, $type_hint_module, $type_hint_name, #module=$module $(, #checkfunction=$checkfunction)? $(;$generics)*);
};
($name:ty, $typeobject:expr, $type_hint_module:expr, $type_hint_name:expr $(, #checkfunction=$checkfunction:path)? $(;$generics:ident)*) => {
$crate::pyobject_native_type_core!($name, $typeobject, $type_hint_module, $type_hint_name, #module=::core::option::Option::Some("builtins") $(, #checkfunction=$checkfunction)? $(;$generics)*);
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_subclassable_native_type {
($name:ty, $layout:path $(;$generics:ident)*) => {
#[cfg(not(Py_LIMITED_API))]
impl<$($generics,)*> $crate::impl_::pyclass::PyClassBaseType for $name {
type LayoutAsBase = $crate::impl_::pycell::PyClassObjectBase<$layout>;
type BaseNativeType = $name;
type Initializer = $crate::impl_::pyclass_init::PyNativeTypeInitializer<Self>;
type PyClassMutability = $crate::pycell::impl_::ImmutableClass;
type Layout<T: $crate::impl_::pyclass::PyClassImpl> = $crate::impl_::pycell::PyStaticClassObject<T>;
}
#[cfg(all(Py_3_12, Py_LIMITED_API))]
impl<$($generics,)*> $crate::impl_::pyclass::PyClassBaseType for $name {
type LayoutAsBase = $crate::impl_::pycell::PyVariableClassObjectBase;
type BaseNativeType = Self;
type Initializer = $crate::impl_::pyclass_init::PyNativeTypeInitializer<Self>;
type PyClassMutability = $crate::pycell::impl_::ImmutableClass;
type Layout<T: $crate::impl_::pyclass::PyClassImpl> = $crate::impl_::pycell::PyVariableClassObject<T>;
}
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_type_sized {
($name:ty, $layout:path $(;$generics:ident)*) => {
unsafe impl $crate::type_object::PyLayout<$name> for $layout {}
impl $crate::type_object::PySizedLayout<$name> for $layout {}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! pyobject_native_type {
($name:ty, $layout:path, $typeobject:expr, $type_hint_module:expr, $type_hint_name:expr $(, #module=$module:expr)? $(, #checkfunction=$checkfunction:path)? $(;$generics:ident)*) => {
$crate::pyobject_native_type_core!($name, $typeobject, $type_hint_module, $type_hint_name $(, #module=$module)? $(, #checkfunction=$checkfunction)? $(;$generics)*);
#[cfg(not(Py_LIMITED_API))]
$crate::pyobject_native_type_sized!($name, $layout $(;$generics)*);
};
}
pub(crate) mod any;
pub(crate) mod boolobject;
pub(crate) mod bytearray;
pub mod bytes;
pub mod capsule;
pub mod code;
pub(crate) mod complex;
#[cfg(not(any(Py_LIMITED_API, PyPy, GraalPy, RustPython)))]
pub mod context;
pub mod datetime;
pub mod dict;
mod ellipsis;
pub(crate) mod float;
#[cfg(all(not(Py_LIMITED_API), not(PyPy), not(GraalPy)))]
mod frame;
#[cfg(Py_3_15)]
pub mod frozendict;
pub mod frozenset;
mod function;
pub(crate) mod genericalias;
mod int;
pub mod iterator;
pub mod list;
pub(crate) mod mapping;
pub mod mappingproxy;
mod memoryview;
pub(crate) mod module;
mod none;
mod notimplemented;
mod pysuper;
pub(crate) mod range;
pub(crate) mod sequence;
pub mod set;
pub mod slice;
pub mod string;
pub(crate) mod traceback;
pub mod tuple;
pub(crate) mod typeobject;
pub(crate) mod weakref;