pixeltable 0.2.4__py3-none-any.whl → 0.2.6__py3-none-any.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.

Potentially problematic release.


This version of pixeltable might be problematic. Click here for more details.

Files changed (99) hide show
  1. pixeltable/__init__.py +18 -9
  2. pixeltable/__version__.py +3 -0
  3. pixeltable/catalog/column.py +31 -50
  4. pixeltable/catalog/insertable_table.py +7 -6
  5. pixeltable/catalog/table.py +171 -57
  6. pixeltable/catalog/table_version.py +417 -140
  7. pixeltable/catalog/table_version_path.py +2 -2
  8. pixeltable/dataframe.py +239 -121
  9. pixeltable/env.py +82 -16
  10. pixeltable/exec/__init__.py +2 -1
  11. pixeltable/exec/cache_prefetch_node.py +1 -1
  12. pixeltable/exec/data_row_batch.py +6 -7
  13. pixeltable/exec/expr_eval_node.py +28 -28
  14. pixeltable/exec/in_memory_data_node.py +11 -7
  15. pixeltable/exec/sql_scan_node.py +7 -6
  16. pixeltable/exprs/__init__.py +4 -3
  17. pixeltable/exprs/column_ref.py +9 -0
  18. pixeltable/exprs/comparison.py +3 -3
  19. pixeltable/exprs/data_row.py +5 -1
  20. pixeltable/exprs/expr.py +15 -7
  21. pixeltable/exprs/function_call.py +17 -15
  22. pixeltable/exprs/image_member_access.py +9 -28
  23. pixeltable/exprs/in_predicate.py +96 -0
  24. pixeltable/exprs/inline_array.py +13 -11
  25. pixeltable/exprs/inline_dict.py +15 -13
  26. pixeltable/exprs/literal.py +16 -4
  27. pixeltable/exprs/row_builder.py +15 -41
  28. pixeltable/exprs/similarity_expr.py +65 -0
  29. pixeltable/ext/__init__.py +5 -0
  30. pixeltable/ext/functions/yolox.py +92 -0
  31. pixeltable/func/__init__.py +0 -2
  32. pixeltable/func/aggregate_function.py +18 -15
  33. pixeltable/func/callable_function.py +57 -13
  34. pixeltable/func/expr_template_function.py +20 -3
  35. pixeltable/func/function.py +35 -4
  36. pixeltable/func/globals.py +24 -14
  37. pixeltable/func/signature.py +23 -27
  38. pixeltable/func/udf.py +13 -12
  39. pixeltable/functions/__init__.py +8 -8
  40. pixeltable/functions/eval.py +7 -8
  41. pixeltable/functions/huggingface.py +64 -17
  42. pixeltable/functions/openai.py +36 -3
  43. pixeltable/functions/pil/image.py +61 -64
  44. pixeltable/functions/together.py +21 -0
  45. pixeltable/functions/util.py +11 -0
  46. pixeltable/globals.py +425 -0
  47. pixeltable/index/__init__.py +2 -0
  48. pixeltable/index/base.py +51 -0
  49. pixeltable/index/embedding_index.py +168 -0
  50. pixeltable/io/__init__.py +3 -0
  51. pixeltable/{utils → io}/hf_datasets.py +48 -17
  52. pixeltable/io/pandas.py +148 -0
  53. pixeltable/{utils → io}/parquet.py +58 -33
  54. pixeltable/iterators/__init__.py +1 -1
  55. pixeltable/iterators/base.py +4 -0
  56. pixeltable/iterators/document.py +218 -97
  57. pixeltable/iterators/video.py +8 -9
  58. pixeltable/metadata/__init__.py +7 -3
  59. pixeltable/metadata/converters/convert_12.py +3 -0
  60. pixeltable/metadata/converters/convert_13.py +41 -0
  61. pixeltable/metadata/schema.py +45 -22
  62. pixeltable/plan.py +15 -51
  63. pixeltable/store.py +38 -41
  64. pixeltable/tool/create_test_db_dump.py +39 -4
  65. pixeltable/type_system.py +47 -96
  66. pixeltable/utils/documents.py +42 -12
  67. pixeltable/utils/http_server.py +70 -0
  68. {pixeltable-0.2.4.dist-info → pixeltable-0.2.6.dist-info}/METADATA +14 -10
  69. pixeltable-0.2.6.dist-info/RECORD +119 -0
  70. {pixeltable-0.2.4.dist-info → pixeltable-0.2.6.dist-info}/WHEEL +1 -1
  71. pixeltable/client.py +0 -604
  72. pixeltable/exprs/image_similarity_predicate.py +0 -58
  73. pixeltable/func/batched_function.py +0 -53
  74. pixeltable/tests/conftest.py +0 -177
  75. pixeltable/tests/functions/test_fireworks.py +0 -42
  76. pixeltable/tests/functions/test_functions.py +0 -60
  77. pixeltable/tests/functions/test_huggingface.py +0 -158
  78. pixeltable/tests/functions/test_openai.py +0 -152
  79. pixeltable/tests/functions/test_together.py +0 -111
  80. pixeltable/tests/test_audio.py +0 -65
  81. pixeltable/tests/test_catalog.py +0 -27
  82. pixeltable/tests/test_client.py +0 -21
  83. pixeltable/tests/test_component_view.py +0 -370
  84. pixeltable/tests/test_dataframe.py +0 -439
  85. pixeltable/tests/test_dirs.py +0 -107
  86. pixeltable/tests/test_document.py +0 -120
  87. pixeltable/tests/test_exprs.py +0 -805
  88. pixeltable/tests/test_function.py +0 -324
  89. pixeltable/tests/test_migration.py +0 -43
  90. pixeltable/tests/test_nos.py +0 -54
  91. pixeltable/tests/test_snapshot.py +0 -208
  92. pixeltable/tests/test_table.py +0 -1267
  93. pixeltable/tests/test_transactional_directory.py +0 -42
  94. pixeltable/tests/test_types.py +0 -22
  95. pixeltable/tests/test_video.py +0 -159
  96. pixeltable/tests/test_view.py +0 -530
  97. pixeltable/tests/utils.py +0 -408
  98. pixeltable-0.2.4.dist-info/RECORD +0 -132
  99. {pixeltable-0.2.4.dist-info → pixeltable-0.2.6.dist-info}/LICENSE +0 -0
pixeltable/tests/utils.py DELETED
@@ -1,408 +0,0 @@
1
- import datetime
2
- import glob
3
- import json
4
- import os
5
- from collections import namedtuple
6
- from pathlib import Path
7
- from typing import Any, Dict, List, Optional, Set
8
-
9
- import numpy as np
10
- import pandas as pd
11
- import pytest
12
-
13
- import pixeltable as pxt
14
- import pixeltable.type_system as ts
15
- from pixeltable import catalog
16
- from pixeltable.catalog.globals import UpdateStatus
17
- from pixeltable.dataframe import DataFrameResultSet
18
- from pixeltable.env import Env
19
- from pixeltable.type_system import (
20
- ArrayType,
21
- BoolType,
22
- ColumnType,
23
- FloatType,
24
- ImageType,
25
- IntType,
26
- JsonType,
27
- StringType,
28
- TimestampType,
29
- VideoType,
30
- )
31
-
32
-
33
- def make_default_type(t: ColumnType.Type) -> ColumnType:
34
- if t == ColumnType.Type.STRING:
35
- return StringType()
36
- if t == ColumnType.Type.INT:
37
- return IntType()
38
- if t == ColumnType.Type.FLOAT:
39
- return FloatType()
40
- if t == ColumnType.Type.BOOL:
41
- return BoolType()
42
- if t == ColumnType.Type.TIMESTAMP:
43
- return TimestampType()
44
- assert False
45
-
46
- def make_tbl(cl: pxt.Client, name: str = 'test', col_names: Optional[List[str]] = None) -> catalog.InsertableTable:
47
- if col_names is None:
48
- col_names = ['c1']
49
- schema: Dict[str, ts.ColumnType] = {}
50
- for i, col_name in enumerate(col_names):
51
- schema[f'{col_name}'] = make_default_type(ColumnType.Type(i % 5))
52
- return cl.create_table(name, schema)
53
-
54
- def create_table_data(t: catalog.Table, col_names: Optional[List[str]] = None, num_rows: int = 10) -> List[Dict[str, Any]]:
55
- if col_names is None:
56
- col_names = []
57
- data: Dict[str, Any] = {}
58
-
59
- sample_dict = {
60
- 'detections': [{
61
- 'id': '637e8e073b28441a453564cf',
62
- 'attributes': {},
63
- 'tags': [],
64
- 'label': 'potted plant',
65
- 'bounding_box': [
66
- 0.37028125,
67
- 0.3345305164319249,
68
- 0.038593749999999996,
69
- 0.16314553990610328,
70
- ],
71
- 'mask': None,
72
- 'confidence': None,
73
- 'index': None,
74
- 'supercategory': 'furniture',
75
- 'iscrowd': 0,
76
- }, {
77
- 'id': '637e8e073b28441a453564cf',
78
- 'attributes': {},
79
- 'tags': [],
80
- 'label': 'potted plant',
81
- 'bounding_box': [
82
- 0.37028125,
83
- 0.3345305164319249,
84
- 0.038593749999999996,
85
- 0.16314553990610328,
86
- ],
87
- 'mask': None,
88
- 'confidence': None,
89
- 'index': None,
90
- 'supercategory': 'furniture',
91
- 'iscrowd': 0,
92
- }]
93
- }
94
-
95
- if len(col_names) == 0:
96
- col_names = [c.name for c in t.columns() if not c.is_computed]
97
-
98
- col_types = t.column_types()
99
- for col_name in col_names:
100
- col_type = col_types[col_name]
101
- col_data: Any = None
102
- if col_type.is_string_type():
103
- col_data = ['test string'] * num_rows
104
- if col_type.is_int_type():
105
- col_data = np.random.randint(0, 100, size=num_rows).tolist()
106
- if col_type.is_float_type():
107
- col_data = (np.random.random(size=num_rows) * 100).tolist()
108
- if col_type.is_bool_type():
109
- col_data = np.random.randint(0, 2, size=num_rows)
110
- col_data = [False if i == 0 else True for i in col_data]
111
- if col_type.is_timestamp_type():
112
- col_data = [datetime.datetime.now()] * num_rows
113
- if col_type.is_json_type():
114
- col_data = [sample_dict] * num_rows
115
- if col_type.is_array_type():
116
- col_data = [np.ones(col_type.shape, dtype=col_type.numpy_dtype()) for i in range(num_rows)]
117
- if col_type.is_image_type():
118
- image_path = get_image_files()[0]
119
- col_data = [image_path for i in range(num_rows)]
120
- if col_type.is_video_type():
121
- video_path = get_video_files()[0]
122
- col_data = [video_path for i in range(num_rows)]
123
- data[col_name] = col_data
124
- rows = [{col_name: data[col_name][i] for col_name in col_names} for i in range(num_rows)]
125
- return rows
126
-
127
- def create_test_tbl(client: pxt.Client, name: str = 'test_tbl') -> catalog.Table:
128
- schema = {
129
- 'c1': StringType(nullable=False),
130
- 'c1n': StringType(nullable=True),
131
- 'c2': IntType(nullable=False),
132
- 'c3': FloatType(nullable=False),
133
- 'c4': BoolType(nullable=False),
134
- 'c5': TimestampType(nullable=False),
135
- 'c6': JsonType(nullable=False),
136
- 'c7': JsonType(nullable=False),
137
- }
138
- t = client.create_table(name, schema, primary_key='c2')
139
- t.add_column(c8=[[1, 2, 3], [4, 5, 6]])
140
-
141
- num_rows = 100
142
- d1 = {
143
- 'f1': 'test string 1',
144
- 'f2': 1,
145
- 'f3': 1.0,
146
- 'f4': True,
147
- 'f5': [1.0, 2.0, 3.0, 4.0],
148
- 'f6': {
149
- 'f7': 'test string 2',
150
- 'f8': [1.0, 2.0, 3.0, 4.0],
151
- },
152
- }
153
- d2 = [d1, d1]
154
-
155
- c1_data = [f'test string {i}' for i in range(num_rows)]
156
- c2_data = [i for i in range(num_rows)]
157
- c3_data = [float(i) for i in range(num_rows)]
158
- c4_data = [bool(i % 2) for i in range(num_rows)]
159
- c5_data = [datetime.datetime.now()] * num_rows
160
- c6_data = []
161
- for i in range(num_rows):
162
- d = {
163
- 'f1': f'test string {i}',
164
- 'f2': i,
165
- 'f3': float(i),
166
- 'f4': bool(i % 2),
167
- 'f5': [1.0, 2.0, 3.0, 4.0],
168
- 'f6': {
169
- 'f7': 'test string 2',
170
- 'f8': [1.0, 2.0, 3.0, 4.0],
171
- },
172
- }
173
- c6_data.append(d)
174
-
175
- c7_data = [d2] * num_rows
176
- rows = [
177
- {
178
- 'c1': c1_data[i],
179
- 'c1n': c1_data[i] if i % 10 != 0 else None,
180
- 'c2': c2_data[i],
181
- 'c3': c3_data[i],
182
- 'c4': c4_data[i],
183
- 'c5': c5_data[i],
184
- 'c6': c6_data[i],
185
- 'c7': c7_data[i],
186
- }
187
- for i in range(num_rows)
188
- ]
189
- t.insert(rows)
190
- return t
191
-
192
- def create_all_datatypes_tbl(test_client: pxt.Client) -> catalog.Table:
193
- """ Creates a table with all supported datatypes.
194
- """
195
- schema = {
196
- 'row_id': IntType(nullable=False), # used for row selection
197
- 'c_array': ArrayType(shape=(10,), dtype=FloatType(), nullable=True),
198
- 'c_bool': BoolType(nullable=True),
199
- 'c_float': FloatType(nullable=True),
200
- 'c_image': ImageType(nullable=True),
201
- 'c_int': IntType(nullable=True),
202
- 'c_json': JsonType(nullable=True),
203
- 'c_string': StringType(nullable=True),
204
- 'c_timestamp': TimestampType(nullable=True),
205
- 'c_video': VideoType(nullable=True),
206
- }
207
- tbl = test_client.create_table('all_datatype_tbl', schema)
208
- example_rows = create_table_data(tbl, num_rows=11)
209
-
210
- for i,r in enumerate(example_rows):
211
- r['row_id'] = i # row_id
212
-
213
- tbl.insert(example_rows)
214
- return tbl
215
-
216
- def read_data_file(dir_name: str, file_name: str, path_col_names: Optional[List[str]] = None) -> List[Dict[str, Any]]:
217
- """
218
- Locate dir_name, create df out of file_name.
219
- path_col_names: col names in csv file that contain file names; those will be converted to absolute paths
220
- by adding the path to 'file_name' as a prefix.
221
- Returns:
222
- tuple of (list of rows, list of column names)
223
- """
224
- if path_col_names is None:
225
- path_col_names = []
226
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
227
- glob_result = glob.glob(f'{tests_dir}/**/{dir_name}', recursive=True)
228
- assert len(glob_result) == 1, f'Could not find {dir_name}'
229
- abs_path = Path(glob_result[0])
230
- data_file_path = abs_path / file_name
231
- assert data_file_path.is_file(), f'Not a file: {str(data_file_path)}'
232
- df = pd.read_csv(str(data_file_path))
233
- for col_name in path_col_names:
234
- assert col_name in df.columns
235
- df[col_name] = df.apply(lambda r: str(abs_path / r[col_name]), axis=1)
236
- return df.to_dict(orient='records')
237
-
238
- def get_video_files(include_bad_video: bool = False) -> List[str]:
239
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
240
- glob_result = glob.glob(f'{tests_dir}/**/videos/*', recursive=True)
241
- if not include_bad_video:
242
- glob_result = [f for f in glob_result if 'bad_video' not in f]
243
-
244
- half_res = [f for f in glob_result if 'half_res' in f or 'bad_video' in f]
245
- return half_res
246
-
247
- def get_test_video_files() -> List[str]:
248
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
249
- glob_result = glob.glob(f'{tests_dir}/**/test_videos/*', recursive=True)
250
- return glob_result
251
-
252
- def get_image_files(include_bad_image: bool = False) -> List[str]:
253
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
254
- glob_result = glob.glob(f'{tests_dir}/**/imagenette2-160/*', recursive=True)
255
- if not include_bad_image:
256
- glob_result = [f for f in glob_result if 'bad_image' not in f]
257
- return glob_result
258
-
259
- def get_audio_files(include_bad_audio: bool = False) -> List[str]:
260
- tests_dir = os.path.dirname(__file__)
261
- glob_result = glob.glob(f'{tests_dir}/**/audio/*', recursive=True)
262
- if not include_bad_audio:
263
- glob_result = [f for f in glob_result if 'bad_audio' not in f]
264
- return glob_result
265
-
266
- def get_documents() -> List[str]:
267
- tests_dir = os.path.dirname(__file__)
268
- # for now, we can only handle .html and .md
269
- return [p for p in glob.glob(f'{tests_dir}/**/documents/*', recursive=True) if not p.endswith('.pdf')]
270
-
271
- def get_sentences(n: int = 100) -> List[str]:
272
- tests_dir = os.path.dirname(__file__)
273
- path = glob.glob(f'{tests_dir}/**/jeopardy.json', recursive=True)[0]
274
- with open(path, 'r', encoding='utf8') as f:
275
- questions_list = json.load(f)
276
- # this dataset contains \' around the questions
277
- return [q['question'].replace("'", '') for q in questions_list[:n]]
278
-
279
-
280
- def assert_resultset_eq(r1: DataFrameResultSet, r2: DataFrameResultSet) -> None:
281
- assert len(r1) == len(r2)
282
- assert len(r1.column_names()) == len(r2.column_names()) # we don't care about the actual column names
283
- r1_pd = r1.to_pandas()
284
- r2_pd = r2.to_pandas()
285
- for i in range(len(r1.column_names())):
286
- # only compare column values
287
- s1 = r1_pd.iloc[:, i]
288
- s2 = r2_pd.iloc[:, i]
289
- if s1.dtype == np.float64:
290
- assert np.allclose(s1, s2)
291
- else:
292
- assert s1.equals(s2)
293
-
294
-
295
- def skip_test_if_not_installed(package) -> None:
296
- if not Env.get().is_installed_package(package):
297
- pytest.skip(f'Package `{package}` is not installed.')
298
-
299
-
300
- def validate_update_status(status: UpdateStatus, expected_rows: Optional[int] = None) -> None:
301
- assert status.num_excs == 0
302
- if expected_rows is not None:
303
- assert status.num_rows == expected_rows
304
-
305
-
306
- def make_test_arrow_table(output_path: Path) -> None:
307
- import pyarrow as pa
308
-
309
- value_dict = {
310
- 'c_id': [1, 2, 3, 4, 5],
311
- 'c_int64': [-10, -20, -30, -40, None],
312
- 'c_int32': [-1, -2, -3, -4, None],
313
- 'c_float32': [1.1, 2.2, 3.3, 4.4, None],
314
- 'c_string': ['aaa', 'bbb', 'ccc', 'ddd', None],
315
- 'c_boolean': [True, False, True, False, None],
316
- 'c_timestamp': [
317
- datetime.datetime(2012, 1, 1, 12, 0, 0, 25),
318
- datetime.datetime(2012, 1, 2, 12, 0, 0, 25),
319
- datetime.datetime(2012, 1, 3, 12, 0, 0, 25),
320
- datetime.datetime(2012, 1, 4, 12, 0, 0, 25),
321
- None,
322
- ],
323
- # The pyarrow fixed_shape_tensor type does not support NULLs (currently can write them but not read them)
324
- # So, no nulls in this column
325
- 'c_array_float32': [
326
- [
327
- 1.0,
328
- 2.0,
329
- ],
330
- [
331
- 10.0,
332
- 20.0,
333
- ],
334
- [
335
- 100.0,
336
- 200.0,
337
- ],
338
- [
339
- 1000.0,
340
- 2000.0,
341
- ],
342
- [10000.0, 20000.0],
343
- ],
344
- }
345
-
346
- arr_size = len(value_dict['c_array_float32'][0])
347
- tensor_type = pa.fixed_shape_tensor(pa.float32(), (arr_size,))
348
-
349
- schema = pa.schema(
350
- [
351
- ('c_id', pa.int32()),
352
- ('c_int64', pa.int64()),
353
- ('c_int32', pa.int32()),
354
- ('c_float32', pa.float32()),
355
- ('c_string', pa.string()),
356
- ('c_boolean', pa.bool_()),
357
- ('c_timestamp', pa.timestamp('us')),
358
- ('c_array_float32', tensor_type),
359
- ]
360
- )
361
-
362
- test_table = pa.Table.from_pydict(value_dict, schema=schema)
363
- pa.parquet.write_table(test_table, str(output_path / 'test.parquet'))
364
-
365
-
366
- def assert_hf_dataset_equal(hf_dataset: 'datasets.Dataset', df: pxt.DataFrame, split_column_name: str) -> None:
367
- import datasets
368
- assert df.count() == hf_dataset.num_rows
369
- assert set(df.get_column_names()) == (set(hf_dataset.features.keys()) | {split_column_name})
370
-
371
- # immutable so we can use it as in a set
372
- DatasetTuple = namedtuple('DatasetTuple', ' '.join(hf_dataset.features.keys()))
373
- acc_dataset: Set[DatasetTuple] = set()
374
- for tup in hf_dataset:
375
- immutable_tup = {}
376
- for k in tup:
377
- if isinstance(tup[k], list):
378
- immutable_tup[k] = tuple(tup[k])
379
- else:
380
- immutable_tup[k] = tup[k]
381
-
382
- acc_dataset.add(DatasetTuple(**immutable_tup))
383
-
384
- for tup in df.collect():
385
- assert tup[split_column_name] in hf_dataset.split._name
386
-
387
- encoded_tup = {}
388
- for column_name, value in tup.items():
389
- if column_name == split_column_name:
390
- continue
391
- feature_type = hf_dataset.features[column_name]
392
- if isinstance(feature_type, datasets.ClassLabel):
393
- assert value in feature_type.names
394
- # must use the index of the class label as the value to
395
- # compare with dataset iteration output.
396
- value = feature_type.encode_example(value)
397
- elif isinstance(feature_type, datasets.Sequence):
398
- assert feature_type.feature.dtype == 'float32', 'may need to add more types'
399
- value = tuple([float(x) for x in value])
400
-
401
- encoded_tup[column_name] = value
402
-
403
- check_tup = DatasetTuple(**encoded_tup)
404
- assert check_tup in acc_dataset
405
-
406
-
407
- SAMPLE_IMAGE_URL = \
408
- 'https://raw.githubusercontent.com/pixeltable/pixeltable/master/docs/source/data/images/000000000009.jpg'
@@ -1,132 +0,0 @@
1
- pixeltable/__init__.py,sha256=enh38lhZ_38Ys3rCy_XC_BlPNPK9H2CKV4KePaqnV4E,959
2
- pixeltable/catalog/__init__.py,sha256=E41bxaPeQIcgRYzTWc2vkDOboQhRymrJf4IcHQO7o_8,453
3
- pixeltable/catalog/catalog.py,sha256=0TYWB1R6YBp9qCkWF7kCcX2Yw70UuburKKIemv5L1Js,7908
4
- pixeltable/catalog/column.py,sha256=rlWhKh_k9zLXus0Slcrxzsl6tJpyOxylu2qfUk0waVI,8663
5
- pixeltable/catalog/dir.py,sha256=pG1nMpG123POo6WMSHhAmnwXOQ26uUJfUcbzL-Jb4ws,919
6
- pixeltable/catalog/globals.py,sha256=yLEGNbsSnLzjWNHVJacfjA9hbw13Q6QXLOSCRmdTlq0,943
7
- pixeltable/catalog/insertable_table.py,sha256=1JGZqmx5tKbm_UmJLIalntFDs81s-mvTv0gOqk98b3Q,8280
8
- pixeltable/catalog/named_function.py,sha256=a96gnKtx-nz5_MzDIiD4t4Hxqdjkg9ZtijRQxvWA5WQ,1147
9
- pixeltable/catalog/path.py,sha256=QgccEi_QOfaKt8YsR2zLtd_z7z7QQkU_1kprJFi2SPQ,1677
10
- pixeltable/catalog/path_dict.py,sha256=xfvxg1Ze5jZCARUGASF2DRbQPh7pRVTYhuJ_u82gYUo,5941
11
- pixeltable/catalog/schema_object.py,sha256=-UxmPLbuEBqJiJi_GGRbFdr7arAFxTqs4bt6TFmSt3M,1059
12
- pixeltable/catalog/table.py,sha256=CJQc2NnebfL1ekMcaZhJEZ0CI408-F7R90_czjDKy-g,25499
13
- pixeltable/catalog/table_version.py,sha256=Q1NSaeLmFw7gYgARyyW6JJ79GRhjtp0_Q410KH27e1Q,35680
14
- pixeltable/catalog/table_version_path.py,sha256=kn5T0m5XBqphlDqCKsqD-s159diCjKvrSrtzYZHwKuw,5461
15
- pixeltable/catalog/view.py,sha256=BIL3s4DV3tWbOcqtqnhn46B2UvLaBhppfJUlNEt5nec,9734
16
- pixeltable/client.py,sha256=RweoJoUGap_uzAcrhSwU6yOH7j_fsSM-VgyKSCYGvv8,23616
17
- pixeltable/dataframe.py,sha256=vBc4T-QU-lTTtnljqDbBFTHwm2CecLHIjJumEv8lQ0s,28339
18
- pixeltable/env.py,sha256=A38md5r-hE6i-6Og1Nptlzo0ci3Oyn62ogPs6hlNLZE,15744
19
- pixeltable/exceptions.py,sha256=MSP9zeL0AmXT93XqjdvgGN4rzno1_KRrGriq6hpemnw,376
20
- pixeltable/exec/__init__.py,sha256=FOQBSMQ3buGg5kRzymkfDCk5fnVfICn3LrsJtbyNC6E,412
21
- pixeltable/exec/aggregation_node.py,sha256=cf6rVAgrGh_uaMrCIgXJIwQTmbcboJlnrH_MmPIQSd0,3321
22
- pixeltable/exec/cache_prefetch_node.py,sha256=zDYYc0vmdLzB82YqgJRdCMriaMHX07LS3o04G2U3NmI,5212
23
- pixeltable/exec/component_iteration_node.py,sha256=Uz6zEeaJMcbvF3S0W0qmLI_uWsZsaSspHKNzuAMrasg,4069
24
- pixeltable/exec/data_row_batch.py,sha256=ZaS_ciyYhoP50Aoszhgtnh_yDRR6z9H43crnaJdP-xA,3505
25
- pixeltable/exec/exec_context.py,sha256=E82Q2bJMJ1ulud5L5D9dh2Z8vEUQ659SgT614YKDO34,924
26
- pixeltable/exec/exec_node.py,sha256=Hji5NCPHfa50IWyjladXrBm4I0zseV7AV4cVdx0Q8Ew,2170
27
- pixeltable/exec/expr_eval_node.py,sha256=mqACyEy48fsiWkbHSkkMc8gG2nL-WT6eJSG3nltM85c,10810
28
- pixeltable/exec/in_memory_data_node.py,sha256=x2Jn_AGx52YcDPORH8sZZRD0s64Ng1NvfMpqAW-bVwY,2949
29
- pixeltable/exec/media_validation_node.py,sha256=OKfRyKpcn7AZdACy_HD4NsDC87ZfNFs1tdrQz2NiIVw,1514
30
- pixeltable/exec/sql_scan_node.py,sha256=zKJ2_iM0ah748Vz8jD0Lkm7TRyUChIejnGUPNmYPgbs,10318
31
- pixeltable/exprs/__init__.py,sha256=EkpjeEW-8rriE9hVb9PdiknHQ3-Y8jPp37yJ-NC_oWA,935
32
- pixeltable/exprs/arithmetic_expr.py,sha256=sWBYCBKI6IHj9ASwDcm2BlkQ5gleVtKtmpiPvzFNBJM,4386
33
- pixeltable/exprs/array_slice.py,sha256=VmWc6iFusrM85MjyEBBCfXG1Jnt8-Gr6-J88BXxNoOE,2131
34
- pixeltable/exprs/column_property_ref.py,sha256=0PHiBys0fxe2LgjaMId5UHob4E-ZggyPLnnW41RgA0E,2706
35
- pixeltable/exprs/column_ref.py,sha256=5-mbWV8-cWWu0ynxPSQ0L8oLewDrLp17xh8DOCmQ36s,4794
36
- pixeltable/exprs/comparison.py,sha256=jwwvKG0nLOHiNyjZm8AWKn59qBtTYH98vTF_hhwn0Og,3000
37
- pixeltable/exprs/compound_predicate.py,sha256=Gh22MKi625m5A_RunVRd-a1XFi-fitikqBVz2VNXKrs,3830
38
- pixeltable/exprs/data_row.py,sha256=TRbC2lmPm-U_Az2edlVaHbaYn-dm0G3IQp6gQ6HH5DQ,8046
39
- pixeltable/exprs/expr.py,sha256=JyEmP8F9LXmxOrVswih1Aq0SrpGcboSRinOYIMWYfKM,23748
40
- pixeltable/exprs/expr_set.py,sha256=Q64Q2yI0CTq2Ma_E-BUYlMotSstVuMm4OFZnBCedHRk,1222
41
- pixeltable/exprs/function_call.py,sha256=QFzkb2gKjeALGTgCet-o0HETwTXoFBzsncbghgScmOE,16961
42
- pixeltable/exprs/globals.py,sha256=liPgUTccTkyDRs4kG2r9ehRkwGZERmrCSJDZRdJoMqk,1537
43
- pixeltable/exprs/image_member_access.py,sha256=aLRpSu3fhAph86jYMQEdE4ZLoN96xDXlf4t4-MUX2_s,4663
44
- pixeltable/exprs/image_similarity_predicate.py,sha256=PVoPaYP9-Wds1jZvr0AsUAjklkk2AxyokgcAykWs0g4,1906
45
- pixeltable/exprs/inline_array.py,sha256=i9Q7kD11X5X-j-NiuMx8kigdEnKBEL8HKBX6fQ8TmyE,4312
46
- pixeltable/exprs/inline_dict.py,sha256=Lb3VS3Mkxb72mWL4qipOQjUgY8AMxk1POj225Xqjtos,3695
47
- pixeltable/exprs/is_null.py,sha256=nvpOXtQj1UeYJpkCWzbaGuQElzrA2HSG3XNQugOv-pw,1041
48
- pixeltable/exprs/json_mapper.py,sha256=I60VNgus64ai80gnFCIsRn0VRWYXMkqH5VNvnATsN9s,4559
49
- pixeltable/exprs/json_path.py,sha256=Wz_5zFsyc9TPhsSbsDjDmQ3Nb0uVIwMCx5nh-cQYBiE,6526
50
- pixeltable/exprs/literal.py,sha256=LOeD0aN_V7Kg332xzCHWUlzKPupXiptpU_rg-X0bEt0,1885
51
- pixeltable/exprs/object_ref.py,sha256=eTcx84aWRI59fIiGvbdv3_cfL0XW4xEFQ4lwpLpJkM8,1250
52
- pixeltable/exprs/predicate.py,sha256=OSDgjfSqiK7J_5GZMUXMvjfyomKEGi0JNxeB073SGXw,1859
53
- pixeltable/exprs/row_builder.py,sha256=sOW2zG6MwqOT8BFgmlveqIiRGPZinuK0_dY6IgmCWT0,16992
54
- pixeltable/exprs/rowid_ref.py,sha256=74w4rEy21YysTVbyKNc3op-pYFqDAx8VJdtl7ZPpxHs,4268
55
- pixeltable/exprs/type_cast.py,sha256=JMg8p1qYoFfiAXfJPSbTEnfrK7lRO_JMaqlPHOrhNQU,1793
56
- pixeltable/exprs/variable.py,sha256=Kg_O4ytcHYZFijIyMHYBJn063cTKU1-YE583FAz8Qaw,1361
57
- pixeltable/func/__init__.py,sha256=4qvDnK_S5yljwtIrxCkeQlz6vuTVfwSU4zl-MBT2TMU,457
58
- pixeltable/func/aggregate_function.py,sha256=E11lVKBR4MZQ6VT0G4oo5xWR907BqHqJog-widXcJt0,9177
59
- pixeltable/func/batched_function.py,sha256=nrfmykJps4QkgzeC4ZroGy8mJ-BACNKbRJABHHG6-Ac,2350
60
- pixeltable/func/callable_function.py,sha256=WGUwjNEzXGDJ1jzdZ-mrn2cnfEHmFZIh_DRl_Yk89D0,2357
61
- pixeltable/func/expr_template_function.py,sha256=Nj-FDDozSuvcoQ7KsJcQrzzQn7foeCY7zSEFkusiLqQ,3392
62
- pixeltable/func/function.py,sha256=NcGyKp7ds6bMzg1qzuaK8pBQH_DhknmSiZzsfXi-z2k,4023
63
- pixeltable/func/function_registry.py,sha256=1ibSQxEPm3Zd3r497vSlckQiDG9sfCnyJx3zcSm9t7c,11456
64
- pixeltable/func/globals.py,sha256=UP4hAkEVKD_3lr7l_VVUUCetJP85sydUYiVAU4m5-aw,1220
65
- pixeltable/func/nos_function.py,sha256=HzIKK4XjTo1E6pML-EbhuX3u_LYibFWUuTkIxoIih7c,9650
66
- pixeltable/func/signature.py,sha256=5Xo3hIVSXoYtkU-BvUi21b6FghIQABm48UfVjQr9QYU,7107
67
- pixeltable/func/udf.py,sha256=XlB7dzOc98XinUrs4tMGUAetV0SmQ_Z2oKPDBsx46o0,6457
68
- pixeltable/functions/__init__.py,sha256=T8FZuE9YSh4KeRg7tBgOEdg8LLyvn89xWLIRylpiP-I,3390
69
- pixeltable/functions/eval.py,sha256=qLc_55VTwi_IDnAJFq79Hy7FLi7Gb26DxdykYiBTMrM,8453
70
- pixeltable/functions/fireworks.py,sha256=e_rCITg18yNndNI8TJPXRSN6DR0hYWT-_dUavoPuyfc,908
71
- pixeltable/functions/huggingface.py,sha256=Wg8AgCsoGFx8AX3AThko66L7uSg9cUEjL8_QxKoA4dg,4804
72
- pixeltable/functions/image.py,sha256=xR_S_0BuX6Ycc5E366GpOfP0JptD7beQwHE_fLl8ZVM,431
73
- pixeltable/functions/openai.py,sha256=xh40TvNanhXPXWGte_ZKxuyD6TYWzmC_1G3qRNDkNv8,6861
74
- pixeltable/functions/pil/image.py,sha256=8gItSXXuJaCkq9FHEJE9qFpRM3WAoa59x89Xa0DgksQ,6217
75
- pixeltable/functions/string.py,sha256=RYOgZwifjC943YloEMi3PdflnjFqOYB2FddrUvzgtXs,516
76
- pixeltable/functions/together.py,sha256=sG23nLMScmp4wRA4K1EIJDY9peqE1IPgxlK3fhNrbgw,3423
77
- pixeltable/functions/util.py,sha256=v094FgixHchzKMj4YvfHExDRGIVhCL2D-NL3pl-92oo,1596
78
- pixeltable/functions/video.py,sha256=WZF4G3tV-_LfRQHUinXe_rnu1-4N68Ht60JCR_s7Bew,2403
79
- pixeltable/iterators/__init__.py,sha256=sfsasCypAq5rNOTMlr4j2ROXxzdl4M8L2KvQIEbd0cQ,70
80
- pixeltable/iterators/base.py,sha256=sugU9mG19xf9I4c_lEQDI_xrXPLuyuIYlKc-9OiS1HQ,1545
81
- pixeltable/iterators/document.py,sha256=bWK-3oRD9Sbc5vIcxccMyFh8zTP40233NK3ch6uyLI0,13105
82
- pixeltable/iterators/video.py,sha256=mUdHev0f_XJIfHTB-mejjToURh10Ud7l096eZm2aPjM,3444
83
- pixeltable/metadata/__init__.py,sha256=6rLGFpWzQMCk0EcSKLp4Bnbk8tLK1cxuONBPqwDCMzU,2083
84
- pixeltable/metadata/converters/convert_10.py,sha256=0mSGCn7vqtef63riPi9msUaaUvsSQIj-NFj9QFDYPdA,733
85
- pixeltable/metadata/schema.py,sha256=oTxtFSvbmCEcr54F929_NYFVp76N8gpN4nHDr9VnA9M,7761
86
- pixeltable/plan.py,sha256=BQMCxOCy7lO4dqBCt5W9GUFdBWkuhr13-T8_2E97fUk,34710
87
- pixeltable/store.py,sha256=ICqfHiotyMyTi2gsQ-Qw-ed1ooNkAx0vgMSMri4xfqk,19511
88
- pixeltable/tests/conftest.py,sha256=qTfWzGHH35gSkHPOaCAzdDtWWJDEktNIPprLh1wjHwU,6684
89
- pixeltable/tests/functions/test_fireworks.py,sha256=G-54dABoRbmXApyjWZKKrKKooIp7sWcpAT6rJWVESWk,1666
90
- pixeltable/tests/functions/test_functions.py,sha256=SRE4zRwfJ1Hetu8uMp5X-Iqg-pawn87q07JHa7w_8l0,2884
91
- pixeltable/tests/functions/test_huggingface.py,sha256=jOnE51qCHosB6FYIBUWf4VsK4m9mLO3zaBxnKZ5cmHI,7739
92
- pixeltable/tests/functions/test_openai.py,sha256=ptt3QDAQttddqWjmeGMmOkedJg14KFr_b2FT9Chmwlw,8172
93
- pixeltable/tests/functions/test_together.py,sha256=0XGAO2J17tefSlhtMbOFN92bp1SgUB9kw_almcz6fyQ,4788
94
- pixeltable/tests/test_audio.py,sha256=92PMPrMtYzLoaLiW92MupEfWPEcfoLlYlZKlxmWQXdI,3186
95
- pixeltable/tests/test_catalog.py,sha256=Npxt72g5aZkfg1fqE-19L8rGilzicAiTC0ithIy3woI,1189
96
- pixeltable/tests/test_client.py,sha256=9acrjElh1YVX8WXWO04VQ-S6mNx9ZtqAHoh4uBc81y4,531
97
- pixeltable/tests/test_component_view.py,sha256=VfcBgdG1QKeo0AOnHmO21J3qdm_8-06RljB7kkTeTok,17732
98
- pixeltable/tests/test_dataframe.py,sha256=KytKHjsyHluB9DmxmI0g3YPC7UTvbnv5YhysaUMfVzA,17975
99
- pixeltable/tests/test_dirs.py,sha256=WuWGOcpUFPCl1PGZgOMcU5bpzv1ClUqZ5AxavrDeCic,3611
100
- pixeltable/tests/test_document.py,sha256=5G52cMbkkX2lk5SwyYQ1KYjQjgUfVhjcsjPtL9xjGXU,5810
101
- pixeltable/tests/test_exprs.py,sha256=ZwImlJpTu9YQ2AnAplurjxDmabYqG7rB7aU6TxQAJdI,32743
102
- pixeltable/tests/test_function.py,sha256=6sA_3Oe1p4sUhL5L5hYyW-mG1TPGfFDmW1BPVPnGXek,12817
103
- pixeltable/tests/test_migration.py,sha256=UjJhhg061TtyTAa1CAB-BdlT9YwLJkl8yIGSetnqcKw,1535
104
- pixeltable/tests/test_nos.py,sha256=ITE7FNEaNreJ_XTz4wYLWuidFSUQMFp3ShuHTz05OrE,2649
105
- pixeltable/tests/test_snapshot.py,sha256=J8wepLOaOrJkqDWq1dkou8MIR5Hf1DEseAqlUrb7BFg,9297
106
- pixeltable/tests/test_table.py,sha256=zthAzzO9DGmOSsnFD2Xuy40t4-_1ZzchAMKg9JXs1kY,53303
107
- pixeltable/tests/test_transactional_directory.py,sha256=Jx55PZgrkHTI0Eli09puwMckvwfCM9arPTQUT9g6Tbg,1308
108
- pixeltable/tests/test_types.py,sha256=4_LR5Poc8Fa5fOpRBaAc_qAN21SsVxFP54Npq_6n9G8,970
109
- pixeltable/tests/test_video.py,sha256=j9vgxp9f2WdH0rCoMXqhgTW3XG-czTBU4rrnuR95y8E,7782
110
- pixeltable/tests/test_view.py,sha256=vbKEk9kWF5U6B78uNLSQsGw46s2oOOhHnJy8p9NmNTo,21859
111
- pixeltable/tests/utils.py,sha256=OY8r6SM9MAEiXehqBymF8BkHYmlAd7-D09nfzTZMCsA,14359
112
- pixeltable/tool/create_test_db_dump.py,sha256=ARlLUfOs4stxIPFl-hGl_KX-ck6JRWmUiXqTwTtS1GU,5148
113
- pixeltable/tool/create_test_video.py,sha256=OLfccymYReIpzE8osZn4rQvLXxxiPC_l0vc06U74hVM,2899
114
- pixeltable/type_system.py,sha256=oUrqqux-YJrzNpPFp_3WkSdI3lHm7AcZByTCnWa97VQ,30374
115
- pixeltable/utils/__init__.py,sha256=UYlrf6TIWJT0g-Hac0b34-dEk478B5Qx8dGco34YlIk,439
116
- pixeltable/utils/arrow.py,sha256=83_7aG5UR2qtTktw_otLkQs-RQbLk0VVM0JLJkbweNU,3692
117
- pixeltable/utils/clip.py,sha256=HXXWFBJXW9XysdMk9_3hP1V1S-3B8Hwd5rNMbJFjjnI,720
118
- pixeltable/utils/coco.py,sha256=mk1cxjKYQC0ABm2ZQ9SNu9MvBPECmmKvnASpxnFXdL0,5604
119
- pixeltable/utils/documents.py,sha256=MGtWZs93Bt_pdExxT9yjH7VWbawSd5A2O5_YdxEZlMk,1094
120
- pixeltable/utils/filecache.py,sha256=UoNONG2VaAc2IBB0e3sQdsvyOPOes2XSDc5_CsA4qek,7839
121
- pixeltable/utils/help.py,sha256=cCnxJ4VP9MJ57iDqExmnDcM-JG3a1lw_q7g-D7bpSVI,252
122
- pixeltable/utils/hf_datasets.py,sha256=TxN0H9d25VfXiWwT1XAziNFJMKLSK9Y7x1oPejbuFok,7005
123
- pixeltable/utils/media_store.py,sha256=x71wnJDZDHcdd13VCfL4AkHQ6IJB41gNA-zBvXJwFos,3116
124
- pixeltable/utils/parquet.py,sha256=DmiF74UYNvnGOOgHUHk_108QZALsQY7HnZoJw6-H3xc,7120
125
- pixeltable/utils/pytorch.py,sha256=BR4tgfUWw-2rwWTOgzXj5qdMBpe1Arpp5SK4ax6jjpk,3483
126
- pixeltable/utils/s3.py,sha256=rkanuhk9DWvSfmbOLQW1j1Iov4sl2KhxGGKN-AJ8LSE,432
127
- pixeltable/utils/sql.py,sha256=5n5_OmXAGtqFdL6z5XvgnU-vlx6Ba6f1WJrO1ZwUle8,765
128
- pixeltable/utils/transactional_directory.py,sha256=UGzCrGtLR3hEEf8sYGuWBzLVFAEQml3vdIavigWeTBM,1349
129
- pixeltable-0.2.4.dist-info/LICENSE,sha256=0UNMmwuqWPC0xDY1NWMm4uNJ2_MyA1pnTNRgQTvuBiQ,746
130
- pixeltable-0.2.4.dist-info/METADATA,sha256=tUA1jMlooZRLprmQniFTby9KDCuOHFr5b1FVv4fCZdM,5983
131
- pixeltable-0.2.4.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
132
- pixeltable-0.2.4.dist-info/RECORD,,