pixeltable 0.2.30__py3-none-any.whl → 0.3.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 (60) hide show
  1. pixeltable/__init__.py +1 -1
  2. pixeltable/__version__.py +2 -2
  3. pixeltable/catalog/table.py +212 -173
  4. pixeltable/catalog/table_version.py +2 -1
  5. pixeltable/catalog/view.py +3 -5
  6. pixeltable/dataframe.py +52 -39
  7. pixeltable/env.py +94 -5
  8. pixeltable/exec/__init__.py +1 -1
  9. pixeltable/exec/aggregation_node.py +3 -3
  10. pixeltable/exec/cache_prefetch_node.py +13 -7
  11. pixeltable/exec/component_iteration_node.py +3 -9
  12. pixeltable/exec/data_row_batch.py +17 -5
  13. pixeltable/exec/exec_node.py +32 -12
  14. pixeltable/exec/expr_eval/__init__.py +1 -0
  15. pixeltable/exec/expr_eval/evaluators.py +245 -0
  16. pixeltable/exec/expr_eval/expr_eval_node.py +404 -0
  17. pixeltable/exec/expr_eval/globals.py +114 -0
  18. pixeltable/exec/expr_eval/row_buffer.py +76 -0
  19. pixeltable/exec/expr_eval/schedulers.py +232 -0
  20. pixeltable/exec/in_memory_data_node.py +2 -2
  21. pixeltable/exec/row_update_node.py +14 -14
  22. pixeltable/exec/sql_node.py +2 -2
  23. pixeltable/exprs/column_ref.py +5 -1
  24. pixeltable/exprs/data_row.py +50 -40
  25. pixeltable/exprs/expr.py +57 -12
  26. pixeltable/exprs/function_call.py +54 -19
  27. pixeltable/exprs/inline_expr.py +12 -21
  28. pixeltable/exprs/literal.py +25 -8
  29. pixeltable/exprs/row_builder.py +23 -0
  30. pixeltable/exprs/similarity_expr.py +4 -4
  31. pixeltable/func/__init__.py +5 -5
  32. pixeltable/func/aggregate_function.py +4 -0
  33. pixeltable/func/callable_function.py +54 -6
  34. pixeltable/func/expr_template_function.py +5 -1
  35. pixeltable/func/function.py +54 -13
  36. pixeltable/func/query_template_function.py +56 -10
  37. pixeltable/func/tools.py +51 -14
  38. pixeltable/func/udf.py +7 -1
  39. pixeltable/functions/__init__.py +1 -1
  40. pixeltable/functions/anthropic.py +108 -21
  41. pixeltable/functions/gemini.py +2 -6
  42. pixeltable/functions/huggingface.py +10 -28
  43. pixeltable/functions/openai.py +225 -28
  44. pixeltable/globals.py +8 -5
  45. pixeltable/index/embedding_index.py +90 -38
  46. pixeltable/io/label_studio.py +1 -1
  47. pixeltable/metadata/__init__.py +1 -1
  48. pixeltable/metadata/converters/convert_24.py +11 -2
  49. pixeltable/metadata/converters/convert_25.py +19 -0
  50. pixeltable/metadata/notes.py +1 -0
  51. pixeltable/plan.py +24 -9
  52. pixeltable/store.py +6 -0
  53. pixeltable/type_system.py +4 -7
  54. pixeltable/utils/arrow.py +3 -3
  55. {pixeltable-0.2.30.dist-info → pixeltable-0.3.1.dist-info}/METADATA +5 -11
  56. {pixeltable-0.2.30.dist-info → pixeltable-0.3.1.dist-info}/RECORD +59 -53
  57. pixeltable/exec/expr_eval_node.py +0 -232
  58. {pixeltable-0.2.30.dist-info → pixeltable-0.3.1.dist-info}/LICENSE +0 -0
  59. {pixeltable-0.2.30.dist-info → pixeltable-0.3.1.dist-info}/WHEEL +0 -0
  60. {pixeltable-0.2.30.dist-info → pixeltable-0.3.1.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,3 @@
1
- import importlib
2
1
  from typing import Any, Optional
3
2
 
4
3
  import sqlalchemy as sql
@@ -23,7 +22,7 @@ def __substitute_md(k: Optional[str], v: Any) -> Optional[tuple[Optional[str], A
23
22
  'pixeltable.func.expr_template_function.ExprTemplateFunction']):
24
23
  if 'path' in v:
25
24
  assert 'signature' not in v
26
- f = resolve_symbol(v['path'])
25
+ f = resolve_symbol(__substitute_path(v['path']))
27
26
  assert isinstance(f, func.Function)
28
27
  v['signature'] = f.signatures[0].as_dict()
29
28
  return k, v
@@ -45,3 +44,13 @@ def __substitute_md(k: Optional[str], v: Any) -> Optional[tuple[Optional[str], A
45
44
  return k, v
46
45
 
47
46
  return None
47
+
48
+
49
+ def __substitute_path(path: str) -> str:
50
+ # Starting with version 25, function signatures are preserved in metadata. To migrate from older
51
+ # versions, it's necessary to resolve the function symbol to get the signature. The following
52
+ # adjustment is necessary for function names that are stored in db artifacts of version < 25, but
53
+ # have changed in some version > 25.
54
+ if path in ['pixeltable.functions.huggingface.clip_text', 'pixeltable.functions.huggingface.clip_image']:
55
+ return 'pixeltable.functions.huggingface.clip'
56
+ return path
@@ -0,0 +1,19 @@
1
+ from typing import Any, Optional
2
+
3
+ import sqlalchemy as sql
4
+
5
+ from pixeltable.metadata import register_converter
6
+ from pixeltable.metadata.converters.util import convert_table_md
7
+
8
+
9
+ @register_converter(version=25)
10
+ def _(engine: sql.engine.Engine) -> None:
11
+ convert_table_md(engine, substitution_fn=__substitute_md)
12
+
13
+
14
+ def __substitute_md(k: Optional[str], v: Any) -> Optional[tuple[Optional[str], Any]]:
15
+ if k == 'path' and (
16
+ v in ['pixeltable.functions.huggingface.clip_text', 'pixeltable.functions.huggingface.clip_image']
17
+ ):
18
+ return 'path', 'pixeltable.functions.huggingface.clip'
19
+ return None
@@ -2,6 +2,7 @@
2
2
  # rather than as a comment, so that the existence of a description can be enforced by
3
3
  # the unit tests when new versions are added.
4
4
  VERSION_NOTES = {
5
+ 26: 'Rename clip_text and clip_image to clip',
5
6
  25: 'Functions with multiple signatures',
6
7
  24: 'Added TableMd/IndexMd.indexed_col_tbl_id',
7
8
  23: 'DataFrame.from_clause',
pixeltable/plan.py CHANGED
@@ -5,6 +5,7 @@ import enum
5
5
  from typing import Any, Iterable, Optional, Sequence, Literal
6
6
  from uuid import UUID
7
7
 
8
+
8
9
  import sqlalchemy as sql
9
10
 
10
11
  import pixeltable as pxt
@@ -166,10 +167,13 @@ class Analyzer:
166
167
  raise excs.Error(
167
168
  f'Invalid non-aggregate expression in aggregate query: {self.select_list[is_agg_output.index(False)]}')
168
169
 
169
- # check that filter doesn't contain aggregates
170
+ # check that Where clause and filter doesn't contain aggregates
171
+ if self.sql_where_clause is not None:
172
+ if any(_is_agg_fn_call(e) for e in self.sql_where_clause.subexprs(expr_class=exprs.FunctionCall)):
173
+ raise excs.Error(f'where() cannot contain aggregate functions: {self.sql_where_clause}')
170
174
  if self.filter is not None:
171
175
  if any(_is_agg_fn_call(e) for e in self.filter.subexprs(expr_class=exprs.FunctionCall)):
172
- raise excs.Error(f'Filter cannot contain aggregate functions: {self.filter}')
176
+ raise excs.Error(f'where() cannot contain aggregate functions: {self.filter}')
173
177
 
174
178
  # check that grouping exprs don't contain aggregates and can be expressed as SQL (we perform sort-based
175
179
  # aggregation and rely on the SqlScanNode returning data in the correct order)
@@ -283,7 +287,8 @@ class Planner:
283
287
  computed_exprs = row_builder.output_exprs - row_builder.input_exprs
284
288
  if len(computed_exprs) > 0:
285
289
  # add an ExprEvalNode when there are exprs to compute
286
- plan = exec.ExprEvalNode(row_builder, computed_exprs, plan.output_exprs, input=plan)
290
+ plan = exec.ExprEvalNode(
291
+ row_builder, computed_exprs, plan.output_exprs, input=plan, maintain_input_order=False)
287
292
 
288
293
  stored_col_info = row_builder.output_slot_idxs()
289
294
  stored_img_col_info = [info for info in stored_col_info if info.col.col_type.is_image_type()]
@@ -548,7 +553,7 @@ class Planner:
548
553
  plan = exec.ComponentIterationNode(target, plan)
549
554
  if len(view_output_exprs) > 0:
550
555
  plan = exec.ExprEvalNode(
551
- row_builder, output_exprs=view_output_exprs, input_exprs=base_output_exprs,input=plan)
556
+ row_builder, output_exprs=view_output_exprs, input_exprs=base_output_exprs, input=plan)
552
557
 
553
558
  stored_img_col_info = [info for info in row_builder.output_slot_idxs() if info.col.col_type.is_image_type()]
554
559
  plan.set_stored_img_cols(stored_img_col_info)
@@ -750,10 +755,12 @@ class Planner:
750
755
  ctx.batch_size = 16
751
756
 
752
757
  # do aggregation in SQL if all agg exprs can be translated
753
- if (sql_elements.contains_all(analyzer.select_list)
754
- and sql_elements.contains_all(analyzer.grouping_exprs)
755
- and isinstance(plan, exec.SqlNode)
756
- and plan.to_cte() is not None):
758
+ if (
759
+ sql_elements.contains_all(analyzer.select_list)
760
+ and sql_elements.contains_all(analyzer.grouping_exprs)
761
+ and isinstance(plan, exec.SqlNode)
762
+ and plan.to_cte() is not None
763
+ ):
757
764
  plan = exec.SqlAggregationNode(
758
765
  row_builder, input=plan, select_list=analyzer.select_list, group_by_items=analyzer.group_by_clause)
759
766
  else:
@@ -770,14 +777,22 @@ class Planner:
770
777
  # we need an ExprEvalNode to evaluate the remaining output exprs
771
778
  plan = exec.ExprEvalNode(row_builder, eval_ctx.target_exprs, sql_exprs, input=plan)
772
779
  # we're returning everything to the user, so we might as well do it in a single batch
780
+ # TODO: return smaller batches in order to increase inter-ExecNode parallelism
773
781
  ctx.batch_size = 0
774
782
 
783
+ sql_node = plan.get_node(exec.SqlNode)
775
784
  if len(analyzer.order_by_clause) > 0:
776
785
  # we have the last SqlNode we created produce the ordering
777
- sql_node = plan.get_node(exec.SqlNode)
778
786
  assert sql_node is not None
779
787
  sql_node.set_order_by(analyzer.order_by_clause)
780
788
 
789
+ # if we don't need an ordered result, tell the ExprEvalNode not to maintain input order (which allows us to
790
+ # return batches earlier)
791
+ if sql_node is not None and len(sql_node.order_by_clause) == 0:
792
+ expr_eval_node = plan.get_node(exec.ExprEvalNode)
793
+ if expr_eval_node is not None:
794
+ expr_eval_node.set_input_order(False)
795
+
781
796
  if limit is not None:
782
797
  plan.set_limit(limit)
783
798
 
pixeltable/store.py CHANGED
@@ -229,6 +229,7 @@ class StoreBase:
229
229
  sql.exc.DBAPIError if there was a SQL error during execution
230
230
  excs.Error if on_error='abort' and there was an exception during row evaluation
231
231
  """
232
+ assert col.tbl.id == self.tbl_version.id
232
233
  num_excs = 0
233
234
  num_rows = 0
234
235
 
@@ -249,6 +250,7 @@ class StoreBase:
249
250
 
250
251
  try:
251
252
  # insert rows from exec_plan into temp table
253
+ # TODO: unify the table row construction logic with RowBuilder.create_table_row()
252
254
  for row_batch in exec_plan:
253
255
  num_rows += len(row_batch)
254
256
  tbl_rows: list[dict[str, Any]] = []
@@ -272,6 +274,10 @@ class StoreBase:
272
274
  tbl_row[col.sa_errortype_col.name] = error_type
273
275
  tbl_row[col.sa_errormsg_col.name] = error_msg
274
276
  else:
277
+ if col.col_type.is_image_type() and result_row.file_urls[value_expr_slot_idx] is None:
278
+ # we have yet to store this image
279
+ filepath = str(MediaStore.prepare_media_path(col.tbl.id, col.id, col.tbl.version))
280
+ result_row.flush_img(value_expr_slot_idx, filepath)
275
281
  val = result_row.get_stored_val(value_expr_slot_idx, col.sa_col.type)
276
282
  if col.col_type.is_media_type():
277
283
  val = self._move_tmp_media_file(val, col, result_row.pk[-1])
pixeltable/type_system.py CHANGED
@@ -246,8 +246,8 @@ class ColumnType:
246
246
  col_type = ArrayType.from_literal(val, nullable=nullable)
247
247
  if col_type is not None:
248
248
  return col_type
249
- # this could still be json-serializable
250
- if isinstance(val, dict) or isinstance(val, list) or isinstance(val, np.ndarray) or isinstance(val, pydantic.BaseModel):
249
+ # this could still be json-serializable
250
+ if isinstance(val, (list, tuple, dict, np.ndarray, pydantic.BaseModel)):
251
251
  try:
252
252
  JsonType().validate_literal(val)
253
253
  return JsonType(nullable=nullable)
@@ -659,9 +659,6 @@ class JsonType(ColumnType):
659
659
  return val_type.print_value(val)
660
660
 
661
661
  def _validate_literal(self, val: Any) -> None:
662
- if not isinstance(val, (dict, list)):
663
- # TODO In the future we should accept scalars too, which would enable us to remove this top-level check
664
- raise TypeError(f'Expected dict or list, got {val.__class__.__name__}')
665
662
  if not self.__is_valid_json(val):
666
663
  raise TypeError(f'That literal is not a valid Pixeltable JSON object: {val}')
667
664
  if self.__validator is not None:
@@ -869,7 +866,7 @@ class ArrayType(ColumnType):
869
866
  continue
870
867
  if n1 != n2:
871
868
  return False
872
- return val.dtype == self.numpy_dtype()
869
+ return np.issubdtype(val.dtype, self.numpy_dtype())
873
870
 
874
871
  def _to_json_schema(self) -> dict[str, Any]:
875
872
  return {
@@ -886,7 +883,7 @@ class ArrayType(ColumnType):
886
883
  f'got ndarray({val.shape}, dtype={val.dtype})'))
887
884
 
888
885
  def _create_literal(self, val: Any) -> Any:
889
- if isinstance(val, (list,tuple)):
886
+ if isinstance(val, (list, tuple)):
890
887
  # map python float to whichever numpy float is
891
888
  # declared for this type, rather than assume float64
892
889
  return np.array(val, dtype=self.numpy_dtype())
pixeltable/utils/arrow.py CHANGED
@@ -75,7 +75,7 @@ def to_arrow_schema(pixeltable_schema: dict[str, Any]) -> pa.Schema:
75
75
  return pa.schema((name, to_arrow_type(typ)) for name, typ in pixeltable_schema.items()) # type: ignore[misc]
76
76
 
77
77
 
78
- def to_pydict(batch: pa.RecordBatch) -> dict[str, Union[list, np.ndarray]]:
78
+ def to_pydict(batch: Union[pa.Table, pa.RecordBatch]) -> dict[str, Union[list, np.ndarray]]:
79
79
  """Convert a RecordBatch to a dictionary of lists, unlike pa.lib.RecordBatch.to_pydict,
80
80
  this function will not convert numpy arrays to lists, and will preserve the original numpy dtype.
81
81
  """
@@ -84,7 +84,7 @@ def to_pydict(batch: pa.RecordBatch) -> dict[str, Union[list, np.ndarray]]:
84
84
  col = batch.column(k)
85
85
  if isinstance(col.type, pa.FixedShapeTensorType):
86
86
  # treat array columns as numpy arrays to easily preserve numpy type
87
- out[name] = col.to_numpy(zero_copy_only=False)
87
+ out[name] = col.to_numpy(zero_copy_only=False) # type: ignore[call-arg]
88
88
  else:
89
89
  # for the rest, use pydict to preserve python types
90
90
  out[name] = col.to_pylist()
@@ -92,7 +92,7 @@ def to_pydict(batch: pa.RecordBatch) -> dict[str, Union[list, np.ndarray]]:
92
92
  return out
93
93
 
94
94
 
95
- def iter_tuples(batch: pa.RecordBatch) -> Iterator[dict[str, Any]]:
95
+ def iter_tuples(batch: Union[pa.Table, pa.RecordBatch]) -> Iterator[dict[str, Any]]:
96
96
  """Convert a RecordBatch to an iterator of dictionaries. also works with pa.Table and pa.RowGroup"""
97
97
  pydict = to_pydict(batch)
98
98
  assert len(pydict) > 0, 'empty record batch'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pixeltable
3
- Version: 0.2.30
3
+ Version: 0.3.1
4
4
  Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
5
  Home-page: https://pixeltable.com/
6
6
  License: Apache-2.0
@@ -27,11 +27,13 @@ Requires-Dist: av (>=10.0.0)
27
27
  Requires-Dist: beautifulsoup4 (>=4.0.0,<5.0.0)
28
28
  Requires-Dist: cloudpickle (>=2.2.1,<3.0.0)
29
29
  Requires-Dist: ftfy (>=6.2.0,<7.0.0)
30
+ Requires-Dist: httpx (>=0.27)
30
31
  Requires-Dist: jinja2 (>=3.1.3,<4.0.0)
31
32
  Requires-Dist: jmespath (>=1.0.1,<2.0.0)
32
33
  Requires-Dist: jsonschema (>=4.1.0)
33
34
  Requires-Dist: lxml (>=5.0)
34
35
  Requires-Dist: more-itertools (>=10.2,<11.0)
36
+ Requires-Dist: nest_asyncio (>=1.5)
35
37
  Requires-Dist: numpy (>=1.25,<2.0)
36
38
  Requires-Dist: pandas (>=2.0,<3.0)
37
39
  Requires-Dist: pgvector (>=0.2.1,<0.3.0)
@@ -255,7 +257,7 @@ Learn how to interact with inference services such as [Together AI](https://pixe
255
257
 
256
258
  ```python
257
259
  import pixeltable as pxt
258
- from pixeltable.functions.huggingface import clip_image, clip_text
260
+ from pixeltable.functions.huggingface import clip
259
261
  from pixeltable.iterators import FrameIterator
260
262
  import PIL.Image
261
263
 
@@ -266,16 +268,8 @@ video_table.insert([{'video': '/video.mp4'}])
266
268
  frames_view = pxt.create_view(
267
269
  'frames', video_table, iterator=FrameIterator.create(video=video_table.video))
268
270
 
269
- @pxt.expr_udf
270
- def embed_image(img: PIL.Image.Image):
271
- return clip_image(img, model_id='openai/clip-vit-base-patch32')
272
-
273
- @pxt.expr_udf
274
- def str_embed(s: str):
275
- return clip_text(s, model_id='openai/clip-vit-base-patch32')
276
-
277
271
  # Create an index on the 'frame' column that allows text and image search
278
- frames_view.add_embedding_index('frame', string_embed=str_embed, image_embed=embed_image)
272
+ frames_view.add_embedding_index('frame', embed=clip.using('openai/clip-vit-base-patch32'))
279
273
 
280
274
  # Now we will retrieve images based on a sample image
281
275
  sample_image = '/image.jpeg'
@@ -1,5 +1,5 @@
1
- pixeltable/__init__.py,sha256=A711Bh7Ew071NB80_QB-G8U3MCzE8c_Eie4Eze5oTU0,1404
2
- pixeltable/__version__.py,sha256=KcLib9jD_4YKaDT35NWGIWWIsVEcFCuYxeR4qAISynA,114
1
+ pixeltable/__init__.py,sha256=c-Z21TqJUbzGQKsO4CS4lVFwWlZnVhpIR94cL6RNmDo,1411
2
+ pixeltable/__version__.py,sha256=zVI6ltlHGwKITzBi4TSc2jGBnWUb4mnqjF_PYoGqTuw,112
3
3
  pixeltable/catalog/__init__.py,sha256=u8Ods4ncTY7DI5w0jyHVC0QDVDLHAy8Rqia3qsM5OH8,517
4
4
  pixeltable/catalog/catalog.py,sha256=tyDyI5wQw7vV6_FChrp9qgGCRClcjiSdW3eygYT0p9s,7849
5
5
  pixeltable/catalog/column.py,sha256=ezeKoGl6aBTzSZBihDA6vdETcvyCguAD4OsmrxWs73A,9595
@@ -10,48 +10,53 @@ pixeltable/catalog/named_function.py,sha256=cWf9WxAagSY9uqE7mM0IwWSsDOvQUkJlcHlG
10
10
  pixeltable/catalog/path.py,sha256=QgccEi_QOfaKt8YsR2zLtd_z7z7QQkU_1kprJFi2SPQ,1677
11
11
  pixeltable/catalog/path_dict.py,sha256=V7YQM0QhUWr4FbgUiDUIweGbmMJr687QCm2p614Xrs0,6473
12
12
  pixeltable/catalog/schema_object.py,sha256=NUE6Fx6Km0UUJ6WcE9mOgL2UQCLBMQjINQLp_mljzKA,2382
13
- pixeltable/catalog/table.py,sha256=ePJkkQnQIthCFhsxtH2HU-gbefduJt54l-OV_fWAv7I,58738
14
- pixeltable/catalog/table_version.py,sha256=hbnAtd-0EsVFCuWE1yrmm_CLar6NNQDRevgDjduh2CY,58581
13
+ pixeltable/catalog/table.py,sha256=Gqb1tT9l8oB5eeeFuj45fy0_1fdCqizmRWvyjFH-U9Y,62404
14
+ pixeltable/catalog/table_version.py,sha256=wuvFYbr6WrwhDWC202tUIgF8T61P69WOtduBUDq5EsI,58601
15
15
  pixeltable/catalog/table_version_path.py,sha256=CczGbcz5ESq663arreri_p4chMZHozgG6k3y-ajkJN4,5787
16
- pixeltable/catalog/view.py,sha256=mJbaVE63GaBDy7EcQkQ2q5NKlrHlGyENkRyQVzU-ak8,10854
17
- pixeltable/dataframe.py,sha256=-jByrlncEV7ns_pChPGpBhcTf1sU4mp1OJB7uX9HlXE,48199
18
- pixeltable/env.py,sha256=RNUzaLMeEIpCYlReMS_s3yY55h8DA41x33uRvcv_o70,31267
16
+ pixeltable/catalog/view.py,sha256=qUjou_z_YwKTqTIRUY4Q3JxWUEiKvl2pDi7DNOnw4fw,10709
17
+ pixeltable/dataframe.py,sha256=KrAB-l_qdArlT3pnlSH69k0mqs0AK2wFhQ4V_7Wcjyw,48639
18
+ pixeltable/env.py,sha256=VMS4Kj-RVEeFgmLzuQ2sFRQFtG4dLRbBZ9VzVzvO7hk,34993
19
19
  pixeltable/exceptions.py,sha256=NuFY2WtkQpLfLHT_J70kOw9Tr0kEDkkgo-u7As4Gaq4,410
20
- pixeltable/exec/__init__.py,sha256=bWbIA7U7y1hC40VOSv_p9doaMuOB0i3r1O2UFNw0VEs,494
21
- pixeltable/exec/aggregation_node.py,sha256=0LdoPp_CR_UbcS60XkDw66SqlrQnw6Dy6KDWqi4PJ6k,4005
22
- pixeltable/exec/cache_prefetch_node.py,sha256=hrJA5PxLSmFRuZdZO4Nc-vy6_PSb9YO4rnJc6MSTPHE,12017
23
- pixeltable/exec/component_iteration_node.py,sha256=ABuXGbDRQWLGuaBnfK7bvOxCrz81vMMiAvXHHI8SX4c,4930
24
- pixeltable/exec/data_row_batch.py,sha256=qPN0GtBGt72Jnap-UN53VlUPOpYEvqJhp1nuTeJ_8Co,2925
20
+ pixeltable/exec/__init__.py,sha256=E_ub_ftAJVebEmKHZs47egeJqMfAbbx4SS1l7jR-Nd0,489
21
+ pixeltable/exec/aggregation_node.py,sha256=iE3UHHW0IbkHsY7kYJAg6m1UKyKUu2_tJuzgL_rQUVE,4038
22
+ pixeltable/exec/cache_prefetch_node.py,sha256=9jwCzWuAhymff6xwvBietw2S_eYno6y2n59QWbzowns,12220
23
+ pixeltable/exec/component_iteration_node.py,sha256=4DkEzekeuaKok-VjI0Y3FIMF7BdoKHNmX2tAM10hsOY,4730
24
+ pixeltable/exec/data_row_batch.py,sha256=5WhdS3ahtCP3wROw4NPJjtvaQUAWKwyN1rHKbfdT6TU,3308
25
25
  pixeltable/exec/exec_context.py,sha256=-FbfYLcGOL7mviru5dE1A7x4YxLbdKoXBHN3OSbqbcg,1084
26
- pixeltable/exec/exec_node.py,sha256=3t_Ri_FQfc-dV91YGSq17Av3vPJth5mHC-LAVc-1Whc,3222
27
- pixeltable/exec/expr_eval_node.py,sha256=8IzcxHvXCj69RKFfrt4XEol88SGAlLWMl0bjAijX7Ug,11887
28
- pixeltable/exec/in_memory_data_node.py,sha256=uK3puLZDzUSJUJwGwkTMYoPqNIvE67jtQodhE2sCz2M,3452
29
- pixeltable/exec/row_update_node.py,sha256=b8yuKtkmI2Q6U-7svKbkjdM3Z85ddZoJgJgUa17j-YE,2773
30
- pixeltable/exec/sql_node.py,sha256=TOeSI7TIUh8SG3esExj5zaWgLrjmpqMN74iJlPq16D0,19546
26
+ pixeltable/exec/exec_node.py,sha256=qDp63PFlMQUVwav0JIjuP0r0BH9EwW7s_NgqFE_Zn20,3735
27
+ pixeltable/exec/expr_eval/__init__.py,sha256=t0o2T7MxfH09TI7KlzxEjPUySejn2vkK06LC8t4FjsQ,41
28
+ pixeltable/exec/expr_eval/evaluators.py,sha256=HtcrWivzoGWzpEAYRgyKvFRGVKq4rMO-QpK7fZq4fE8,11349
29
+ pixeltable/exec/expr_eval/expr_eval_node.py,sha256=37c5eevFMAvvYmSbqzcO4Wjxouy3R5a5vSnLLjifeic,19786
30
+ pixeltable/exec/expr_eval/globals.py,sha256=UAlOAOJNHw4sJ3CXXk2Gh0qhOxEm2cGtNlkvvvebx1g,3895
31
+ pixeltable/exec/expr_eval/row_buffer.py,sha256=Wjc6ZklxSW4-sCAMEGIzESII1uuC6Urzmq6JeUO3ALA,2737
32
+ pixeltable/exec/expr_eval/schedulers.py,sha256=MqO0r5TaQhywozpRPL87S8YwZmKEc8sdEerX2LHDaCY,10962
33
+ pixeltable/exec/in_memory_data_node.py,sha256=CwuwkA2xdyApMfPfSQamlLdbb-IQn7R7zeBBJiI8I7g,3479
34
+ pixeltable/exec/row_update_node.py,sha256=MEvI3Yzw6YcUDTufSNVNVtyG83Hj6zHzEI9fvKtAgRQ,2859
35
+ pixeltable/exec/sql_node.py,sha256=vMHNHzhrlk2Ej58vMZzk7hYAeHFHlBtkLwYZsOVn3CQ,19573
31
36
  pixeltable/exprs/__init__.py,sha256=zx5OTxfUpFs_U36CAO-81v6RCX49wqRw3eHaLfytvkE,1044
32
37
  pixeltable/exprs/arithmetic_expr.py,sha256=I_OESFmUHlMSDmMy699-2JnFb7KbRjvh1GF06u8rBQ8,6322
33
38
  pixeltable/exprs/array_slice.py,sha256=eSqtQRxvweW_CwTRgkDD189i-BmTJ48dsW3znRPDebg,2180
34
39
  pixeltable/exprs/column_property_ref.py,sha256=ycHqZ7_LTFz_gag_53T5KRN6RfZckpw83DvvtxmcynM,3788
35
- pixeltable/exprs/column_ref.py,sha256=Z2YAiZ0nMv_ecbw91qTc9VN6DB2hZj-_RNkogZcu4ng,10784
40
+ pixeltable/exprs/column_ref.py,sha256=win5w5oU0isvpa6bcB9c3I-ufI50RvZ2YOnNcSq-NX0,10886
36
41
  pixeltable/exprs/comparison.py,sha256=w1FuhnGsJRoCLYX3ztIHZDywf8nZeT2tKKwRjIQa6Lc,5101
37
42
  pixeltable/exprs/compound_predicate.py,sha256=6N_zN4A_hKGLordNY0si-8KHeFWG1UtyeiTHcs69IrM,3846
38
- pixeltable/exprs/data_row.py,sha256=rLtKxlst9mK6684A5y-nsjBcalyKEcKAWcYCtNpK10w,9852
39
- pixeltable/exprs/expr.py,sha256=E1V_fU1qA4nkHLHTqGkxr8exJE6I9-b9LwNVXxGNTXo,30463
43
+ pixeltable/exprs/data_row.py,sha256=11WAmLmkhrjsKvKfPwj0dg8IkbeLwVcbFpK6eq3VUsM,10577
44
+ pixeltable/exprs/expr.py,sha256=JYjdweVm6z5Fw37_WhefGDaVN_2jQtUV9BiVwt20oYE,32203
40
45
  pixeltable/exprs/expr_dict.py,sha256=xkvo_iVPOLMq3WkBZQ2FOoXqYoebuV6XGlidPJxdOkY,1588
41
46
  pixeltable/exprs/expr_set.py,sha256=GeUQXadzJbAqQOGdsO6Z5hPAp0A03YUr2hyIvfZDYEE,2576
42
- pixeltable/exprs/function_call.py,sha256=5lMTj4G6jOarabZ0b3xpgAMJe3rgDdCSXbYwnrZEjxs,26196
47
+ pixeltable/exprs/function_call.py,sha256=DrBFDU2cKVBj7TiDsAJFuElFMClg1RO9W8klnLNz8l0,28033
43
48
  pixeltable/exprs/globals.py,sha256=5pwn5vdi-EEpYBpPty658YV45myY7W0iFIfTH7QIzak,2032
44
49
  pixeltable/exprs/in_predicate.py,sha256=VxSn9TA_3UDHTC6rqQ12No5HbZO7SuE4DglpwAoI58s,3783
45
- pixeltable/exprs/inline_expr.py,sha256=oALVAM5BVFskEQgkfgGIhKFm6V2FUlrPtocGtqtXM0w,7867
50
+ pixeltable/exprs/inline_expr.py,sha256=PRiW4kvxBmvbJD27Rr-xQzcL7f5YWmnHd3GuhwOGocw,7707
46
51
  pixeltable/exprs/is_null.py,sha256=rnusy1j33o48Z-qjguj09G7AmsBHFJI5SWQXOAjgKQw,1092
47
52
  pixeltable/exprs/json_mapper.py,sha256=yhefrgvy76czfyTER_oRXnfxOVQb42Q4Us1KkXhSsLM,4545
48
53
  pixeltable/exprs/json_path.py,sha256=UTf3VUcyEmEBJs6yU4kONGcZ8fy1o6mIe9MlntnUd6M,6811
49
- pixeltable/exprs/literal.py,sha256=TTKb0gw6qck9D61SwVDuBrLrBrGwEhkCB-m0ILFpWFk,3764
54
+ pixeltable/exprs/literal.py,sha256=Nhh-fXYMqGL4Tfm2YiFUd4ALMjzG7nJ2H4jHZe9XS1Y,4394
50
55
  pixeltable/exprs/method_ref.py,sha256=3O_uFMP6wWGiwJWri8on-47EVl-QD3AiAc7hXJMADxs,2615
51
56
  pixeltable/exprs/object_ref.py,sha256=GVg6uxZnKwFVTC0kouJq-wMFP-gUPb_ld_syHrsGMdE,1283
52
- pixeltable/exprs/row_builder.py,sha256=fJEb8XU7j8M4PIc67O35a5Pzhoh_fs-i77lYxJPrA6o,18444
57
+ pixeltable/exprs/row_builder.py,sha256=hpvmQyBie5pRtOkMKQu0xCxB18EK8iw_aUbtxYlzWcs,19862
53
58
  pixeltable/exprs/rowid_ref.py,sha256=iNBZ0wIhBAGkGCrNP9UQ2FeK8OajVX-eI4dtDA_bfHU,4401
54
- pixeltable/exprs/similarity_expr.py,sha256=VHPpTea-rkatBfDfkZbFVF5dYCswdeULP40SwltBnLI,4364
59
+ pixeltable/exprs/similarity_expr.py,sha256=GhiopGxN3wu5MOEqfWN4PNbqgSszg2VIC1_bqVPpm3Q,4333
55
60
  pixeltable/exprs/sql_element_cache.py,sha256=8i9ZslKWKTd1lUN7JvwRtQ-PFD1QMi5LBYdwcGA2-p0,1364
56
61
  pixeltable/exprs/type_cast.py,sha256=DzVVpMo3msAJm42SAGOV4P0ECyM6LEao3zdfmob4MQo,1862
57
62
  pixeltable/exprs/variable.py,sha256=3ZV3HzqULk05LKGG1p1T_xIlBfhqHIK4KJSCgoCDDSY,1488
@@ -59,31 +64,31 @@ pixeltable/ext/__init__.py,sha256=iO0J_Jfnv38F5y40sDAW54gpXjIyZgOGgoWQJAwjQec,42
59
64
  pixeltable/ext/functions/__init__.py,sha256=hIjPEKC5E5uJOXlQqUyhP9yn9ZqWOCJAlj0kXWDlhlE,159
60
65
  pixeltable/ext/functions/whisperx.py,sha256=jojjNhazcYiAh1scwUl-erhIDRr4kOTkcLrjy0xcp6g,2325
61
66
  pixeltable/ext/functions/yolox.py,sha256=k-pQTelv4Tea3AXvDB7Kc7YCIa1uexjVGqxETP0B_hc,5351
62
- pixeltable/func/__init__.py,sha256=o2UZs6nKwV_wovGQT-lrtETHj9ZOB7ygqaNmX19oXdA,438
63
- pixeltable/func/aggregate_function.py,sha256=SWqU3stHBzrZbzoNCNHBhMHqQbT9rpVTelWY6otboSg,12649
64
- pixeltable/func/callable_function.py,sha256=Dq2Az5VtP7HNYZsecdDPSfhGAm-4py9G_3rP_L9mxlA,6609
65
- pixeltable/func/expr_template_function.py,sha256=xoi7yngicX4F_-qa64a38_dvX3Bs_4BDphodTEul06o,5381
66
- pixeltable/func/function.py,sha256=e1QjaOTU0hGDjuyDaRVVOdpyGhokcsZajRTqhibtX2U,16811
67
+ pixeltable/func/__init__.py,sha256=Tmy5srLdxcWDwxwnXXj2mTNUMimdYY-MdU6fJ9SpePc,457
68
+ pixeltable/func/aggregate_function.py,sha256=eRPKCX2gdpEokyn5tKWxgbrC2UneaC0o2zIUp39Gd-w,12717
69
+ pixeltable/func/callable_function.py,sha256=KL69czs2EZ9Fv5EoDT4xaXILePhaV9owTBNBgtNU4RU,8941
70
+ pixeltable/func/expr_template_function.py,sha256=prKOIfO5rO_M3y6lSOB2zTYqZYb2nycbJ5m5FlJQ27E,5454
71
+ pixeltable/func/function.py,sha256=Ida2SOKQzryiuOqQDF5l9Q-8LmmGx1rNvzxHwuOrtsg,18853
67
72
  pixeltable/func/function_registry.py,sha256=Ps09iPDRJRKj-NQtancrI07zqFBIPpASGZ636mpBiI0,12333
68
73
  pixeltable/func/globals.py,sha256=sEwn6lGgHMp6VQORb_P5qRd_-Q2_bUSqvqM9-XPN_ec,1483
69
- pixeltable/func/query_template_function.py,sha256=PngD4THjiQz816MPjeOFIvqhJ0mb5y3YGNh4Zv1Xr4Q,3766
74
+ pixeltable/func/query_template_function.py,sha256=zaRpthtFDsN0RGsZMebXiCSukW7oBHY4oskUx_93H8Y,5316
70
75
  pixeltable/func/signature.py,sha256=wWf07OawOwDmqZOjUPgHJHAhAQ-fd61PGBx82aWLBgA,11212
71
- pixeltable/func/tools.py,sha256=CqadtWd17sib9zm7XPGDNOCG4-Ai-hGPFYTCZgjkoSY,4690
72
- pixeltable/func/udf.py,sha256=a8FqOcDqPvUICvELpPOQVsrvr0sgZBQuV4aVHXuexac,8603
73
- pixeltable/functions/__init__.py,sha256=2vdpJ3S1pUle8dBzCVM70o8Lj1c0lgccZPJgPYms_CQ,403
74
- pixeltable/functions/anthropic.py,sha256=k80_oGuVXFn0_DjccExw8QWkwi5uutlkeqZ7k77iG8M,4198
76
+ pixeltable/func/tools.py,sha256=7OAHVb9KbmcPtfMWsbKAoRu3kx-_japSTE-hgRQJefM,5988
77
+ pixeltable/func/udf.py,sha256=p7imgwk7S03q3lHZxqAZUKr63XSeSsrD8kWTbwOLQWo,8882
78
+ pixeltable/functions/__init__.py,sha256=C7Okwst3JdhzwIFWXhyJ3F0EHKGKor2R8dRMvQ3y6Us,428
79
+ pixeltable/functions/anthropic.py,sha256=rSgMWmR2YVRfrdbbAPY5OvKkbyV1DHBJIHFGdDwVnP4,8800
75
80
  pixeltable/functions/audio.py,sha256=7213nTnqKJ6vM9kalaoJ283OwX5SGEJN10vDhaRNZ6E,644
76
81
  pixeltable/functions/fireworks.py,sha256=qwFC_eIaDs-glxyJ_IVXaNGkpgPzeRsQ_SdpzueBxq0,2605
77
- pixeltable/functions/gemini.py,sha256=RQ3I25nXSXUXdF0rmhnv5XOgZXb_6SIgMc_hEyF83SI,2783
82
+ pixeltable/functions/gemini.py,sha256=0aqsDpxI0AgeWu6zXQxtFbp3nhhuwXqzulZyot6UKdg,2613
78
83
  pixeltable/functions/globals.py,sha256=Q5S84Vk_ovCADLivXkn4vfUnX8oSgW8v1dZ0aPoz7C4,4844
79
- pixeltable/functions/huggingface.py,sha256=s5KmOfi9-TOYyrL1Wv-voKP7ykkUN7LlLAA_uo01UQc,21210
84
+ pixeltable/functions/huggingface.py,sha256=fXcj6NC5Hz_nYE-0CjvSJ1sD3Jq726hQXzueqnQ6Kr4,20576
80
85
  pixeltable/functions/image.py,sha256=3Qm4ybAT_o4YUl3bzhEXy8dKOwgZ7RCUV-ky-dbL_jc,13836
81
86
  pixeltable/functions/json.py,sha256=cptFpuxQED5wSXXsH8steeHu3pCkZ_zXRE7lccjXybU,756
82
87
  pixeltable/functions/llama_cpp.py,sha256=1awALuAXVpQH64l7vQlM8gvxLDix4c1-6DV3nG5RHu4,3881
83
88
  pixeltable/functions/math.py,sha256=WPoH9zD9_GdwvBs-FSC3Sqb70gOPNouhPcBZABsuLwI,1541
84
89
  pixeltable/functions/mistralai.py,sha256=GpxtT-a8ltx1kQC8XTJRflxkh-17VhzzFTkxqIUsba8,5494
85
90
  pixeltable/functions/ollama.py,sha256=z-g0cCJ-WMf6RI3SXIVVbbOlrWNR8nxGTyzET1rratU,4320
86
- pixeltable/functions/openai.py,sha256=rro4m8k2l5UCWnBiXp63HyKkH36937raiavr9Q_nsvs,16463
91
+ pixeltable/functions/openai.py,sha256=Sh2zqwW72CYiMoyEELLpY1fwTmxuLGnAQbtEkmTac4c,24030
87
92
  pixeltable/functions/replicate.py,sha256=j8ZedScOMInmHWmriQSUOviw6tp8gQr-W6n21PNNL2g,2188
88
93
  pixeltable/functions/string.py,sha256=VqzhVildxTt_XblW89Kl5Zd6MVOU71eaX2LTMY5jkUg,20366
89
94
  pixeltable/functions/timestamp.py,sha256=KOm5eVF51PqOCTqwq8cKCAEJNWMgu2xN_yTtGf7yixU,9095
@@ -92,17 +97,17 @@ pixeltable/functions/util.py,sha256=GgKTzCjvzUQNjWtSObTkfxkvJ9GVUOzKimY45WhE25M,
92
97
  pixeltable/functions/video.py,sha256=12jnOdU0G-Hk42rJx-S5QC77-bDkUflkxfkjej8n5pM,6702
93
98
  pixeltable/functions/vision.py,sha256=MEgkNp-4tUUeQS05VEJBrMgQFM48aNsNlksfAl9rH7w,15494
94
99
  pixeltable/functions/whisper.py,sha256=f2wqRd0n9jSBqRZN3W93UaetiAHtbsK0j9jXR2j2kkQ,2913
95
- pixeltable/globals.py,sha256=WD4K7V2t6KDUs4VMU-SJWSpIbWeybSnOfQioYRsZGNU,33688
100
+ pixeltable/globals.py,sha256=9UfD7FOn71dbzPZjV-LxzhxXBhwPcpLt46J0_RVPynk,33899
96
101
  pixeltable/index/__init__.py,sha256=XBwetNQQwnz0fiKwonOKhyy_U32l_cjt77kNvEIdjWs,102
97
102
  pixeltable/index/base.py,sha256=zo0YvJI3oXiK6hZJztB36ZftKKhLfO75Zq3t-PeQA6M,1556
98
103
  pixeltable/index/btree.py,sha256=JFerLyyLoBaD0FSF_jJ6iJFBVa-z_et--KdNR02xjRg,2264
99
- pixeltable/index/embedding_index.py,sha256=oXslQMTC0rPdmKpRD6Bq6zSdtFv_1XL9-HidgirTB0c,8794
104
+ pixeltable/index/embedding_index.py,sha256=xXqUlDGss-a-nA1TFhixF_NY7HOmE3YZGpT-4PG3O74,11177
100
105
  pixeltable/io/__init__.py,sha256=j3qDyGO1ejLce-UzIncK3eRqyOCLoOlDqClecMBSJGc,563
101
106
  pixeltable/io/external_store.py,sha256=H1jt7MDn464QRgBvU-PmcPcFlo3EZBCG7fKWEZXOfyc,16676
102
107
  pixeltable/io/fiftyone.py,sha256=hH-FahW6BuMQY8lGa2atnNnJto_pK8kWrP_y_EMsq6g,6965
103
108
  pixeltable/io/globals.py,sha256=9S9wnlIAuhZq7eC_GklTM_UX0UATK9fEagk8-SRCeXQ,17794
104
109
  pixeltable/io/hf_datasets.py,sha256=o5fqm2CJAjhFd3z-NYGxN0jM1tfrp4szuUX0TGnyNRY,8316
105
- pixeltable/io/label_studio.py,sha256=7KTro1H-AlVbwWuoYwU-mxH3zejZWTpQbz56uX-Wnjs,31078
110
+ pixeltable/io/label_studio.py,sha256=Yx2ES_Y32eZA8JvJ1k17tSU0GiRTcU0_R116c7RCbZo,31091
106
111
  pixeltable/io/pandas.py,sha256=7eHg7wnAfRA9eBk4iC0iSSVTKOM59Ne4pXokKWdt3dY,9793
107
112
  pixeltable/io/parquet.py,sha256=bvwTRIKhS99M3bAcAP63jnh5-R6Qww1SrYBGWjZvN1g,8800
108
113
  pixeltable/iterators/__init__.py,sha256=qA9cJTwPO3gk-7y8mUXw2anWSbnUAVGwzl52SxiUjNU,398
@@ -111,7 +116,7 @@ pixeltable/iterators/document.py,sha256=e5EMUAW4f5SqfC5mRN7Oo2E3gw_vcMSzq2707NVL
111
116
  pixeltable/iterators/image.py,sha256=7eJupbyLEl_q4bemEozL8WgTgkxjl-DYnSXyHTQ7Rck,3628
112
117
  pixeltable/iterators/string.py,sha256=NG_fWc_GAITDfzl6MvrDOMrSoMcZdMZf6hPQztCSatE,1305
113
118
  pixeltable/iterators/video.py,sha256=anedQpSOnjYhHLa8UiEx-6ROagb14rpXh9am8oTriUg,9382
114
- pixeltable/metadata/__init__.py,sha256=dE1y6A_ZjvM8bE6q40HDh_BV5plISXG4dPKfaytozcQ,2209
119
+ pixeltable/metadata/__init__.py,sha256=S99VPq09bEYI7nF6HQ55Fyp9bJ0TUhk9L9gsOQi5XT4,2209
115
120
  pixeltable/metadata/converters/convert_10.py,sha256=J1_r7LNNAWTdb042AwqFpJ4sEB-i4qhUdk5iOjcZk34,719
116
121
  pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
117
122
  pixeltable/metadata/converters/convert_13.py,sha256=yFR6lD3pOrZ46ZQBFKYvxiIYa7rRxh46Bsq7yiCBNak,1356
@@ -125,16 +130,17 @@ pixeltable/metadata/converters/convert_20.py,sha256=NLMeke9QUGqIJUe5MNqKmVdaLs6p
125
130
  pixeltable/metadata/converters/convert_21.py,sha256=YTztkbqOC2zQcTWrXfhrP8diUbfxy5DHwsu_IT-bBok,1115
126
131
  pixeltable/metadata/converters/convert_22.py,sha256=f_oauWGEiefr9tZOtGBJMcqqIsTmJwhLNr6DqKlZZkg,590
127
132
  pixeltable/metadata/converters/convert_23.py,sha256=ih_3st9Y6A4ZbI8G5HTaUE9xDhiClN-QaT1k1iATIb4,1235
128
- pixeltable/metadata/converters/convert_24.py,sha256=AUK-lNKwCMhIe3jBRNiw1exMOcqCVMr8ZtIM5IYsrVI,1833
133
+ pixeltable/metadata/converters/convert_24.py,sha256=cBzfCqbPgYrWDO0DmJ019VVkbe2CZXTS4xF6q4LZYKM,2401
134
+ pixeltable/metadata/converters/convert_25.py,sha256=3sCXMbHiLJWMvbghj-XaeW4_1xSECivlbsdGtGSmntE,620
129
135
  pixeltable/metadata/converters/util.py,sha256=NgzoKralRIXwOqtguifVsBbpEN2M2X1v8lvOnsdGnPs,6100
130
- pixeltable/metadata/notes.py,sha256=13qwbuY-3gA3kO-YyBPAFNqpJ04KInIVTVyMcCIJ3Mk,728
136
+ pixeltable/metadata/notes.py,sha256=RsyIuwl3KhFRstB6cLX8ySWfIx67LAyr05HYXovu7Yc,779
131
137
  pixeltable/metadata/schema.py,sha256=H9t51cbhXOhNu9Xog2VTjZlkTCx4cjQAlwOXi3HSd2E,9448
132
- pixeltable/plan.py,sha256=dzG3iD9ClggFyIYmDuIK7H3eBC8HV3ft__f4ZULQvow,40687
138
+ pixeltable/plan.py,sha256=DgzP5kDmBooaUioZ0KBlSUcx_jpqy456CnbDRVzFBJM,41501
133
139
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- pixeltable/store.py,sha256=m-OeilqOFai5wUXvtXTV9txzn-GhK2lfA7fkvzrfWFg,21974
135
- pixeltable/type_system.py,sha256=AfDZqgcMd5i1p_rlQ79-1aDpfbS6yRQCk6_feRUhJro,48399
140
+ pixeltable/store.py,sha256=-A7oRGHDpvhUZzx68QSde0t2NvUjeM1rOw9KdwukQ9s,22497
141
+ pixeltable/type_system.py,sha256=nR004iZjvA5BIBSXsBXaHbpUPbddtiUCUzB0To1Bakw,48115
136
142
  pixeltable/utils/__init__.py,sha256=UYlrf6TIWJT0g-Hac0b34-dEk478B5Qx8dGco34YlIk,439
137
- pixeltable/utils/arrow.py,sha256=4AyCAkkNfNChVTaPAVS5j1ZO7BtTxn11duonolfktV8,3931
143
+ pixeltable/utils/arrow.py,sha256=iuZhueel1FT_3UDAMITFXxodLB7w8TrUpsMpie3IDXg,3991
138
144
  pixeltable/utils/coco.py,sha256=WCUyoj0dTyJFbPB7frEQUvY92SlEPxQ068r-3QAwROE,7285
139
145
  pixeltable/utils/code.py,sha256=AOw1u2r8_DQXpX-lxJhyHWARGrCRDXOJHFVgKOi54Uc,1231
140
146
  pixeltable/utils/description_helper.py,sha256=P-8EE2pRFP8s3coe73frgV68yt4Dp3saErCUehMxKUw,3759
@@ -147,8 +153,8 @@ pixeltable/utils/pytorch.py,sha256=6RvOCjy_QV4gc-aht-3d0zoASkuv-warfpl87vgmuKw,3
147
153
  pixeltable/utils/s3.py,sha256=huA5hxDGkPIu18zWet76o0FsO7Vbtp-iPmnOzCe-MvA,586
148
154
  pixeltable/utils/sql.py,sha256=j_tj0h4ffm-DhUIJbvGphxrVyBKlNTwDKqWGhRQ5_PY,795
149
155
  pixeltable/utils/transactional_directory.py,sha256=UGzCrGtLR3hEEf8sYGuWBzLVFAEQml3vdIavigWeTBM,1349
150
- pixeltable-0.2.30.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
151
- pixeltable-0.2.30.dist-info/METADATA,sha256=tJOG6uUsIWjIrRstj2WjUSwrosTfF_2V67n4WmJ5tBE,19546
152
- pixeltable-0.2.30.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
153
- pixeltable-0.2.30.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
154
- pixeltable-0.2.30.dist-info/RECORD,,
156
+ pixeltable-0.3.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
157
+ pixeltable-0.3.1.dist-info/METADATA,sha256=tRC6nn3plpwtLqC5TZsNDfDRB9SCj2NyNJIvzK6kWMA,19370
158
+ pixeltable-0.3.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
159
+ pixeltable-0.3.1.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
160
+ pixeltable-0.3.1.dist-info/RECORD,,