From e6d9081b598886edeb7a06e58a426e7ab72be371 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 11 Aug 2024 16:22:05 +0200 Subject: [PATCH] DRY `__all__` refactor in `optype.numpy` --- optype/numpy/__init__.py | 278 ++++-------------------------------- optype/numpy/_any_array.py | 128 ++++++++++------- optype/numpy/_any_dtype.py | 69 +++++++++ optype/numpy/_any_scalar.py | 53 +++++++ optype/numpy/_array.py | 7 +- optype/numpy/_compat.py | 2 +- optype/numpy/_ctype.py | 79 ++++------ optype/numpy/_dtype.py | 2 +- optype/numpy/_scalar.py | 2 + optype/numpy/_shape.py | 4 +- optype/numpy/_ufunc.py | 6 +- 11 files changed, 258 insertions(+), 372 deletions(-) diff --git a/optype/numpy/__init__.py b/optype/numpy/__init__.py index 536d52f1..96f8fdb5 100644 --- a/optype/numpy/__init__.py +++ b/optype/numpy/__init__.py @@ -1,256 +1,28 @@ -# pyright: reportImportCycles=false -from . import __check_sized_aliases # noqa: F401 -from ._any_array import ( - AnyArray, - AnyBoolArray, - AnyByteArray, - AnyBytesArray, - AnyCDoubleArray, - AnyCLongDoubleArray, - AnyCSingleArray, - AnyCharacterArray, - AnyComplex64Array, - AnyComplex128Array, - AnyComplexFloatingArray, - AnyDateTime64Array, - AnyDoubleArray, - AnyFlexibleArray, - AnyFloat16Array, - AnyFloat32Array, - AnyFloat64Array, - AnyFloatingArray, - AnyGenericArray, - AnyHalfArray, - AnyInexactArray, - AnyInt8Array, - AnyInt16Array, - AnyInt32Array, - AnyInt64Array, - AnyIntCArray, - AnyIntPArray, - AnyIntegerArray, - AnyLongArray, - AnyLongDoubleArray, - AnyLongLongArray, - AnyNumberArray, - AnyObjectArray, - AnyShortArray, - AnySignedIntegerArray, - AnySingleArray, - AnyStrArray, - AnyTimeDelta64Array, - AnyUByteArray, - AnyUInt8Array, - AnyUInt16Array, - AnyUInt32Array, - AnyUInt64Array, - AnyUIntCArray, - AnyUIntPArray, - AnyULongArray, - AnyULongLongArray, - AnyUShortArray, - AnyUnsignedIntegerArray, - AnyVoidArray, -) -from ._any_dtype import ( - AnyBoolDType, - AnyByteDType, - AnyBytesDType, - AnyCDoubleDType, - AnyCLongDoubleDType, - AnyCSingleDType, - AnyCharacterDType, - AnyComplex64DType, - AnyComplex128DType, - AnyComplexFloatingDType, - AnyDType, - AnyDateTime64DType, - AnyDoubleDType, - AnyFlexibleDType, - AnyFloat16DType, - AnyFloat32DType, - AnyFloat64DType, - AnyFloatingDType, - AnyGenericDType, - AnyHalfDType, - AnyInexactDType, - AnyInt8DType, - AnyInt16DType, - AnyInt32DType, - AnyInt64DType, - AnyIntCDType, - AnyIntPDType, - AnyIntegerDType, - AnyLongDType, - AnyLongDoubleDType, - AnyLongLongDType, - AnyNumberDType, - AnyObjectDType, - AnyShortDType, - AnySignedIntegerDType, - AnySingleDType, - AnyStrDType, - AnyTimeDelta64DType, - AnyUByteDType, - AnyUInt8DType, - AnyUInt16DType, - AnyUInt32DType, - AnyUInt64DType, - AnyUIntCDType, - AnyUIntPDType, - AnyULongDType, - AnyULongLongDType, - AnyUShortDType, - AnyUnsignedIntegerDType, - AnyVoidDType, -) -from ._array import ( - Array, - CanArray, - CanArrayFinalize, - CanArrayWrap, - HasArrayInterface, - HasArrayPriority, -) -from ._dtype import DType, HasDType -from ._scalar import Scalar -from ._shape import ( - AtLeast0D, - AtLeast1D, - AtLeast2D, - AtLeast3D, - AtMost0D, - AtMost1D, - AtMost2D, - AtMost3D, -) -from ._ufunc import ( - CanArrayFunction, - CanArrayUFunc, - UFunc, +# ruff: noqa: F403 +from . import ( + __check_sized_aliases, # noqa: F401 + _any_array, + _any_dtype, + _array, + _dtype, + _scalar, + _shape, + _ufunc, ) +from ._any_array import * +from ._any_dtype import * +from ._array import * +from ._dtype import * +from ._scalar import * +from ._shape import * +from ._ufunc import * -__all__ = ( - 'AnyArray', - 'AnyBoolArray', - 'AnyBoolDType', - 'AnyByteArray', - 'AnyByteDType', - 'AnyBytesArray', - 'AnyBytesDType', - 'AnyCDoubleArray', - 'AnyCDoubleDType', - 'AnyCLongDoubleArray', - 'AnyCLongDoubleDType', - 'AnyCSingleArray', - 'AnyCSingleDType', - 'AnyCharacterArray', - 'AnyCharacterDType', - 'AnyComplex64Array', - 'AnyComplex64DType', - 'AnyComplex128Array', - 'AnyComplex128DType', - 'AnyComplexFloatingArray', - 'AnyComplexFloatingArray', - 'AnyComplexFloatingDType', - 'AnyDType', - 'AnyDateTime64Array', - 'AnyDateTime64DType', - 'AnyDoubleArray', - 'AnyDoubleDType', - 'AnyFlexibleArray', - 'AnyFlexibleDType', - 'AnyFloat16Array', - 'AnyFloat16DType', - 'AnyFloat32Array', - 'AnyFloat32DType', - 'AnyFloat64Array', - 'AnyFloat64DType', - 'AnyFloatingArray', - 'AnyFloatingDType', - 'AnyGenericArray', - 'AnyGenericDType', - 'AnyHalfArray', - 'AnyHalfDType', - 'AnyInexactArray', - 'AnyInexactDType', - 'AnyInt8Array', - 'AnyInt8DType', - 'AnyInt16Array', - 'AnyInt16DType', - 'AnyInt32Array', - 'AnyInt32DType', - 'AnyInt64Array', - 'AnyInt64DType', - 'AnyIntCArray', - 'AnyIntCDType', - 'AnyIntPArray', - 'AnyIntPDType', - 'AnyIntegerArray', - 'AnyIntegerDType', - 'AnyLongArray', - 'AnyLongDType', - 'AnyLongDoubleArray', - 'AnyLongDoubleDType', - 'AnyLongLongArray', - 'AnyLongLongDType', - 'AnyNumberArray', - 'AnyNumberDType', - 'AnyObjectArray', - 'AnyObjectDType', - 'AnyShortArray', - 'AnyShortDType', - 'AnySignedIntegerArray', - 'AnySignedIntegerDType', - 'AnySingleArray', - 'AnySingleDType', - 'AnyStrArray', - 'AnyStrDType', - 'AnyTimeDelta64Array', - 'AnyTimeDelta64DType', - 'AnyUByteArray', - 'AnyUByteDType', - 'AnyUInt8Array', - 'AnyUInt8DType', - 'AnyUInt16Array', - 'AnyUInt16DType', - 'AnyUInt32Array', - 'AnyUInt32DType', - 'AnyUInt64Array', - 'AnyUInt64DType', - 'AnyUIntCArray', - 'AnyUIntCDType', - 'AnyUIntPArray', - 'AnyUIntPDType', - 'AnyULongArray', - 'AnyULongDType', - 'AnyULongLongArray', - 'AnyULongLongDType', - 'AnyUShortArray', - 'AnyUShortDType', - 'AnyUnsignedIntegerArray', - 'AnyUnsignedIntegerDType', - 'AnyVoidArray', - 'AnyVoidDType', - 'Array', - 'AtLeast0D', - 'AtLeast1D', - 'AtLeast2D', - 'AtLeast3D', - 'AtMost0D', - 'AtMost1D', - 'AtMost2D', - 'AtMost3D', - 'CanArray', - 'CanArrayFinalize', - 'CanArrayFunction', - 'CanArrayUFunc', - 'CanArrayWrap', - 'DType', - 'HasArrayInterface', - 'HasArrayPriority', - 'HasDType', - 'Scalar', - 'UFunc', -) +__all__: list[str] = [] +__all__ += _any_array.__all__ +__all__ += _any_dtype.__all__ +__all__ += _array.__all__ +__all__ += _dtype.__all__ +__all__ += _scalar.__all__ +__all__ += _shape.__all__ +__all__ += _ufunc.__all__ diff --git a/optype/numpy/_any_array.py b/optype/numpy/_any_array.py index 2420c08f..f5aa702b 100644 --- a/optype/numpy/_any_array.py +++ b/optype/numpy/_any_array.py @@ -16,58 +16,74 @@ from typing_extensions import Any, Protocol, TypeVar, runtime_checkable -__all__ = ( - 'AnyArray', - 'AnyBoolArray', - 'AnyByteArray', - 'AnyBytesArray', - 'AnyCDoubleArray', - 'AnyCLongDoubleArray', - 'AnyCSingleArray', - 'AnyCharacterArray', - 'AnyComplex64Array', - 'AnyComplex128Array', - 'AnyComplexFloatingArray', - 'AnyDateTime64Array', - 'AnyDoubleArray', - 'AnyFlexibleArray', - 'AnyFloat16Array', - 'AnyFloat32Array', - 'AnyFloat64Array', - 'AnyFloatingArray', +# ruff: noqa: RUF022 +__all__: list[str] = [] +__all__ += [ 'AnyGenericArray', - 'AnyHalfArray', + 'AnyNumberArray', + 'AnyIntegerArray', + 'AnyUnsignedIntegerArray', + 'AnySignedIntegerArray', 'AnyInexactArray', + 'AnyFloatingArray', + 'AnyComplexFloatingArray', + 'AnyFlexibleArray', + 'AnyCharacterArray', +] +__all__ += [ + 'AnyUInt8Array', + 'AnyUInt8Array', + 'AnyUInt16Array', + 'AnyUInt32Array', + 'AnyUInt64Array', + 'AnyUIntPArray', + 'AnyUByteArray', + 'AnyUShortArray', + 'AnyUIntCArray', + 'AnyULongArray', + 'AnyULongLongArray', +] +__all__ += [ + 'AnyIntegerArray', + 'AnyInt8Array', 'AnyInt8Array', 'AnyInt16Array', 'AnyInt32Array', 'AnyInt64Array', - 'AnyIntCArray', 'AnyIntPArray', - 'AnyIntegerArray', + 'AnyByteArray', + 'AnyShortArray', + 'AnyIntCArray', 'AnyLongArray', - 'AnyLongDoubleArray', 'AnyLongLongArray', - 'AnyNumberArray', - 'AnyObjectArray', - 'AnyShortArray', - 'AnySignedIntegerArray', +] +__all__ += [ + 'AnyFloatingArray', + 'AnyFloat16Array', + 'AnyFloat32Array', + 'AnyFloat64Array', + 'AnyHalfArray', 'AnySingleArray', + 'AnyLongDoubleArray', +] +__all__ += [ + 'AnyComplex64Array', + 'AnyComplex128Array', + 'AnyCSingleArray', + 'AnyCDoubleArray', + 'AnyCLongDoubleArray', +] +__all__ += [ + 'AnyBytesArray', 'AnyStrArray', - 'AnyTimeDelta64Array', - 'AnyUByteArray', - 'AnyUInt8Array', - 'AnyUInt16Array', - 'AnyUInt32Array', - 'AnyUInt64Array', - 'AnyUIntCArray', - 'AnyUIntPArray', - 'AnyULongArray', - 'AnyULongLongArray', - 'AnyUShortArray', - 'AnyUnsignedIntegerArray', 'AnyVoidArray', -) +] +__all__ += [ + 'AnyBoolArray', + 'AnyDateTime64Array', + 'AnyTimeDelta64Array', + 'AnyObjectArray', +] _NP_V2: Final[bool] = np.__version__.startswith('2.') @@ -106,6 +122,7 @@ def __getitem__(self, i: int, /) -> T_co | _PyArray[T_co]: ... | _AnyPY[object] ) AnyGenericArray: _Type = AnyArray[ND, np.generic] +__all__ += ['AnyArray', 'AnyGenericArray'] # generic :> number ST_iufc = TypeVar('ST_iufc', bound=np.number[Any], default=Any) @@ -195,20 +212,6 @@ def __getitem__(self, i: int, /) -> T_co | _PyArray[T_co]: ... AnyCDoubleArray: _Type = _Any3[ND, np.cdouble, complex] AnyCLongDoubleArray: _Type = _AnyNP[ND, np.clongdouble] -# generic :> datetime64 -AnyDateTime64Array: _Type = _AnyNP[ND, np.datetime64] -# generic :> timedelta64 -AnyTimeDelta64Array: _Type = _AnyNP[ND, np.timedelta64] - -# generic :> flexible -AnyFlexibleArray: _Type = ( - _AnyNP[ND, np.flexible] - | _AnyPY[str] - | _AnyPY[bytes] - | _ct.Flexible -) -# generic :> flexible :> void -AnyVoidArray: _Type = _AnyNP[ND, np.void] # generic :> flexible :> character AnyCharacterArray: _Type = ( _AnyNP[ND, np.character] @@ -221,7 +224,24 @@ def __getitem__(self, i: int, /) -> T_co | _PyArray[T_co]: ... # generic :> flexible :> character :> str_ AnyStrArray: _Type = _Any3[ND, np.str_, str] +# generic :> flexible +AnyFlexibleArray: _Type = ( + _AnyNP[ND, np.flexible] + | _AnyPY[str] + | _AnyPY[bytes] + | _ct.Flexible +) +# generic :> flexible :> void +AnyVoidArray: _Type = _AnyNP[ND, np.void] + # generic :> bool AnyBoolArray: _Type = _Any4[ND, _x.Bool, bool, _ct.Bool] +# generic :> datetime64 +AnyDateTime64Array: _Type = _AnyNP[ND, np.datetime64] +# generic :> timedelta64 +AnyTimeDelta64Array: _Type = _AnyNP[ND, np.timedelta64] # generic :> object_ AnyObjectArray: _Type = _Any4[ND, np.object_, object, _ct.Object] + +# generic :> {StringDType.type} +# TODO diff --git a/optype/numpy/_any_dtype.py b/optype/numpy/_any_dtype.py index bac1a576..da248103 100644 --- a/optype/numpy/_any_dtype.py +++ b/optype/numpy/_any_dtype.py @@ -22,6 +22,75 @@ from typing_extensions import TypeVar +# ruff: noqa: RUF022 +__all__: list[str] = [] +__all__ += [ + 'AnyGenericDType', + 'AnyNumberDType', + 'AnyIntegerDType', + 'AnyUnsignedIntegerDType', + 'AnySignedIntegerDType', + 'AnyInexactDType', + 'AnyFloatingDType', + 'AnyComplexFloatingDType', + 'AnyFlexibleDType', + 'AnyCharacterDType', +] +__all__ += [ + 'AnyUInt8DType', + 'AnyUInt8DType', + 'AnyUInt16DType', + 'AnyUInt32DType', + 'AnyUInt64DType', + 'AnyUIntPDType', + 'AnyUByteDType', + 'AnyUShortDType', + 'AnyUIntCDType', + 'AnyULongDType', + 'AnyULongLongDType', +] +__all__ += [ + 'AnyIntegerDType', + 'AnyInt8DType', + 'AnyInt8DType', + 'AnyInt16DType', + 'AnyInt32DType', + 'AnyInt64DType', + 'AnyIntPDType', + 'AnyByteDType', + 'AnyShortDType', + 'AnyIntCDType', + 'AnyLongDType', + 'AnyLongLongDType', +] +__all__ += [ + 'AnyFloatingDType', + 'AnyFloat16DType', + 'AnyFloat32DType', + 'AnyFloat64DType', + 'AnyHalfDType', + 'AnySingleDType', + 'AnyLongDoubleDType', +] +__all__ += [ + 'AnyComplex64DType', + 'AnyComplex128DType', + 'AnyCSingleDType', + 'AnyCDoubleDType', + 'AnyCLongDoubleDType', +] +__all__ += [ + 'AnyBytesDType', + 'AnyStrDType', + 'AnyVoidDType', +] +__all__ += [ + 'AnyBoolDType', + 'AnyDateTime64DType', + 'AnyTimeDelta64DType', + 'AnyObjectDType', +] + _NP_V2: Final = np.__version__.startswith('2.') diff --git a/optype/numpy/_any_scalar.py b/optype/numpy/_any_scalar.py index 739f7aea..7f7c09e5 100644 --- a/optype/numpy/_any_scalar.py +++ b/optype/numpy/_any_scalar.py @@ -9,6 +9,59 @@ import optype.numpy._ctype as _ct +__all__ = ( + 'AnyBool', + 'AnyByte', + 'AnyBytes', + 'AnyCDouble', + 'AnyCLongDouble', + 'AnyCSingle', + 'AnyCharacter', + 'AnyComplex64', + 'AnyComplex128', + 'AnyComplexFloating', + 'AnyDateTime64', + 'AnyDouble', + 'AnyFlexible', + 'AnyFloat16', + 'AnyFloat32', + 'AnyFloat64', + 'AnyFloating', + 'AnyGeneric', + 'AnyHalf', + 'AnyInexact', + 'AnyInt8', + 'AnyInt16', + 'AnyInt32', + 'AnyInt64', + 'AnyIntC', + 'AnyIntP', + 'AnyInteger', + 'AnyLong', + 'AnyLongDouble', + 'AnyLongLong', + 'AnyNumber', + 'AnyObject', + 'AnyShort', + 'AnySignedInteger', + 'AnySingle', + 'AnyStr', + 'AnyTimeDelta64', + 'AnyUByte', + 'AnyUInt8', + 'AnyUInt16', + 'AnyUInt32', + 'AnyUInt64', + 'AnyUIntC', + 'AnyUIntP', + 'AnyULong', + 'AnyULongLong', + 'AnyUShort', + 'AnyUnsignedInteger', + 'AnyVoid', +) + + _NP_V2: Final[bool] = np.__version__.startswith('2.') diff --git a/optype/numpy/_array.py b/optype/numpy/_array.py index 1cb278e8..368fb576 100644 --- a/optype/numpy/_array.py +++ b/optype/numpy/_array.py @@ -27,14 +27,14 @@ from collections.abc import Mapping -__all__ = ( +__all__ = [ 'Array', 'CanArray', 'CanArrayFinalize', 'CanArrayWrap', 'HasArrayInterface', 'HasArrayPriority', -) +] _NP_VERSION: Final = np.__version__ @@ -69,8 +69,7 @@ Array: TypeAlias = np.ndarray[_ShapeT, np.dtype[_SCT]] -# TODO: Make `_ShapeT` covariant after: -# https://github.com/numpy/numpy/pull/26081 +# TODO: Make `_ShapeT` covariant on `numpy>=2.1` @runtime_checkable class CanArray(Protocol[_ShapeT, _SCT_co]): @overload diff --git a/optype/numpy/_compat.py b/optype/numpy/_compat.py index e303023d..fd674a9b 100644 --- a/optype/numpy/_compat.py +++ b/optype/numpy/_compat.py @@ -5,7 +5,7 @@ import numpy as np -__all__ = 'Bool', 'Long', 'ULong' +__all__ = ['Bool', 'Long', 'ULong'] _NP_V2: Final[bool] = np.__version__.startswith('2.') diff --git a/optype/numpy/_ctype.py b/optype/numpy/_ctype.py index 04879432..f57f7681 100644 --- a/optype/numpy/_ctype.py +++ b/optype/numpy/_ctype.py @@ -43,59 +43,34 @@ Never as Void, ) -__all__ = ( - 'Bool', - 'Byte', - 'Bytes', - 'CDouble', - 'CLongDouble', - 'CSingle', - 'Character', - 'Complex64', - 'Complex128', - 'ComplexFloating', - 'DateTime64', - 'Double', - 'Flexible', - 'Float16', - 'Float32', - 'Float64', - 'Floating', - 'Generic', - 'Half', - 'Inexact', - 'Int8', - 'Int16', - 'Int32', - 'Int64', - 'IntC', - 'IntP', - 'Integer', - 'Long', - 'LongDouble', - 'LongDouble0', - 'LongLong', - 'Number', - 'Short', - 'SignedInteger', - 'Single', - 'Str', - 'String', - 'TimeDelta64', - 'UByte', - 'UInt0', - 'UInt8', - 'UInt16', - 'UInt32', - 'UInt64', - 'UIntC', - 'UIntP', - 'ULong', - 'ULongLong', - 'UShort', + +# ruff: noqa: RUF022 +__all__: list[str] = [] +__all__ += ['Generic', 'Number', 'Integer', 'Inexact'] +__all__ += [ 'UnsignedInteger', - 'Void', -) + 'UInt8', 'UInt16', 'UInt32', 'UInt64', 'UIntP', 'UInt0', + 'UByte', 'UShort', 'UIntC', 'ULong', 'ULongLong', +] # fmt: skip +__all__ += [ + 'SignedInteger', + 'Int8', 'Int16', 'Int32', 'Int64', 'IntP', + 'Byte', 'Short', 'IntC', 'Long', 'LongLong', +] # fmt: skip +__all__ += [ + 'Floating', + 'Float16', 'Float32', 'Float64', + 'Half', 'Single', 'Double', 'LongDouble', 'LongDouble0', +] # fmt: skip +__all__ += [ + 'ComplexFloating', + 'Complex64', 'Complex128', + 'CSingle', 'CDouble', 'CLongDouble', +] # fmt: skip +__all__ += ['Character', 'Bytes', 'Str'] +__all__ += ['Flexible', 'Void'] +__all__ += ['Bool', 'DateTime64', 'TimeDelta64', 'Object'] +__all__ += ['String'] UByte: TypeAlias = ct.c_ubyte diff --git a/optype/numpy/_dtype.py b/optype/numpy/_dtype.py index 814b8a7f..95a6213a 100644 --- a/optype/numpy/_dtype.py +++ b/optype/numpy/_dtype.py @@ -10,7 +10,7 @@ from typing_extensions import Protocol, TypeVar, runtime_checkable -__all__ = 'DType', 'HasDType' +__all__ = ['DType', 'HasDType'] _ST = TypeVar('_ST', bound=np.generic, default=Any) diff --git a/optype/numpy/_scalar.py b/optype/numpy/_scalar.py index 72b9c316..d1390610 100644 --- a/optype/numpy/_scalar.py +++ b/optype/numpy/_scalar.py @@ -35,6 +35,8 @@ from numpy._core.multiarray import flagsobj +__all__ = ['Scalar'] + _L0: TypeAlias = Literal[0] _L1: TypeAlias = Literal[1] diff --git a/optype/numpy/_shape.py b/optype/numpy/_shape.py index 020be941..363a9560 100644 --- a/optype/numpy/_shape.py +++ b/optype/numpy/_shape.py @@ -8,10 +8,10 @@ from typing_extensions import TypeVar, TypeVarTuple, Unpack -__all__ = ( +__all__ = [ 'AtLeast0D', 'AtLeast1D', 'AtLeast2D', 'AtLeast3D', 'AtMost0D', 'AtMost1D', 'AtMost2D', 'AtMost3D', -) # fmt: skip +] # fmt: skip # 0D (scalar) diff --git a/optype/numpy/_ufunc.py b/optype/numpy/_ufunc.py index c2e6928b..7f4fe90c 100644 --- a/optype/numpy/_ufunc.py +++ b/optype/numpy/_ufunc.py @@ -19,11 +19,7 @@ import optype as opt -__all__ = ( - 'CanArrayFunction', - 'CanArrayUFunc', - 'UFunc', -) +__all__ = ['CanArrayFunction', 'CanArrayUFunc', 'UFunc'] _NP_V2: Final[bool] = np.__version__.startswith('2.')