diff --git a/src/awkward/_do/meta.py b/src/awkward/_do/meta.py index 09ddca9dfb..272c9e29ad 100644 --- a/src/awkward/_do/meta.py +++ b/src/awkward/_do/meta.py @@ -3,67 +3,13 @@ from __future__ import annotations from awkward._nplikes.numpy_like import NumpyMetadata -from awkward._typing import TYPE_CHECKING, TypeGuard, TypeVar +from awkward._typing import TYPE_CHECKING if TYPE_CHECKING: - from awkward._meta.bitmaskedmeta import BitMaskedMeta - from awkward._meta.bytemaskedmeta import ByteMaskedMeta - from awkward._meta.indexedmeta import IndexedMeta - from awkward._meta.indexedoptionmeta import IndexedOptionMeta - from awkward._meta.listmeta import ListMeta - from awkward._meta.listoffsetmeta import ListOffsetMeta from awkward._meta.meta import Meta - from awkward._meta.numpymeta import NumpyMeta - from awkward._meta.recordmeta import RecordMeta - from awkward._meta.regularmeta import RegularMeta - from awkward._meta.unionmeta import UnionMeta - from awkward._meta.unmaskedmeta import UnmaskedMeta np = NumpyMetadata.instance() -T = TypeVar("T", bound="Meta") - - -def is_option( - meta: Meta -) -> TypeGuard[IndexedOptionMeta | BitMaskedMeta | ByteMaskedMeta | UnmaskedMeta]: - return meta.is_option - - -def is_list(meta: Meta) -> TypeGuard[RegularMeta | ListOffsetMeta | ListMeta]: - return meta.is_list - - -def is_numpy(meta: Meta) -> TypeGuard[NumpyMeta]: - return meta.is_numpy - - -def is_regular(meta: Meta) -> TypeGuard[RegularMeta]: - return meta.is_regular - - -def is_union(meta: Meta) -> TypeGuard[UnionMeta]: - return meta.is_union - - -def is_record(meta: Meta) -> TypeGuard[RecordMeta]: - return meta.is_record - - -def is_indexed(meta: Meta) -> TypeGuard[IndexedOptionMeta, IndexedMeta]: - return meta.is_indexed - - -# FIXME: narrow this to have `is_tuple` be a const True -def is_record_tuple(meta: Meta) -> TypeGuard[RecordMeta]: - return meta.is_record and meta.is_tuple - - -# FIXME: narrow this to have `is_tuple` be a const False -def is_record_record(meta: Meta) -> TypeGuard[RecordMeta]: - return meta.is_record and not meta.is_tuple - - def mergeable(one: Meta, two: Meta, mergebool: bool = True) -> bool: return one._mergeable_next(two, mergebool=mergebool) diff --git a/src/awkward/_meta/bitmaskedmeta.py b/src/awkward/_meta/bitmaskedmeta.py index 55e70ef3a4..fc8cb6dc25 100644 --- a/src/awkward/_meta/bitmaskedmeta.py +++ b/src/awkward/_meta/bitmaskedmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/bytemaskedmeta.py b/src/awkward/_meta/bytemaskedmeta.py index 6945ddd8fd..e343b31b1b 100644 --- a/src/awkward/_meta/bytemaskedmeta.py +++ b/src/awkward/_meta/bytemaskedmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/indexedmeta.py b/src/awkward/_meta/indexedmeta.py index cf5f0aac48..e2ad858921 100644 --- a/src/awkward/_meta/indexedmeta.py +++ b/src/awkward/_meta/indexedmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/indexedoptionmeta.py b/src/awkward/_meta/indexedoptionmeta.py index 5891a36e91..3834cbdbdd 100644 --- a/src/awkward/_meta/indexedoptionmeta.py +++ b/src/awkward/_meta/indexedoptionmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/listmeta.py b/src/awkward/_meta/listmeta.py index 887f6b162a..cec5ba8dfe 100644 --- a/src/awkward/_meta/listmeta.py +++ b/src/awkward/_meta/listmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_list, is_numpy, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_list, is_numpy, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/listoffsetmeta.py b/src/awkward/_meta/listoffsetmeta.py index f82918e1c6..af77d974c7 100644 --- a/src/awkward/_meta/listoffsetmeta.py +++ b/src/awkward/_meta/listoffsetmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_list, is_numpy, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_list, is_numpy, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/meta.py b/src/awkward/_meta/meta.py index 31ddb6b7fc..c2f399fad0 100644 --- a/src/awkward/_meta/meta.py +++ b/src/awkward/_meta/meta.py @@ -3,13 +3,68 @@ from __future__ import annotations from awkward._typing import ( + TYPE_CHECKING, ClassVar, JSONMapping, JSONSerializable, Self, + TypeGuard, ) from awkward._util import UNSET, Sentinel +if TYPE_CHECKING: + from awkward._meta.bitmaskedmeta import BitMaskedMeta + from awkward._meta.bytemaskedmeta import ByteMaskedMeta + from awkward._meta.indexedmeta import IndexedMeta + from awkward._meta.indexedoptionmeta import IndexedOptionMeta + from awkward._meta.listmeta import ListMeta + from awkward._meta.listoffsetmeta import ListOffsetMeta + from awkward._meta.numpymeta import NumpyMeta + from awkward._meta.recordmeta import RecordMeta + from awkward._meta.regularmeta import RegularMeta + from awkward._meta.unionmeta import UnionMeta + from awkward._meta.unmaskedmeta import UnmaskedMeta + + +def is_option( + meta: Meta +) -> TypeGuard[IndexedOptionMeta | BitMaskedMeta | ByteMaskedMeta | UnmaskedMeta]: + return meta.is_option + + +def is_list(meta: Meta) -> TypeGuard[RegularMeta | ListOffsetMeta | ListMeta]: + return meta.is_list + + +def is_numpy(meta: Meta) -> TypeGuard[NumpyMeta]: + return meta.is_numpy + + +def is_regular(meta: Meta) -> TypeGuard[RegularMeta]: + return meta.is_regular + + +def is_union(meta: Meta) -> TypeGuard[UnionMeta]: + return meta.is_union + + +def is_record(meta: Meta) -> TypeGuard[RecordMeta]: + return meta.is_record + + +def is_indexed(meta: Meta) -> TypeGuard[IndexedOptionMeta | IndexedMeta]: + return meta.is_indexed + + +# FIXME: narrow this to have `is_tuple` be a const True +def is_record_tuple(meta: Meta) -> TypeGuard[RecordMeta]: + return meta.is_record and meta.is_tuple + + +# FIXME: narrow this to have `is_tuple` be a const False +def is_record_record(meta: Meta) -> TypeGuard[RecordMeta]: + return meta.is_record and not meta.is_tuple + class Meta: is_numpy: ClassVar[bool] = False diff --git a/src/awkward/_meta/numpymeta.py b/src/awkward/_meta/numpymeta.py index 0fa674b3b5..7ac9e93bb3 100644 --- a/src/awkward/_meta/numpymeta.py +++ b/src/awkward/_meta/numpymeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_numpy, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_numpy, is_option from awkward._nplikes.numpy_like import NumpyMetadata from awkward._nplikes.shape import ShapeItem from awkward._parameters import type_parameters_equal diff --git a/src/awkward/_meta/recordmeta.py b/src/awkward/_meta/recordmeta.py index 61cad64ed5..a43b311168 100644 --- a/src/awkward/_meta/recordmeta.py +++ b/src/awkward/_meta/recordmeta.py @@ -2,14 +2,14 @@ from __future__ import annotations -from awkward._do.meta import ( +from awkward._meta.meta import ( + Meta, is_indexed, is_option, is_record, is_record_record, is_record_tuple, ) -from awkward._meta.meta import Meta from awkward._parameters import type_parameters_equal from awkward._regularize import is_integer from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/regularmeta.py b/src/awkward/_meta/regularmeta.py index 2b91d46d4e..5962adeb33 100644 --- a/src/awkward/_meta/regularmeta.py +++ b/src/awkward/_meta/regularmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_list, is_numpy, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_list, is_numpy, is_option from awkward._nplikes.shape import ShapeItem from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/_meta/unmaskedmeta.py b/src/awkward/_meta/unmaskedmeta.py index d6a03379c3..65c41c123f 100644 --- a/src/awkward/_meta/unmaskedmeta.py +++ b/src/awkward/_meta/unmaskedmeta.py @@ -2,8 +2,7 @@ from __future__ import annotations -from awkward._do.meta import is_indexed, is_option -from awkward._meta.meta import Meta +from awkward._meta.meta import Meta, is_indexed, is_option from awkward._parameters import type_parameters_equal from awkward._typing import JSONSerializable diff --git a/src/awkward/contents/listarray.py b/src/awkward/contents/listarray.py index cee165cf83..b7f04eedc9 100644 --- a/src/awkward/contents/listarray.py +++ b/src/awkward/contents/listarray.py @@ -23,10 +23,10 @@ Any, Callable, Final, + ImplementsReadOnlyProperty, Self, SupportsIndex, final, -ImplementsReadOnlyProperty ) from awkward._util import UNSET from awkward.contents.content import (