pixeltable 0.4.0rc3__py3-none-any.whl → 0.4.1__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 +1 -1
- pixeltable/__version__.py +2 -2
- pixeltable/catalog/__init__.py +9 -1
- pixeltable/catalog/catalog.py +333 -99
- pixeltable/catalog/column.py +28 -26
- pixeltable/catalog/globals.py +12 -0
- pixeltable/catalog/insertable_table.py +8 -8
- pixeltable/catalog/schema_object.py +6 -0
- pixeltable/catalog/table.py +111 -116
- pixeltable/catalog/table_version.py +36 -50
- pixeltable/catalog/table_version_handle.py +4 -1
- pixeltable/catalog/table_version_path.py +28 -4
- pixeltable/catalog/view.py +10 -18
- pixeltable/config.py +4 -0
- pixeltable/dataframe.py +10 -9
- pixeltable/env.py +5 -11
- pixeltable/exceptions.py +6 -0
- pixeltable/exec/exec_node.py +2 -0
- pixeltable/exec/expr_eval/expr_eval_node.py +4 -4
- pixeltable/exec/sql_node.py +47 -30
- pixeltable/exprs/column_property_ref.py +2 -1
- pixeltable/exprs/column_ref.py +7 -6
- pixeltable/exprs/expr.py +4 -4
- pixeltable/func/__init__.py +1 -0
- pixeltable/func/mcp.py +74 -0
- pixeltable/func/query_template_function.py +4 -2
- pixeltable/func/tools.py +12 -2
- pixeltable/func/udf.py +2 -2
- pixeltable/functions/__init__.py +1 -0
- pixeltable/functions/groq.py +108 -0
- pixeltable/functions/huggingface.py +8 -6
- pixeltable/functions/mistralai.py +2 -13
- pixeltable/functions/openai.py +1 -6
- pixeltable/functions/replicate.py +2 -2
- pixeltable/functions/util.py +6 -1
- pixeltable/globals.py +0 -2
- pixeltable/io/external_store.py +2 -2
- pixeltable/io/label_studio.py +4 -4
- pixeltable/io/table_data_conduit.py +1 -1
- pixeltable/metadata/__init__.py +1 -1
- pixeltable/metadata/converters/convert_37.py +15 -0
- pixeltable/metadata/notes.py +1 -0
- pixeltable/metadata/schema.py +5 -0
- pixeltable/plan.py +37 -121
- pixeltable/share/packager.py +2 -2
- pixeltable/type_system.py +30 -0
- {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/METADATA +1 -1
- {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/RECORD +51 -49
- pixeltable/utils/sample.py +0 -25
- {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/LICENSE +0 -0
- {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/WHEEL +0 -0
- {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/entry_points.txt +0 -0
pixeltable/plan.py
CHANGED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
import enum
|
|
5
5
|
from textwrap import dedent
|
|
6
|
-
from typing import Any, Iterable, Literal,
|
|
6
|
+
from typing import Any, Iterable, Literal, Optional, Sequence
|
|
7
7
|
from uuid import UUID
|
|
8
8
|
|
|
9
9
|
import sqlalchemy as sql
|
|
@@ -12,7 +12,6 @@ import pixeltable as pxt
|
|
|
12
12
|
from pixeltable import catalog, exceptions as excs, exec, exprs
|
|
13
13
|
from pixeltable.catalog import Column, TableVersionHandle
|
|
14
14
|
from pixeltable.exec.sql_node import OrderByClause, OrderByItem, combine_order_by_clauses, print_order_by_clause
|
|
15
|
-
from pixeltable.utils.sample import sample_key
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
def _is_agg_fn_call(e: exprs.Expr) -> bool:
|
|
@@ -159,16 +158,6 @@ class SampleClause:
|
|
|
159
158
|
return format(threshold_int, '08x') + 'ffffffffffffffffffffffff'
|
|
160
159
|
|
|
161
160
|
|
|
162
|
-
class SamplingClauses(NamedTuple):
|
|
163
|
-
"""Clauses provided when rewriting a SampleClause"""
|
|
164
|
-
|
|
165
|
-
where: exprs.Expr
|
|
166
|
-
group_by_clause: Optional[list[exprs.Expr]]
|
|
167
|
-
order_by_clause: Optional[list[tuple[exprs.Expr, bool]]]
|
|
168
|
-
limit: Optional[exprs.Expr]
|
|
169
|
-
sample_clause: Optional[SampleClause]
|
|
170
|
-
|
|
171
|
-
|
|
172
161
|
class Analyzer:
|
|
173
162
|
"""
|
|
174
163
|
Performs semantic analysis of a query and stores the analysis state.
|
|
@@ -180,6 +169,8 @@ class Analyzer:
|
|
|
180
169
|
group_by_clause: Optional[list[exprs.Expr]] # None for non-aggregate queries; [] for agg query w/o grouping
|
|
181
170
|
grouping_exprs: list[exprs.Expr] # [] for non-aggregate queries or agg query w/o grouping
|
|
182
171
|
order_by_clause: OrderByClause
|
|
172
|
+
stratify_exprs: list[exprs.Expr] # [] if no stratiifcation is required
|
|
173
|
+
sample_clause: Optional[SampleClause] # None if no sampling clause is present
|
|
183
174
|
|
|
184
175
|
sql_elements: exprs.SqlElementCache
|
|
185
176
|
|
|
@@ -200,6 +191,7 @@ class Analyzer:
|
|
|
200
191
|
where_clause: Optional[exprs.Expr] = None,
|
|
201
192
|
group_by_clause: Optional[list[exprs.Expr]] = None,
|
|
202
193
|
order_by_clause: Optional[list[tuple[exprs.Expr, bool]]] = None,
|
|
194
|
+
sample_clause: Optional[SampleClause] = None,
|
|
203
195
|
):
|
|
204
196
|
if order_by_clause is None:
|
|
205
197
|
order_by_clause = []
|
|
@@ -213,6 +205,11 @@ class Analyzer:
|
|
|
213
205
|
self.group_by_clause = (
|
|
214
206
|
[e.resolve_computed_cols() for e in group_by_clause] if group_by_clause is not None else None
|
|
215
207
|
)
|
|
208
|
+
self.sample_clause = sample_clause
|
|
209
|
+
if self.sample_clause is not None and self.sample_clause.is_stratified:
|
|
210
|
+
self.stratify_exprs = [e.resolve_computed_cols() for e in sample_clause.stratify_exprs]
|
|
211
|
+
else:
|
|
212
|
+
self.stratify_exprs = []
|
|
216
213
|
self.order_by_clause = [OrderByItem(e.resolve_computed_cols(), asc) for e, asc in order_by_clause]
|
|
217
214
|
|
|
218
215
|
self.sql_where_clause = None
|
|
@@ -228,8 +225,11 @@ class Analyzer:
|
|
|
228
225
|
self.all_exprs.append(join_clause.join_predicate)
|
|
229
226
|
if self.group_by_clause is not None:
|
|
230
227
|
self.all_exprs.extend(self.group_by_clause)
|
|
228
|
+
self.all_exprs.extend(self.stratify_exprs)
|
|
231
229
|
self.all_exprs.extend(e for e, _ in self.order_by_clause)
|
|
232
230
|
if self.filter is not None:
|
|
231
|
+
if sample_clause is not None:
|
|
232
|
+
raise excs.Error(f'Filter {self.filter} not expressible in SQL')
|
|
233
233
|
self.all_exprs.append(self.filter)
|
|
234
234
|
|
|
235
235
|
self.agg_order_by = []
|
|
@@ -691,25 +691,13 @@ class Planner:
|
|
|
691
691
|
# 2. for component views: iterator args
|
|
692
692
|
iterator_args = [target.iterator_args] if target.iterator_args is not None else []
|
|
693
693
|
|
|
694
|
-
# If this contains a sample specification, modify / create where, group_by, order_by, and limit clauses
|
|
695
694
|
from_clause = FromClause(tbls=[view.base])
|
|
696
|
-
where, group_by_clause, order_by_clause, limit, sample_clause = cls.create_sample_clauses(
|
|
697
|
-
from_clause, target.sample_clause, target.predicate, None, [], None
|
|
698
|
-
)
|
|
699
|
-
|
|
700
|
-
# if we're propagating an insert, we only want to see those base rows that were created for the current version
|
|
701
695
|
base_analyzer = Analyzer(
|
|
702
|
-
from_clause,
|
|
703
|
-
iterator_args,
|
|
704
|
-
where_clause=where,
|
|
705
|
-
group_by_clause=group_by_clause,
|
|
706
|
-
order_by_clause=order_by_clause,
|
|
696
|
+
from_clause, iterator_args, where_clause=target.predicate, sample_clause=target.sample_clause
|
|
707
697
|
)
|
|
708
698
|
row_builder = exprs.RowBuilder(base_analyzer.all_exprs, stored_cols, [])
|
|
709
699
|
|
|
710
|
-
if
|
|
711
|
-
raise excs.Error(f'Filter {base_analyzer.filter} not expressible in SQL')
|
|
712
|
-
|
|
700
|
+
# if we're propagating an insert, we only want to see those base rows that were created for the current version
|
|
713
701
|
# execution plan:
|
|
714
702
|
# 1. materialize exprs computed from the base that are needed for stored view columns
|
|
715
703
|
# 2. if it's an iterator view, expand the base rows into component rows
|
|
@@ -723,19 +711,13 @@ class Planner:
|
|
|
723
711
|
|
|
724
712
|
# Create a new analyzer reflecting exactly what is required from the base table
|
|
725
713
|
base_analyzer = Analyzer(
|
|
726
|
-
from_clause,
|
|
727
|
-
base_output_exprs,
|
|
728
|
-
where_clause=where,
|
|
729
|
-
group_by_clause=group_by_clause,
|
|
730
|
-
order_by_clause=order_by_clause,
|
|
714
|
+
from_clause, base_output_exprs, where_clause=target.predicate, sample_clause=target.sample_clause
|
|
731
715
|
)
|
|
732
716
|
base_eval_ctx = row_builder.create_eval_ctx(base_analyzer.all_exprs)
|
|
733
717
|
plan = cls._create_query_plan(
|
|
734
718
|
row_builder=row_builder,
|
|
735
719
|
analyzer=base_analyzer,
|
|
736
720
|
eval_ctx=base_eval_ctx,
|
|
737
|
-
limit=limit,
|
|
738
|
-
sample_clause=sample_clause,
|
|
739
721
|
with_pk=True,
|
|
740
722
|
exact_version_only=view.get_bases() if propagates_insert else [],
|
|
741
723
|
)
|
|
@@ -818,62 +800,6 @@ class Planner:
|
|
|
818
800
|
prefetch_node = exec.CachePrefetchNode(tbl_id, file_col_info, input_node)
|
|
819
801
|
return prefetch_node
|
|
820
802
|
|
|
821
|
-
@classmethod
|
|
822
|
-
def create_sample_clauses(
|
|
823
|
-
cls,
|
|
824
|
-
from_clause: FromClause,
|
|
825
|
-
sample_clause: SampleClause,
|
|
826
|
-
where_clause: Optional[exprs.Expr],
|
|
827
|
-
group_by_clause: Optional[list[exprs.Expr]],
|
|
828
|
-
order_by_clause: Optional[list[tuple[exprs.Expr, bool]]],
|
|
829
|
-
limit: Optional[exprs.Expr],
|
|
830
|
-
) -> SamplingClauses:
|
|
831
|
-
"""tuple[
|
|
832
|
-
exprs.Expr,
|
|
833
|
-
Optional[list[exprs.Expr]],
|
|
834
|
-
Optional[list[tuple[exprs.Expr, bool]]],
|
|
835
|
-
Optional[exprs.Expr],
|
|
836
|
-
Optional[SampleClause],
|
|
837
|
-
]:"""
|
|
838
|
-
"""Construct clauses required for sampling under various conditions.
|
|
839
|
-
If there is no sampling, then return the original clauses.
|
|
840
|
-
If the sample is stratified, then return only the group by clause. The rest of the
|
|
841
|
-
mechanism for stratified sampling is provided by the SampleSqlNode.
|
|
842
|
-
If the sample is non-stratified, then rewrite the query to accommodate the supplied where clause,
|
|
843
|
-
and provide the other clauses required for sampling
|
|
844
|
-
"""
|
|
845
|
-
|
|
846
|
-
# If no sample clause, return the original clauses
|
|
847
|
-
if sample_clause is None:
|
|
848
|
-
return SamplingClauses(where_clause, group_by_clause, order_by_clause, limit, None)
|
|
849
|
-
|
|
850
|
-
# If the sample clause is stratified, create a group by clause
|
|
851
|
-
if sample_clause.is_stratified:
|
|
852
|
-
group_by = sample_clause.stratify_exprs
|
|
853
|
-
# Note that limit is not possible here
|
|
854
|
-
return SamplingClauses(where_clause, group_by, order_by_clause, None, sample_clause)
|
|
855
|
-
|
|
856
|
-
else:
|
|
857
|
-
# If non-stratified sampling, construct a where clause, order_by, and limit clauses
|
|
858
|
-
# Construct an expression for sorting rows and limiting row counts
|
|
859
|
-
s_key = sample_key(
|
|
860
|
-
exprs.Literal(sample_clause.seed), *cls.rowid_columns(from_clause._first_tbl.tbl_version)
|
|
861
|
-
)
|
|
862
|
-
|
|
863
|
-
# Construct a suitable where clause
|
|
864
|
-
where = where_clause
|
|
865
|
-
if sample_clause.fraction is not None:
|
|
866
|
-
fraction_md5_hex = exprs.Expr.from_object(
|
|
867
|
-
sample_clause.fraction_to_md5_hex(float(sample_clause.fraction))
|
|
868
|
-
)
|
|
869
|
-
f_where = s_key < fraction_md5_hex
|
|
870
|
-
where = where & f_where if where is not None else f_where
|
|
871
|
-
|
|
872
|
-
order_by: list[tuple[exprs.Expr, bool]] = [(s_key, True)]
|
|
873
|
-
limit = exprs.Literal(sample_clause.n)
|
|
874
|
-
# Note that group_by is not possible here
|
|
875
|
-
return SamplingClauses(where, None, order_by, limit, None)
|
|
876
|
-
|
|
877
803
|
@classmethod
|
|
878
804
|
def create_query_plan(
|
|
879
805
|
cls,
|
|
@@ -898,21 +824,15 @@ class Planner:
|
|
|
898
824
|
if exact_version_only is None:
|
|
899
825
|
exact_version_only = []
|
|
900
826
|
|
|
901
|
-
# Modify clauses to include sample clause
|
|
902
|
-
where, group_by_clause, order_by_clause, limit, sample = cls.create_sample_clauses(
|
|
903
|
-
from_clause, sample_clause, where_clause, group_by_clause, order_by_clause, limit
|
|
904
|
-
)
|
|
905
|
-
|
|
906
827
|
analyzer = Analyzer(
|
|
907
828
|
from_clause,
|
|
908
829
|
select_list,
|
|
909
|
-
where_clause=
|
|
830
|
+
where_clause=where_clause,
|
|
910
831
|
group_by_clause=group_by_clause,
|
|
911
832
|
order_by_clause=order_by_clause,
|
|
833
|
+
sample_clause=sample_clause,
|
|
912
834
|
)
|
|
913
835
|
row_builder = exprs.RowBuilder(analyzer.all_exprs, [], [])
|
|
914
|
-
if sample_clause is not None and analyzer.filter is not None:
|
|
915
|
-
raise excs.Error(f'Filter {analyzer.filter} not expressible in SQL')
|
|
916
836
|
|
|
917
837
|
analyzer.finalize(row_builder)
|
|
918
838
|
# select_list: we need to materialize everything that's been collected
|
|
@@ -923,7 +843,6 @@ class Planner:
|
|
|
923
843
|
analyzer=analyzer,
|
|
924
844
|
eval_ctx=eval_ctx,
|
|
925
845
|
limit=limit,
|
|
926
|
-
sample_clause=sample,
|
|
927
846
|
with_pk=True,
|
|
928
847
|
exact_version_only=exact_version_only,
|
|
929
848
|
)
|
|
@@ -939,7 +858,6 @@ class Planner:
|
|
|
939
858
|
analyzer: Analyzer,
|
|
940
859
|
eval_ctx: exprs.RowBuilder.EvalCtx,
|
|
941
860
|
limit: Optional[exprs.Expr] = None,
|
|
942
|
-
sample_clause: Optional[SampleClause] = None,
|
|
943
861
|
with_pk: bool = False,
|
|
944
862
|
exact_version_only: Optional[list[catalog.TableVersionHandle]] = None,
|
|
945
863
|
) -> exec.ExecNode:
|
|
@@ -966,6 +884,7 @@ class Planner:
|
|
|
966
884
|
# - join clause subexprs
|
|
967
885
|
# - subexprs of Where clause conjuncts that can't be run in SQL
|
|
968
886
|
# - all grouping exprs
|
|
887
|
+
# - all stratify exprs
|
|
969
888
|
candidates = list(
|
|
970
889
|
exprs.Expr.list_subexprs(
|
|
971
890
|
analyzer.select_list,
|
|
@@ -980,10 +899,12 @@ class Planner:
|
|
|
980
899
|
candidates.extend(
|
|
981
900
|
exprs.Expr.subexprs(analyzer.filter, filter=sql_elements.contains, traverse_matches=False)
|
|
982
901
|
)
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
902
|
+
candidates.extend(
|
|
903
|
+
exprs.Expr.list_subexprs(analyzer.grouping_exprs, filter=sql_elements.contains, traverse_matches=False)
|
|
904
|
+
)
|
|
905
|
+
candidates.extend(
|
|
906
|
+
exprs.Expr.list_subexprs(analyzer.stratify_exprs, filter=sql_elements.contains, traverse_matches=False)
|
|
907
|
+
)
|
|
987
908
|
# not isinstance(...): we don't want to materialize Literals via a Select
|
|
988
909
|
sql_exprs = exprs.ExprSet(e for e in candidates if not isinstance(e, exprs.Literal))
|
|
989
910
|
|
|
@@ -1028,6 +949,15 @@ class Planner:
|
|
|
1028
949
|
# we need to order the input for window functions
|
|
1029
950
|
plan.set_order_by(analyzer.get_window_fn_ob_clause())
|
|
1030
951
|
|
|
952
|
+
if analyzer.sample_clause is not None:
|
|
953
|
+
plan = exec.SqlSampleNode(
|
|
954
|
+
row_builder,
|
|
955
|
+
input=plan,
|
|
956
|
+
select_list=tbl_scan_exprs,
|
|
957
|
+
sample_clause=analyzer.sample_clause,
|
|
958
|
+
stratify_exprs=analyzer.stratify_exprs,
|
|
959
|
+
)
|
|
960
|
+
|
|
1031
961
|
plan = cls._insert_prefetch_node(tbl.tbl_version.id, row_builder, plan)
|
|
1032
962
|
|
|
1033
963
|
if analyzer.group_by_clause is not None:
|
|
@@ -1050,26 +980,12 @@ class Planner:
|
|
|
1050
980
|
sql_elements.contains_all(analyzer.select_list)
|
|
1051
981
|
and sql_elements.contains_all(analyzer.grouping_exprs)
|
|
1052
982
|
and isinstance(plan, exec.SqlNode)
|
|
1053
|
-
and plan.to_cte(
|
|
983
|
+
and plan.to_cte() is not None
|
|
1054
984
|
):
|
|
1055
|
-
|
|
1056
|
-
plan =
|
|
1057
|
-
|
|
1058
|
-
input=plan,
|
|
1059
|
-
select_list=analyzer.select_list,
|
|
1060
|
-
stratify_exprs=analyzer.group_by_clause,
|
|
1061
|
-
sample_clause=sample_clause,
|
|
1062
|
-
)
|
|
1063
|
-
else:
|
|
1064
|
-
plan = exec.SqlAggregationNode(
|
|
1065
|
-
row_builder,
|
|
1066
|
-
input=plan,
|
|
1067
|
-
select_list=analyzer.select_list,
|
|
1068
|
-
group_by_items=analyzer.group_by_clause,
|
|
1069
|
-
)
|
|
985
|
+
plan = exec.SqlAggregationNode(
|
|
986
|
+
row_builder, input=plan, select_list=analyzer.select_list, group_by_items=analyzer.group_by_clause
|
|
987
|
+
)
|
|
1070
988
|
else:
|
|
1071
|
-
if sample_clause is not None:
|
|
1072
|
-
raise excs.Error('Sample clause not supported with Python aggregation')
|
|
1073
989
|
input_sql_node = plan.get_node(exec.SqlNode)
|
|
1074
990
|
assert combined_ordering is not None
|
|
1075
991
|
input_sql_node.set_order_by(combined_ordering)
|
pixeltable/share/packager.py
CHANGED
|
@@ -127,7 +127,7 @@ class TablePackager:
|
|
|
127
127
|
# We use snappy compression for the Parquet tables; the entire bundle will be bzip2-compressed later, so
|
|
128
128
|
# faster compression should provide good performance while still reducing temporary storage utilization.
|
|
129
129
|
parquet_writer = pq.ParquetWriter(parquet_file, parquet_schema, compression='SNAPPY')
|
|
130
|
-
filter_tv = self.table.
|
|
130
|
+
filter_tv = self.table._tbl_version_path.tbl_version.get()
|
|
131
131
|
row_iter = tv.store_tbl.dump_rows(tv.version, filter_tv.store_tbl, filter_tv.version)
|
|
132
132
|
for pa_table in self.__to_pa_tables(row_iter, sql_types, media_cols, parquet_schema):
|
|
133
133
|
parquet_writer.write_table(pa_table)
|
|
@@ -238,7 +238,7 @@ class TablePackager:
|
|
|
238
238
|
- Documents are replaced by a thumbnail as a base64-encoded webp
|
|
239
239
|
"""
|
|
240
240
|
# First 8 columns
|
|
241
|
-
preview_cols = dict(itertools.islice(self.table.
|
|
241
|
+
preview_cols = dict(itertools.islice(self.table._get_schema().items(), 0, 8))
|
|
242
242
|
select_list = [self.table[col_name] for col_name in preview_cols]
|
|
243
243
|
# First 5 rows
|
|
244
244
|
rows = list(self.table.select(*select_list).head(n=5))
|
pixeltable/type_system.py
CHANGED
|
@@ -395,6 +395,36 @@ class ColumnType:
|
|
|
395
395
|
raise excs.Error(f'Standard Python type `{name}` cannot be used here; use `{suggestion}` instead')
|
|
396
396
|
raise excs.Error(f'Unknown type: {t}')
|
|
397
397
|
|
|
398
|
+
@classmethod
|
|
399
|
+
def from_json_schema(cls, schema: dict[str, Any]) -> Optional[ColumnType]:
|
|
400
|
+
# We first express the JSON schema as a Python type, and then convert it to a Pixeltable type.
|
|
401
|
+
# TODO: Is there a meaningful fallback if one of these operations fails? (Maybe another use case for a pxt Any
|
|
402
|
+
# type?)
|
|
403
|
+
py_type = cls.__json_schema_to_py_type(schema)
|
|
404
|
+
return cls.from_python_type(py_type) if py_type is not None else None
|
|
405
|
+
|
|
406
|
+
@classmethod
|
|
407
|
+
def __json_schema_to_py_type(cls, schema: dict[str, Any]) -> Union[type, _GenericAlias, None]:
|
|
408
|
+
if 'type' in schema:
|
|
409
|
+
if schema['type'] == 'null':
|
|
410
|
+
return type(None)
|
|
411
|
+
if schema['type'] == 'string':
|
|
412
|
+
return str
|
|
413
|
+
if schema['type'] == 'integer':
|
|
414
|
+
return int
|
|
415
|
+
if schema['type'] == 'number':
|
|
416
|
+
return float
|
|
417
|
+
if schema['type'] == 'boolean':
|
|
418
|
+
return bool
|
|
419
|
+
if schema['type'] in ('array', 'object'):
|
|
420
|
+
return list
|
|
421
|
+
elif 'anyOf' in schema:
|
|
422
|
+
subscripts = tuple(cls.__json_schema_to_py_type(subschema) for subschema in schema['anyOf'])
|
|
423
|
+
if all(subscript is not None for subscript in subscripts):
|
|
424
|
+
return Union[subscripts]
|
|
425
|
+
|
|
426
|
+
return None
|
|
427
|
+
|
|
398
428
|
def validate_literal(self, val: Any) -> None:
|
|
399
429
|
"""Raise TypeError if val is not a valid literal for this type"""
|
|
400
430
|
if val is None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pixeltable
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: data-science,machine-learning,database,ai,computer-vision,chatbot,ml,artificial-intelligence,feature-engineering,multimodal,mlops,feature-store,vector-database,llm,genai
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
pixeltable/__init__.py,sha256
|
|
2
|
-
pixeltable/__version__.py,sha256=
|
|
3
|
-
pixeltable/catalog/__init__.py,sha256=
|
|
4
|
-
pixeltable/catalog/catalog.py,sha256=
|
|
5
|
-
pixeltable/catalog/column.py,sha256=
|
|
1
|
+
pixeltable/__init__.py,sha256=WHZxJNz7vYcx_z3ebEg-RF22lJmlkfeqF2gv6mnrM1A,1449
|
|
2
|
+
pixeltable/__version__.py,sha256=BP1_olpMAIqE5wUeIGRoLW4mcG51_gER8ganU5vYe08,112
|
|
3
|
+
pixeltable/catalog/__init__.py,sha256=5gYj-MoahjDAaU4gQNGao_JODRL_1WigVe79F828FcA,602
|
|
4
|
+
pixeltable/catalog/catalog.py,sha256=hauRCj1aRb1C6C3AOBCjDdnCpHa46mEBlG7tVHHBxz8,71340
|
|
5
|
+
pixeltable/catalog/column.py,sha256=SBJO7kpnHjJupMywrD3kDUyhvoyi8GgAcDgky3Bf-f8,11230
|
|
6
6
|
pixeltable/catalog/dir.py,sha256=HFemOf67Nfw13EOpQsR_UgzP2L1w4LDfw2009DrSK0Y,2063
|
|
7
|
-
pixeltable/catalog/globals.py,sha256=
|
|
8
|
-
pixeltable/catalog/insertable_table.py,sha256=
|
|
7
|
+
pixeltable/catalog/globals.py,sha256=L09X-TA5iIcFQ-sQ7a372RfQ0bJpFs7C0sVHNXRG5Cw,4261
|
|
8
|
+
pixeltable/catalog/insertable_table.py,sha256=f4Lwxlbgqi48BTWzWVEtA9i_SZ5jw47-Psw9WbKf6jw,9338
|
|
9
9
|
pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
|
|
10
10
|
pixeltable/catalog/path.py,sha256=gk8TIlO_7Jpji5mAN0dUNvHmvU0uneTHeB_qCTWnszQ,2529
|
|
11
|
-
pixeltable/catalog/schema_object.py,sha256=
|
|
12
|
-
pixeltable/catalog/table.py,sha256=
|
|
13
|
-
pixeltable/catalog/table_version.py,sha256=
|
|
14
|
-
pixeltable/catalog/table_version_handle.py,sha256=
|
|
15
|
-
pixeltable/catalog/table_version_path.py,sha256=
|
|
16
|
-
pixeltable/catalog/view.py,sha256=
|
|
17
|
-
pixeltable/config.py,sha256=
|
|
18
|
-
pixeltable/dataframe.py,sha256=
|
|
19
|
-
pixeltable/env.py,sha256=
|
|
20
|
-
pixeltable/exceptions.py,sha256=
|
|
11
|
+
pixeltable/catalog/schema_object.py,sha256=jqOhZcI9QbT_EseDRQsVrp4pZ7jKB1wy4Sa-6aAvUCI,2004
|
|
12
|
+
pixeltable/catalog/table.py,sha256=IXgh7VSyGI-tvNl0G1_zQP7qJ9QyZucefXWX6IQ8rG4,69993
|
|
13
|
+
pixeltable/catalog/table_version.py,sha256=mZSBzMI6RTIfCjySd2OZjz7Eqc6h9g_BLbZ4PPRxfIM,66158
|
|
14
|
+
pixeltable/catalog/table_version_handle.py,sha256=aEIM9gX1MK95dip7OYmM9iGidE41SRi4lvoOqcL6kNo,2600
|
|
15
|
+
pixeltable/catalog/table_version_path.py,sha256=uRATYbAN0OXEkW1GZEC4hZulzvh8IJRwaN66ifUTJfw,9787
|
|
16
|
+
pixeltable/catalog/view.py,sha256=czgvZf9Z-VYXaVadSktrVtd9BdgLABaQWEjOcWJySck,14645
|
|
17
|
+
pixeltable/config.py,sha256=HIAyV3UGlcuQnHofKsid7wup518q_WfN6G-KB4yu_3g,4280
|
|
18
|
+
pixeltable/dataframe.py,sha256=dTpjM72Cj2cYMo0_HH2BJ6P3s9rQAF4suuL413BDyJw,60673
|
|
19
|
+
pixeltable/env.py,sha256=I8rvQQjvHB68rYCoSurR4pjn5qm6EvSwRL1CblUVPWs,35625
|
|
20
|
+
pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
|
|
21
21
|
pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
|
|
22
22
|
pixeltable/exec/aggregation_node.py,sha256=HqzISO1nv7_DFyqjZLRkjtbDJl9fIEto1i6Kh5ru8vA,4498
|
|
23
23
|
pixeltable/exec/cache_prefetch_node.py,sha256=GOa70eJDFY3FQV3VvJOrUVI8LFvro-r-V6sh3w-eJAc,12130
|
|
24
24
|
pixeltable/exec/component_iteration_node.py,sha256=FZszWHrzsjHxCbUTwXtJIlgQqgYtvKZB6QWiDGkfIbs,4757
|
|
25
25
|
pixeltable/exec/data_row_batch.py,sha256=EAB15JRhXbWIe91x1J5N5lFiMXzjB8NGTFjZsBDSbf8,3393
|
|
26
26
|
pixeltable/exec/exec_context.py,sha256=jKeLStfkjwCKKAooC-7a7qZUnZU5O0_JQhanhVerV9c,984
|
|
27
|
-
pixeltable/exec/exec_node.py,sha256=
|
|
27
|
+
pixeltable/exec/exec_node.py,sha256=MsuCO7nCpmqfuNxTNKsz36sJVDrR-o-0-3S2FcXLwvM,4237
|
|
28
28
|
pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
|
|
29
29
|
pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
|
|
30
|
-
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=
|
|
30
|
+
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=klPhvsug91GiPIHkwcTj1ympxsoj8nbNHzkzkC-NR88,18953
|
|
31
31
|
pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
|
|
32
32
|
pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
|
|
33
33
|
pixeltable/exec/expr_eval/schedulers.py,sha256=tAvCQKa1q0x7y7cdnGcTGbeku8QcoKH1GkgSm8ktOnM,17000
|
|
34
34
|
pixeltable/exec/in_memory_data_node.py,sha256=vmxD2Jwn15Wjkf_3wufr35SPjb60H_I4zpUKaO1Zo_s,3592
|
|
35
35
|
pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7npyLBKY,2798
|
|
36
|
-
pixeltable/exec/sql_node.py,sha256=
|
|
36
|
+
pixeltable/exec/sql_node.py,sha256=cMoBGPOFVmvL3UFjCKxhU3huJu_ko0PRr55-XhbF1i0,27572
|
|
37
37
|
pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,1096
|
|
38
38
|
pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
|
|
39
39
|
pixeltable/exprs/array_slice.py,sha256=8Zv0E2RghdJi1Mbk0kKtOz2ccGQuXwLLb6R9v1jk7hA,2180
|
|
40
|
-
pixeltable/exprs/column_property_ref.py,sha256=
|
|
41
|
-
pixeltable/exprs/column_ref.py,sha256=
|
|
40
|
+
pixeltable/exprs/column_property_ref.py,sha256=jIin85Ubjvx2L_c_VRROVA8MVrMVGO5P4OPwuZ4wwTY,4268
|
|
41
|
+
pixeltable/exprs/column_ref.py,sha256=PaKMLMs1t8Ld8zdTHJujQxtu_V5bgYh3rvPEAXg13jc,14956
|
|
42
42
|
pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
|
|
43
43
|
pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
|
|
44
44
|
pixeltable/exprs/data_row.py,sha256=8p0eWunvg_2ZH-e7Gtz_woxBAoizaCV2QtN87Is8_ys,11484
|
|
45
|
-
pixeltable/exprs/expr.py,sha256=
|
|
45
|
+
pixeltable/exprs/expr.py,sha256=uLEMuJzHwPW3hBIcsASnhjcPyGBkY8_8sFCqgRetKP0,36013
|
|
46
46
|
pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
|
|
47
47
|
pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
|
|
48
48
|
pixeltable/exprs/function_call.py,sha256=_PxrEACVyiihdQdmTiiSv5WkZfOXSQFcGO18wPueM_Y,21989
|
|
@@ -66,18 +66,19 @@ pixeltable/ext/__init__.py,sha256=UgDXWzGWiQIrwOuEvWTePLBcR2kecllPAE7gp-42Awg,45
|
|
|
66
66
|
pixeltable/ext/functions/__init__.py,sha256=Ox3kUHn5IslVEmEKsjrHfkHDrUkmLl9RCO2YkrPJkgc,193
|
|
67
67
|
pixeltable/ext/functions/whisperx.py,sha256=qda6kFQSvZTY2asfrYPwHb1cvSa03LbhJ-Wf9b7qPhw,2355
|
|
68
68
|
pixeltable/ext/functions/yolox.py,sha256=dX22nMb-0n2hZi7WhZ1Y4LIpFk5loyeXXuSUcc2Fgrg,3724
|
|
69
|
-
pixeltable/func/__init__.py,sha256=
|
|
69
|
+
pixeltable/func/__init__.py,sha256=SQPtGr_9dZNyXzxaZQcP3oVLKnbbs4UqV6sg8XUQHxQ,535
|
|
70
70
|
pixeltable/func/aggregate_function.py,sha256=5_MgqHAlMaacX2sPIHv_auTvYXtqR5MIZy_WqYQSdho,13264
|
|
71
71
|
pixeltable/func/callable_function.py,sha256=g_pA-g631YcFGLix9PpHYfgjOeS2qF0Csm1VxX8fah0,9278
|
|
72
72
|
pixeltable/func/expr_template_function.py,sha256=wEidKrOBTZkA3U1PAtG6-6RlDFiiRJszIG4zNOuPcNY,5940
|
|
73
73
|
pixeltable/func/function.py,sha256=w1U3j8XNeE4ZZ-rKuG13aTa8YGFkWAXjalh4j29_-e4,23136
|
|
74
74
|
pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
|
|
75
75
|
pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
|
|
76
|
-
pixeltable/func/
|
|
76
|
+
pixeltable/func/mcp.py,sha256=P9M2w8cm7ad-XmAcf2ZThfWmD8W46De1spwX98bZL4Y,2861
|
|
77
|
+
pixeltable/func/query_template_function.py,sha256=0wCcU06bv9KKJRlOsoLg8-vVNSLIYpKDCdYkUV7WShY,8040
|
|
77
78
|
pixeltable/func/signature.py,sha256=0PI6xdhLgwy9-GMkzkm7GlsBnsNMiS9aoNI9LWXwvN0,13700
|
|
78
|
-
pixeltable/func/tools.py,sha256=
|
|
79
|
-
pixeltable/func/udf.py,sha256=
|
|
80
|
-
pixeltable/functions/__init__.py,sha256=
|
|
79
|
+
pixeltable/func/tools.py,sha256=hKmQFvfpBvtLcItPRpqAmqt_tDg6latwyfv5FXBofBc,6074
|
|
80
|
+
pixeltable/func/udf.py,sha256=6tKpMt37t3BmXwRyA5fFAd6OM4D5EPEd2KuAr7DQhr0,13231
|
|
81
|
+
pixeltable/functions/__init__.py,sha256=Akk6Nk-rpz2D_V4kJTfyP56xnNbCz3EtxVAuwLoiysA,588
|
|
81
82
|
pixeltable/functions/anthropic.py,sha256=G2E0sH5vP933eZZxhz1tOByy5cg6N2XPvhSqIBzqufo,8782
|
|
82
83
|
pixeltable/functions/audio.py,sha256=7bsm4igQEW7RYSrSevwqaUOqyEnvBbPbJ8c-VknDl1E,657
|
|
83
84
|
pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
|
|
@@ -86,37 +87,38 @@ pixeltable/functions/deepseek.py,sha256=IAo2e_DhkM0A5NrskxuPQUGYzIYAl4do_mdO1Qc3
|
|
|
86
87
|
pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
|
|
87
88
|
pixeltable/functions/gemini.py,sha256=ZsbySkoMdOgZEUfFUccDbIdrbLb6DGRxzD88fHW-cRI,8317
|
|
88
89
|
pixeltable/functions/globals.py,sha256=ZXBV2LPXT2-yQYHHE7q8N1WdAr0WxiIO1ax0qwxhmK8,5118
|
|
89
|
-
pixeltable/functions/
|
|
90
|
+
pixeltable/functions/groq.py,sha256=FpR_LJpfZfzyhEvoBMMbQpQ-VQSRzBsS9U21qaINwww,3593
|
|
91
|
+
pixeltable/functions/huggingface.py,sha256=cJyf86qMcvivkGGNduNHAvh_idI-e4wJm0Zje1KJ2vQ,20611
|
|
90
92
|
pixeltable/functions/image.py,sha256=IKXljMma-uU88efptC3F4aywau7DYcD-Nqd3YpmRNRw,13971
|
|
91
93
|
pixeltable/functions/json.py,sha256=d7-AvwytUQtQYF_JnWJkptT_Yq0NgMpWfVk-m3U6qTY,807
|
|
92
94
|
pixeltable/functions/llama_cpp.py,sha256=1QB4vQ7J4Za1mL93bRIBXgokNtpzzYr_QU6KF27i9xo,3919
|
|
93
95
|
pixeltable/functions/math.py,sha256=eZEFjXxNHDHjcCsOMhzfNbJthTsmtNxtSFV8AEeRIfM,4979
|
|
94
|
-
pixeltable/functions/mistralai.py,sha256=
|
|
96
|
+
pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
|
|
95
97
|
pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
|
|
96
|
-
pixeltable/functions/openai.py,sha256=
|
|
97
|
-
pixeltable/functions/replicate.py,sha256=
|
|
98
|
+
pixeltable/functions/openai.py,sha256=SxhYrL3vgIfjzwCPnjR6yoaNr7BbFwpGy7Su1FSY7G4,27713
|
|
99
|
+
pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
|
|
98
100
|
pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
|
|
99
101
|
pixeltable/functions/timestamp.py,sha256=0zp4urJagCcNLfJE0ltTCft-J9qs2C716TmRngKYaa0,9171
|
|
100
102
|
pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
|
|
101
|
-
pixeltable/functions/util.py,sha256=
|
|
103
|
+
pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
|
|
102
104
|
pixeltable/functions/video.py,sha256=jS4YhMofD448YhGtI6ZXBAkeGw_AYYQTN0AbgHh_hok,6933
|
|
103
105
|
pixeltable/functions/vision.py,sha256=_a0wY3akkVhWnnxlq__1VzSLylytlNadpNOOPOwSfLk,15393
|
|
104
106
|
pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
|
|
105
|
-
pixeltable/globals.py,sha256=
|
|
107
|
+
pixeltable/globals.py,sha256=cQUzDiYzDftRhX1jwi1hi6OYx0zlDAMr04nShq75Knk,32226
|
|
106
108
|
pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
|
|
107
109
|
pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
|
|
108
110
|
pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
|
|
109
111
|
pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
|
|
110
112
|
pixeltable/io/__init__.py,sha256=Yjq13pBCBoaZv-OkIY2XSusVOC5b6cB5C6NbgJq5H1g,620
|
|
111
113
|
pixeltable/io/datarows.py,sha256=p1UGxQOTjqI6kgQNAa3aj8TkylcNDtaGBTorOg_Pk84,6088
|
|
112
|
-
pixeltable/io/external_store.py,sha256=
|
|
114
|
+
pixeltable/io/external_store.py,sha256=ZGZBMlfeg2euSMub0RK9Yv_h0gnItmEZPRg2IUDmJaE,15566
|
|
113
115
|
pixeltable/io/fiftyone.py,sha256=v0r28bIk2I0TRP5DfVHtBIUa4DpIJDK5sgExxOmHZ_w,6882
|
|
114
116
|
pixeltable/io/globals.py,sha256=Z8ww-Pcm59ql1tvame8z0Mu1thIy5BPbW-TswGRXt4s,11368
|
|
115
117
|
pixeltable/io/hf_datasets.py,sha256=gWyBH_0iFvxcrrxMY9_W399ZRcNDCmWFOAMmb1apnY0,5246
|
|
116
|
-
pixeltable/io/label_studio.py,sha256=
|
|
118
|
+
pixeltable/io/label_studio.py,sha256=y_0yEQWKgoLoHUQll6RTbm_Ou7LU882VZoEGb4WWnFs,31260
|
|
117
119
|
pixeltable/io/pandas.py,sha256=AbOeRDlA4MvUvianSKixsU-x-64nasPWw4HCHD6emz4,8981
|
|
118
120
|
pixeltable/io/parquet.py,sha256=-cxyy9wMRzGFDJWhUIjACfQMyAmajyoFcTXSkB8qESE,7818
|
|
119
|
-
pixeltable/io/table_data_conduit.py,sha256=
|
|
121
|
+
pixeltable/io/table_data_conduit.py,sha256=8SEcOPTgPiKHqlDp0rvGcPOF4v8jRX5TwHwfi5MHYt4,22003
|
|
120
122
|
pixeltable/io/utils.py,sha256=YMfhpqMitWz1PhXJGkCNOgNtEM1AZ55S0zXVhljC5kY,4260
|
|
121
123
|
pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
|
|
122
124
|
pixeltable/iterators/audio.py,sha256=wSVGdL5GeO3uY_lU-pNlY49E5dExIaJWY6oaXm-MnSU,9150
|
|
@@ -125,7 +127,7 @@ pixeltable/iterators/document.py,sha256=wJYSnzusJFaxipv5y0uQw-surN9fFz0Aq-s7w_l_
|
|
|
125
127
|
pixeltable/iterators/image.py,sha256=nWm-03CxNvHRdTr8U6PvWEnEiquqIQNG5rB-3Y44Mm4,3440
|
|
126
128
|
pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
|
|
127
129
|
pixeltable/iterators/video.py,sha256=L5S1YPmT_zM11vW9fK6d5nQpUvHVewQWmfDmy4BD45E,9134
|
|
128
|
-
pixeltable/metadata/__init__.py,sha256=
|
|
130
|
+
pixeltable/metadata/__init__.py,sha256=3_uviy74LAghHBKU-Ptg3BFmIrH6AoUr6nwvAnfWjWQ,3154
|
|
129
131
|
pixeltable/metadata/converters/convert_10.py,sha256=myYIo1DyccnsQUxDKG6mafnU5ge_EhZpHg_pesKBoK4,708
|
|
130
132
|
pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
|
|
131
133
|
pixeltable/metadata/converters/convert_13.py,sha256=B-_EkL0pSl1mAiv6DymeUAyBQUcYcV1qDdNz3Q359kc,1369
|
|
@@ -152,16 +154,17 @@ pixeltable/metadata/converters/convert_33.py,sha256=ZZV3FTyyouBM1eNymXxfHV-Oqmgu
|
|
|
152
154
|
pixeltable/metadata/converters/convert_34.py,sha256=1hi7m49CMzHRD25rrePS-SMCsZ-4opzDhY0JqU8Jzw4,690
|
|
153
155
|
pixeltable/metadata/converters/convert_35.py,sha256=c88qft0RFQbdFIE_PZRHMjeku1r5HCLN7wrvndQSXdI,266
|
|
154
156
|
pixeltable/metadata/converters/convert_36.py,sha256=g1rhZhAYfZpAwUgE3D1aipIR4RNvikhbKcrnBJzm0wM,1215
|
|
157
|
+
pixeltable/metadata/converters/convert_37.py,sha256=IVZGtKFaaYMGBs39V_H_okWvpxxadTUWqxoln0cNeQI,392
|
|
155
158
|
pixeltable/metadata/converters/util.py,sha256=95pfg9amEOmhho32PIbNYnqagVIN9adIcLXxB6zSYDY,7527
|
|
156
|
-
pixeltable/metadata/notes.py,sha256=
|
|
157
|
-
pixeltable/metadata/schema.py,sha256=
|
|
158
|
-
pixeltable/plan.py,sha256=
|
|
159
|
+
pixeltable/metadata/notes.py,sha256=OVHn9iW_y1nyGaMfu0qG3IBkuCdjgNdI6lJnR7LeRIg,1441
|
|
160
|
+
pixeltable/metadata/schema.py,sha256=l8ZGcASiTrtaMW9jPDMtZmoT2BamGIDhujNUVgdag5E,11720
|
|
161
|
+
pixeltable/plan.py,sha256=lM_wZZgxIfiIgN3-IIuyCd2URn-p29T1DwAe6vZ284U,48540
|
|
159
162
|
pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
163
|
pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
|
|
161
|
-
pixeltable/share/packager.py,sha256=
|
|
164
|
+
pixeltable/share/packager.py,sha256=wqOuuUXOor6YLzR9oZSYuJmdbkfBetZB3NkndsqbX3I,32172
|
|
162
165
|
pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
|
|
163
166
|
pixeltable/store.py,sha256=2tfMgJNVVbGShgAKghGAIFMZ-ViJHE7N9kWd2ugbi2A,24691
|
|
164
|
-
pixeltable/type_system.py,sha256=
|
|
167
|
+
pixeltable/type_system.py,sha256=P-ykQDPKbMZHtkozdrcBBpuX60Zc1nzwjwzSwlxIzPg,55319
|
|
165
168
|
pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
|
|
166
169
|
pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
|
|
167
170
|
pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
|
|
@@ -179,11 +182,10 @@ pixeltable/utils/iceberg.py,sha256=L_s9G9NMIGMQdRHtNkks6ntTVW4DKKAw97R9gRmtw5s,5
|
|
|
179
182
|
pixeltable/utils/media_store.py,sha256=Dhsnj1ZPRSX0iyGOu4JU4pC3fvSBd7sQpruVHqzKm7A,3089
|
|
180
183
|
pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
|
|
181
184
|
pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
|
|
182
|
-
pixeltable/utils/sample.py,sha256=Pj8oSZw0WsdASD1BpTtKiWP4cwef7KQqVAfIFKlJNxA,643
|
|
183
185
|
pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
|
|
184
186
|
pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
|
|
185
|
-
pixeltable-0.4.
|
|
186
|
-
pixeltable-0.4.
|
|
187
|
-
pixeltable-0.4.
|
|
188
|
-
pixeltable-0.4.
|
|
189
|
-
pixeltable-0.4.
|
|
187
|
+
pixeltable-0.4.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
188
|
+
pixeltable-0.4.1.dist-info/METADATA,sha256=k3yxQDjBX8NOeWjh2S25JaRMMnoksx_EKQtYmENuKpM,20577
|
|
189
|
+
pixeltable-0.4.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
190
|
+
pixeltable-0.4.1.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
|
|
191
|
+
pixeltable-0.4.1.dist-info/RECORD,,
|
pixeltable/utils/sample.py
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import sqlalchemy as sql
|
|
2
|
-
|
|
3
|
-
from pixeltable.func.udf import udf
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
@udf
|
|
7
|
-
def sample_key(seed: int, *key_fields: int) -> str:
|
|
8
|
-
"""
|
|
9
|
-
Create a sample key from the given seed and key fields.
|
|
10
|
-
|
|
11
|
-
Args:
|
|
12
|
-
seed: The seed value.
|
|
13
|
-
rowids: The rowids to include in the sample key.
|
|
14
|
-
|
|
15
|
-
Returns:
|
|
16
|
-
A string key for each row
|
|
17
|
-
"""
|
|
18
|
-
raise NotImplementedError('SampleKey creation is not implemented in python.')
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@sample_key.to_sql
|
|
22
|
-
def _(seed: sql.ColumnElement, *key_fields: sql.ColumnElement) -> sql.ColumnElement:
|
|
23
|
-
from pixeltable.exec.sql_node import SqlSampleNode
|
|
24
|
-
|
|
25
|
-
return SqlSampleNode.key_sql_expr(seed, key_fields)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|