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.

Files changed (52) hide show
  1. pixeltable/__init__.py +1 -1
  2. pixeltable/__version__.py +2 -2
  3. pixeltable/catalog/__init__.py +9 -1
  4. pixeltable/catalog/catalog.py +333 -99
  5. pixeltable/catalog/column.py +28 -26
  6. pixeltable/catalog/globals.py +12 -0
  7. pixeltable/catalog/insertable_table.py +8 -8
  8. pixeltable/catalog/schema_object.py +6 -0
  9. pixeltable/catalog/table.py +111 -116
  10. pixeltable/catalog/table_version.py +36 -50
  11. pixeltable/catalog/table_version_handle.py +4 -1
  12. pixeltable/catalog/table_version_path.py +28 -4
  13. pixeltable/catalog/view.py +10 -18
  14. pixeltable/config.py +4 -0
  15. pixeltable/dataframe.py +10 -9
  16. pixeltable/env.py +5 -11
  17. pixeltable/exceptions.py +6 -0
  18. pixeltable/exec/exec_node.py +2 -0
  19. pixeltable/exec/expr_eval/expr_eval_node.py +4 -4
  20. pixeltable/exec/sql_node.py +47 -30
  21. pixeltable/exprs/column_property_ref.py +2 -1
  22. pixeltable/exprs/column_ref.py +7 -6
  23. pixeltable/exprs/expr.py +4 -4
  24. pixeltable/func/__init__.py +1 -0
  25. pixeltable/func/mcp.py +74 -0
  26. pixeltable/func/query_template_function.py +4 -2
  27. pixeltable/func/tools.py +12 -2
  28. pixeltable/func/udf.py +2 -2
  29. pixeltable/functions/__init__.py +1 -0
  30. pixeltable/functions/groq.py +108 -0
  31. pixeltable/functions/huggingface.py +8 -6
  32. pixeltable/functions/mistralai.py +2 -13
  33. pixeltable/functions/openai.py +1 -6
  34. pixeltable/functions/replicate.py +2 -2
  35. pixeltable/functions/util.py +6 -1
  36. pixeltable/globals.py +0 -2
  37. pixeltable/io/external_store.py +2 -2
  38. pixeltable/io/label_studio.py +4 -4
  39. pixeltable/io/table_data_conduit.py +1 -1
  40. pixeltable/metadata/__init__.py +1 -1
  41. pixeltable/metadata/converters/convert_37.py +15 -0
  42. pixeltable/metadata/notes.py +1 -0
  43. pixeltable/metadata/schema.py +5 -0
  44. pixeltable/plan.py +37 -121
  45. pixeltable/share/packager.py +2 -2
  46. pixeltable/type_system.py +30 -0
  47. {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/METADATA +1 -1
  48. {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/RECORD +51 -49
  49. pixeltable/utils/sample.py +0 -25
  50. {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/LICENSE +0 -0
  51. {pixeltable-0.4.0rc3.dist-info → pixeltable-0.4.1.dist-info}/WHEEL +0 -0
  52. {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, NamedTuple, Optional, Sequence
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 target.sample_clause is not None and base_analyzer.filter is not None:
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=where,
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
- if analyzer.group_by_clause is not None:
984
- candidates.extend(
985
- exprs.Expr.list_subexprs(analyzer.group_by_clause, filter=sql_elements.contains, traverse_matches=False)
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(keep_pk=(sample_clause is not None)) is not None
983
+ and plan.to_cte() is not None
1054
984
  ):
1055
- if sample_clause is not None:
1056
- plan = exec.SqlSampleNode(
1057
- row_builder,
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)
@@ -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._tbl_version.get()
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._schema.items(), 0, 8))
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.0rc3
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=-uXHuiXH98kAlCupUTPbkBh4ToZgxcYUOk7-c9hqCC8,1439
2
- pixeltable/__version__.py,sha256=l1gVhW4YjeNouBt4ti5Rxsd1ETc8Ls5nKRC8aMceXrM,120
3
- pixeltable/catalog/__init__.py,sha256=rQmjveID4bk6NI4Ql09lGsZ0K0HVE2l1yqKAveipHzc,558
4
- pixeltable/catalog/catalog.py,sha256=ExHm2bbAs_4-T6zq3ow2fQ5a9Zja6G3WzHoo3Qk0X40,59399
5
- pixeltable/catalog/column.py,sha256=v3SE6CQs_ZXTDkBeiJ7gu9sxBJD-6EbkjsB1TZvLSJI,11280
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=7fNUs67D18PZ1ZajcGz7KQOV6tuXEcYLSrePzgmDkRw,4036
8
- pixeltable/catalog/insertable_table.py,sha256=tl3tvMVPzi9A_SRARV6660NQnt8w09hNbOYZwMsSJw8,9195
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=B9Am6W1bWnAMFZ4qFTfYw6g8F0-q_2aezBB1bUHL_RY,1812
12
- pixeltable/catalog/table.py,sha256=JUiQPQP33486KiPVio8aBTibNGUYwulDgU1UfGDaprU,68609
13
- pixeltable/catalog/table_version.py,sha256=1dq2uq-I2E4d2SkBMA5MQFqkutPQCi-7HlNo24Trrjw,66775
14
- pixeltable/catalog/table_version_handle.py,sha256=E0iPIp2PUbE7r3WZzerBJ7fgKX3vaTWPnn6cOwKLF-A,2581
15
- pixeltable/catalog/table_version_path.py,sha256=2JEprCdDzCfr9dPxlMhsQ80jYqJ0-8uBNgNXt3D-bao,9042
16
- pixeltable/catalog/view.py,sha256=1UN-k0Ck0IWyy2Ae5b520L08GAfQ17L4FaZtS2bQ-TA,14786
17
- pixeltable/config.py,sha256=gnRI4G9GE7mQJDcMcn8JsEzYk8oKVfHB-BwoLRWnRDo,3971
18
- pixeltable/dataframe.py,sha256=L1lNcfHtxxRw_b8kgkmvcuYXQyniAzwLnI4ww79P5B4,60393
19
- pixeltable/env.py,sha256=BtBxkKgU3wi6_0rfor3k3Kx6SF660JH24sWprbBzB8w,36132
20
- pixeltable/exceptions.py,sha256=eI2f4oXqv678_fDOxeYOTPE_EF1CMX3pwCqtJvN8i7s,926
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=WIN1sBEBNS7TlBk5QpHsDUCZUUdcvs6Os_Bxq2HoWdo,4077
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=ABkC2yAcMSCtQ7AvNAn6rfj3AMscVzezttKSs1ExNhw,18972
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=MM9wD0AMXh11qJayhMgieCJ36hww-ym1p7kfS2y9-wM,26540
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=28UcsrMIoXmMy6DAgJ0GP6Vw4sYwXcspVySmKSvejaE,4178
41
- pixeltable/exprs/column_ref.py,sha256=LljuQiNYh6dQa_EV57ylPfNkQD-lfHBFTGDY8WlnnfY,14942
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=YFPL81s9N1_Obl15zpk_yYUvKqVoBT8fpAXhkYqgHLs,36000
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=2BtyvXvFrLF0S5Qnmtg9S7dDSEVoBh5GDX6XFC25d7o,509
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/query_template_function.py,sha256=25nvgadWgk16BU7X5uI7PvKfkoluJSuOqsAcY5AN-Yw,7915
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=bmHnnd9lXkQ8sYHp5RSMF56NimSTE3uhG2xbIxs4Np4,5726
79
- pixeltable/func/udf.py,sha256=qQfaX1O3ZhUvSgiNnitW7nRKnZFJ5yu_Fj9ioqQgjqg,13219
80
- pixeltable/functions/__init__.py,sha256=x_ZodeEtayD2XDjlDZE4L_QTzajF6riftIc5P4ZjEiY,578
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/huggingface.py,sha256=KM1OH0Jt6XWF2jfpHb6rGhi1mV-AQNYAsHAyQfzW4qw,20560
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=PTXQegC2LO5Pw0zXBO_SVV7I2c5qBvqVVgfm_mK1ir0,5845
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=kzi8HApD971O54Xl82G0jI7n0E2ui476kV1wAKObx88,27768
97
- pixeltable/functions/replicate.py,sha256=SLMPNi44QMa16TVTImZRkNMXXyRZ0mmpnK6P5uXQE0k,2467
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=lVya13gcao8T34OGX7zy1cglQPNwaBbSBw57bVPyHNs,745
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=cM3uKvDJWIs1I9A8rzXaZsKCDSaLBh7KVb1lakQqGzk,32377
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=0ayZybxKRc600n-W7-3kEo0n_6LjAkIz-B4kLoPyukc,15554
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=rEJCN4hmONRMXVGkj1Cq_E-wowcvg6d7KToXxheOh2w,31242
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=oag9BDAjz6CZCCvZWuk3FnBNWb_m01bUzvbM0BW8tPI,21997
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=fZ3HaB-L8lHJdrtmKqfIJJlvYG0CqzzxKFRrh9IWoa0,3154
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=7HKk4yQLh8zaTVgv4pGXvpn3PoF5x7OFO8YSog5TLHI,1408
157
- pixeltable/metadata/schema.py,sha256=5r-loBIyYiZdkbszrLdn0XktOgDh96UVp_GScmm-14g,11489
158
- pixeltable/plan.py,sha256=bL6B32J63P1QtGjLhwwcfbh2SrSEeuyb1Zh6txdKQ6Q,52136
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=udwsorQDWX0N9eHcPHlT5xyAeUxGvT7DBnsFuq8PALM,32149
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=DSrof2NgKhBzvt7pbDNrGlZ3rkkDJ7MQsQ9rqk9N9pA,53988
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.0rc3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
186
- pixeltable-0.4.0rc3.dist-info/METADATA,sha256=iRhLy9JQXIsjwIOKQnvJBQCJuGfh_Xc56W3dcgWGs-A,20580
187
- pixeltable-0.4.0rc3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
188
- pixeltable-0.4.0rc3.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
189
- pixeltable-0.4.0rc3.dist-info/RECORD,,
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,,
@@ -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)