pixeltable 0.3.1__py3-none-any.whl → 0.3.3__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.
- pixeltable/__init__.py +64 -11
- pixeltable/__version__.py +2 -2
- pixeltable/catalog/__init__.py +1 -1
- pixeltable/catalog/catalog.py +50 -27
- pixeltable/catalog/column.py +27 -11
- pixeltable/catalog/dir.py +6 -4
- pixeltable/catalog/globals.py +8 -1
- pixeltable/catalog/insertable_table.py +25 -15
- pixeltable/catalog/named_function.py +10 -6
- pixeltable/catalog/path.py +3 -2
- pixeltable/catalog/path_dict.py +8 -6
- pixeltable/catalog/schema_object.py +2 -1
- pixeltable/catalog/table.py +123 -103
- pixeltable/catalog/table_version.py +292 -143
- pixeltable/catalog/table_version_path.py +8 -5
- pixeltable/catalog/view.py +68 -27
- pixeltable/dataframe.py +102 -72
- pixeltable/env.py +39 -23
- pixeltable/exec/__init__.py +2 -2
- pixeltable/exec/aggregation_node.py +10 -4
- pixeltable/exec/cache_prefetch_node.py +5 -3
- pixeltable/exec/component_iteration_node.py +9 -8
- pixeltable/exec/data_row_batch.py +21 -10
- pixeltable/exec/exec_context.py +10 -3
- pixeltable/exec/exec_node.py +23 -12
- pixeltable/exec/expr_eval/evaluators.py +18 -17
- pixeltable/exec/expr_eval/expr_eval_node.py +29 -16
- pixeltable/exec/expr_eval/globals.py +33 -11
- pixeltable/exec/expr_eval/row_buffer.py +5 -6
- pixeltable/exec/expr_eval/schedulers.py +170 -42
- pixeltable/exec/in_memory_data_node.py +8 -7
- pixeltable/exec/row_update_node.py +15 -5
- pixeltable/exec/sql_node.py +56 -27
- pixeltable/exprs/__init__.py +2 -2
- pixeltable/exprs/arithmetic_expr.py +57 -26
- pixeltable/exprs/array_slice.py +1 -1
- pixeltable/exprs/column_property_ref.py +2 -1
- pixeltable/exprs/column_ref.py +20 -15
- pixeltable/exprs/comparison.py +6 -2
- pixeltable/exprs/compound_predicate.py +1 -3
- pixeltable/exprs/data_row.py +2 -2
- pixeltable/exprs/expr.py +101 -72
- pixeltable/exprs/expr_dict.py +2 -1
- pixeltable/exprs/expr_set.py +3 -1
- pixeltable/exprs/function_call.py +39 -41
- pixeltable/exprs/globals.py +1 -0
- pixeltable/exprs/in_predicate.py +2 -2
- pixeltable/exprs/inline_expr.py +20 -17
- pixeltable/exprs/json_mapper.py +4 -2
- pixeltable/exprs/json_path.py +12 -18
- pixeltable/exprs/literal.py +5 -9
- pixeltable/exprs/method_ref.py +1 -0
- pixeltable/exprs/object_ref.py +1 -1
- pixeltable/exprs/row_builder.py +31 -16
- pixeltable/exprs/rowid_ref.py +14 -5
- pixeltable/exprs/similarity_expr.py +11 -6
- pixeltable/exprs/sql_element_cache.py +1 -1
- pixeltable/exprs/type_cast.py +24 -9
- pixeltable/ext/__init__.py +1 -0
- pixeltable/ext/functions/__init__.py +1 -0
- pixeltable/ext/functions/whisperx.py +2 -2
- pixeltable/ext/functions/yolox.py +11 -11
- pixeltable/func/aggregate_function.py +17 -13
- pixeltable/func/callable_function.py +6 -6
- pixeltable/func/expr_template_function.py +15 -14
- pixeltable/func/function.py +16 -16
- pixeltable/func/function_registry.py +11 -8
- pixeltable/func/globals.py +4 -2
- pixeltable/func/query_template_function.py +12 -13
- pixeltable/func/signature.py +18 -9
- pixeltable/func/tools.py +10 -17
- pixeltable/func/udf.py +106 -11
- pixeltable/functions/__init__.py +21 -2
- pixeltable/functions/anthropic.py +21 -15
- pixeltable/functions/fireworks.py +63 -5
- pixeltable/functions/gemini.py +13 -3
- pixeltable/functions/globals.py +18 -6
- pixeltable/functions/huggingface.py +20 -38
- pixeltable/functions/image.py +7 -3
- pixeltable/functions/json.py +1 -0
- pixeltable/functions/llama_cpp.py +1 -4
- pixeltable/functions/mistralai.py +31 -20
- pixeltable/functions/ollama.py +4 -18
- pixeltable/functions/openai.py +214 -109
- pixeltable/functions/replicate.py +11 -10
- pixeltable/functions/string.py +70 -7
- pixeltable/functions/timestamp.py +21 -8
- pixeltable/functions/together.py +66 -52
- pixeltable/functions/video.py +1 -0
- pixeltable/functions/vision.py +14 -11
- pixeltable/functions/whisper.py +2 -1
- pixeltable/globals.py +61 -28
- pixeltable/index/__init__.py +1 -1
- pixeltable/index/btree.py +5 -3
- pixeltable/index/embedding_index.py +15 -14
- pixeltable/io/__init__.py +1 -1
- pixeltable/io/external_store.py +30 -25
- pixeltable/io/fiftyone.py +6 -14
- pixeltable/io/globals.py +33 -27
- pixeltable/io/hf_datasets.py +3 -2
- pixeltable/io/label_studio.py +80 -71
- pixeltable/io/pandas.py +33 -9
- pixeltable/io/parquet.py +10 -13
- pixeltable/iterators/__init__.py +1 -0
- pixeltable/iterators/audio.py +205 -0
- pixeltable/iterators/document.py +19 -8
- pixeltable/iterators/image.py +6 -24
- pixeltable/iterators/string.py +3 -6
- pixeltable/iterators/video.py +1 -7
- pixeltable/metadata/__init__.py +9 -2
- pixeltable/metadata/converters/convert_10.py +2 -2
- pixeltable/metadata/converters/convert_15.py +1 -5
- pixeltable/metadata/converters/convert_16.py +2 -4
- pixeltable/metadata/converters/convert_17.py +2 -4
- pixeltable/metadata/converters/convert_18.py +2 -4
- pixeltable/metadata/converters/convert_19.py +2 -5
- pixeltable/metadata/converters/convert_20.py +1 -4
- pixeltable/metadata/converters/convert_21.py +4 -6
- pixeltable/metadata/converters/convert_22.py +1 -0
- pixeltable/metadata/converters/convert_23.py +5 -5
- pixeltable/metadata/converters/convert_24.py +12 -13
- pixeltable/metadata/converters/convert_26.py +23 -0
- pixeltable/metadata/converters/util.py +3 -4
- pixeltable/metadata/notes.py +1 -0
- pixeltable/metadata/schema.py +13 -2
- pixeltable/plan.py +173 -98
- pixeltable/store.py +42 -26
- pixeltable/type_system.py +130 -85
- pixeltable/utils/arrow.py +1 -7
- pixeltable/utils/coco.py +16 -17
- pixeltable/utils/code.py +1 -1
- pixeltable/utils/console_output.py +44 -0
- pixeltable/utils/description_helper.py +7 -7
- pixeltable/utils/documents.py +3 -1
- pixeltable/utils/filecache.py +13 -8
- pixeltable/utils/http_server.py +9 -8
- pixeltable/utils/media_store.py +2 -1
- pixeltable/utils/pytorch.py +11 -14
- pixeltable/utils/s3.py +1 -0
- pixeltable/utils/sql.py +1 -0
- pixeltable/utils/transactional_directory.py +2 -2
- {pixeltable-0.3.1.dist-info → pixeltable-0.3.3.dist-info}/METADATA +7 -8
- pixeltable-0.3.3.dist-info/RECORD +163 -0
- pixeltable-0.3.1.dist-info/RECORD +0 -160
- {pixeltable-0.3.1.dist-info → pixeltable-0.3.3.dist-info}/LICENSE +0 -0
- {pixeltable-0.3.1.dist-info → pixeltable-0.3.3.dist-info}/WHEEL +0 -0
- {pixeltable-0.3.1.dist-info → pixeltable-0.3.3.dist-info}/entry_points.txt +0 -0
pixeltable/utils/coco.py
CHANGED
|
@@ -22,6 +22,7 @@ Required format:
|
|
|
22
22
|
}
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
|
+
|
|
25
26
|
def _verify_input_dict(input_dict: dict[str, Any]) -> None:
|
|
26
27
|
"""Verify that input_dict is a valid input dict for write_coco_dataset()"""
|
|
27
28
|
if not isinstance(input_dict, dict):
|
|
@@ -30,7 +31,7 @@ def _verify_input_dict(input_dict: dict[str, Any]) -> None:
|
|
|
30
31
|
raise excs.Error(f'Missing key "image" in input dict: {input_dict}{format_msg}')
|
|
31
32
|
if not isinstance(input_dict['image'], PIL.Image.Image):
|
|
32
33
|
raise excs.Error(f'Value for "image" is not a PIL.Image.Image: {input_dict}{format_msg}')
|
|
33
|
-
if
|
|
34
|
+
if 'annotations' not in input_dict:
|
|
34
35
|
raise excs.Error(f'Missing key "annotations" in input dict: {input_dict}{format_msg}')
|
|
35
36
|
if not isinstance(input_dict['annotations'], list):
|
|
36
37
|
raise excs.Error(f'Value for "annotations" is not a list: {input_dict}{format_msg}')
|
|
@@ -48,6 +49,7 @@ def _verify_input_dict(input_dict: dict[str, Any]) -> None:
|
|
|
48
49
|
if not isinstance(annotation['category'], (str, int)):
|
|
49
50
|
raise excs.Error(f'Value for "category" is not a str or int: {annotation}{format_msg}')
|
|
50
51
|
|
|
52
|
+
|
|
51
53
|
def write_coco_dataset(df: pxt.DataFrame, dest_path: Path) -> Path:
|
|
52
54
|
"""Export a DataFrame result set as a COCO dataset in dest_path and return the path of the data.json file."""
|
|
53
55
|
# TODO: validate schema
|
|
@@ -96,12 +98,7 @@ def write_coco_dataset(df: pxt.DataFrame, dest_path: Path) -> Path:
|
|
|
96
98
|
img_path = images_dir / f'{img_id}.jpg'
|
|
97
99
|
img.save(img_path)
|
|
98
100
|
|
|
99
|
-
images.append({
|
|
100
|
-
'id': img_id,
|
|
101
|
-
'file_name': str(img_path),
|
|
102
|
-
'width': img.width,
|
|
103
|
-
'height': img.height,
|
|
104
|
-
})
|
|
101
|
+
images.append({'id': img_id, 'file_name': str(img_path), 'width': img.width, 'height': img.height})
|
|
105
102
|
|
|
106
103
|
# create annotation records for this image
|
|
107
104
|
for annotation in input_dict['annotations']:
|
|
@@ -109,15 +106,17 @@ def write_coco_dataset(df: pxt.DataFrame, dest_path: Path) -> Path:
|
|
|
109
106
|
x, y, w, h = annotation['bbox']
|
|
110
107
|
category = annotation['category']
|
|
111
108
|
categories.add(category)
|
|
112
|
-
annotations.append(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
109
|
+
annotations.append(
|
|
110
|
+
{
|
|
111
|
+
'id': ann_id,
|
|
112
|
+
'image_id': img_id,
|
|
113
|
+
# we use the category name here and fix it up at the end, when we have assigned category ids
|
|
114
|
+
'category_id': category,
|
|
115
|
+
'bbox': annotation['bbox'],
|
|
116
|
+
'area': w * h,
|
|
117
|
+
'iscrowd': 0,
|
|
118
|
+
}
|
|
119
|
+
)
|
|
121
120
|
|
|
122
121
|
# replace category names with ids
|
|
123
122
|
category_ids = {category: id for id, category in enumerate(sorted(list(categories)))}
|
|
@@ -226,5 +225,5 @@ COCO_2017_CATEGORIES = {
|
|
|
226
225
|
87: 'scissors',
|
|
227
226
|
88: 'teddy bear',
|
|
228
227
|
89: 'hair drier',
|
|
229
|
-
90: 'toothbrush'
|
|
228
|
+
90: 'toothbrush',
|
|
230
229
|
}
|
pixeltable/utils/code.py
CHANGED
|
@@ -3,9 +3,9 @@ from typing import Optional
|
|
|
3
3
|
|
|
4
4
|
from pixeltable.func import Function
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
# Utilities related to the organization of the Pixeltable codebase.
|
|
8
7
|
|
|
8
|
+
|
|
9
9
|
def local_public_names(mod_name: str, exclude: Optional[list[str]] = None) -> list[str]:
|
|
10
10
|
"""
|
|
11
11
|
Returns a list of all functions and submodules that are local to the specified module and are
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def map_level(verbosity: int) -> int:
|
|
5
|
+
"""
|
|
6
|
+
Map verbosity level to logging level.
|
|
7
|
+
0 - minimum logging - warn and above
|
|
8
|
+
1 - default logging - info and above
|
|
9
|
+
2 - more logging - debug and above
|
|
10
|
+
Args:
|
|
11
|
+
|
|
12
|
+
Returns:
|
|
13
|
+
Logging level as integer
|
|
14
|
+
"""
|
|
15
|
+
if verbosity == 0:
|
|
16
|
+
return logging.WARN
|
|
17
|
+
if verbosity == 1:
|
|
18
|
+
return logging.INFO
|
|
19
|
+
if verbosity == 2:
|
|
20
|
+
return logging.DEBUG
|
|
21
|
+
return logging.INFO
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ConsoleOutputHandler(logging.StreamHandler):
|
|
25
|
+
def __init__(self, stream):
|
|
26
|
+
super().__init__(stream)
|
|
27
|
+
|
|
28
|
+
def emit(self, record):
|
|
29
|
+
if record.msg.endswith('\n'):
|
|
30
|
+
self.stream.write(record.msg)
|
|
31
|
+
else:
|
|
32
|
+
self.stream.write(record.msg + '\n')
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ConsoleMessageFilter(logging.Filter):
|
|
36
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
37
|
+
if hasattr(record, 'user_visible') and record.user_visible:
|
|
38
|
+
return True
|
|
39
|
+
return False
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ConsoleLogger(logging.LoggerAdapter):
|
|
43
|
+
def __init__(self, logger: logging.Logger):
|
|
44
|
+
super().__init__(logger, extra={'user_visible': True})
|
|
@@ -25,6 +25,7 @@ class DescriptionHelper:
|
|
|
25
25
|
DescriptionHelper can convert a list of descriptors into either HTML or plaintext and do something reasonable
|
|
26
26
|
in each case.
|
|
27
27
|
"""
|
|
28
|
+
|
|
28
29
|
__descriptors: list[_Descriptor]
|
|
29
30
|
|
|
30
31
|
def __init__(self) -> None:
|
|
@@ -69,18 +70,17 @@ class DescriptionHelper:
|
|
|
69
70
|
return (
|
|
70
71
|
# Render the string as a single-cell DataFrame. This will ensure a consistent style of output in
|
|
71
72
|
# cases where strings appear alongside DataFrames in the same DescriptionHelper.
|
|
72
|
-
pd.DataFrame([descriptor.body])
|
|
73
|
-
.set_properties(None, **{'white-space': 'pre-wrap', 'text-align': 'left', 'font-weight': 'bold'})
|
|
74
|
-
.hide(axis='index')
|
|
73
|
+
pd.DataFrame([descriptor.body])
|
|
74
|
+
.style.set_properties(None, **{'white-space': 'pre-wrap', 'text-align': 'left', 'font-weight': 'bold'})
|
|
75
|
+
.hide(axis='index')
|
|
76
|
+
.hide(axis='columns')
|
|
75
77
|
)
|
|
76
78
|
else:
|
|
77
79
|
styler = descriptor.styler
|
|
78
80
|
if styler is None:
|
|
79
81
|
styler = descriptor.body.style
|
|
80
|
-
styler = (
|
|
81
|
-
|
|
82
|
-
.set_properties(None, **{'white-space': 'pre-wrap', 'text-align': 'left'})
|
|
83
|
-
.set_table_styles([dict(selector='th', props=[('text-align', 'left')])])
|
|
82
|
+
styler = styler.set_properties(None, **{'white-space': 'pre-wrap', 'text-align': 'left'}).set_table_styles(
|
|
83
|
+
[dict(selector='th', props=[('text-align', 'left')])]
|
|
84
84
|
)
|
|
85
85
|
if not descriptor.show_header:
|
|
86
86
|
styler = styler.hide(axis='columns')
|
pixeltable/utils/documents.py
CHANGED
|
@@ -83,6 +83,7 @@ def get_xml_handle(path: str) -> Optional[bs4.BeautifulSoup]:
|
|
|
83
83
|
def get_markdown_handle(path: str) -> Optional[dict]:
|
|
84
84
|
Env.get().require_package('mistune', [3, 0])
|
|
85
85
|
import mistune
|
|
86
|
+
|
|
86
87
|
try:
|
|
87
88
|
with open(path, encoding='utf8') as file:
|
|
88
89
|
text = file.read()
|
|
@@ -91,9 +92,10 @@ def get_markdown_handle(path: str) -> Optional[dict]:
|
|
|
91
92
|
except Exception:
|
|
92
93
|
return None
|
|
93
94
|
|
|
95
|
+
|
|
94
96
|
def get_txt(path: str) -> Optional[str]:
|
|
95
97
|
try:
|
|
96
|
-
with open(path,
|
|
98
|
+
with open(path, 'r') as f:
|
|
97
99
|
doc = f.read()
|
|
98
100
|
return doc if doc != '' else None
|
|
99
101
|
except Exception:
|
pixeltable/utils/filecache.py
CHANGED
|
@@ -17,9 +17,9 @@ from pixeltable.env import Env
|
|
|
17
17
|
|
|
18
18
|
_logger = logging.getLogger('pixeltable')
|
|
19
19
|
|
|
20
|
+
|
|
20
21
|
@dataclass
|
|
21
22
|
class CacheEntry:
|
|
22
|
-
|
|
23
23
|
key: str
|
|
24
24
|
tbl_id: UUID
|
|
25
25
|
col_id: int
|
|
@@ -56,6 +56,7 @@ class FileCache:
|
|
|
56
56
|
TODO:
|
|
57
57
|
- implement MRU eviction for queries that exceed the capacity
|
|
58
58
|
"""
|
|
59
|
+
|
|
59
60
|
__instance: Optional[FileCache] = None
|
|
60
61
|
|
|
61
62
|
cache: OrderedDict[str, CacheEntry]
|
|
@@ -79,8 +80,7 @@ class FileCache:
|
|
|
79
80
|
|
|
80
81
|
FileCacheColumnStats = namedtuple('FileCacheColumnStats', ('tbl_id', 'col_id', 'num_files', 'total_size'))
|
|
81
82
|
FileCacheStats = namedtuple(
|
|
82
|
-
'FileCacheStats',
|
|
83
|
-
('total_size', 'num_requests', 'num_hits', 'num_evictions', 'column_stats')
|
|
83
|
+
'FileCacheStats', ('total_size', 'num_requests', 'num_hits', 'num_evictions', 'column_stats')
|
|
84
84
|
)
|
|
85
85
|
|
|
86
86
|
@classmethod
|
|
@@ -154,7 +154,7 @@ class FileCache:
|
|
|
154
154
|
f'Consider increasing the cache size to at least {round(suggested_cache_size / (1 << 30), 1)} GiB '
|
|
155
155
|
f'(it is currently {round(self.capacity_bytes / (1 << 30), 1)} GiB).\n'
|
|
156
156
|
f'You can do this by setting the value of `file_cache_size_g` in: {str(Env.get()._config_file)}',
|
|
157
|
-
excs.PixeltableWarning
|
|
157
|
+
excs.PixeltableWarning,
|
|
158
158
|
)
|
|
159
159
|
self.new_redownload_witnessed = False
|
|
160
160
|
|
|
@@ -195,7 +195,9 @@ class FileCache:
|
|
|
195
195
|
self.evicted_working_set_keys.add(key)
|
|
196
196
|
self.new_redownload_witnessed = True
|
|
197
197
|
self.keys_retrieved.add(key)
|
|
198
|
-
entry = CacheEntry(
|
|
198
|
+
entry = CacheEntry(
|
|
199
|
+
key, tbl_id, col_id, file_info.st_size, datetime.fromtimestamp(file_info.st_mtime), path.suffix
|
|
200
|
+
)
|
|
199
201
|
self.cache[key] = entry
|
|
200
202
|
self.total_size += entry.size
|
|
201
203
|
new_path = entry.path
|
|
@@ -217,7 +219,9 @@ class FileCache:
|
|
|
217
219
|
# Make a record of the eviction, so that we can generate a warning later if the key is retrieved again.
|
|
218
220
|
self.keys_evicted_after_retrieval.add(lru_entry.key)
|
|
219
221
|
os.remove(str(lru_entry.path))
|
|
220
|
-
_logger.debug(
|
|
222
|
+
_logger.debug(
|
|
223
|
+
f'evicted entry for cell {lru_entry.key} from file cache (of size {lru_entry.size // (1 << 20)} MiB)'
|
|
224
|
+
)
|
|
221
225
|
|
|
222
226
|
def set_capacity(self, capacity_bytes: int) -> None:
|
|
223
227
|
self.capacity_bytes = capacity_bytes
|
|
@@ -232,11 +236,12 @@ class FileCache:
|
|
|
232
236
|
t[0] += 1
|
|
233
237
|
t[1] += entry.size
|
|
234
238
|
col_stats = [
|
|
235
|
-
self.FileCacheColumnStats(tbl_id, col_id, num_files, size)
|
|
239
|
+
self.FileCacheColumnStats(tbl_id, col_id, num_files, size)
|
|
240
|
+
for (tbl_id, col_id), (num_files, size) in d.items()
|
|
236
241
|
]
|
|
237
242
|
col_stats.sort(key=lambda e: e[3], reverse=True)
|
|
238
243
|
return self.FileCacheStats(self.total_size, self.num_requests, self.num_hits, self.num_evictions, col_stats)
|
|
239
244
|
|
|
240
245
|
def debug_print(self) -> None:
|
|
241
246
|
for entry in self.cache.values():
|
|
242
|
-
|
|
247
|
+
_logger.debug(f'CacheEntry: tbl_id={entry.tbl_id}, col_id={entry.col_id}, size={entry.size}')
|
pixeltable/utils/http_server.py
CHANGED
|
@@ -9,7 +9,7 @@ _logger = logging.getLogger('pixeltable.http.server')
|
|
|
9
9
|
|
|
10
10
|
def get_file_uri(http_address: str, file_path: str) -> str:
|
|
11
11
|
"""Get the URI for a file path, with the given prefix.
|
|
12
|
-
|
|
12
|
+
Used in the client to generate a URI
|
|
13
13
|
"""
|
|
14
14
|
abs_path = pathlib.Path(file_path)
|
|
15
15
|
assert abs_path.is_absolute()
|
|
@@ -19,15 +19,16 @@ def get_file_uri(http_address: str, file_path: str) -> str:
|
|
|
19
19
|
|
|
20
20
|
class AbsolutePathHandler(http.server.SimpleHTTPRequestHandler):
|
|
21
21
|
"""Serves all absolute paths, not just the current directory"""
|
|
22
|
+
|
|
22
23
|
def translate_path(self, path: str) -> str:
|
|
23
24
|
"""
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
Translate a /-separated PATH to the local filename syntax.
|
|
26
|
+
overrides http.server.SimpleHTTPRequestHandler.translate_path
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
This is only useful for file serving.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
Code initially taken from there:
|
|
31
|
+
https://github.com/python/cpython/blob/f5406ef454662b98df107775d18ff71ae6849618/Lib/http/server.py#L834
|
|
31
32
|
"""
|
|
32
33
|
_logger.info(f'translate path {path=}')
|
|
33
34
|
# abandon query parameters, taken from http.server.SimpleHTTPRequestHandler
|
|
@@ -57,11 +58,11 @@ class LoggingHTTPServer(http.server.ThreadingHTTPServer):
|
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
def make_server(address: str, port: int) -> http.server.HTTPServer:
|
|
60
|
-
"""Create a file server with pixeltable specific config
|
|
61
|
+
"""Create a file server with pixeltable specific config"""
|
|
61
62
|
return LoggingHTTPServer((address, port), AbsolutePathHandler)
|
|
62
63
|
|
|
63
64
|
|
|
64
65
|
if __name__ == '__main__':
|
|
65
66
|
httpd = make_server('127.0.0.1', 8000)
|
|
66
67
|
print(f'about to server HTTP on {httpd.server_address}')
|
|
67
|
-
httpd.serve_forever()
|
|
68
|
+
httpd.serve_forever()
|
pixeltable/utils/media_store.py
CHANGED
|
@@ -19,6 +19,7 @@ class MediaStore:
|
|
|
19
19
|
the table id/column id/version are redundant but useful for identifying all files for a table
|
|
20
20
|
or all files created for a particular version of a table
|
|
21
21
|
"""
|
|
22
|
+
|
|
22
23
|
pattern = re.compile(r'([0-9a-fA-F]+)_(\d+)_(\d+)_([0-9a-fA-F]+)') # tbl_id, col_id, version, uuid
|
|
23
24
|
|
|
24
25
|
@classmethod
|
|
@@ -59,7 +60,7 @@ class MediaStore:
|
|
|
59
60
|
|
|
60
61
|
@classmethod
|
|
61
62
|
def stats(cls) -> list[tuple[UUID, int, int, int]]:
|
|
62
|
-
paths = glob.glob(str(Env.get().media_dir) +
|
|
63
|
+
paths = glob.glob(str(Env.get().media_dir) + '/**', recursive=True)
|
|
63
64
|
# key: (tbl_id, col_id), value: (num_files, size)
|
|
64
65
|
d: dict[tuple[UUID, int], list[int]] = defaultdict(lambda: [0, 0])
|
|
65
66
|
for p in paths:
|
pixeltable/utils/pytorch.py
CHANGED
|
@@ -20,11 +20,8 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
20
20
|
NB. This class must inherit from torch.utils.data.IterableDataset for it
|
|
21
21
|
to work with torch.utils.data.DataLoader.
|
|
22
22
|
"""
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
path: Path,
|
|
26
|
-
image_format: str,
|
|
27
|
-
):
|
|
23
|
+
|
|
24
|
+
def __init__(self, path: Path, image_format: str):
|
|
28
25
|
"""
|
|
29
26
|
Args:
|
|
30
27
|
path: path to directory containing parquet files
|
|
@@ -35,9 +32,9 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
35
32
|
|
|
36
33
|
self.path = path
|
|
37
34
|
self.image_format = image_format
|
|
38
|
-
assert image_format in [
|
|
35
|
+
assert image_format in ['np', 'pt']
|
|
39
36
|
column_type_path = path / '.pixeltable.column_types.json'
|
|
40
|
-
assert column_type_path.exists(), f
|
|
37
|
+
assert column_type_path.exists(), f'missing {column_type_path}'
|
|
41
38
|
with column_type_path.open() as f:
|
|
42
39
|
column_types = json.load(f)
|
|
43
40
|
self.column_types = {k: ColumnType.from_dict(v) for k, v in column_types.items()}
|
|
@@ -47,13 +44,13 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
47
44
|
if self.column_types[k].is_image_type():
|
|
48
45
|
assert isinstance(v, bytes)
|
|
49
46
|
im = PIL.Image.open(io.BytesIO(v))
|
|
50
|
-
arr = np.array(im)
|
|
51
|
-
assert arr.flags[
|
|
47
|
+
arr = np.array(im) # will copy data to guarantee "WRITEABLE" flag assertion below.
|
|
48
|
+
assert arr.flags['WRITEABLE']
|
|
52
49
|
|
|
53
|
-
if self.image_format ==
|
|
50
|
+
if self.image_format == 'np':
|
|
54
51
|
return arr
|
|
55
52
|
|
|
56
|
-
assert self.image_format ==
|
|
53
|
+
assert self.image_format == 'pt'
|
|
57
54
|
|
|
58
55
|
# use arr instead of im in ToTensor() to guarantee array input
|
|
59
56
|
# to torch.from_numpy is writable. Using im is a suspected cause of
|
|
@@ -64,16 +61,16 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
64
61
|
return json.loads(v)
|
|
65
62
|
elif self.column_types[k].is_array_type():
|
|
66
63
|
assert isinstance(v, np.ndarray)
|
|
67
|
-
if not v.flags[
|
|
64
|
+
if not v.flags['WRITEABLE']:
|
|
68
65
|
v = v.copy()
|
|
69
|
-
assert v.flags[
|
|
66
|
+
assert v.flags['WRITEABLE']
|
|
70
67
|
return v
|
|
71
68
|
elif self.column_types[k].is_timestamp_type():
|
|
72
69
|
# pytorch default collation only supports numeric types
|
|
73
70
|
assert isinstance(v, datetime.datetime)
|
|
74
71
|
return v.timestamp()
|
|
75
72
|
else:
|
|
76
|
-
assert not isinstance(v, np.ndarray)
|
|
73
|
+
assert not isinstance(v, np.ndarray) # all array outputs should be handled above
|
|
77
74
|
return v
|
|
78
75
|
|
|
79
76
|
def __iter__(self) -> Iterator[dict[str, Any]]:
|
pixeltable/utils/s3.py
CHANGED
pixeltable/utils/sql.py
CHANGED
|
@@ -7,6 +7,7 @@ from sqlalchemy.dialects import postgresql
|
|
|
7
7
|
def log_stmt(logger: logging.Logger, stmt) -> None:
|
|
8
8
|
logger.debug(f'executing {str(stmt.compile(dialect=postgresql.dialect()))}')
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
def log_explain(logger: logging.Logger, stmt: sql.sql.ClauseElement, conn: sql.engine.Connection) -> None:
|
|
11
12
|
try:
|
|
12
13
|
# don't set dialect=Env.get().engine.dialect: x % y turns into x %% y, which results in a syntax error
|
|
@@ -24,9 +24,9 @@ def transactional_directory(folder_path: Path) -> Generator[Path, Any, Any]:
|
|
|
24
24
|
(temp_folder / "subfolder2").mkdir()
|
|
25
25
|
"""
|
|
26
26
|
if folder_path.exists():
|
|
27
|
-
raise excs.Error(f
|
|
27
|
+
raise excs.Error(f'Folder {folder_path} already exists')
|
|
28
28
|
|
|
29
|
-
tmp_folder = folder_path.parent / f
|
|
29
|
+
tmp_folder = folder_path.parent / f'.tmp_{folder_path.name}'
|
|
30
30
|
# Remove the temporary folder if it already exists, eg if the previous run crashed
|
|
31
31
|
shutil.rmtree(str(tmp_folder), ignore_errors=True)
|
|
32
32
|
tmp_folder.mkdir(parents=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pixeltable
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
|
|
5
5
|
Home-page: https://pixeltable.com/
|
|
6
6
|
License: Apache-2.0
|
|
@@ -27,6 +27,7 @@ Requires-Dist: av (>=10.0.0)
|
|
|
27
27
|
Requires-Dist: beautifulsoup4 (>=4.0.0,<5.0.0)
|
|
28
28
|
Requires-Dist: cloudpickle (>=2.2.1,<3.0.0)
|
|
29
29
|
Requires-Dist: ftfy (>=6.2.0,<7.0.0)
|
|
30
|
+
Requires-Dist: httpcore (>=1.0.3)
|
|
30
31
|
Requires-Dist: httpx (>=0.27)
|
|
31
32
|
Requires-Dist: jinja2 (>=3.1.3,<4.0.0)
|
|
32
33
|
Requires-Dist: jmespath (>=1.0.1,<2.0.0)
|
|
@@ -59,7 +60,7 @@ Description-Content-Type: text/markdown
|
|
|
59
60
|
alt="Pixeltable" width="50%" />
|
|
60
61
|
<br></br>
|
|
61
62
|
|
|
62
|
-
<h2>AI
|
|
63
|
+
<h2>Build Multimodal AI Apps with Declarative Data Infrastructure</h2>
|
|
63
64
|
|
|
64
65
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
65
66
|

|
|
@@ -81,17 +82,15 @@ Description-Content-Type: text/markdown
|
|
|
81
82
|
[LLM](https://docs.pixeltable.com/docs/document-indexing-and-rag)
|
|
82
83
|
</div>
|
|
83
84
|
|
|
84
|
-
Pixeltable is a
|
|
85
|
-
It features built-in versioning, lineage tracking, and incremental updates, enabling users to **store**, **transform**,
|
|
86
|
-
**index**, and **iterate** on data for their ML workflows.
|
|
85
|
+
Pixeltable is a declarative data infrastructure for building multimodal AI applications, enabling incremental storage, transformation, indexing, and orchestration of your data.
|
|
87
86
|
|
|
88
|
-
|
|
87
|
+
Consider it your unified foundation for computer vision, LLMs, and multimodal AI development - where complex data operations become simple tables and computed columns, including but not limited to:
|
|
89
88
|
|
|
90
|
-
- **
|
|
89
|
+
- **Work with all your data**: Interact with
|
|
91
90
|
[video data](https://github.com/pixeltable/pixeltable?tab=readme-ov-file#import-media-data-into-pixeltable-videos-images-audio)
|
|
92
91
|
at the [frame level](https://github.com/pixeltable/pixeltable?tab=readme-ov-file#text-and-image-similarity-search-on-video-frames-with-embedding-indexes)
|
|
93
92
|
and documents at the [chunk level](https://github.com/pixeltable/pixeltable?tab=readme-ov-file#automate-data-operations-with-views-eg-split-documents-into-chunks)
|
|
94
|
-
- **Incremental updates
|
|
93
|
+
- **Incremental updates**: Maintain an
|
|
95
94
|
[embedding index](https://docs.pixeltable.com/docs/embedding-vector-indexes) colocated with your data
|
|
96
95
|
- **Lazy evaluation and cache management**: Eliminates the need for
|
|
97
96
|
[manual frame extraction](https://docs.pixeltable.com/docs/object-detection-in-videos)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
pixeltable/__init__.py,sha256=FeL_ABFaY6QiShtTao1cfhSAwXV_2dkhL_4-qXoHbPE,1616
|
|
2
|
+
pixeltable/__version__.py,sha256=NMCNPWfp4W0_zblLn-1M1FNbW4Fe6XSxnsm2uSwk7eA,112
|
|
3
|
+
pixeltable/catalog/__init__.py,sha256=bACh33HpWQed86eV8t9of_ClSXqZx5blZi4y8vJ7-EA,517
|
|
4
|
+
pixeltable/catalog/catalog.py,sha256=LFaOtHoGJM306jDlyyQRqCaPR6K4nrN-jPu3_vyZNvc,8267
|
|
5
|
+
pixeltable/catalog/column.py,sha256=9Rm4DCP-uUCl3P44uTsD89P63jxmvv9emD2Rc7Bw_us,9684
|
|
6
|
+
pixeltable/catalog/dir.py,sha256=slQ_OJuvA6WdL6GFW2EjgsN-GwGkVRHVDfdELcnKB_4,1215
|
|
7
|
+
pixeltable/catalog/globals.py,sha256=1x0WuArwwoE4LLeC__55jVbxE8AP16EcLl8pKMMWgRM,3248
|
|
8
|
+
pixeltable/catalog/insertable_table.py,sha256=a82udrQT7IxUxoZwLgmTeYqQDkj59GLxQzOH4OOJQR8,7362
|
|
9
|
+
pixeltable/catalog/named_function.py,sha256=RHvKfzR5dyf5ixhmjr0swM2wqnYUhCIQuB6SMl7NkMo,1285
|
|
10
|
+
pixeltable/catalog/path.py,sha256=5726gocGuq_QRQEhpLO-5y65Ebf1Sx-N2m4Hl6K1Vb4,1679
|
|
11
|
+
pixeltable/catalog/path_dict.py,sha256=gu987TjUDrJibOhjr3-A7Kw9s_ZDAB4tornGKRCgwJo,6493
|
|
12
|
+
pixeltable/catalog/schema_object.py,sha256=2xeV9XfriawLWT5B8-fdRJ5HxrnMkhsXS3XEAcALHe4,2383
|
|
13
|
+
pixeltable/catalog/table.py,sha256=qfTI7obvSanFt96-jbjSXU9PyninU3_B9K4pnaxlJdM,62451
|
|
14
|
+
pixeltable/catalog/table_version.py,sha256=rWBtgnIepVgq5tZ4vb9RzAL5peHnze5ZMOr-7gqMpog,60354
|
|
15
|
+
pixeltable/catalog/table_version_path.py,sha256=yDU_KXriAckJqKPfKYhLVDig7glUc--_Fda9X7ekfGo,5810
|
|
16
|
+
pixeltable/catalog/view.py,sha256=cTL1jBYHa3RweODoD-y_I9NjAntqJPSofP4BJdSWaBA,11226
|
|
17
|
+
pixeltable/dataframe.py,sha256=hGYjMFE3Fwftgdsveo4eXd5SiGXl3uJOaIoH3wm61Po,49473
|
|
18
|
+
pixeltable/env.py,sha256=8gWyNYnIufet8kbGpa-QNsVaEdTJGbCymUwq4XQpC2k,35723
|
|
19
|
+
pixeltable/exceptions.py,sha256=NuFY2WtkQpLfLHT_J70kOw9Tr0kEDkkgo-u7As4Gaq4,410
|
|
20
|
+
pixeltable/exec/__init__.py,sha256=Qi0s2BEM8O8MPdYGQAIzclv2GNFsoCPJFvA6s5Tjc_o,489
|
|
21
|
+
pixeltable/exec/aggregation_node.py,sha256=KR7OLQOfAL4KTF6_vKSuJvFC2ntwWf0NJxhQ9i340-4,4072
|
|
22
|
+
pixeltable/exec/cache_prefetch_node.py,sha256=fwO-xUQfSOMWQMbrJplFXvjcKjLVjPz93O0HttSD3A8,12211
|
|
23
|
+
pixeltable/exec/component_iteration_node.py,sha256=vYELAMtc4jKOxC0aZFjjx6UBlBcjC3LXG93epGHPJn0,4713
|
|
24
|
+
pixeltable/exec/data_row_batch.py,sha256=E0SVjyOBc237DopT0TwqK7JzcgFTEpE3xOS9K0-WFh8,3407
|
|
25
|
+
pixeltable/exec/exec_context.py,sha256=l7GWAbt57H9VEksrDCeocmlc-MgUp8w_nDdAau8Cfqw,1115
|
|
26
|
+
pixeltable/exec/exec_node.py,sha256=RbMJLDy7jwphNCEphSL0w50Dy1lrpjtEEugzyL6pqlA,4006
|
|
27
|
+
pixeltable/exec/expr_eval/__init__.py,sha256=t0o2T7MxfH09TI7KlzxEjPUySejn2vkK06LC8t4FjsQ,41
|
|
28
|
+
pixeltable/exec/expr_eval/evaluators.py,sha256=gDZhc9z4nUFEPOrvwxsoZFudRRupKQwBp3eLO6anR2k,11077
|
|
29
|
+
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=KWCtaG0GwX-968oOT3se63AaVtdbBFEMPt5lHMXdauU,20215
|
|
30
|
+
pixeltable/exec/expr_eval/globals.py,sha256=47HPXyNcSJLF0wsxHTNkj6w3ym7mjM6lfhDdfw0p820,4576
|
|
31
|
+
pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
|
|
32
|
+
pixeltable/exec/expr_eval/schedulers.py,sha256=iKfP5DnG9jcmdeY3DVeM7PpanfPyAqAUq8BsXi_8J5E,16804
|
|
33
|
+
pixeltable/exec/in_memory_data_node.py,sha256=ujBTeXAnny3PmQLIZcbt_aRgUooNcFVpJjq1we8_XEE,3471
|
|
34
|
+
pixeltable/exec/row_update_node.py,sha256=HCN7P7OE861lR8eNM5l2MiQjVtlNECgKIxByoEOmjf8,2924
|
|
35
|
+
pixeltable/exec/sql_node.py,sha256=9cMDVxksROFC4n_h8G152SBcEQvlWsfKLWRgbyUuBiE,19787
|
|
36
|
+
pixeltable/exprs/__init__.py,sha256=DNYbCiT8RNfKl9OhzN4NVlK_rqdl-4ArjKqbQhO5wZc,1044
|
|
37
|
+
pixeltable/exprs/arithmetic_expr.py,sha256=EoRLb9rbK-aFjX85eR00ZCcRBoPtcC50vSzFg8ca848,7420
|
|
38
|
+
pixeltable/exprs/array_slice.py,sha256=Wnn42mZ316aaaNP3LJ0TArgSjrIMCWNk2zFI6XgLBvo,2180
|
|
39
|
+
pixeltable/exprs/column_property_ref.py,sha256=dkScOhj5rUUB_s26iWhrTz_YZQhYybfbP13_7CRgfLo,3789
|
|
40
|
+
pixeltable/exprs/column_ref.py,sha256=MBWrNwnbRe0Hswu0q_Arerm9JoQs_0pNSsCYVxXONx0,10891
|
|
41
|
+
pixeltable/exprs/comparison.py,sha256=5Bw6fEvVq-ynt3ciGLCouse7ZWFGPA-egsEkgUjUvsc,5132
|
|
42
|
+
pixeltable/exprs/compound_predicate.py,sha256=ZN_JL97OZfTwdfgXF2t57EGyTYrpsBHaduZWRuBAekk,3832
|
|
43
|
+
pixeltable/exprs/data_row.py,sha256=4lEyTxTw95v3ERuG9mFUBla8FfhPueoZyltcpTsWLK0,10577
|
|
44
|
+
pixeltable/exprs/expr.py,sha256=uE8_hMVF1fCILVR4DWKR6WyC7ovp9iY1mCpsrI3eQ_U,32208
|
|
45
|
+
pixeltable/exprs/expr_dict.py,sha256=wf82K-aCPHZcM2A-VbE_0p5OzQFfVsI65uzMLp4Uwu4,1589
|
|
46
|
+
pixeltable/exprs/expr_set.py,sha256=kkcG9df8fQOblNIKz2xciw9qfu2CnTWb4qwJKYVTUx8,2578
|
|
47
|
+
pixeltable/exprs/function_call.py,sha256=3zjWl_vAKHpClR61-wpNNfPWYp5ccHO8CXD3Dts2bcs,28123
|
|
48
|
+
pixeltable/exprs/globals.py,sha256=y5bhU21ME57dTuz9iSU1jA56nWhDe_t-OHFYthwngM8,2033
|
|
49
|
+
pixeltable/exprs/in_predicate.py,sha256=nNmo7slUvZCR2GN9amWCA8eQv83NdTjXTphjqawpLDw,3799
|
|
50
|
+
pixeltable/exprs/inline_expr.py,sha256=dLivsKlh_xEfXXXd5tSogg0cAwMOWTv8Hh2DBgKOdzs,7985
|
|
51
|
+
pixeltable/exprs/is_null.py,sha256=rnusy1j33o48Z-qjguj09G7AmsBHFJI5SWQXOAjgKQw,1092
|
|
52
|
+
pixeltable/exprs/json_mapper.py,sha256=gQj_MxDonYrh3yCT4Dvmy1QBpKCJMn5Qzky8RRUAiwA,4547
|
|
53
|
+
pixeltable/exprs/json_path.py,sha256=XEuth-i24slqAYvnAkb8BfkmrvGACK8afiEyaA27oDU,6745
|
|
54
|
+
pixeltable/exprs/literal.py,sha256=kvuQTl1N5hMFrJNgDtVkTBkEDqtSsOcTGLjndh7CbwM,4315
|
|
55
|
+
pixeltable/exprs/method_ref.py,sha256=CfZWjzjQ9tDVEOkSRm32MSUqVZHLq8qvMGLpORQpoDo,2616
|
|
56
|
+
pixeltable/exprs/object_ref.py,sha256=OS4Om2BCG3PQEFK5VZ2APTPn_b0D22d9g30GM5XpfYs,1283
|
|
57
|
+
pixeltable/exprs/row_builder.py,sha256=lDl2xg82vORu7n-VMU210cpRGvSCO5o4spsfC5gK6Qs,20040
|
|
58
|
+
pixeltable/exprs/rowid_ref.py,sha256=cOimh6mLhJsIngUC48yawEGoaevVYvi1QUbbksfysaU,4468
|
|
59
|
+
pixeltable/exprs/similarity_expr.py,sha256=MHp71EEcyaAFeoWtQQhsxjPWD7b6iZCFkOe_EwFfp_U,4378
|
|
60
|
+
pixeltable/exprs/sql_element_cache.py,sha256=NPOqhjcvwNi_jIYpOOODQ96PI-KRMVBWVnhhLNHxHl4,1364
|
|
61
|
+
pixeltable/exprs/type_cast.py,sha256=itNLH4iMi095g1V9C87QaHD2ram5Ype0Bu1d6rBt8a8,2362
|
|
62
|
+
pixeltable/exprs/variable.py,sha256=3ZV3HzqULk05LKGG1p1T_xIlBfhqHIK4KJSCgoCDDSY,1488
|
|
63
|
+
pixeltable/ext/__init__.py,sha256=iCrmOnnRCUt9fIHSyCmKBxjNDsELYz5H_xWbVGMo5dg,424
|
|
64
|
+
pixeltable/ext/functions/__init__.py,sha256=yraKAwvZxJkuD8_gS2MbwlqQGH9lkLv_Gza0WjgBQqQ,160
|
|
65
|
+
pixeltable/ext/functions/whisperx.py,sha256=CiSW66yjvmYVuEPyfdi5V28fdeS0jZjWGODUP3yWl_8,2342
|
|
66
|
+
pixeltable/ext/functions/yolox.py,sha256=K-wscfwj6cOc6YVCL3oFZTOFCWBubS8RKzACP9MRR-I,5432
|
|
67
|
+
pixeltable/func/__init__.py,sha256=Tmy5srLdxcWDwxwnXXj2mTNUMimdYY-MdU6fJ9SpePc,457
|
|
68
|
+
pixeltable/func/aggregate_function.py,sha256=jwrIQCaBwp9JF2BmzDn9iCLKJ-gA_WBWfI27YtWGedY,12779
|
|
69
|
+
pixeltable/func/callable_function.py,sha256=vsDS0AIht7qFwRTAV0NVBGSaiW_7ORNPutkQ7uhyb1o,8910
|
|
70
|
+
pixeltable/func/expr_template_function.py,sha256=8tizAVAq1ur_nlafKBfCJmnMaeKBbFD996zojmbCxrw,5483
|
|
71
|
+
pixeltable/func/function.py,sha256=DTql3Ml3WmXree4N9AZFRkCDoMh5239XQwOM9qDU4OU,18894
|
|
72
|
+
pixeltable/func/function_registry.py,sha256=21E6KVjxuR_EPelVeun7Igk0YWH2zXjDwItgBoFdrLA,12336
|
|
73
|
+
pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
|
|
74
|
+
pixeltable/func/query_template_function.py,sha256=p3_NaDBrlMqT2HT8QM-9fzqgko0n6W3CY-z63grqenk,5277
|
|
75
|
+
pixeltable/func/signature.py,sha256=e-0GvbTH18yDXJjjAE2SYBPkSP462gYCGTxsA6ldZJ4,11335
|
|
76
|
+
pixeltable/func/tools.py,sha256=gwAzqWPuLSUBxWJ4IMYVWDsoVTUDxZm-Dh3RRed-ro0,5860
|
|
77
|
+
pixeltable/func/udf.py,sha256=yivTgtIUjkHJ1dMYLAKIZGAVvtOewiuXNgFzfDKTj78,13143
|
|
78
|
+
pixeltable/functions/__init__.py,sha256=_jxG8IZj57kodQVFHBv36nWzB3Cnqeq4xVY7yildJRI,503
|
|
79
|
+
pixeltable/functions/anthropic.py,sha256=s3tkpbSG0IUWPWI3pMWwvs_8FchFZdvr0gMZ35G6aBU,9079
|
|
80
|
+
pixeltable/functions/audio.py,sha256=7213nTnqKJ6vM9kalaoJ283OwX5SGEJN10vDhaRNZ6E,644
|
|
81
|
+
pixeltable/functions/fireworks.py,sha256=v9F-l3E73QhcyIsz720jJbtZV_GcyMu83zOV3ZC2Pd8,5024
|
|
82
|
+
pixeltable/functions/gemini.py,sha256=vr1mBZDcDI1GNLp8pKVcQmUEbV9P0L0HRInE78rA4Ok,2952
|
|
83
|
+
pixeltable/functions/globals.py,sha256=S9HgXYEPZYT58J_GtxLWKplUTLDEY7YvfPHKNemkWJM,4976
|
|
84
|
+
pixeltable/functions/huggingface.py,sha256=MFuzmEIrQvdWP9DHjg3CCmz2mkhMTTU2TFf4OPO5VB0,20591
|
|
85
|
+
pixeltable/functions/image.py,sha256=Iv3rytJ2vKIB_oxpnb3CxsC3QRitXxqJDEPseaR2FXY,13855
|
|
86
|
+
pixeltable/functions/json.py,sha256=_9rTUiKOz-gmLuhDghCiCNUIixK82F9qmA4k2BttMxs,757
|
|
87
|
+
pixeltable/functions/llama_cpp.py,sha256=1nVXgU5ymuNblVNqRQv3iAEvlYpqzDZPAjYnAOHwvsc,3844
|
|
88
|
+
pixeltable/functions/math.py,sha256=WPoH9zD9_GdwvBs-FSC3Sqb70gOPNouhPcBZABsuLwI,1541
|
|
89
|
+
pixeltable/functions/mistralai.py,sha256=H2onsnW1R_SaFN5SI_JWO0A5lJdlsnKxmtIu2m19cEg,6212
|
|
90
|
+
pixeltable/functions/ollama.py,sha256=Et0l7XEMaNLxDwy3qTblljomjCkOQroY1Z7a-Ajmshk,4218
|
|
91
|
+
pixeltable/functions/openai.py,sha256=mdeo4Y-wg-9LJAlmLxydu3VAS4NGgRQQvVb_7Gkefpc,28109
|
|
92
|
+
pixeltable/functions/replicate.py,sha256=BQ5iaFJnw5MioL3X08DQiH41xQ_Pi2H5DDEasux9-fE,2454
|
|
93
|
+
pixeltable/functions/string.py,sha256=1vFlbqKVm2n6jdh23BIA_8MBJJiNyxbQoFs5tJPgpy4,20433
|
|
94
|
+
pixeltable/functions/timestamp.py,sha256=KKOw7l1hErYp8QQfFiWVTf7QowZszOyHJu-OJDKaXSg,9114
|
|
95
|
+
pixeltable/functions/together.py,sha256=JhMzIHx58w1o1Z2qfOoYuk1z51Jx7tHOmVBGd1TNNp8,10319
|
|
96
|
+
pixeltable/functions/util.py,sha256=GgKTzCjvzUQNjWtSObTkfxkvJ9GVUOzKimY45WhE25M,759
|
|
97
|
+
pixeltable/functions/video.py,sha256=yc4Zk4W58Q1Jzmws8VvU-JqIR7rmdCGm8ge-Gu8tF4Y,6703
|
|
98
|
+
pixeltable/functions/vision.py,sha256=NIVIiJUzoVmsmqP09RI4flWCHsSXl2Cemky4ZYfYjkU,15486
|
|
99
|
+
pixeltable/functions/whisper.py,sha256=tPSTb6PO95nH2RoNp1j-mPanGn3bNER4Wpeh-TMat7o,2930
|
|
100
|
+
pixeltable/globals.py,sha256=QQAn-RFsy5ZWHVdbihN2LMjTtNBc21xjWSsLn75P55o,34142
|
|
101
|
+
pixeltable/index/__init__.py,sha256=1pdGN3OeoPi7c__0fJYxbiKqRHChdXWlQgh3crO4zZw,102
|
|
102
|
+
pixeltable/index/base.py,sha256=zo0YvJI3oXiK6hZJztB36ZftKKhLfO75Zq3t-PeQA6M,1556
|
|
103
|
+
pixeltable/index/btree.py,sha256=C1ABQKLrVBgSWJAyJdgQ1zTP1aTXLXlGmTx1B3q2y-E,2267
|
|
104
|
+
pixeltable/index/embedding_index.py,sha256=nBQ24Jyim1s87aGIvcHNjR4uuYvVrGgn_2V8Akhpjyw,11198
|
|
105
|
+
pixeltable/io/__init__.py,sha256=ZPOMZ5p1tgR2ASG9aVoX2_5gVe72Lh_I-F0roncSx4M,563
|
|
106
|
+
pixeltable/io/external_store.py,sha256=rfeCO8zegmB5TofP-z0F4en2IXISMONAWqBVmiBiDBU,16670
|
|
107
|
+
pixeltable/io/fiftyone.py,sha256=nviYiqDOGS5Os374Tl5knGNXpjFlgqcKnSPsBzz60vU,6855
|
|
108
|
+
pixeltable/io/globals.py,sha256=0X0sLpVrqPlgNna_vQX4KcBuerdUojZDTyTaX2sKV4I,17838
|
|
109
|
+
pixeltable/io/hf_datasets.py,sha256=DV_bHB-LOQB8YC9FK1KYTEgaBPFelk31fYpq8h72eEE,8321
|
|
110
|
+
pixeltable/io/label_studio.py,sha256=Dlq-2iVBadDnU0xOn3duLbpBJxiegY04XkWsmqQTXwk,31242
|
|
111
|
+
pixeltable/io/pandas.py,sha256=Z-hBUbC6t-dGfJe8ksYXjp8k6T9xGvwvpbIXZLekHbw,9952
|
|
112
|
+
pixeltable/io/parquet.py,sha256=2i3YAQd-ZifxJv4JUU5Ysh7p6SemozBncd989bSl_qw,8745
|
|
113
|
+
pixeltable/iterators/__init__.py,sha256=r5NYNF7qsepOPJnywG5N7jTz3Z1ubrbSzD19JK97cCM,431
|
|
114
|
+
pixeltable/iterators/audio.py,sha256=UfWAzUAq33bqN5R7-kFK4LN2VUukhgZhAsnoHuOm2CU,9092
|
|
115
|
+
pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
|
|
116
|
+
pixeltable/iterators/document.py,sha256=aBx_112XVy64k1aCU9EuBiXr4-k16WG3mAxqYrnZ1Rg,20253
|
|
117
|
+
pixeltable/iterators/image.py,sha256=nWm-03CxNvHRdTr8U6PvWEnEiquqIQNG5rB-3Y44Mm4,3440
|
|
118
|
+
pixeltable/iterators/string.py,sha256=8ghLGnraDO1IvO7Oie6jq9eZoBWB972TYMOpIwtLJuc,1269
|
|
119
|
+
pixeltable/iterators/video.py,sha256=MZSZJaHTHOFRUc4CxVkOig4dW6k5yYwBodtCoWvarNo,9234
|
|
120
|
+
pixeltable/metadata/__init__.py,sha256=0px1VDuaNuLPmkjOnZ6wzOBY0TQmAPQVbzDJdCdjEOk,2282
|
|
121
|
+
pixeltable/metadata/converters/convert_10.py,sha256=SkGCdL4JmFmb4-E9k8DUOyQ6vWuOcWQcAkBVf3BABfI,719
|
|
122
|
+
pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
|
|
123
|
+
pixeltable/metadata/converters/convert_13.py,sha256=yFR6lD3pOrZ46ZQBFKYvxiIYa7rRxh46Bsq7yiCBNak,1356
|
|
124
|
+
pixeltable/metadata/converters/convert_14.py,sha256=9e_JNm3a35Gs4dvFFaV-_jtCqp3ud6OEOqMIhTQmasE,428
|
|
125
|
+
pixeltable/metadata/converters/convert_15.py,sha256=u2FIDy3j9dzQ--k4sXsS5UQdieLELepvV8kBqdsQBYE,1717
|
|
126
|
+
pixeltable/metadata/converters/convert_16.py,sha256=9sRigN4h3UHEurV1zAwO8AwE_ERkvxNVTUPFiV9h4MU,493
|
|
127
|
+
pixeltable/metadata/converters/convert_17.py,sha256=LmE8uAk2yPRN5Ddk8I_KOZjUGBKSUe-s-PoJl9ltWEE,878
|
|
128
|
+
pixeltable/metadata/converters/convert_18.py,sha256=SylkXMoBPXwKEmUV72ah_5xSGNNLPWwib3km0tUE-68,1461
|
|
129
|
+
pixeltable/metadata/converters/convert_19.py,sha256=9weimsB_U-rSWzALzKRCNdW_6fQ2mcq1IaiSDYSpn7k,2026
|
|
130
|
+
pixeltable/metadata/converters/convert_20.py,sha256=M6w3FuJypRsqUUX3K1b5sTKaQcOug6asosMfnhbUv_c,2746
|
|
131
|
+
pixeltable/metadata/converters/convert_21.py,sha256=w35qzY6EfxBap3r_WEdXKTmtczsGV9KKfBOR18Ivl84,1095
|
|
132
|
+
pixeltable/metadata/converters/convert_22.py,sha256=rQu4kCyCI0UguU2D4fJK8YqS-01DnOTs6H0Puzu_TV8,591
|
|
133
|
+
pixeltable/metadata/converters/convert_23.py,sha256=_FG8YO1KnuDRxsSh4iGy8sakelJSqVVRXsKXwaNc7FE,1212
|
|
134
|
+
pixeltable/metadata/converters/convert_24.py,sha256=muYhcooDfG4lHiO9o3MMB6lEH4rS4GFaTdaAQ-_i5X4,2346
|
|
135
|
+
pixeltable/metadata/converters/convert_25.py,sha256=3sCXMbHiLJWMvbghj-XaeW4_1xSECivlbsdGtGSmntE,620
|
|
136
|
+
pixeltable/metadata/converters/convert_26.py,sha256=XaVYFFtlpuUD3bN_UAr9ONgaSkJg5u7xtqmbVICWuYE,673
|
|
137
|
+
pixeltable/metadata/converters/util.py,sha256=_-cqvxxHwxEgCvoOJHs2EFLjAq2yD0QzW1SlgzAEfmI,6098
|
|
138
|
+
pixeltable/metadata/notes.py,sha256=2gQ0fAdAWOKxvzZ5DVBdmTk62q_KFGRFmv0tzi7tklE,841
|
|
139
|
+
pixeltable/metadata/schema.py,sha256=kv-PIMfG_NysET1k71iwIkBVlK5HwdnotXUvFeLaxaY,9470
|
|
140
|
+
pixeltable/plan.py,sha256=ZTXpt10Rexvfm3_68CLQzUAS7YubZjbUJLbAN-RZDps,42385
|
|
141
|
+
pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
+
pixeltable/store.py,sha256=uQKW9A3RWVVuP6bnQx22jhs5_WxQKx3rV0sGpdoBUzY,22555
|
|
143
|
+
pixeltable/type_system.py,sha256=yTMSt8hljouXH3jZ0xMinhNDMCVZB0dVTZRXejBcODU,50183
|
|
144
|
+
pixeltable/utils/__init__.py,sha256=UYlrf6TIWJT0g-Hac0b34-dEk478B5Qx8dGco34YlIk,439
|
|
145
|
+
pixeltable/utils/arrow.py,sha256=L0JFj6YQry1iHqhom6Zc9zWa8j6VCEUgQ0OfKqTiukY,3865
|
|
146
|
+
pixeltable/utils/coco.py,sha256=dl-IYO4VgfFly4-TvvF9Rw9XK2yY6HGTuL7LcyQk_RA,7290
|
|
147
|
+
pixeltable/utils/code.py,sha256=SbG5OUF_fQAbOgGZHDuENijmbzisVqa4VS9guaZ0KtU,1231
|
|
148
|
+
pixeltable/utils/console_output.py,sha256=GJ1oJWanP8_an343CEB35rtc1kcVW1FQtT3vRT4SZPs,1148
|
|
149
|
+
pixeltable/utils/description_helper.py,sha256=VGcVOj2jSJSR_2CeY2nnn-amZLkcU5F2uI3Ad7G5upA,3741
|
|
150
|
+
pixeltable/utils/documents.py,sha256=APFujdYq1qe2Do4KAUI0te35jh4925geR9UB8GeFQ1w,2932
|
|
151
|
+
pixeltable/utils/filecache.py,sha256=sYofh-6TwkQbwe8X64eUt27itSJ8o5rY10HYZJShbbI,10703
|
|
152
|
+
pixeltable/utils/formatter.py,sha256=5E_gDg11ClFI-5SthwkiqyE3hAok3JHDj4OSK9cJklM,9257
|
|
153
|
+
pixeltable/utils/http_server.py,sha256=zsESVjtG1P6hrz-d2N1m6_BChqPt8N3f-EO9sJbWnLs,2388
|
|
154
|
+
pixeltable/utils/media_store.py,sha256=LcVTF8CW9C54mGg6OHI5u9W-gh5CkIfxbQaP9WAkmag,3093
|
|
155
|
+
pixeltable/utils/pytorch.py,sha256=8lJT1SyP9jTMN7uLtrj9T_rGPEYRID44rWXbjBhRUrU,3422
|
|
156
|
+
pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
|
|
157
|
+
pixeltable/utils/sql.py,sha256=JX_fNI_SJWVUcXif5ho5qVhfJKFupOCFLLrHCMcbzLk,796
|
|
158
|
+
pixeltable/utils/transactional_directory.py,sha256=4Q8UTylEyw-aZa-NVjfjGR9_JHRJTGQH1k1LNFaZukY,1349
|
|
159
|
+
pixeltable-0.3.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
160
|
+
pixeltable-0.3.3.dist-info/METADATA,sha256=s4trJASrbIe9hPC3MHXe0Tsvo7Fc0avMjgOpukZ7Hsw,19359
|
|
161
|
+
pixeltable-0.3.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
162
|
+
pixeltable-0.3.3.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
|
|
163
|
+
pixeltable-0.3.3.dist-info/RECORD,,
|