cocoindex 0.1.43__cp311-cp311-macosx_11_0_arm64.whl → 0.1.45__cp311-cp311-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cocoindex/__init__.py +2 -1
- cocoindex/_engine.cpython-311-darwin.so +0 -0
- cocoindex/auth_registry.py +7 -3
- cocoindex/cli.py +186 -67
- cocoindex/convert.py +93 -52
- cocoindex/flow.py +303 -132
- cocoindex/functions.py +17 -4
- cocoindex/index.py +6 -0
- cocoindex/lib.py +14 -9
- cocoindex/llm.py +4 -0
- cocoindex/op.py +126 -61
- cocoindex/query.py +40 -17
- cocoindex/runtime.py +9 -4
- cocoindex/setting.py +35 -12
- cocoindex/setup.py +7 -3
- cocoindex/sources.py +3 -1
- cocoindex/storages.py +50 -7
- cocoindex/tests/test_convert.py +255 -63
- cocoindex/typing.py +116 -70
- cocoindex/utils.py +10 -2
- {cocoindex-0.1.43.dist-info → cocoindex-0.1.45.dist-info}/METADATA +3 -1
- cocoindex-0.1.45.dist-info/RECORD +27 -0
- cocoindex-0.1.43.dist-info/RECORD +0 -27
- {cocoindex-0.1.43.dist-info → cocoindex-0.1.45.dist-info}/WHEEL +0 -0
- {cocoindex-0.1.43.dist-info → cocoindex-0.1.45.dist-info}/entry_points.txt +0 -0
- {cocoindex-0.1.43.dist-info → cocoindex-0.1.45.dist-info}/licenses/LICENSE +0 -0
cocoindex/typing.py
CHANGED
@@ -5,14 +5,28 @@ import datetime
|
|
5
5
|
import types
|
6
6
|
import inspect
|
7
7
|
import uuid
|
8
|
-
from typing import
|
8
|
+
from typing import (
|
9
|
+
Annotated,
|
10
|
+
NamedTuple,
|
11
|
+
Any,
|
12
|
+
TypeVar,
|
13
|
+
TYPE_CHECKING,
|
14
|
+
overload,
|
15
|
+
Sequence,
|
16
|
+
Generic,
|
17
|
+
Literal,
|
18
|
+
Protocol,
|
19
|
+
)
|
20
|
+
|
9
21
|
|
10
22
|
class VectorInfo(NamedTuple):
|
11
23
|
dim: int | None
|
12
24
|
|
25
|
+
|
13
26
|
class TypeKind(NamedTuple):
|
14
27
|
kind: str
|
15
28
|
|
29
|
+
|
16
30
|
class TypeAttr:
|
17
31
|
key: str
|
18
32
|
value: Any
|
@@ -21,24 +35,31 @@ class TypeAttr:
|
|
21
35
|
self.key = key
|
22
36
|
self.value = value
|
23
37
|
|
38
|
+
|
24
39
|
Annotation = TypeKind | TypeAttr | VectorInfo
|
25
40
|
|
26
|
-
Float32 = Annotated[float, TypeKind(
|
27
|
-
Float64 = Annotated[float, TypeKind(
|
28
|
-
Range = Annotated[tuple[int, int], TypeKind(
|
29
|
-
Json = Annotated[Any, TypeKind(
|
30
|
-
LocalDateTime = Annotated[datetime.datetime, TypeKind(
|
31
|
-
OffsetDateTime = Annotated[datetime.datetime, TypeKind(
|
41
|
+
Float32 = Annotated[float, TypeKind("Float32")]
|
42
|
+
Float64 = Annotated[float, TypeKind("Float64")]
|
43
|
+
Range = Annotated[tuple[int, int], TypeKind("Range")]
|
44
|
+
Json = Annotated[Any, TypeKind("Json")]
|
45
|
+
LocalDateTime = Annotated[datetime.datetime, TypeKind("LocalDateTime")]
|
46
|
+
OffsetDateTime = Annotated[datetime.datetime, TypeKind("OffsetDateTime")]
|
32
47
|
|
33
48
|
if TYPE_CHECKING:
|
34
|
-
T_co = TypeVar(
|
35
|
-
Dim_co = TypeVar(
|
49
|
+
T_co = TypeVar("T_co", covariant=True)
|
50
|
+
Dim_co = TypeVar("Dim_co", bound=int, covariant=True)
|
36
51
|
|
37
|
-
class Vector(
|
52
|
+
class Vector(Protocol, Generic[T_co, Dim_co]):
|
38
53
|
"""Vector[T, Dim] is a special typing alias for a list[T] with optional dimension info"""
|
54
|
+
|
55
|
+
def __getitem__(self, index: int) -> T_co: ...
|
56
|
+
def __len__(self) -> int: ...
|
57
|
+
|
39
58
|
else:
|
59
|
+
|
40
60
|
class Vector: # type: ignore[unreachable]
|
41
|
-
"""
|
61
|
+
"""A special typing alias for a list[T] with optional dimension info"""
|
62
|
+
|
42
63
|
def __class_getitem__(self, params):
|
43
64
|
if not isinstance(params, tuple):
|
44
65
|
# Only element type provided
|
@@ -51,40 +72,48 @@ else:
|
|
51
72
|
dim = typing.get_args(dim)[0] # Extract the literal value
|
52
73
|
return Annotated[list[elem_type], VectorInfo(dim=dim)]
|
53
74
|
|
54
|
-
|
55
|
-
|
75
|
+
|
76
|
+
TABLE_TYPES: tuple[str, str] = ("KTable", "LTable")
|
77
|
+
KEY_FIELD_NAME: str = "_key"
|
56
78
|
|
57
79
|
ElementType = type | tuple[type, type]
|
58
80
|
|
59
|
-
|
81
|
+
|
82
|
+
def is_namedtuple_type(t: type) -> bool:
|
60
83
|
return isinstance(t, type) and issubclass(t, tuple) and hasattr(t, "_fields")
|
61
84
|
|
62
|
-
|
63
|
-
|
85
|
+
|
86
|
+
def _is_struct_type(t: ElementType | None) -> bool:
|
87
|
+
return isinstance(t, type) and (
|
88
|
+
dataclasses.is_dataclass(t) or is_namedtuple_type(t)
|
89
|
+
)
|
90
|
+
|
64
91
|
|
65
92
|
@dataclasses.dataclass
|
66
93
|
class AnalyzedTypeInfo:
|
67
94
|
"""
|
68
95
|
Analyzed info of a Python type.
|
69
96
|
"""
|
97
|
+
|
70
98
|
kind: str
|
71
99
|
vector_info: VectorInfo | None # For Vector
|
72
|
-
elem_type: ElementType | None
|
100
|
+
elem_type: ElementType | None # For Vector and Table
|
73
101
|
|
74
|
-
key_type: type | None
|
75
|
-
struct_type: type | None
|
102
|
+
key_type: type | None # For element of KTable
|
103
|
+
struct_type: type | None # For Struct, a dataclass or namedtuple
|
76
104
|
|
77
105
|
attrs: dict[str, Any] | None
|
78
106
|
nullable: bool = False
|
79
107
|
|
80
|
-
|
108
|
+
|
109
|
+
def analyze_type_info(t: Any) -> AnalyzedTypeInfo:
|
81
110
|
"""
|
82
111
|
Analyze a Python type and return the analyzed info.
|
83
112
|
"""
|
84
113
|
if isinstance(t, tuple) and len(t) == 2:
|
85
|
-
|
86
|
-
result = analyze_type_info(
|
87
|
-
result.key_type =
|
114
|
+
kt, vt = t
|
115
|
+
result = analyze_type_info(vt)
|
116
|
+
result.key_type = kt
|
88
117
|
return result
|
89
118
|
|
90
119
|
annotations: tuple[Annotation, ...] = ()
|
@@ -97,19 +126,22 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
|
|
97
126
|
t = t.__origin__
|
98
127
|
elif base_type is types.UnionType:
|
99
128
|
possible_types = typing.get_args(t)
|
100
|
-
non_none_types = [
|
129
|
+
non_none_types = [
|
130
|
+
arg for arg in possible_types if arg not in (None, types.NoneType)
|
131
|
+
]
|
101
132
|
if len(non_none_types) != 1:
|
102
133
|
raise ValueError(
|
103
|
-
f"Expect exactly one non-None choice for Union type, but got {len(non_none_types)}: {t}"
|
134
|
+
f"Expect exactly one non-None choice for Union type, but got {len(non_none_types)}: {t}"
|
135
|
+
)
|
104
136
|
t = non_none_types[0]
|
105
137
|
if len(possible_types) > 1:
|
106
138
|
nullable = True
|
107
139
|
else:
|
108
140
|
break
|
109
141
|
|
110
|
-
attrs = None
|
111
|
-
vector_info = None
|
112
|
-
kind = None
|
142
|
+
attrs: dict[str, Any] | None = None
|
143
|
+
vector_info: VectorInfo | None = None
|
144
|
+
kind: str | None = None
|
113
145
|
for attr in annotations:
|
114
146
|
if isinstance(attr, TypeAttr):
|
115
147
|
if attrs is None:
|
@@ -120,15 +152,15 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
|
|
120
152
|
elif isinstance(attr, TypeKind):
|
121
153
|
kind = attr.kind
|
122
154
|
|
123
|
-
struct_type = None
|
124
|
-
elem_type = None
|
125
|
-
key_type = None
|
155
|
+
struct_type: type | None = None
|
156
|
+
elem_type: ElementType | None = None
|
157
|
+
key_type: type | None = None
|
126
158
|
if _is_struct_type(t):
|
127
159
|
struct_type = t
|
128
160
|
|
129
161
|
if kind is None:
|
130
|
-
kind =
|
131
|
-
elif kind !=
|
162
|
+
kind = "Struct"
|
163
|
+
elif kind != "Struct":
|
132
164
|
raise ValueError(f"Unexpected type kind for struct: {kind}")
|
133
165
|
elif base_type is collections.abc.Sequence or base_type is list:
|
134
166
|
args = typing.get_args(t)
|
@@ -136,40 +168,42 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
|
|
136
168
|
|
137
169
|
if kind is None:
|
138
170
|
if _is_struct_type(elem_type):
|
139
|
-
kind =
|
171
|
+
kind = "LTable"
|
140
172
|
if vector_info is not None:
|
141
|
-
raise ValueError(
|
173
|
+
raise ValueError(
|
174
|
+
"Vector element must be a simple type, not a struct"
|
175
|
+
)
|
142
176
|
else:
|
143
|
-
kind =
|
177
|
+
kind = "Vector"
|
144
178
|
if vector_info is None:
|
145
179
|
vector_info = VectorInfo(dim=None)
|
146
|
-
elif not (kind ==
|
180
|
+
elif not (kind == "Vector" or kind in TABLE_TYPES):
|
147
181
|
raise ValueError(f"Unexpected type kind for list: {kind}")
|
148
182
|
elif base_type is collections.abc.Mapping or base_type is dict:
|
149
183
|
args = typing.get_args(t)
|
150
184
|
elem_type = (args[0], args[1])
|
151
|
-
kind =
|
185
|
+
kind = "KTable"
|
152
186
|
elif kind is None:
|
153
187
|
if t is bytes:
|
154
|
-
kind =
|
188
|
+
kind = "Bytes"
|
155
189
|
elif t is str:
|
156
|
-
kind =
|
190
|
+
kind = "Str"
|
157
191
|
elif t is bool:
|
158
|
-
kind =
|
192
|
+
kind = "Bool"
|
159
193
|
elif t is int:
|
160
|
-
kind =
|
194
|
+
kind = "Int64"
|
161
195
|
elif t is float:
|
162
|
-
kind =
|
196
|
+
kind = "Float64"
|
163
197
|
elif t is uuid.UUID:
|
164
|
-
kind =
|
198
|
+
kind = "Uuid"
|
165
199
|
elif t is datetime.date:
|
166
|
-
kind =
|
200
|
+
kind = "Date"
|
167
201
|
elif t is datetime.time:
|
168
|
-
kind =
|
202
|
+
kind = "Time"
|
169
203
|
elif t is datetime.datetime:
|
170
|
-
kind =
|
204
|
+
kind = "OffsetDateTime"
|
171
205
|
elif t is datetime.timedelta:
|
172
|
-
kind =
|
206
|
+
kind = "TimeDelta"
|
173
207
|
else:
|
174
208
|
raise ValueError(f"type unsupported yet: {t}")
|
175
209
|
|
@@ -183,9 +217,13 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
|
|
183
217
|
nullable=nullable,
|
184
218
|
)
|
185
219
|
|
186
|
-
|
220
|
+
|
221
|
+
def _encode_fields_schema(
|
222
|
+
struct_type: type, key_type: type | None = None
|
223
|
+
) -> list[dict[str, Any]]:
|
187
224
|
result = []
|
188
|
-
|
225
|
+
|
226
|
+
def add_field(name: str, t: Any) -> None:
|
189
227
|
try:
|
190
228
|
type_info = encode_enriched_type_info(analyze_type_info(t))
|
191
229
|
except ValueError as e:
|
@@ -194,7 +232,7 @@ def _encode_fields_schema(struct_type: type, key_type: type | None = None) -> li
|
|
194
232
|
f"{struct_type.__name__}.{name}: {t}"
|
195
233
|
)
|
196
234
|
raise
|
197
|
-
type_info[
|
235
|
+
type_info["name"] = name
|
198
236
|
result.append(type_info)
|
199
237
|
|
200
238
|
if key_type is not None:
|
@@ -209,55 +247,62 @@ def _encode_fields_schema(struct_type: type, key_type: type | None = None) -> li
|
|
209
247
|
|
210
248
|
return result
|
211
249
|
|
250
|
+
|
212
251
|
def _encode_type(type_info: AnalyzedTypeInfo) -> dict[str, Any]:
|
213
|
-
encoded_type: dict[str, Any] = {
|
252
|
+
encoded_type: dict[str, Any] = {"kind": type_info.kind}
|
214
253
|
|
215
|
-
if type_info.kind ==
|
254
|
+
if type_info.kind == "Struct":
|
216
255
|
if type_info.struct_type is None:
|
217
256
|
raise ValueError("Struct type must have a dataclass or namedtuple type")
|
218
|
-
encoded_type[
|
257
|
+
encoded_type["fields"] = _encode_fields_schema(
|
258
|
+
type_info.struct_type, type_info.key_type
|
259
|
+
)
|
219
260
|
if doc := inspect.getdoc(type_info.struct_type):
|
220
|
-
encoded_type[
|
261
|
+
encoded_type["description"] = doc
|
221
262
|
|
222
|
-
elif type_info.kind ==
|
263
|
+
elif type_info.kind == "Vector":
|
223
264
|
if type_info.vector_info is None:
|
224
265
|
raise ValueError("Vector type must have a vector info")
|
225
266
|
if type_info.elem_type is None:
|
226
267
|
raise ValueError("Vector type must have an element type")
|
227
|
-
encoded_type[
|
228
|
-
|
268
|
+
encoded_type["element_type"] = _encode_type(
|
269
|
+
analyze_type_info(type_info.elem_type)
|
270
|
+
)
|
271
|
+
encoded_type["dimension"] = type_info.vector_info.dim
|
229
272
|
|
230
273
|
elif type_info.kind in TABLE_TYPES:
|
231
274
|
if type_info.elem_type is None:
|
232
275
|
raise ValueError(f"{type_info.kind} type must have an element type")
|
233
276
|
row_type_info = analyze_type_info(type_info.elem_type)
|
234
|
-
encoded_type[
|
277
|
+
encoded_type["row"] = _encode_type(row_type_info)
|
235
278
|
|
236
279
|
return encoded_type
|
237
280
|
|
281
|
+
|
238
282
|
def encode_enriched_type_info(enriched_type_info: AnalyzedTypeInfo) -> dict[str, Any]:
|
239
283
|
"""
|
240
284
|
Encode an enriched type info to a CocoIndex engine's type representation
|
241
285
|
"""
|
242
|
-
encoded: dict[str, Any] = {
|
286
|
+
encoded: dict[str, Any] = {"type": _encode_type(enriched_type_info)}
|
243
287
|
|
244
288
|
if enriched_type_info.attrs is not None:
|
245
|
-
encoded[
|
289
|
+
encoded["attrs"] = enriched_type_info.attrs
|
246
290
|
|
247
291
|
if enriched_type_info.nullable:
|
248
|
-
encoded[
|
292
|
+
encoded["nullable"] = True
|
249
293
|
|
250
294
|
return encoded
|
251
295
|
|
296
|
+
|
252
297
|
@overload
|
253
|
-
def encode_enriched_type(t: None) -> None:
|
254
|
-
|
298
|
+
def encode_enriched_type(t: None) -> None: ...
|
299
|
+
|
255
300
|
|
256
301
|
@overload
|
257
|
-
def encode_enriched_type(t: Any) -> dict[str, Any]:
|
258
|
-
...
|
302
|
+
def encode_enriched_type(t: Any) -> dict[str, Any]: ...
|
259
303
|
|
260
|
-
|
304
|
+
|
305
|
+
def encode_enriched_type(t: Any) -> dict[str, Any] | None:
|
261
306
|
"""
|
262
307
|
Convert a Python type to a CocoIndex engine's type representation
|
263
308
|
"""
|
@@ -266,7 +311,8 @@ def encode_enriched_type(t) -> dict[str, Any] | None:
|
|
266
311
|
|
267
312
|
return encode_enriched_type_info(analyze_type_info(t))
|
268
313
|
|
269
|
-
|
270
|
-
|
271
|
-
|
314
|
+
|
315
|
+
def resolve_forward_ref(t: Any) -> Any:
|
316
|
+
if isinstance(t, str):
|
317
|
+
return eval(t) # pylint: disable=eval-used
|
272
318
|
return t
|
cocoindex/utils.py
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
from .flow import Flow
|
2
2
|
from .setting import get_app_namespace
|
3
3
|
|
4
|
-
|
4
|
+
|
5
|
+
def get_target_storage_default_name(
|
6
|
+
flow: Flow, target_name: str, delimiter: str = "__"
|
7
|
+
) -> str:
|
5
8
|
"""
|
6
9
|
Get the default name for a target.
|
7
10
|
It's used as the underlying storage name (e.g. a table, a collection, etc.) followed by most storage backends, if not explicitly specified.
|
8
11
|
"""
|
9
|
-
return
|
12
|
+
return (
|
13
|
+
get_app_namespace(trailing_delimiter=delimiter)
|
14
|
+
+ flow.name
|
15
|
+
+ delimiter
|
16
|
+
+ target_name
|
17
|
+
)
|
@@ -1,12 +1,14 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: cocoindex
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.45
|
4
4
|
Requires-Dist: sentence-transformers>=3.3.1
|
5
5
|
Requires-Dist: click>=8.1.8
|
6
6
|
Requires-Dist: rich>=14.0.0
|
7
7
|
Requires-Dist: python-dotenv>=1.1.0
|
8
8
|
Requires-Dist: pytest ; extra == 'test'
|
9
|
+
Requires-Dist: ruff ; extra == 'dev'
|
9
10
|
Provides-Extra: test
|
11
|
+
Provides-Extra: dev
|
10
12
|
License-File: LICENSE
|
11
13
|
Summary: With CocoIndex, users declare the transformation, CocoIndex creates & maintains an index, and keeps the derived index up to date based on source update, with minimal computation and changes.
|
12
14
|
Author-email: CocoIndex <cocoindex.io@gmail.com>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
cocoindex-0.1.45.dist-info/METADATA,sha256=P5VaQGACoY6m-WQesaWvt5r3bIyolevTxnuCLtJqomY,9875
|
2
|
+
cocoindex-0.1.45.dist-info/WHEEL,sha256=p_tvkyHH2UmMBrR2Gemb1ahXJMM2SXUIsCLrWZgJvB8,104
|
3
|
+
cocoindex-0.1.45.dist-info/entry_points.txt,sha256=_NretjYVzBdNTn7dK-zgwr7YfG2afz1u1uSE-5bZXF8,46
|
4
|
+
cocoindex-0.1.45.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
5
|
+
cocoindex/__init__.py,sha256=TkfOR-7upXpzETEvBQUhcnYVuI_A3sqjOdXYeTPAwO0,818
|
6
|
+
cocoindex/_engine.cpython-311-darwin.so,sha256=Es24pgfBaRIMVjOUSa1AeJEXf19cCJB9M3uQRqaXLwY,57128576
|
7
|
+
cocoindex/auth_registry.py,sha256=1XqO7ibjmBBd8i11XSJTvTgdz8p1ptW-ZpuSgo_5zzk,716
|
8
|
+
cocoindex/cli.py,sha256=p92s-Ya6VpT4EY5xfbl-R0yyIJv8ySK-2eyxnwC8KqA,17853
|
9
|
+
cocoindex/convert.py,sha256=CfsZDRs1kwMeNCeJ3-gifHQm_9GzyqySpUmZyCyWXMo,7316
|
10
|
+
cocoindex/flow.py,sha256=sC7eg0L9MkZuo7MlvGA4eYe-mEReIyPjKIILFtkWm-Y,30017
|
11
|
+
cocoindex/functions.py,sha256=rjULmc14tL8-eU-tSmgyc867C_nySS2hktyj8NgofI8,1972
|
12
|
+
cocoindex/index.py,sha256=j93B9jEvvLXHtpzKWL88SY6wCGEoPgpsQhEGHlyYGFg,540
|
13
|
+
cocoindex/lib.py,sha256=W3hPh0QQIjLRRe2tpyLCvL_6ajzXhGGSNJubikkS27s,2985
|
14
|
+
cocoindex/llm.py,sha256=KO-R4mrAWtxXD82-Yv5ixpkKMVfkwpbdWwqPVZygLu4,352
|
15
|
+
cocoindex/op.py,sha256=hOJoHC8elhLHMNVRTGTBWNSK5uYrQb-FfRV-qt08j8g,11815
|
16
|
+
cocoindex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
+
cocoindex/query.py,sha256=UswtEp0wZwwNPeR9x9lRokFpNNZOHkyt5tYfCmGIWWU,3450
|
18
|
+
cocoindex/runtime.py,sha256=bAdHYaXFWiiUWyAgzmKTeaAaRR0D_AmaqVCIdPO-v00,1056
|
19
|
+
cocoindex/setting.py,sha256=ePqHw1i95rVtqYYRVqzVwtBifRO4SfH1rlMW_AG3Zek,3418
|
20
|
+
cocoindex/setup.py,sha256=u5dYZFKfz4yZLiGHD0guNaR0s4zY9JAoZWrWHpAHw_0,773
|
21
|
+
cocoindex/sources.py,sha256=JCnOhv1w4o28e03i7yvo4ESicWYAhckkBg5bQlxNH4U,1330
|
22
|
+
cocoindex/storages.py,sha256=RCS1YrtSIKjkWX5JHF38hK85SNn5BhsRU1gqyzbHn30,2688
|
23
|
+
cocoindex/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
24
|
+
cocoindex/tests/test_convert.py,sha256=tTsDveMCgflhcYmDq-fQq3MRGAmN2xlbtFIEDYlRpGw,17095
|
25
|
+
cocoindex/typing.py,sha256=0WQ4F04kFhXwHphv9AHJqc1cThYmLe27eqqGEuGWHAU,9462
|
26
|
+
cocoindex/utils.py,sha256=5a3ubVzDowJUJyUl8ecd75Th_OzON3G-MV2vXf0dQSk,503
|
27
|
+
cocoindex-0.1.45.dist-info/RECORD,,
|
@@ -1,27 +0,0 @@
|
|
1
|
-
cocoindex-0.1.43.dist-info/METADATA,sha256=2n3yADdVbrbv-m-x7qtZX8l8D_2h37MEP2tY5OqTyBo,9818
|
2
|
-
cocoindex-0.1.43.dist-info/WHEEL,sha256=p_tvkyHH2UmMBrR2Gemb1ahXJMM2SXUIsCLrWZgJvB8,104
|
3
|
-
cocoindex-0.1.43.dist-info/entry_points.txt,sha256=_NretjYVzBdNTn7dK-zgwr7YfG2afz1u1uSE-5bZXF8,46
|
4
|
-
cocoindex-0.1.43.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
5
|
-
cocoindex/__init__.py,sha256=ztuMoVHbGsyhgnN_CHBnY4yQtcsHi4O-u-Q3eUFaB5Y,816
|
6
|
-
cocoindex/_engine.cpython-311-darwin.so,sha256=yTewruRgB6wQCP00OjCDNCILMVk0dEInGPHF3jhCrRg,56886416
|
7
|
-
cocoindex/auth_registry.py,sha256=NsALZ3SKsDG9cPdrlTlalIqUvgbgFOaFGAbWJNedtJE,692
|
8
|
-
cocoindex/cli.py,sha256=Gbn6vz37Gi5ckZYdRdJkcbNcokLbtDhH9wrZswISeRc,16554
|
9
|
-
cocoindex/convert.py,sha256=75HSBie7DokM0RJyUBqeveZRl5y_Fl8lzByoRF0yb2M,6915
|
10
|
-
cocoindex/flow.py,sha256=0otFFqO8XVv-uc1Qbya9BBCK1orv7CGI52TiB5v63xk,28409
|
11
|
-
cocoindex/functions.py,sha256=F79dNmGE127LaU67kF5Oqtf_tIzebFQH7MkyceMX4-s,1830
|
12
|
-
cocoindex/index.py,sha256=LssEOuZi6AqhwKtZM3QFeQpa9T-0ELi8G5DsrYKECvc,534
|
13
|
-
cocoindex/lib.py,sha256=JiLIV5Fi-FNKMlH-6JMoe-UQsvirnFkkOLcoEQk9WkE,2903
|
14
|
-
cocoindex/llm.py,sha256=_3rtahuKcqcEHPkFSwhXOSrekZyGxVApPoYtlU_chcA,348
|
15
|
-
cocoindex/op.py,sha256=yyB3gYYj6uIeoGW9FXuj9Ludaz50QYDeqGgi3dKG1_I,10739
|
16
|
-
cocoindex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
-
cocoindex/query.py,sha256=As-6xIEyr27dN8txF9CsCA9KeL6lyKR7bU6PW4RMBl0,3205
|
18
|
-
cocoindex/runtime.py,sha256=jqRnWkkIlAhE04gi4y0Y5bzuq9FX4j0aVNU-nengLJk,980
|
19
|
-
cocoindex/setting.py,sha256=5sywzYWnUNv80lNDwFlkFkUOoW0wo4n4DEuhFZxryxA,3265
|
20
|
-
cocoindex/setup.py,sha256=ErNtX08NfFOFKehp5qGUvCx8Wiz9f3gmzvfBhAqrQyI,745
|
21
|
-
cocoindex/sources.py,sha256=7lpwYLsFCRfbURKf79Vu0JZZoXjAYY0DxNHzUb-VHBY,1327
|
22
|
-
cocoindex/storages.py,sha256=MFMsfyOCYMggTWeWrOi82miqOXQmiUuqq828x5htBr0,2207
|
23
|
-
cocoindex/tests/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
24
|
-
cocoindex/tests/test_convert.py,sha256=7jc--I3frrg7DB5MPr4JFzE7DSCznJuWyHdlDLQJ_fM,15516
|
25
|
-
cocoindex/typing.py,sha256=RMJXdey5_vd7JbPTEdUw1DeQ4Uu4MicdiaXjzQHFNRA,9031
|
26
|
-
cocoindex/utils.py,sha256=eClhMdjBjcXaDkah-rPUmE7Y5Ncd7S1goUe2qTETR08,456
|
27
|
-
cocoindex-0.1.43.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|