pixeltable 0.2.5__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 (87) hide show
  1. pixeltable/__init__.py +18 -9
  2. pixeltable/__version__.py +3 -0
  3. pixeltable/catalog/column.py +9 -5
  4. pixeltable/catalog/insertable_table.py +0 -2
  5. pixeltable/catalog/table.py +16 -8
  6. pixeltable/catalog/table_version.py +3 -2
  7. pixeltable/dataframe.py +184 -110
  8. pixeltable/env.py +69 -18
  9. pixeltable/exec/__init__.py +2 -1
  10. pixeltable/exec/data_row_batch.py +6 -7
  11. pixeltable/exec/expr_eval_node.py +28 -28
  12. pixeltable/exec/sql_scan_node.py +7 -6
  13. pixeltable/exprs/__init__.py +4 -3
  14. pixeltable/exprs/column_ref.py +9 -0
  15. pixeltable/exprs/expr.py +15 -7
  16. pixeltable/exprs/function_call.py +17 -15
  17. pixeltable/exprs/image_member_access.py +9 -28
  18. pixeltable/exprs/in_predicate.py +96 -0
  19. pixeltable/exprs/inline_array.py +13 -11
  20. pixeltable/exprs/inline_dict.py +15 -13
  21. pixeltable/exprs/row_builder.py +7 -1
  22. pixeltable/exprs/similarity_expr.py +65 -0
  23. pixeltable/func/__init__.py +0 -2
  24. pixeltable/func/aggregate_function.py +3 -0
  25. pixeltable/func/callable_function.py +57 -13
  26. pixeltable/func/expr_template_function.py +11 -2
  27. pixeltable/func/function.py +35 -4
  28. pixeltable/func/signature.py +5 -15
  29. pixeltable/func/udf.py +6 -10
  30. pixeltable/functions/huggingface.py +23 -4
  31. pixeltable/functions/openai.py +34 -1
  32. pixeltable/functions/pil/image.py +61 -64
  33. pixeltable/functions/together.py +21 -0
  34. pixeltable/globals.py +425 -0
  35. pixeltable/index/base.py +3 -1
  36. pixeltable/index/embedding_index.py +87 -14
  37. pixeltable/io/__init__.py +3 -0
  38. pixeltable/{utils → io}/hf_datasets.py +48 -17
  39. pixeltable/io/pandas.py +148 -0
  40. pixeltable/{utils → io}/parquet.py +58 -33
  41. pixeltable/iterators/__init__.py +1 -1
  42. pixeltable/iterators/base.py +4 -0
  43. pixeltable/iterators/document.py +218 -97
  44. pixeltable/iterators/video.py +8 -9
  45. pixeltable/metadata/__init__.py +7 -3
  46. pixeltable/metadata/converters/convert_12.py +3 -0
  47. pixeltable/metadata/converters/convert_13.py +41 -0
  48. pixeltable/plan.py +2 -19
  49. pixeltable/store.py +2 -2
  50. pixeltable/tool/create_test_db_dump.py +32 -13
  51. pixeltable/type_system.py +13 -54
  52. pixeltable/utils/documents.py +42 -12
  53. pixeltable/utils/http_server.py +70 -0
  54. {pixeltable-0.2.5.dist-info → pixeltable-0.2.6.dist-info}/METADATA +10 -7
  55. pixeltable-0.2.6.dist-info/RECORD +119 -0
  56. {pixeltable-0.2.5.dist-info → pixeltable-0.2.6.dist-info}/WHEEL +1 -1
  57. pixeltable/client.py +0 -600
  58. pixeltable/exprs/image_similarity_predicate.py +0 -58
  59. pixeltable/func/batched_function.py +0 -53
  60. pixeltable/tests/conftest.py +0 -171
  61. pixeltable/tests/ext/test_yolox.py +0 -21
  62. pixeltable/tests/functions/test_fireworks.py +0 -43
  63. pixeltable/tests/functions/test_functions.py +0 -60
  64. pixeltable/tests/functions/test_huggingface.py +0 -158
  65. pixeltable/tests/functions/test_openai.py +0 -162
  66. pixeltable/tests/functions/test_together.py +0 -112
  67. pixeltable/tests/test_audio.py +0 -65
  68. pixeltable/tests/test_catalog.py +0 -27
  69. pixeltable/tests/test_client.py +0 -21
  70. pixeltable/tests/test_component_view.py +0 -379
  71. pixeltable/tests/test_dataframe.py +0 -440
  72. pixeltable/tests/test_dirs.py +0 -107
  73. pixeltable/tests/test_document.py +0 -120
  74. pixeltable/tests/test_exprs.py +0 -802
  75. pixeltable/tests/test_function.py +0 -332
  76. pixeltable/tests/test_index.py +0 -138
  77. pixeltable/tests/test_migration.py +0 -44
  78. pixeltable/tests/test_nos.py +0 -54
  79. pixeltable/tests/test_snapshot.py +0 -231
  80. pixeltable/tests/test_table.py +0 -1343
  81. pixeltable/tests/test_transactional_directory.py +0 -42
  82. pixeltable/tests/test_types.py +0 -52
  83. pixeltable/tests/test_video.py +0 -159
  84. pixeltable/tests/test_view.py +0 -535
  85. pixeltable/tests/utils.py +0 -442
  86. pixeltable-0.2.5.dist-info/RECORD +0 -139
  87. {pixeltable-0.2.5.dist-info → pixeltable-0.2.6.dist-info}/LICENSE +0 -0
pixeltable/tests/utils.py DELETED
@@ -1,442 +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 PIL.Image
10
- import numpy as np
11
- import pandas as pd
12
- import pytest
13
-
14
- import pixeltable as pxt
15
- import pixeltable.type_system as ts
16
- from pixeltable import catalog
17
- from pixeltable.catalog.globals import UpdateStatus
18
- from pixeltable.dataframe import DataFrameResultSet
19
- from pixeltable.env import Env
20
- from pixeltable.functions.huggingface import clip_image, clip_text
21
- from pixeltable.type_system import (
22
- ArrayType,
23
- BoolType,
24
- ColumnType,
25
- FloatType,
26
- ImageType,
27
- IntType,
28
- JsonType,
29
- StringType,
30
- TimestampType,
31
- VideoType,
32
- )
33
-
34
-
35
- def make_default_type(t: ColumnType.Type) -> ColumnType:
36
- if t == ColumnType.Type.STRING:
37
- return StringType()
38
- if t == ColumnType.Type.INT:
39
- return IntType()
40
- if t == ColumnType.Type.FLOAT:
41
- return FloatType()
42
- if t == ColumnType.Type.BOOL:
43
- return BoolType()
44
- if t == ColumnType.Type.TIMESTAMP:
45
- return TimestampType()
46
- assert False
47
-
48
-
49
- def make_tbl(cl: pxt.Client, name: str = 'test', col_names: Optional[List[str]] = None) -> catalog.InsertableTable:
50
- if col_names is None:
51
- col_names = ['c1']
52
- schema: Dict[str, ts.ColumnType] = {}
53
- for i, col_name in enumerate(col_names):
54
- schema[f'{col_name}'] = make_default_type(ColumnType.Type(i % 5))
55
- return cl.create_table(name, schema)
56
-
57
-
58
- def create_table_data(t: catalog.Table, col_names: Optional[List[str]] = None, num_rows: int = 10) -> List[
59
- Dict[str, Any]]:
60
- if col_names is None:
61
- col_names = []
62
- data: Dict[str, Any] = {}
63
-
64
- sample_dict = {
65
- 'detections': [{
66
- 'id': '637e8e073b28441a453564cf',
67
- 'attributes': {},
68
- 'tags': [],
69
- 'label': 'potted plant',
70
- 'bounding_box': [
71
- 0.37028125,
72
- 0.3345305164319249,
73
- 0.038593749999999996,
74
- 0.16314553990610328,
75
- ],
76
- 'mask': None,
77
- 'confidence': None,
78
- 'index': None,
79
- 'supercategory': 'furniture',
80
- 'iscrowd': 0,
81
- }, {
82
- 'id': '637e8e073b28441a453564cf',
83
- 'attributes': {},
84
- 'tags': [],
85
- 'label': 'potted plant',
86
- 'bounding_box': [
87
- 0.37028125,
88
- 0.3345305164319249,
89
- 0.038593749999999996,
90
- 0.16314553990610328,
91
- ],
92
- 'mask': None,
93
- 'confidence': None,
94
- 'index': None,
95
- 'supercategory': 'furniture',
96
- 'iscrowd': 0,
97
- }]
98
- }
99
-
100
- if len(col_names) == 0:
101
- col_names = [c.name for c in t.columns() if not c.is_computed]
102
-
103
- col_types = t.column_types()
104
- for col_name in col_names:
105
- col_type = col_types[col_name]
106
- col_data: Any = None
107
- if col_type.is_string_type():
108
- col_data = ['test string'] * num_rows
109
- if col_type.is_int_type():
110
- col_data = np.random.randint(0, 100, size=num_rows).tolist()
111
- if col_type.is_float_type():
112
- col_data = (np.random.random(size=num_rows) * 100).tolist()
113
- if col_type.is_bool_type():
114
- col_data = np.random.randint(0, 2, size=num_rows)
115
- col_data = [False if i == 0 else True for i in col_data]
116
- if col_type.is_timestamp_type():
117
- col_data = [datetime.datetime.now()] * num_rows
118
- if col_type.is_json_type():
119
- col_data = [sample_dict] * num_rows
120
- if col_type.is_array_type():
121
- col_data = [np.ones(col_type.shape, dtype=col_type.numpy_dtype()) for i in range(num_rows)]
122
- if col_type.is_image_type():
123
- image_path = get_image_files()[0]
124
- col_data = [image_path for i in range(num_rows)]
125
- if col_type.is_video_type():
126
- video_path = get_video_files()[0]
127
- col_data = [video_path for i in range(num_rows)]
128
- data[col_name] = col_data
129
- rows = [{col_name: data[col_name][i] for col_name in col_names} for i in range(num_rows)]
130
- return rows
131
-
132
-
133
- def create_test_tbl(client: pxt.Client, name: str = 'test_tbl') -> catalog.Table:
134
- schema = {
135
- 'c1': StringType(nullable=False),
136
- 'c1n': StringType(nullable=True),
137
- 'c2': IntType(nullable=False),
138
- 'c3': FloatType(nullable=False),
139
- 'c4': BoolType(nullable=False),
140
- 'c5': TimestampType(nullable=False),
141
- 'c6': JsonType(nullable=False),
142
- 'c7': JsonType(nullable=False),
143
- }
144
- t = client.create_table(name, schema, primary_key='c2')
145
- t.add_column(c8=[[1, 2, 3], [4, 5, 6]])
146
-
147
- num_rows = 100
148
- d1 = {
149
- 'f1': 'test string 1',
150
- 'f2': 1,
151
- 'f3': 1.0,
152
- 'f4': True,
153
- 'f5': [1.0, 2.0, 3.0, 4.0],
154
- 'f6': {
155
- 'f7': 'test string 2',
156
- 'f8': [1.0, 2.0, 3.0, 4.0],
157
- },
158
- }
159
- d2 = [d1, d1]
160
-
161
- c1_data = [f'test string {i}' for i in range(num_rows)]
162
- c2_data = [i for i in range(num_rows)]
163
- c3_data = [float(i) for i in range(num_rows)]
164
- c4_data = [bool(i % 2) for i in range(num_rows)]
165
- c5_data = [datetime.datetime.now()] * num_rows
166
- c6_data = []
167
- for i in range(num_rows):
168
- d = {
169
- 'f1': f'test string {i}',
170
- 'f2': i,
171
- 'f3': float(i),
172
- 'f4': bool(i % 2),
173
- 'f5': [1.0, 2.0, 3.0, 4.0],
174
- 'f6': {
175
- 'f7': 'test string 2',
176
- 'f8': [1.0, 2.0, 3.0, 4.0],
177
- },
178
- }
179
- c6_data.append(d)
180
-
181
- c7_data = [d2] * num_rows
182
- rows = [
183
- {
184
- 'c1': c1_data[i],
185
- 'c1n': c1_data[i] if i % 10 != 0 else None,
186
- 'c2': c2_data[i],
187
- 'c3': c3_data[i],
188
- 'c4': c4_data[i],
189
- 'c5': c5_data[i],
190
- 'c6': c6_data[i],
191
- 'c7': c7_data[i],
192
- }
193
- for i in range(num_rows)
194
- ]
195
- t.insert(rows)
196
- return t
197
-
198
-
199
- def create_img_tbl(cl: pxt.Client, name: str = 'test_img_tbl') -> catalog.Table:
200
- schema = {
201
- 'img': ImageType(nullable=False),
202
- 'category': StringType(nullable=False),
203
- 'split': StringType(nullable=False),
204
- }
205
- tbl = cl.create_table(name, schema)
206
- rows = read_data_file('imagenette2-160', 'manifest.csv', ['img'])
207
- tbl.insert(rows)
208
- return tbl
209
-
210
-
211
- def create_all_datatypes_tbl(test_client: pxt.Client) -> catalog.Table:
212
- """ Creates a table with all supported datatypes.
213
- """
214
- schema = {
215
- 'row_id': IntType(nullable=False), # used for row selection
216
- 'c_array': ArrayType(shape=(10,), dtype=FloatType(), nullable=True),
217
- 'c_bool': BoolType(nullable=True),
218
- 'c_float': FloatType(nullable=True),
219
- 'c_image': ImageType(nullable=True),
220
- 'c_int': IntType(nullable=True),
221
- 'c_json': JsonType(nullable=True),
222
- 'c_string': StringType(nullable=True),
223
- 'c_timestamp': TimestampType(nullable=True),
224
- 'c_video': VideoType(nullable=True),
225
- }
226
- tbl = test_client.create_table('all_datatype_tbl', schema)
227
- example_rows = create_table_data(tbl, num_rows=11)
228
-
229
- for i, r in enumerate(example_rows):
230
- r['row_id'] = i # row_id
231
-
232
- tbl.insert(example_rows)
233
- return tbl
234
-
235
-
236
- def read_data_file(dir_name: str, file_name: str, path_col_names: Optional[List[str]] = None) -> List[Dict[str, Any]]:
237
- """
238
- Locate dir_name, create df out of file_name.
239
- path_col_names: col names in csv file that contain file names; those will be converted to absolute paths
240
- by adding the path to 'file_name' as a prefix.
241
- Returns:
242
- tuple of (list of rows, list of column names)
243
- """
244
- if path_col_names is None:
245
- path_col_names = []
246
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
247
- glob_result = glob.glob(f'{tests_dir}/**/{dir_name}', recursive=True)
248
- assert len(glob_result) == 1, f'Could not find {dir_name}'
249
- abs_path = Path(glob_result[0])
250
- data_file_path = abs_path / file_name
251
- assert data_file_path.is_file(), f'Not a file: {str(data_file_path)}'
252
- df = pd.read_csv(str(data_file_path))
253
- for col_name in path_col_names:
254
- assert col_name in df.columns
255
- df[col_name] = df.apply(lambda r: str(abs_path / r[col_name]), axis=1)
256
- return df.to_dict(orient='records')
257
-
258
-
259
- def get_video_files(include_bad_video: bool = False) -> List[str]:
260
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
261
- glob_result = glob.glob(f'{tests_dir}/**/videos/*', recursive=True)
262
- if not include_bad_video:
263
- glob_result = [f for f in glob_result if 'bad_video' not in f]
264
-
265
- half_res = [f for f in glob_result if 'half_res' in f or 'bad_video' in f]
266
- return half_res
267
-
268
-
269
- def get_test_video_files() -> List[str]:
270
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
271
- glob_result = glob.glob(f'{tests_dir}/**/test_videos/*', recursive=True)
272
- return glob_result
273
-
274
-
275
- def get_image_files(include_bad_image: bool = False) -> List[str]:
276
- tests_dir = os.path.dirname(__file__) # search with respect to tests/ dir
277
- glob_result = glob.glob(f'{tests_dir}/**/imagenette2-160/*', recursive=True)
278
- if not include_bad_image:
279
- glob_result = [f for f in glob_result if 'bad_image' not in f]
280
- return glob_result
281
-
282
-
283
- def get_audio_files(include_bad_audio: bool = False) -> List[str]:
284
- tests_dir = os.path.dirname(__file__)
285
- glob_result = glob.glob(f'{tests_dir}/**/audio/*', recursive=True)
286
- if not include_bad_audio:
287
- glob_result = [f for f in glob_result if 'bad_audio' not in f]
288
- return glob_result
289
-
290
-
291
- def get_documents() -> List[str]:
292
- tests_dir = os.path.dirname(__file__)
293
- # for now, we can only handle .html and .md
294
- return [p for p in glob.glob(f'{tests_dir}/**/documents/*', recursive=True) if not p.endswith('.pdf')]
295
-
296
-
297
- def get_sentences(n: int = 100) -> List[str]:
298
- tests_dir = os.path.dirname(__file__)
299
- path = glob.glob(f'{tests_dir}/**/jeopardy.json', recursive=True)[0]
300
- with open(path, 'r', encoding='utf8') as f:
301
- questions_list = json.load(f)
302
- # this dataset contains \' around the questions
303
- return [q['question'].replace("'", '') for q in questions_list[:n]]
304
-
305
-
306
- def assert_resultset_eq(r1: DataFrameResultSet, r2: DataFrameResultSet) -> None:
307
- assert len(r1) == len(r2)
308
- assert len(r1.column_names()) == len(r2.column_names()) # we don't care about the actual column names
309
- r1_pd = r1.to_pandas()
310
- r2_pd = r2.to_pandas()
311
- for i in range(len(r1.column_names())):
312
- # only compare column values
313
- s1 = r1_pd.iloc[:, i]
314
- s2 = r2_pd.iloc[:, i]
315
- if s1.dtype == np.float64:
316
- assert np.allclose(s1, s2)
317
- else:
318
- assert s1.equals(s2)
319
-
320
-
321
- def skip_test_if_not_installed(package) -> None:
322
- if not Env.get().is_installed_package(package):
323
- pytest.skip(f'Package `{package}` is not installed.')
324
-
325
-
326
- def validate_update_status(status: UpdateStatus, expected_rows: Optional[int] = None) -> None:
327
- assert status.num_excs == 0
328
- if expected_rows is not None:
329
- assert status.num_rows == expected_rows
330
-
331
-
332
- def make_test_arrow_table(output_path: Path) -> None:
333
- import pyarrow as pa
334
-
335
- value_dict = {
336
- 'c_id': [1, 2, 3, 4, 5],
337
- 'c_int64': [-10, -20, -30, -40, None],
338
- 'c_int32': [-1, -2, -3, -4, None],
339
- 'c_float32': [1.1, 2.2, 3.3, 4.4, None],
340
- 'c_string': ['aaa', 'bbb', 'ccc', 'ddd', None],
341
- 'c_boolean': [True, False, True, False, None],
342
- 'c_timestamp': [
343
- datetime.datetime(2012, 1, 1, 12, 0, 0, 25),
344
- datetime.datetime(2012, 1, 2, 12, 0, 0, 25),
345
- datetime.datetime(2012, 1, 3, 12, 0, 0, 25),
346
- datetime.datetime(2012, 1, 4, 12, 0, 0, 25),
347
- None,
348
- ],
349
- # The pyarrow fixed_shape_tensor type does not support NULLs (currently can write them but not read them)
350
- # So, no nulls in this column
351
- 'c_array_float32': [
352
- [
353
- 1.0,
354
- 2.0,
355
- ],
356
- [
357
- 10.0,
358
- 20.0,
359
- ],
360
- [
361
- 100.0,
362
- 200.0,
363
- ],
364
- [
365
- 1000.0,
366
- 2000.0,
367
- ],
368
- [10000.0, 20000.0],
369
- ],
370
- }
371
-
372
- arr_size = len(value_dict['c_array_float32'][0])
373
- tensor_type = pa.fixed_shape_tensor(pa.float32(), (arr_size,))
374
-
375
- schema = pa.schema(
376
- [
377
- ('c_id', pa.int32()),
378
- ('c_int64', pa.int64()),
379
- ('c_int32', pa.int32()),
380
- ('c_float32', pa.float32()),
381
- ('c_string', pa.string()),
382
- ('c_boolean', pa.bool_()),
383
- ('c_timestamp', pa.timestamp('us')),
384
- ('c_array_float32', tensor_type),
385
- ]
386
- )
387
-
388
- test_table = pa.Table.from_pydict(value_dict, schema=schema)
389
- pa.parquet.write_table(test_table, str(output_path / 'test.parquet'))
390
-
391
-
392
- def assert_hf_dataset_equal(hf_dataset: 'datasets.Dataset', df: pxt.DataFrame, split_column_name: str) -> None:
393
- import datasets
394
- assert df.count() == hf_dataset.num_rows
395
- assert set(df.get_column_names()) == (set(hf_dataset.features.keys()) | {split_column_name})
396
-
397
- # immutable so we can use it as in a set
398
- DatasetTuple = namedtuple('DatasetTuple', ' '.join(hf_dataset.features.keys()))
399
- acc_dataset: Set[DatasetTuple] = set()
400
- for tup in hf_dataset:
401
- immutable_tup = {}
402
- for k in tup:
403
- if isinstance(tup[k], list):
404
- immutable_tup[k] = tuple(tup[k])
405
- else:
406
- immutable_tup[k] = tup[k]
407
-
408
- acc_dataset.add(DatasetTuple(**immutable_tup))
409
-
410
- for tup in df.collect():
411
- assert tup[split_column_name] in hf_dataset.split._name
412
-
413
- encoded_tup = {}
414
- for column_name, value in tup.items():
415
- if column_name == split_column_name:
416
- continue
417
- feature_type = hf_dataset.features[column_name]
418
- if isinstance(feature_type, datasets.ClassLabel):
419
- assert value in feature_type.names
420
- # must use the index of the class label as the value to
421
- # compare with dataset iteration output.
422
- value = feature_type.encode_example(value)
423
- elif isinstance(feature_type, datasets.Sequence):
424
- assert feature_type.feature.dtype == 'float32', 'may need to add more types'
425
- value = tuple([float(x) for x in value])
426
-
427
- encoded_tup[column_name] = value
428
-
429
- check_tup = DatasetTuple(**encoded_tup)
430
- assert check_tup in acc_dataset
431
-
432
- @pxt.expr_udf
433
- def img_embed(img: PIL.Image.Image) -> np.ndarray:
434
- return clip_image(img, model_id='openai/clip-vit-base-patch32')
435
-
436
- @pxt.expr_udf
437
- def text_embed(txt: str) -> np.ndarray:
438
- return clip_text(txt, model_id='openai/clip-vit-base-patch32')
439
-
440
- SAMPLE_IMAGE_URL = \
441
- 'https://raw.githubusercontent.com/pixeltable/pixeltable/master/docs/source/data/images/000000000009.jpg'
442
-
@@ -1,139 +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=2K3rUrcfdF-eXiRB9WhIrFVj1XmjrK51lQA616OYfLQ,7887
5
- pixeltable/catalog/dir.py,sha256=pG1nMpG123POo6WMSHhAmnwXOQ26uUJfUcbzL-Jb4ws,919
6
- pixeltable/catalog/globals.py,sha256=yLEGNbsSnLzjWNHVJacfjA9hbw13Q6QXLOSCRmdTlq0,943
7
- pixeltable/catalog/insertable_table.py,sha256=B9QLN2eoCTjwqH5KLBRy3YQ7_l1nd8hqJd83eIdE1Qc,8303
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=6OKvbrFFVu_xoKs68QC7mt-N99rKrBPwos4Bozs9rvg,30675
13
- pixeltable/catalog/table_version.py,sha256=1KBk1A_iqXtQbUs3P-5bxedOccj2kcryMLmlwxZcLF4,48818
14
- pixeltable/catalog/table_version_path.py,sha256=2Ofzd0n36flcNm86KWwIWDBAfgnV5Z-FxAHdMSPgMLc,5482
15
- pixeltable/catalog/view.py,sha256=BIL3s4DV3tWbOcqtqnhn46B2UvLaBhppfJUlNEt5nec,9734
16
- pixeltable/client.py,sha256=Ypah43hdEByGZ7WGS5-2LWKnsWAuhofq84TMRZD90uQ,23442
17
- pixeltable/dataframe.py,sha256=GyeutsjdKSAzRorzIsSZ_hElGJM7bRSRv28ynB4qFGY,30014
18
- pixeltable/env.py,sha256=Qk_Br2gJKDykvz0AoWJ45nDZTjhl-MStxVWWFI4pU3A,16303
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=d5pEuR6AtJQkEVy9X3XeYFI_q0szMtoNAH96vYdtBE0,5241
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=SNM2AbMQSjmGDWMNJUf_5MmlXWE3P80lsuUjNfzQckA,3171
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=rAlGUF0AuzkYGspewJPu-6aaQZa4dVMJYGbMwqKyBIc,2964
37
- pixeltable/exprs/compound_predicate.py,sha256=Gh22MKi625m5A_RunVRd-a1XFi-fitikqBVz2VNXKrs,3830
38
- pixeltable/exprs/data_row.py,sha256=2kGnZhDna4bkgzb2y9iDnkLFe8lXSk59QAf9zW2Z-Y0,8278
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=5NNza-WL1dd3hNznwwkr_yAcTGXSIRYUszGfy30lruI,2396
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=72bbPPynmzFrWuZoqsCCBmtWAgf3XFyKqUQaoMusmeo,15321
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/ext/__init__.py,sha256=0uugfuME1FybVo-MdxaVNGagRjhcvNTnv5MZUem6Cyo,269
58
- pixeltable/ext/functions/yolox.py,sha256=LwrOtXMT57AP6-IkmRZ_12yN5-EiFRpTuh4Sexm8x24,3131
59
- pixeltable/func/__init__.py,sha256=4qvDnK_S5yljwtIrxCkeQlz6vuTVfwSU4zl-MBT2TMU,457
60
- pixeltable/func/aggregate_function.py,sha256=OC5dmWKOjNHcgH5KrsxZpISoP5RFXfHFkzHQk8PnOUQ,9267
61
- pixeltable/func/batched_function.py,sha256=nrfmykJps4QkgzeC4ZroGy8mJ-BACNKbRJABHHG6-Ac,2350
62
- pixeltable/func/callable_function.py,sha256=WGUwjNEzXGDJ1jzdZ-mrn2cnfEHmFZIh_DRl_Yk89D0,2357
63
- pixeltable/func/expr_template_function.py,sha256=aBIjO5ibd2t56lNKKEmv-YFVcxUW_jqHIiYaslG1u2A,3807
64
- pixeltable/func/function.py,sha256=NcGyKp7ds6bMzg1qzuaK8pBQH_DhknmSiZzsfXi-z2k,4023
65
- pixeltable/func/function_registry.py,sha256=1ibSQxEPm3Zd3r497vSlckQiDG9sfCnyJx3zcSm9t7c,11456
66
- pixeltable/func/globals.py,sha256=sEwn6lGgHMp6VQORb_P5qRd_-Q2_bUSqvqM9-XPN_ec,1483
67
- pixeltable/func/nos_function.py,sha256=HzIKK4XjTo1E6pML-EbhuX3u_LYibFWUuTkIxoIih7c,9650
68
- pixeltable/func/signature.py,sha256=aQRb-znfblRlMlUN7YmbFHF6-PRAGbYRpqDNd7nawII,7343
69
- pixeltable/func/udf.py,sha256=DEaXgKrx-Nrszf9cSC_ql9GF016DRbKI5JXAHODUU0I,6711
70
- pixeltable/functions/__init__.py,sha256=uO-XB4QUbx3Jjs9GoaTXoJY2jn0AuXTL32YLkL_3_CI,3297
71
- pixeltable/functions/eval.py,sha256=_2FANDJqwtIDzTxtcKc0Yacf7b4LTAjyy2fPDw1FG_s,8404
72
- pixeltable/functions/fireworks.py,sha256=e_rCITg18yNndNI8TJPXRSN6DR0hYWT-_dUavoPuyfc,908
73
- pixeltable/functions/huggingface.py,sha256=_Z-MqqMRVDw1GOS5KonaeEmh5qsU-dfam9EODddiHw4,5693
74
- pixeltable/functions/image.py,sha256=xR_S_0BuX6Ycc5E366GpOfP0JptD7beQwHE_fLl8ZVM,431
75
- pixeltable/functions/openai.py,sha256=o5-qh_T4JgIyMR8Ky1Y6HbK9yg88fJSkkQCIaLAf9Qg,6870
76
- pixeltable/functions/pil/image.py,sha256=8gItSXXuJaCkq9FHEJE9qFpRM3WAoa59x89Xa0DgksQ,6217
77
- pixeltable/functions/string.py,sha256=RYOgZwifjC943YloEMi3PdflnjFqOYB2FddrUvzgtXs,516
78
- pixeltable/functions/together.py,sha256=sG23nLMScmp4wRA4K1EIJDY9peqE1IPgxlK3fhNrbgw,3423
79
- pixeltable/functions/util.py,sha256=djVqro_W5M_jUgYWzZZaXXH3lWaAWj6q-hrpzFl_Ko8,1860
80
- pixeltable/functions/video.py,sha256=WZF4G3tV-_LfRQHUinXe_rnu1-4N68Ht60JCR_s7Bew,2403
81
- pixeltable/index/__init__.py,sha256=tlJENOzEq6p_8xu-nX1mN4Zt9asw4481Znl5ZXYIKwc,72
82
- pixeltable/index/base.py,sha256=LwBXLOBWkQhAOSOo2gtgtgSJglnRUrf0RtG5JmcwwEQ,1362
83
- pixeltable/index/embedding_index.py,sha256=THFue7f4fKCUXYlxqqRGNcoc1o22GqYcYg6s5vvQFFg,4372
84
- pixeltable/iterators/__init__.py,sha256=sfsasCypAq5rNOTMlr4j2ROXxzdl4M8L2KvQIEbd0cQ,70
85
- pixeltable/iterators/base.py,sha256=sugU9mG19xf9I4c_lEQDI_xrXPLuyuIYlKc-9OiS1HQ,1545
86
- pixeltable/iterators/document.py,sha256=bWK-3oRD9Sbc5vIcxccMyFh8zTP40233NK3ch6uyLI0,13105
87
- pixeltable/iterators/video.py,sha256=mUdHev0f_XJIfHTB-mejjToURh10Ud7l096eZm2aPjM,3444
88
- pixeltable/metadata/__init__.py,sha256=6rLGFpWzQMCk0EcSKLp4Bnbk8tLK1cxuONBPqwDCMzU,2083
89
- pixeltable/metadata/converters/convert_10.py,sha256=0mSGCn7vqtef63riPi9msUaaUvsSQIj-NFj9QFDYPdA,733
90
- pixeltable/metadata/schema.py,sha256=uuk3rzCpYr99PzEO1pIXe8nMaOoTJtwRfhnqgQ_MdDs,8335
91
- pixeltable/plan.py,sha256=sZe_K_5VUGISPIiRoogXhfYMSx6tU58YPGcx1HCKACo,33549
92
- pixeltable/store.py,sha256=IAurcG5vyryl4GMIl6nH0vM-R-IXTj5ZaczgtMKsEx0,19426
93
- pixeltable/tests/conftest.py,sha256=mVZmWdQWNRJPmeyYTkdE2AcOx861A-JsfaZkRmZ5_wE,6339
94
- pixeltable/tests/ext/test_yolox.py,sha256=hZRCq1bue3PO86zdBdfUa-3I8_pZ4i91J25cLPcmRX0,1085
95
- pixeltable/tests/functions/test_fireworks.py,sha256=d6-bgB4PUByJ_9pfn7_jcI8weMpUgYM1Bln0ohBu49I,1690
96
- pixeltable/tests/functions/test_functions.py,sha256=SRE4zRwfJ1Hetu8uMp5X-Iqg-pawn87q07JHa7w_8l0,2884
97
- pixeltable/tests/functions/test_huggingface.py,sha256=hmxM-2skPe1xu0uniI2N_IL8djDpBis86wdEh4Oc_84,7657
98
- pixeltable/tests/functions/test_openai.py,sha256=YT34H6knG-pSypGFxGGjqebjjcYF1Z7BDm1Vo9Ar970,8659
99
- pixeltable/tests/functions/test_together.py,sha256=sNySFn0tgWAVz99htLA3UvrKFoHevyKOfBQ6uJb4AFM,4812
100
- pixeltable/tests/test_audio.py,sha256=92PMPrMtYzLoaLiW92MupEfWPEcfoLlYlZKlxmWQXdI,3186
101
- pixeltable/tests/test_catalog.py,sha256=Npxt72g5aZkfg1fqE-19L8rGilzicAiTC0ithIy3woI,1189
102
- pixeltable/tests/test_client.py,sha256=9acrjElh1YVX8WXWO04VQ-S6mNx9ZtqAHoh4uBc81y4,531
103
- pixeltable/tests/test_component_view.py,sha256=j0Ri9li_gqEgu_X_MDlHq3SrglwSb-TFt-VgAPiXk1M,18221
104
- pixeltable/tests/test_dataframe.py,sha256=7MNVGKg7gD__K_EH5PRx2wSDkykpQF2Uoahr_JvQwD4,17906
105
- pixeltable/tests/test_dirs.py,sha256=WuWGOcpUFPCl1PGZgOMcU5bpzv1ClUqZ5AxavrDeCic,3611
106
- pixeltable/tests/test_document.py,sha256=5G52cMbkkX2lk5SwyYQ1KYjQjgUfVhjcsjPtL9xjGXU,5810
107
- pixeltable/tests/test_exprs.py,sha256=3F2btTIdT6TymaQLtiDIo3sAntW1WLY5oU-ud267VhY,32181
108
- pixeltable/tests/test_function.py,sha256=zzW7IYTipe23ao5_dNMmGEv2xJOsDUe0DoHI8pfuPDI,12987
109
- pixeltable/tests/test_index.py,sha256=6ONEKsxHdUJuLTYoeIVqEJzbp_sANzr43D1xre2b-6o,5410
110
- pixeltable/tests/test_migration.py,sha256=RGpQOjkkjhT4oO9U5X6dG2q8YHTeJPDq_dRlQZY7YQM,1599
111
- pixeltable/tests/test_nos.py,sha256=ITE7FNEaNreJ_XTz4wYLWuidFSUQMFp3ShuHTz05OrE,2649
112
- pixeltable/tests/test_snapshot.py,sha256=uTTxnBNZODhhbH2pAxtzKdGrNmbiozKmya-LvK8OQ6g,10331
113
- pixeltable/tests/test_table.py,sha256=a7BCBsSzlLmIEXtmrLiIFP6B4KoG4B9MuHm_JIwFEic,56557
114
- pixeltable/tests/test_transactional_directory.py,sha256=Jx55PZgrkHTI0Eli09puwMckvwfCM9arPTQUT9g6Tbg,1308
115
- pixeltable/tests/test_types.py,sha256=psRqCDInUPH99W6-FlZhqUoN5FTlfZaUUS7YR3UzvIw,2045
116
- pixeltable/tests/test_video.py,sha256=zN9h9KM2V8U-Rf3tFxYimp_QoT4hLbbguyEu2o9_PLU,7740
117
- pixeltable/tests/test_view.py,sha256=EWo_Z-UEbilayXK8iEziPg5fedGtT6o4745S04Z4Lb4,22108
118
- pixeltable/tests/utils.py,sha256=LNHP9O0vqtKV4_WngD6V3e6iI7dKxLkII2UInR4xKHQ,15106
119
- pixeltable/tool/create_test_db_dump.py,sha256=mKX42BHgx1JggmG2vupT0kzDM0N2HG-z8ObKcgBRMls,5842
120
- pixeltable/tool/create_test_video.py,sha256=OLfccymYReIpzE8osZn4rQvLXxxiPC_l0vc06U74hVM,2899
121
- pixeltable/type_system.py,sha256=VXVxgclkW3_wX818qZ6NnST29M8R4fgQ9_LiEfVOo8k,29929
122
- pixeltable/utils/__init__.py,sha256=UYlrf6TIWJT0g-Hac0b34-dEk478B5Qx8dGco34YlIk,439
123
- pixeltable/utils/arrow.py,sha256=83_7aG5UR2qtTktw_otLkQs-RQbLk0VVM0JLJkbweNU,3692
124
- pixeltable/utils/clip.py,sha256=HXXWFBJXW9XysdMk9_3hP1V1S-3B8Hwd5rNMbJFjjnI,720
125
- pixeltable/utils/coco.py,sha256=mk1cxjKYQC0ABm2ZQ9SNu9MvBPECmmKvnASpxnFXdL0,5604
126
- pixeltable/utils/documents.py,sha256=MGtWZs93Bt_pdExxT9yjH7VWbawSd5A2O5_YdxEZlMk,1094
127
- pixeltable/utils/filecache.py,sha256=UoNONG2VaAc2IBB0e3sQdsvyOPOes2XSDc5_CsA4qek,7839
128
- pixeltable/utils/help.py,sha256=cCnxJ4VP9MJ57iDqExmnDcM-JG3a1lw_q7g-D7bpSVI,252
129
- pixeltable/utils/hf_datasets.py,sha256=TxN0H9d25VfXiWwT1XAziNFJMKLSK9Y7x1oPejbuFok,7005
130
- pixeltable/utils/media_store.py,sha256=x71wnJDZDHcdd13VCfL4AkHQ6IJB41gNA-zBvXJwFos,3116
131
- pixeltable/utils/parquet.py,sha256=DmiF74UYNvnGOOgHUHk_108QZALsQY7HnZoJw6-H3xc,7120
132
- pixeltable/utils/pytorch.py,sha256=BR4tgfUWw-2rwWTOgzXj5qdMBpe1Arpp5SK4ax6jjpk,3483
133
- pixeltable/utils/s3.py,sha256=rkanuhk9DWvSfmbOLQW1j1Iov4sl2KhxGGKN-AJ8LSE,432
134
- pixeltable/utils/sql.py,sha256=5n5_OmXAGtqFdL6z5XvgnU-vlx6Ba6f1WJrO1ZwUle8,765
135
- pixeltable/utils/transactional_directory.py,sha256=UGzCrGtLR3hEEf8sYGuWBzLVFAEQml3vdIavigWeTBM,1349
136
- pixeltable-0.2.5.dist-info/LICENSE,sha256=0UNMmwuqWPC0xDY1NWMm4uNJ2_MyA1pnTNRgQTvuBiQ,746
137
- pixeltable-0.2.5.dist-info/METADATA,sha256=Fl2vtfThiLTgAhZMSioMssMmq7DvnSe-7V42AfBrT7g,6081
138
- pixeltable-0.2.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
139
- pixeltable-0.2.5.dist-info/RECORD,,