pixeltable 0.2.26__py3-none-any.whl → 0.5.7__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.
- pixeltable/__init__.py +83 -19
- pixeltable/_query.py +1444 -0
- pixeltable/_version.py +1 -0
- pixeltable/catalog/__init__.py +7 -4
- pixeltable/catalog/catalog.py +2394 -119
- pixeltable/catalog/column.py +225 -104
- pixeltable/catalog/dir.py +38 -9
- pixeltable/catalog/globals.py +53 -34
- pixeltable/catalog/insertable_table.py +265 -115
- pixeltable/catalog/path.py +80 -17
- pixeltable/catalog/schema_object.py +28 -43
- pixeltable/catalog/table.py +1270 -677
- pixeltable/catalog/table_metadata.py +103 -0
- pixeltable/catalog/table_version.py +1270 -751
- pixeltable/catalog/table_version_handle.py +109 -0
- pixeltable/catalog/table_version_path.py +137 -42
- pixeltable/catalog/tbl_ops.py +53 -0
- pixeltable/catalog/update_status.py +191 -0
- pixeltable/catalog/view.py +251 -134
- pixeltable/config.py +215 -0
- pixeltable/env.py +736 -285
- pixeltable/exceptions.py +26 -2
- pixeltable/exec/__init__.py +7 -2
- pixeltable/exec/aggregation_node.py +39 -21
- pixeltable/exec/cache_prefetch_node.py +87 -109
- pixeltable/exec/cell_materialization_node.py +268 -0
- pixeltable/exec/cell_reconstruction_node.py +168 -0
- pixeltable/exec/component_iteration_node.py +25 -28
- pixeltable/exec/data_row_batch.py +11 -46
- pixeltable/exec/exec_context.py +26 -11
- pixeltable/exec/exec_node.py +35 -27
- pixeltable/exec/expr_eval/__init__.py +3 -0
- pixeltable/exec/expr_eval/evaluators.py +365 -0
- pixeltable/exec/expr_eval/expr_eval_node.py +413 -0
- pixeltable/exec/expr_eval/globals.py +200 -0
- pixeltable/exec/expr_eval/row_buffer.py +74 -0
- pixeltable/exec/expr_eval/schedulers.py +413 -0
- pixeltable/exec/globals.py +35 -0
- pixeltable/exec/in_memory_data_node.py +35 -27
- pixeltable/exec/object_store_save_node.py +293 -0
- pixeltable/exec/row_update_node.py +44 -29
- pixeltable/exec/sql_node.py +414 -115
- pixeltable/exprs/__init__.py +8 -5
- pixeltable/exprs/arithmetic_expr.py +79 -45
- pixeltable/exprs/array_slice.py +5 -5
- pixeltable/exprs/column_property_ref.py +40 -26
- pixeltable/exprs/column_ref.py +254 -61
- pixeltable/exprs/comparison.py +14 -9
- pixeltable/exprs/compound_predicate.py +9 -10
- pixeltable/exprs/data_row.py +213 -72
- pixeltable/exprs/expr.py +270 -104
- pixeltable/exprs/expr_dict.py +6 -5
- pixeltable/exprs/expr_set.py +20 -11
- pixeltable/exprs/function_call.py +383 -284
- pixeltable/exprs/globals.py +18 -5
- pixeltable/exprs/in_predicate.py +7 -7
- pixeltable/exprs/inline_expr.py +37 -37
- pixeltable/exprs/is_null.py +8 -4
- pixeltable/exprs/json_mapper.py +120 -54
- pixeltable/exprs/json_path.py +90 -60
- pixeltable/exprs/literal.py +61 -16
- pixeltable/exprs/method_ref.py +7 -6
- pixeltable/exprs/object_ref.py +19 -8
- pixeltable/exprs/row_builder.py +238 -75
- pixeltable/exprs/rowid_ref.py +53 -15
- pixeltable/exprs/similarity_expr.py +65 -50
- pixeltable/exprs/sql_element_cache.py +5 -5
- pixeltable/exprs/string_op.py +107 -0
- pixeltable/exprs/type_cast.py +25 -13
- pixeltable/exprs/variable.py +2 -2
- pixeltable/func/__init__.py +9 -5
- pixeltable/func/aggregate_function.py +197 -92
- pixeltable/func/callable_function.py +119 -35
- pixeltable/func/expr_template_function.py +101 -48
- pixeltable/func/function.py +375 -62
- pixeltable/func/function_registry.py +20 -19
- pixeltable/func/globals.py +6 -5
- pixeltable/func/mcp.py +74 -0
- pixeltable/func/query_template_function.py +151 -35
- pixeltable/func/signature.py +178 -49
- pixeltable/func/tools.py +164 -0
- pixeltable/func/udf.py +176 -53
- pixeltable/functions/__init__.py +44 -4
- pixeltable/functions/anthropic.py +226 -47
- pixeltable/functions/audio.py +148 -11
- pixeltable/functions/bedrock.py +137 -0
- pixeltable/functions/date.py +188 -0
- pixeltable/functions/deepseek.py +113 -0
- pixeltable/functions/document.py +81 -0
- pixeltable/functions/fal.py +76 -0
- pixeltable/functions/fireworks.py +72 -20
- pixeltable/functions/gemini.py +249 -0
- pixeltable/functions/globals.py +208 -53
- pixeltable/functions/groq.py +108 -0
- pixeltable/functions/huggingface.py +1088 -95
- pixeltable/functions/image.py +155 -84
- pixeltable/functions/json.py +8 -11
- pixeltable/functions/llama_cpp.py +31 -19
- pixeltable/functions/math.py +169 -0
- pixeltable/functions/mistralai.py +50 -75
- pixeltable/functions/net.py +70 -0
- pixeltable/functions/ollama.py +29 -36
- pixeltable/functions/openai.py +548 -160
- pixeltable/functions/openrouter.py +143 -0
- pixeltable/functions/replicate.py +15 -14
- pixeltable/functions/reve.py +250 -0
- pixeltable/functions/string.py +310 -85
- pixeltable/functions/timestamp.py +37 -19
- pixeltable/functions/together.py +77 -120
- pixeltable/functions/twelvelabs.py +188 -0
- pixeltable/functions/util.py +7 -2
- pixeltable/functions/uuid.py +30 -0
- pixeltable/functions/video.py +1528 -117
- pixeltable/functions/vision.py +26 -26
- pixeltable/functions/voyageai.py +289 -0
- pixeltable/functions/whisper.py +19 -10
- pixeltable/functions/whisperx.py +179 -0
- pixeltable/functions/yolox.py +112 -0
- pixeltable/globals.py +716 -236
- pixeltable/index/__init__.py +3 -1
- pixeltable/index/base.py +17 -21
- pixeltable/index/btree.py +32 -22
- pixeltable/index/embedding_index.py +155 -92
- pixeltable/io/__init__.py +12 -7
- pixeltable/io/datarows.py +140 -0
- pixeltable/io/external_store.py +83 -125
- pixeltable/io/fiftyone.py +24 -33
- pixeltable/io/globals.py +47 -182
- pixeltable/io/hf_datasets.py +96 -127
- pixeltable/io/label_studio.py +171 -156
- pixeltable/io/lancedb.py +3 -0
- pixeltable/io/pandas.py +136 -115
- pixeltable/io/parquet.py +40 -153
- pixeltable/io/table_data_conduit.py +702 -0
- pixeltable/io/utils.py +100 -0
- pixeltable/iterators/__init__.py +8 -4
- pixeltable/iterators/audio.py +207 -0
- pixeltable/iterators/base.py +9 -3
- pixeltable/iterators/document.py +144 -87
- pixeltable/iterators/image.py +17 -38
- pixeltable/iterators/string.py +15 -12
- pixeltable/iterators/video.py +523 -127
- pixeltable/metadata/__init__.py +33 -8
- pixeltable/metadata/converters/convert_10.py +2 -3
- pixeltable/metadata/converters/convert_13.py +2 -2
- pixeltable/metadata/converters/convert_15.py +15 -11
- pixeltable/metadata/converters/convert_16.py +4 -5
- pixeltable/metadata/converters/convert_17.py +4 -5
- pixeltable/metadata/converters/convert_18.py +4 -6
- pixeltable/metadata/converters/convert_19.py +6 -9
- pixeltable/metadata/converters/convert_20.py +3 -6
- pixeltable/metadata/converters/convert_21.py +6 -8
- pixeltable/metadata/converters/convert_22.py +3 -2
- pixeltable/metadata/converters/convert_23.py +33 -0
- pixeltable/metadata/converters/convert_24.py +55 -0
- pixeltable/metadata/converters/convert_25.py +19 -0
- pixeltable/metadata/converters/convert_26.py +23 -0
- pixeltable/metadata/converters/convert_27.py +29 -0
- pixeltable/metadata/converters/convert_28.py +13 -0
- pixeltable/metadata/converters/convert_29.py +110 -0
- pixeltable/metadata/converters/convert_30.py +63 -0
- pixeltable/metadata/converters/convert_31.py +11 -0
- pixeltable/metadata/converters/convert_32.py +15 -0
- pixeltable/metadata/converters/convert_33.py +17 -0
- pixeltable/metadata/converters/convert_34.py +21 -0
- pixeltable/metadata/converters/convert_35.py +9 -0
- pixeltable/metadata/converters/convert_36.py +38 -0
- pixeltable/metadata/converters/convert_37.py +15 -0
- pixeltable/metadata/converters/convert_38.py +39 -0
- pixeltable/metadata/converters/convert_39.py +124 -0
- pixeltable/metadata/converters/convert_40.py +73 -0
- pixeltable/metadata/converters/convert_41.py +12 -0
- pixeltable/metadata/converters/convert_42.py +9 -0
- pixeltable/metadata/converters/convert_43.py +44 -0
- pixeltable/metadata/converters/util.py +44 -18
- pixeltable/metadata/notes.py +21 -0
- pixeltable/metadata/schema.py +185 -42
- pixeltable/metadata/utils.py +74 -0
- pixeltable/mypy/__init__.py +3 -0
- pixeltable/mypy/mypy_plugin.py +123 -0
- pixeltable/plan.py +616 -225
- pixeltable/share/__init__.py +3 -0
- pixeltable/share/packager.py +797 -0
- pixeltable/share/protocol/__init__.py +33 -0
- pixeltable/share/protocol/common.py +165 -0
- pixeltable/share/protocol/operation_types.py +33 -0
- pixeltable/share/protocol/replica.py +119 -0
- pixeltable/share/publish.py +349 -0
- pixeltable/store.py +398 -232
- pixeltable/type_system.py +730 -267
- pixeltable/utils/__init__.py +40 -0
- pixeltable/utils/arrow.py +201 -29
- pixeltable/utils/av.py +298 -0
- pixeltable/utils/azure_store.py +346 -0
- pixeltable/utils/coco.py +26 -27
- pixeltable/utils/code.py +4 -4
- pixeltable/utils/console_output.py +46 -0
- pixeltable/utils/coroutine.py +24 -0
- pixeltable/utils/dbms.py +92 -0
- pixeltable/utils/description_helper.py +11 -12
- pixeltable/utils/documents.py +60 -61
- pixeltable/utils/exception_handler.py +36 -0
- pixeltable/utils/filecache.py +38 -22
- pixeltable/utils/formatter.py +88 -51
- pixeltable/utils/gcs_store.py +295 -0
- pixeltable/utils/http.py +133 -0
- pixeltable/utils/http_server.py +14 -13
- pixeltable/utils/iceberg.py +13 -0
- pixeltable/utils/image.py +17 -0
- pixeltable/utils/lancedb.py +90 -0
- pixeltable/utils/local_store.py +322 -0
- pixeltable/utils/misc.py +5 -0
- pixeltable/utils/object_stores.py +573 -0
- pixeltable/utils/pydantic.py +60 -0
- pixeltable/utils/pytorch.py +20 -20
- pixeltable/utils/s3_store.py +527 -0
- pixeltable/utils/sql.py +32 -5
- pixeltable/utils/system.py +30 -0
- pixeltable/utils/transactional_directory.py +4 -3
- pixeltable-0.5.7.dist-info/METADATA +579 -0
- pixeltable-0.5.7.dist-info/RECORD +227 -0
- {pixeltable-0.2.26.dist-info → pixeltable-0.5.7.dist-info}/WHEEL +1 -1
- pixeltable-0.5.7.dist-info/entry_points.txt +2 -0
- pixeltable/__version__.py +0 -3
- pixeltable/catalog/named_function.py +0 -36
- pixeltable/catalog/path_dict.py +0 -141
- pixeltable/dataframe.py +0 -894
- pixeltable/exec/expr_eval_node.py +0 -232
- pixeltable/ext/__init__.py +0 -14
- pixeltable/ext/functions/__init__.py +0 -8
- pixeltable/ext/functions/whisperx.py +0 -77
- pixeltable/ext/functions/yolox.py +0 -157
- pixeltable/tool/create_test_db_dump.py +0 -311
- pixeltable/tool/create_test_video.py +0 -81
- pixeltable/tool/doc_plugins/griffe.py +0 -50
- pixeltable/tool/doc_plugins/mkdocstrings.py +0 -6
- pixeltable/tool/doc_plugins/templates/material/udf.html.jinja +0 -135
- pixeltable/tool/embed_udf.py +0 -9
- pixeltable/tool/mypy_plugin.py +0 -55
- pixeltable/utils/media_store.py +0 -76
- pixeltable/utils/s3.py +0 -16
- pixeltable-0.2.26.dist-info/METADATA +0 -400
- pixeltable-0.2.26.dist-info/RECORD +0 -156
- pixeltable-0.2.26.dist-info/entry_points.txt +0 -3
- {pixeltable-0.2.26.dist-info → pixeltable-0.5.7.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,52 +1,75 @@
|
|
|
1
|
-
import
|
|
2
|
-
from typing import Any, Optional
|
|
1
|
+
from typing import Any, Sequence
|
|
3
2
|
|
|
4
|
-
import
|
|
5
|
-
import pixeltable.exceptions as excs
|
|
3
|
+
from pixeltable import exceptions as excs, exprs, type_system as ts
|
|
6
4
|
|
|
7
5
|
from .function import Function
|
|
8
6
|
from .signature import Signature
|
|
9
7
|
|
|
10
8
|
|
|
11
|
-
class
|
|
12
|
-
"""
|
|
9
|
+
class ExprTemplate:
|
|
10
|
+
"""
|
|
11
|
+
Encapsulates a single signature of an `ExprTemplateFunction` and its associated parameterized expression,
|
|
12
|
+
along with various precomputed metadata. (This is analogous to a `Callable`-`Signature` pair in a
|
|
13
|
+
`CallableFunction`.)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
expr: 'exprs.Expr'
|
|
17
|
+
signature: Signature
|
|
18
|
+
param_exprs: dict[str, 'exprs.Variable']
|
|
13
19
|
|
|
14
|
-
def __init__(
|
|
15
|
-
self, expr: 'pixeltable.exprs.Expr', signature: Signature, self_path: Optional[str] = None,
|
|
16
|
-
name: Optional[str] = None):
|
|
17
|
-
import pixeltable.exprs as exprs
|
|
20
|
+
def __init__(self, expr: 'exprs.Expr', signature: Signature):
|
|
18
21
|
self.expr = expr
|
|
19
|
-
self.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
self.signature = signature
|
|
23
|
+
|
|
24
|
+
self.param_exprs = {name: exprs.Variable(name, param.col_type) for name, param in signature.parameters.items()}
|
|
25
|
+
|
|
26
|
+
# validate that all variables in the expression are parameters
|
|
27
|
+
for var in expr.subexprs(expr_class=exprs.Variable):
|
|
28
|
+
assert var.name in self.param_exprs, f"Variable '{var.name}' in expression is not a parameter"
|
|
24
29
|
|
|
25
30
|
# verify default values
|
|
26
|
-
self.defaults: dict[str, exprs.Literal] = {}
|
|
27
|
-
for param in signature.parameters.values():
|
|
28
|
-
if param.default is
|
|
31
|
+
self.defaults: dict[str, exprs.Literal] = {}
|
|
32
|
+
for param in self.signature.parameters.values():
|
|
33
|
+
if param.default is None:
|
|
29
34
|
continue
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
self.defaults[param.name] = param.default
|
|
36
|
+
|
|
37
|
+
# def __repr__(self) -> str:
|
|
38
|
+
# return f'ExprTemplate(expr={repr(self.expr)}, signature={self.signature})'
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ExprTemplateFunction(Function):
|
|
42
|
+
"""A parameterized expression from which an executable Expr is created with a function call."""
|
|
37
43
|
|
|
38
|
-
|
|
44
|
+
templates: list[ExprTemplate]
|
|
45
|
+
self_name: str
|
|
39
46
|
|
|
40
|
-
def
|
|
47
|
+
def __init__(self, templates: list[ExprTemplate], self_path: str | None = None, name: str | None = None):
|
|
48
|
+
self.templates = templates
|
|
49
|
+
self.self_name = name
|
|
50
|
+
|
|
51
|
+
super().__init__([t.signature for t in templates], self_path=self_path)
|
|
52
|
+
|
|
53
|
+
def _update_as_overload_resolution(self, signature_idx: int) -> None:
|
|
54
|
+
self.templates = [self.templates[signature_idx]]
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def template(self) -> ExprTemplate:
|
|
58
|
+
assert not self.is_polymorphic
|
|
59
|
+
return self.templates[0]
|
|
60
|
+
|
|
61
|
+
def instantiate(self, args: Sequence[Any], kwargs: dict[str, Any]) -> 'exprs.Expr':
|
|
62
|
+
assert not self.is_polymorphic
|
|
63
|
+
template = self.template
|
|
41
64
|
bound_args = self.signature.py_signature.bind(*args, **kwargs).arguments
|
|
42
|
-
# apply defaults
|
|
65
|
+
# apply defaults; otherwise we might have Parameters left over
|
|
43
66
|
bound_args.update(
|
|
44
|
-
{param_name: default for param_name, default in
|
|
45
|
-
|
|
46
|
-
|
|
67
|
+
{param_name: default for param_name, default in template.defaults.items() if param_name not in bound_args}
|
|
68
|
+
)
|
|
69
|
+
result = template.expr.copy()
|
|
47
70
|
arg_exprs: dict[exprs.Expr, exprs.Expr] = {}
|
|
48
71
|
for param_name, arg in bound_args.items():
|
|
49
|
-
param_expr =
|
|
72
|
+
param_expr = template.param_exprs[param_name]
|
|
50
73
|
if not isinstance(arg, exprs.Expr):
|
|
51
74
|
# TODO: use the available param_expr.col_type
|
|
52
75
|
arg_expr = exprs.Expr.from_object(arg)
|
|
@@ -56,44 +79,74 @@ class ExprTemplateFunction(Function):
|
|
|
56
79
|
arg_expr = arg
|
|
57
80
|
arg_exprs[param_expr] = arg_expr
|
|
58
81
|
result = result.substitute(arg_exprs)
|
|
59
|
-
import pixeltable.exprs as exprs
|
|
60
|
-
assert not result._contains(exprs.Variable)
|
|
61
82
|
return result
|
|
62
83
|
|
|
63
|
-
def
|
|
64
|
-
|
|
65
|
-
|
|
84
|
+
def call_return_type(self, bound_args: dict[str, 'exprs.Expr']) -> ts.ColumnType:
|
|
85
|
+
"""
|
|
86
|
+
The call_return_type of an ExprTemplateFunction is derived from the template expression's col_type after
|
|
87
|
+
substitution (unlike for UDFs, whose call_return_type is derived from an explicitly specified
|
|
88
|
+
conditional_return_type).
|
|
89
|
+
"""
|
|
90
|
+
assert not self.is_polymorphic
|
|
91
|
+
with_defaults = bound_args.copy()
|
|
92
|
+
with_defaults.update(
|
|
93
|
+
{
|
|
94
|
+
param_name: default
|
|
95
|
+
for param_name, default in self.template.defaults.items()
|
|
96
|
+
if param_name not in bound_args
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
substituted_expr = self.template.expr.copy().substitute(
|
|
100
|
+
{self.template.param_exprs[name]: expr for name, expr in with_defaults.items()}
|
|
101
|
+
)
|
|
102
|
+
return substituted_expr.col_type
|
|
103
|
+
|
|
104
|
+
def comment(self) -> str | None:
|
|
105
|
+
if isinstance(self.templates[0].expr, exprs.FunctionCall):
|
|
106
|
+
return self.templates[0].expr.fn.comment()
|
|
107
|
+
return None
|
|
108
|
+
|
|
109
|
+
def exec(self, args: Sequence[Any], kwargs: dict[str, Any]) -> Any:
|
|
110
|
+
assert not self.is_polymorphic
|
|
111
|
+
expr = self.instantiate(args, kwargs)
|
|
66
112
|
row_builder = exprs.RowBuilder(output_exprs=[expr], columns=[], input_exprs=[])
|
|
67
|
-
|
|
68
|
-
row_batch = exec.DataRowBatch(tbl=None, row_builder=row_builder, len=1)
|
|
69
|
-
row = row_batch[0]
|
|
113
|
+
row = row_builder.make_row()
|
|
70
114
|
row_builder.eval(row, ctx=row_builder.default_eval_ctx)
|
|
71
115
|
return row[row_builder.get_output_exprs()[0].slot_idx]
|
|
72
116
|
|
|
73
117
|
@property
|
|
74
118
|
def display_name(self) -> str:
|
|
119
|
+
if not self.self_name and isinstance(self.templates[0].expr, exprs.FunctionCall):
|
|
120
|
+
# In the common case where the templated expression is itself a FunctionCall,
|
|
121
|
+
# fall back on the display name of the underlying FunctionCall
|
|
122
|
+
return self.templates[0].expr.fn.display_name
|
|
75
123
|
return self.self_name
|
|
76
124
|
|
|
77
125
|
@property
|
|
78
126
|
def name(self) -> str:
|
|
79
127
|
return self.self_name
|
|
80
128
|
|
|
129
|
+
@property
|
|
130
|
+
def is_async(self) -> bool:
|
|
131
|
+
return False
|
|
132
|
+
|
|
81
133
|
def __str__(self) -> str:
|
|
82
|
-
return str(self.expr)
|
|
134
|
+
return str(self.templates[0].expr)
|
|
135
|
+
|
|
136
|
+
# def __repr__(self) -> str:
|
|
137
|
+
# return f'ExprTemplateFunction(name={self.name}, templates={self.templates})'
|
|
83
138
|
|
|
84
139
|
def _as_dict(self) -> dict:
|
|
85
140
|
if self.self_path is not None:
|
|
86
141
|
return super()._as_dict()
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
'name': self.name,
|
|
91
|
-
}
|
|
142
|
+
assert not self.is_polymorphic
|
|
143
|
+
assert len(self.templates) == 1
|
|
144
|
+
return {'expr': self.template.expr.as_dict(), 'signature': self.signature.as_dict(), 'name': self.name}
|
|
92
145
|
|
|
93
146
|
@classmethod
|
|
94
147
|
def _from_dict(cls, d: dict) -> Function:
|
|
95
148
|
if 'expr' not in d:
|
|
96
149
|
return super()._from_dict(d)
|
|
97
150
|
assert 'signature' in d and 'name' in d
|
|
98
|
-
|
|
99
|
-
return cls(
|
|
151
|
+
template = ExprTemplate(exprs.Expr.from_dict(d['expr']), Signature.from_dict(d['signature']))
|
|
152
|
+
return cls([template], name=d['name'])
|