Skip to content

collections

Centralize collection-kind detection, item-type extraction, and method capability records for list, tuple, set, and dictionary operations.

Classes:

Functions:

CollectionKind

Bases: str, Enum

collection_contains_types

collection_contains_types(
    type_: DataType | None,
) -> tuple[DataType, ...]

Dictionaries use key containment; other collections use value/element containment. parameters: type_: type: astx.DataType | None returns: type: tuple[astx.DataType, Ellipsis]

Source code in packages/irx/src/irx/analysis/collections.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
@public
@typechecked
def collection_contains_types(
    type_: astx.DataType | None,
) -> tuple[astx.DataType, ...]:
    """
    title: Return accepted containment probe types for one collection.
    summary: >-
      Dictionaries use key containment; other collections use value/element
      containment.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: tuple[astx.DataType, Ellipsis]
    """
    if isinstance(type_, astx.DictType) and isinstance(
        type_.key_type,
        astx.DataType,
    ):
        return (type_.key_type,)
    return collection_value_types(type_)

collection_kind

collection_kind(
    type_: DataType | None,
) -> CollectionKind | None
Source code in packages/irx/src/irx/analysis/collections.py
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@public
@typechecked
def collection_kind(
    type_: astx.DataType | None,
) -> CollectionKind | None:
    """
    title: Return the collection kind represented by one type.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: CollectionKind | None
    """
    if isinstance(type_, astx.ListType):
        return CollectionKind.LIST
    if isinstance(type_, astx.TupleType):
        return CollectionKind.TUPLE
    if isinstance(type_, astx.SetType):
        return CollectionKind.SET
    if isinstance(type_, astx.DictType):
        return CollectionKind.DICT
    return None
collection_supports_sequence_search(
    type_: DataType | None,
) -> bool
Source code in packages/irx/src/irx/analysis/collections.py
133
134
135
136
137
138
139
140
141
142
143
144
145
146
@public
@typechecked
def collection_supports_sequence_search(
    type_: astx.DataType | None,
) -> bool:
    """
    title: Return whether a collection supports index/count queries.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: bool
    """
    return isinstance(type_, (astx.ListType, astx.TupleType))

collection_value_types

collection_value_types(
    type_: DataType | None,
) -> tuple[DataType, ...]

Lists and sets expose their element type, tuples expose all positional member types, and dictionaries expose their value type. parameters: type_: type: astx.DataType | None returns: type: tuple[astx.DataType, Ellipsis]

Source code in packages/irx/src/irx/analysis/collections.py
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
@public
@typechecked
def collection_value_types(
    type_: astx.DataType | None,
) -> tuple[astx.DataType, ...]:
    """
    title: Return value-like element types for one collection.
    summary: >-
      Lists and sets expose their element type, tuples expose all positional
      member types, and dictionaries expose their value type.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: tuple[astx.DataType, Ellipsis]
    """
    list_type = list_element_type(type_)
    if list_type is not None:
        return (list_type,)
    if isinstance(type_, astx.TupleType):
        return tuple(
            member
            for member in cast(list[object], type_.element_types)
            if isinstance(member, astx.DataType)
        )
    if isinstance(type_, astx.SetType) and isinstance(
        type_.element_type,
        astx.DataType,
    ):
        return (type_.element_type,)
    if isinstance(type_, astx.DictType) and isinstance(
        type_.value_type,
        astx.DataType,
    ):
        return (type_.value_type,)
    return ()

is_collection_type

is_collection_type(type_: DataType | None) -> bool
Source code in packages/irx/src/irx/analysis/collections.py
57
58
59
60
61
62
63
64
65
66
67
68
@public
@typechecked
def is_collection_type(type_: astx.DataType | None) -> bool:
    """
    title: Return whether one type is a supported collection type.
    parameters:
      type_:
        type: astx.DataType | None
    returns:
      type: bool
    """
    return collection_kind(type_) is not None