pixeltable 0.4.6__py3-none-any.whl → 0.4.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pixeltable might be problematic. Click here for more details.

Files changed (53) hide show
  1. pixeltable/__init__.py +4 -2
  2. pixeltable/catalog/__init__.py +1 -1
  3. pixeltable/catalog/catalog.py +3 -3
  4. pixeltable/catalog/column.py +49 -0
  5. pixeltable/catalog/insertable_table.py +0 -7
  6. pixeltable/catalog/schema_object.py +1 -14
  7. pixeltable/catalog/table.py +139 -53
  8. pixeltable/catalog/table_version.py +30 -138
  9. pixeltable/catalog/view.py +2 -1
  10. pixeltable/dataframe.py +2 -3
  11. pixeltable/env.py +43 -5
  12. pixeltable/exec/expr_eval/expr_eval_node.py +2 -2
  13. pixeltable/exec/expr_eval/schedulers.py +36 -15
  14. pixeltable/exprs/array_slice.py +2 -2
  15. pixeltable/exprs/data_row.py +13 -0
  16. pixeltable/exprs/expr.py +9 -9
  17. pixeltable/exprs/function_call.py +2 -2
  18. pixeltable/exprs/globals.py +1 -2
  19. pixeltable/exprs/json_path.py +3 -3
  20. pixeltable/exprs/row_builder.py +14 -16
  21. pixeltable/exprs/string_op.py +3 -3
  22. pixeltable/func/query_template_function.py +2 -2
  23. pixeltable/func/signature.py +30 -3
  24. pixeltable/func/tools.py +2 -2
  25. pixeltable/functions/anthropic.py +75 -25
  26. pixeltable/functions/globals.py +2 -2
  27. pixeltable/functions/llama_cpp.py +9 -1
  28. pixeltable/functions/openai.py +74 -54
  29. pixeltable/functions/video.py +54 -1
  30. pixeltable/functions/vision.py +2 -2
  31. pixeltable/globals.py +74 -12
  32. pixeltable/io/datarows.py +3 -3
  33. pixeltable/io/fiftyone.py +4 -4
  34. pixeltable/io/globals.py +3 -3
  35. pixeltable/io/hf_datasets.py +4 -4
  36. pixeltable/io/pandas.py +6 -6
  37. pixeltable/io/parquet.py +3 -3
  38. pixeltable/io/table_data_conduit.py +2 -2
  39. pixeltable/io/utils.py +2 -2
  40. pixeltable/iterators/document.py +2 -2
  41. pixeltable/iterators/video.py +49 -9
  42. pixeltable/share/packager.py +45 -36
  43. pixeltable/store.py +5 -25
  44. pixeltable/type_system.py +5 -8
  45. pixeltable/utils/__init__.py +2 -2
  46. pixeltable/utils/arrow.py +5 -5
  47. pixeltable/utils/description_helper.py +3 -3
  48. pixeltable/utils/iceberg.py +1 -2
  49. {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/METADATA +70 -19
  50. {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/RECORD +53 -53
  51. {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/WHEEL +0 -0
  52. {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/entry_points.txt +0 -0
  53. {pixeltable-0.4.6.dist-info → pixeltable-0.4.7.dist-info}/licenses/LICENSE +0 -0
pixeltable/store.py CHANGED
@@ -4,7 +4,7 @@ import abc
4
4
  import logging
5
5
  import sys
6
6
  import warnings
7
- from typing import Any, Iterable, Iterator, Optional, Union
7
+ from typing import Any, Iterable, Iterator, Optional
8
8
 
9
9
  import more_itertools
10
10
  import psycopg
@@ -17,7 +17,6 @@ from pixeltable.env import Env
17
17
  from pixeltable.exec import ExecNode
18
18
  from pixeltable.metadata import schema
19
19
  from pixeltable.utils.exception_handler import run_cleanup
20
- from pixeltable.utils.media_store import MediaStore
21
20
  from pixeltable.utils.sql import log_explain, log_stmt
22
21
 
23
22
  _logger = logging.getLogger('pixeltable')
@@ -123,21 +122,6 @@ class StoreBase:
123
122
  def _storage_name(self) -> str:
124
123
  """Return the name of the data store table"""
125
124
 
126
- def _move_tmp_media_file(self, file_url: Optional[str], col: catalog.Column) -> str:
127
- src_path = MediaStore.resolve_tmp_url(file_url)
128
- if src_path is None:
129
- return file_url
130
- assert col.tbl.id == self.tbl_version.id # Ensure the column belongs to the same table as this store
131
- new_file_url = MediaStore.relocate_local_media_file(src_path, col)
132
- return new_file_url
133
-
134
- def _move_tmp_media_files(
135
- self, table_row: list[Any], media_cols_by_sql_idx: dict[int, catalog.Column], v_min: int
136
- ) -> None:
137
- """Move tmp media files that we generated to a permanent location"""
138
- for n, col in media_cols_by_sql_idx.items():
139
- table_row[n] = self._move_tmp_media_file(table_row[n], col)
140
-
141
125
  def count(self) -> int:
142
126
  """Return the number of rows visible in self.tbl_version"""
143
127
  stmt = (
@@ -235,7 +219,6 @@ class StoreBase:
235
219
  # create temp table to store output of exec_plan, with the same primary key as the store table
236
220
  tmp_name = f'temp_{self._storage_name()}'
237
221
  tmp_pk_cols = tuple(sql.Column(col.name, col.type, primary_key=True) for col in self.pk_columns())
238
- tmp_val_col_sql_idx = len(tmp_pk_cols)
239
222
  tmp_val_col = sql.Column(col.sa_col.name, col.sa_col.type)
240
223
  tmp_cols = [*tmp_pk_cols, tmp_val_col]
241
224
  # add error columns if the store column records errors
@@ -262,9 +245,7 @@ class StoreBase:
262
245
  if abort_on_exc and row.has_exc():
263
246
  exc = row.get_first_exc()
264
247
  raise excs.Error(f'Error while evaluating computed column {col.name!r}:\n{exc}') from exc
265
- table_row, num_row_exc = row_builder.create_table_row(row, None, row.pk)
266
- if col.col_type.is_media_type():
267
- table_row[tmp_val_col_sql_idx] = self._move_tmp_media_file(table_row[tmp_val_col_sql_idx], col)
248
+ table_row, num_row_exc = row_builder.create_store_table_row(row, None, row.pk)
268
249
  num_excs += num_row_exc
269
250
  batch_table_rows.append(tuple(table_row))
270
251
 
@@ -317,7 +298,7 @@ class StoreBase:
317
298
  progress_bar: Optional[tqdm] = None # create this only after we started executing
318
299
  row_builder = exec_plan.row_builder
319
300
 
320
- store_col_names, media_cols_by_idx = row_builder.store_column_names()
301
+ store_col_names = row_builder.store_column_names()
321
302
 
322
303
  try:
323
304
  table_rows: list[tuple[Any]] = []
@@ -337,7 +318,7 @@ class StoreBase:
337
318
  rowid = (next(rowids),) if rowids is not None else row.pk[:-1]
338
319
  pk = (*rowid, v_min)
339
320
  assert len(pk) == len(self._pk_cols)
340
- table_row, num_row_exc = row_builder.create_table_row(row, cols_with_excs, pk)
321
+ table_row, num_row_exc = row_builder.create_store_table_row(row, cols_with_excs, pk)
341
322
  num_excs += num_row_exc
342
323
 
343
324
  if show_progress:
@@ -351,7 +332,6 @@ class StoreBase:
351
332
  )
352
333
  progress_bar.update(1)
353
334
 
354
- self._move_tmp_media_files(table_row, media_cols_by_idx, v_min)
355
335
  batch_table_rows.append(tuple(table_row))
356
336
 
357
337
  table_rows.extend(batch_table_rows)
@@ -427,7 +407,7 @@ class StoreBase:
427
407
  base_versions_clause = (
428
408
  sql.true() if len(base_versions) == 0 else self.base._versions_clause(base_versions, match_on_vmin)
429
409
  )
430
- set_clause: dict[sql.Column, Union[int, sql.Column]] = {self.v_max_col: current_version}
410
+ set_clause: dict[sql.Column, int | sql.Column] = {self.v_max_col: current_version}
431
411
  for index_info in self.tbl_version.get().idxs_by_name.values():
432
412
  # copy value column to undo column
433
413
  set_clause[index_info.undo_col.sa_col] = index_info.val_col.sa_col
pixeltable/type_system.py CHANGED
@@ -292,7 +292,7 @@ class ColumnType:
292
292
 
293
293
  @classmethod
294
294
  def from_python_type(
295
- cls, t: Union[type, _GenericAlias], nullable_default: bool = False, allow_builtin_types: bool = True
295
+ cls, t: type | _GenericAlias, nullable_default: bool = False, allow_builtin_types: bool = True
296
296
  ) -> Optional[ColumnType]:
297
297
  """
298
298
  Convert a Python type into a Pixeltable `ColumnType` instance.
@@ -311,7 +311,7 @@ class ColumnType:
311
311
  if origin in (typing.Union, types.UnionType):
312
312
  # Check if `t` has the form Optional[T].
313
313
  if len(type_args) == 2 and type(None) in type_args:
314
- # `t` is a type of the form Optional[T] (equivalently, Union[T, None] or Union[None, T]).
314
+ # `t` is a type of the form Optional[T] (equivalently, T | None or None | T).
315
315
  # We treat it as the underlying type but with nullable=True.
316
316
  underlying_py_type = type_args[0] if type_args[1] is type(None) else type_args[1]
317
317
  underlying = cls.from_python_type(underlying_py_type, allow_builtin_types=allow_builtin_types)
@@ -361,10 +361,7 @@ class ColumnType:
361
361
 
362
362
  @classmethod
363
363
  def normalize_type(
364
- cls,
365
- t: Union[ColumnType, type, _AnnotatedAlias],
366
- nullable_default: bool = False,
367
- allow_builtin_types: bool = True,
364
+ cls, t: ColumnType | type | _AnnotatedAlias, nullable_default: bool = False, allow_builtin_types: bool = True
368
365
  ) -> ColumnType:
369
366
  """
370
367
  Convert any type recognizable by Pixeltable to its corresponding ColumnType.
@@ -389,7 +386,7 @@ class ColumnType:
389
386
  ]
390
387
 
391
388
  @classmethod
392
- def __raise_exc_for_invalid_type(cls, t: Union[type, _AnnotatedAlias]) -> None:
389
+ def __raise_exc_for_invalid_type(cls, t: type | _AnnotatedAlias) -> None:
393
390
  for builtin_type, suggestion in cls.__TYPE_SUGGESTIONS:
394
391
  if t is builtin_type or (isinstance(t, type) and issubclass(t, builtin_type)):
395
392
  name = t.__name__ if t.__module__ == 'builtins' else f'{t.__module__}.{t.__name__}'
@@ -405,7 +402,7 @@ class ColumnType:
405
402
  return cls.from_python_type(py_type) if py_type is not None else None
406
403
 
407
404
  @classmethod
408
- def __json_schema_to_py_type(cls, schema: dict[str, Any]) -> Union[type, _GenericAlias, None]:
405
+ def __json_schema_to_py_type(cls, schema: dict[str, Any]) -> type | _GenericAlias | None:
409
406
  if 'type' in schema:
410
407
  if schema['type'] == 'null':
411
408
  return type(None)
@@ -2,7 +2,7 @@ import hashlib
2
2
  import urllib.parse
3
3
  import urllib.request
4
4
  from pathlib import Path
5
- from typing import Optional, Union
5
+ from typing import Optional
6
6
 
7
7
 
8
8
  def print_perf_counter_delta(delta: float) -> str:
@@ -24,7 +24,7 @@ def print_perf_counter_delta(delta: float) -> str:
24
24
  return f'{delta:.2f} s'
25
25
 
26
26
 
27
- def sha256sum(path: Union[Path, str]) -> str:
27
+ def sha256sum(path: Path | str) -> str:
28
28
  """
29
29
  Compute the SHA256 hash of a file.
30
30
  """
pixeltable/utils/arrow.py CHANGED
@@ -1,5 +1,5 @@
1
1
  import datetime
2
- from typing import Any, Iterator, Optional, Union
2
+ from typing import Any, Iterator, Optional
3
3
 
4
4
  import numpy as np
5
5
  import pyarrow as pa
@@ -88,11 +88,11 @@ def to_arrow_schema(pixeltable_schema: dict[str, Any]) -> pa.Schema:
88
88
  return pa.schema((name, to_arrow_type(typ)) for name, typ in pixeltable_schema.items()) # type: ignore[misc]
89
89
 
90
90
 
91
- def to_pydict(batch: Union[pa.Table, pa.RecordBatch]) -> dict[str, Union[list, np.ndarray]]:
91
+ def to_pydict(batch: pa.Table | pa.RecordBatch) -> dict[str, list | np.ndarray]:
92
92
  """Convert a RecordBatch to a dictionary of lists, unlike pa.lib.RecordBatch.to_pydict,
93
93
  this function will not convert numpy arrays to lists, and will preserve the original numpy dtype.
94
94
  """
95
- out: dict[str, Union[list, np.ndarray]] = {}
95
+ out: dict[str, list | np.ndarray] = {}
96
96
  for k, name in enumerate(batch.schema.names):
97
97
  col = batch.column(k)
98
98
  if isinstance(col.type, pa.FixedShapeTensorType):
@@ -105,7 +105,7 @@ def to_pydict(batch: Union[pa.Table, pa.RecordBatch]) -> dict[str, Union[list, n
105
105
  return out
106
106
 
107
107
 
108
- def iter_tuples(batch: Union[pa.Table, pa.RecordBatch]) -> Iterator[dict[str, Any]]:
108
+ def iter_tuples(batch: pa.Table | pa.RecordBatch) -> Iterator[dict[str, Any]]:
109
109
  """Convert a RecordBatch to an iterator of dictionaries. also works with pa.Table and pa.RowGroup"""
110
110
  pydict = to_pydict(batch)
111
111
  assert len(pydict) > 0, 'empty record batch'
@@ -145,7 +145,7 @@ def _ar_val_to_pxt_val(val: Any, pxt_type: ts.ColumnType) -> Any:
145
145
 
146
146
 
147
147
  def iter_tuples2(
148
- batch: Union[pa.Table, pa.RecordBatch], col_mapping: Optional[dict[str, str]], schema: dict[str, ts.ColumnType]
148
+ batch: pa.Table | pa.RecordBatch, col_mapping: Optional[dict[str, str]], schema: dict[str, ts.ColumnType]
149
149
  ) -> Iterator[dict[str, Any]]:
150
150
  """Convert a RecordBatch to an iterator of dictionaries. also works with pa.Table and pa.RowGroup"""
151
151
  pydict = to_pydict(batch)
@@ -1,5 +1,5 @@
1
1
  import dataclasses
2
- from typing import Optional, Union
2
+ from typing import Optional
3
3
 
4
4
  import pandas as pd
5
5
  from pandas.io.formats.style import Styler
@@ -7,7 +7,7 @@ from pandas.io.formats.style import Styler
7
7
 
8
8
  @dataclasses.dataclass
9
9
  class _Descriptor:
10
- body: Union[str, pd.DataFrame]
10
+ body: str | pd.DataFrame
11
11
  # The remaining fields only affect the behavior if `body` is a pd.DataFrame.
12
12
  show_index: bool
13
13
  show_header: bool
@@ -33,7 +33,7 @@ class DescriptionHelper:
33
33
 
34
34
  def append(
35
35
  self,
36
- descriptor: Union[str, pd.DataFrame],
36
+ descriptor: str | pd.DataFrame,
37
37
  show_index: bool = False,
38
38
  show_header: bool = True,
39
39
  styler: Optional[Styler] = None,
@@ -1,10 +1,9 @@
1
1
  from pathlib import Path
2
- from typing import Union
3
2
 
4
3
  from pyiceberg.catalog.sql import SqlCatalog
5
4
 
6
5
 
7
- def sqlite_catalog(warehouse_path: Union[str, Path], name: str = 'pixeltable') -> SqlCatalog:
6
+ def sqlite_catalog(warehouse_path: str | Path, name: str = 'pixeltable') -> SqlCatalog:
8
7
  """
9
8
  Instantiate a sqlite Iceberg catalog at the specified path. If no catalog exists, one will be created.
10
9
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixeltable
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
5
  Project-URL: homepage, https://pixeltable.com/
6
6
  Project-URL: repository, https://github.com/pixeltable/pixeltable
@@ -62,6 +62,8 @@ Description-Content-Type: text/markdown
62
62
 
63
63
  <h2>Declarative Data Infrastructure for Multimodal AI Apps</h2>
64
64
 
65
+ Pixeltable is the only Python library providing incremental storage, transformation, indexing, and orchestration of multimodal data.
66
+
65
67
  [![License](https://img.shields.io/badge/License-Apache%202.0-0530AD.svg)](https://opensource.org/licenses/Apache-2.0)
66
68
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pixeltable?logo=python&logoColor=white&)
67
69
  ![Platform Support](https://img.shields.io/badge/platform-Linux%20%7C%20macOS%20%7C%20Windows-E5DDD4)
@@ -82,31 +84,68 @@ Description-Content-Type: text/markdown
82
84
 
83
85
  ---
84
86
 
85
- Pixeltable is the only Python framework that provides incremental storage, transformation, indexing, and orchestration of your multimodal data.
87
+ ## 💾 Installation
86
88
 
87
- ## 😩 Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
89
+ ```python
90
+ pip install pixeltable
91
+ ```
88
92
 
89
- Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/docs/datastore/bringing-data) ones, requires stitching together numerous tools:
90
- * ETL pipelines for data loading and transformation.
91
- * Vector databases for semantic search.
92
- * Feature stores for ML models.
93
- * Orchestrators for scheduling.
94
- * Model serving infrastructure for inference.
95
- * Separate systems for parallelization, caching, versioning, and lineage tracking.
93
+ **Pixeltable unifies multimodal data storage, retrieval and orchestration.** It stores metadata and computed results persistently, typically in a `.pixeltable` directory in your workspace. See [configuration](https://docs.pixeltable.com/docs/overview/configuration) options for your setup. All media (videos, images, audio) resides in ext. files, and Pixeltable stores references to those. Files can be local/remote (e.g. S3). For the latter, Pixeltable caches the [files locally on access](https://github.com/pixeltable/pixeltable/blob/main/docs/notebooks/feature-guides/working-with-external-files.ipynb).
96
94
 
97
- This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
95
+ https://github.com/user-attachments/assets/b50fd6df-5169-4881-9dbe-1b6e5d06cede
98
96
 
99
- ## 💾 Installation
97
+ ## Quick Start
98
+
99
+ With Pixeltable, you define your *entire* data processing and AI workflow declaratively using **[computed columns](https://docs.pixeltable.com/docs/datastore/computed-columns)** on **[tables](https://docs.pixeltable.com/docs/datastore/tables-and-operations)**.
100
100
 
101
101
  ```python
102
- pip install pixeltable
103
- ```
104
102
 
105
- **Pixeltable is a database.** It stores metadata and computed results persistently, typically in a `.pixeltable` directory in your workspace. See [configuration](https://docs.pixeltable.com/docs/overview/configuration) options for your setup.
103
+ # Installation
104
+ pip install -qU torch transformers openai pixeltable
106
105
 
107
- ## What is Pixeltable?
106
+ # Basic setup
107
+ import pixeltable as pxt
108
+
109
+ # Table with multimodal column types (Image, Video, Audio, Document)
110
+ t = pxt.create_table('images', {'input_image': pxt.Image})
111
+
112
+ # Computed columns: define transformation logic once, runs on all data
113
+ from pixeltable.functions import huggingface
108
114
 
109
- With Pixeltable, you define your *entire* data processing and AI workflow declaratively using **[computed columns](https://docs.pixeltable.com/docs/datastore/computed-columns)** on **[tables](https://docs.pixeltable.com/docs/datastore/tables-and-operations)**. Pixeltable's engine then automatically handles:
115
+ # Object detection with automatic model management
116
+ t.add_computed_column(
117
+ detections=huggingface.detr_for_object_detection(
118
+ t.input_image,
119
+ model_id='facebook/detr-resnet-50'
120
+ )
121
+ )
122
+
123
+ # Extract specific fields from detection results
124
+ t.add_computed_column(detections_text=t.detections.label_text)
125
+
126
+ # OpenAI Vision API integration with built-in rate limiting and async managemennt
127
+ from pixeltable.functions import openai
128
+
129
+ t.add_computed_column(
130
+ vision=openai.vision(
131
+ prompt="Describe what's in this image.",
132
+ image=t.input_image,
133
+ model='gpt-4o-mini'
134
+ )
135
+ )
136
+
137
+ # Insert data - automatically triggers computation of all computed columns
138
+ t.insert(input_image='https://raw.github.com/pixeltable/pixeltable/release/docs/resources/images/000000000025.jpg')
139
+
140
+ # Query - All data, metadata, and computed results are persistently stored
141
+ results = t.select(
142
+ t.input_image,
143
+ t.detections_text,
144
+ t.vision
145
+ ).collect()
146
+ ```
147
+
148
+ ## ✨ What Happened?
110
149
 
111
150
  * **Data Ingestion & Storage:** References [files](https://docs.pixeltable.com/docs/datastore/bringing-data) (images, videos, audio, docs) in place, handles structured data.
112
151
  * **Transformation & Processing:** Applies *any* Python function ([UDFs](https://docs.pixeltable.com/docs/datastore/custom-functions)) or built-in operations ([chunking, frame extraction](https://docs.pixeltable.com/docs/datastore/iterators)) automatically.
@@ -118,7 +157,7 @@ With Pixeltable, you define your *entire* data processing and AI workflow declar
118
157
  **Focus on your application logic, not the infrastructure.**
119
158
 
120
159
 
121
- ## 🚀 Key Features
160
+ ## ⚖️ Key Principles
122
161
 
123
162
  * **[Unified Multimodal Interface:](https://docs.pixeltable.com/docs/datastore/tables-and-operations)** `pxt.Image`, `pxt.Video`, `pxt.Audio`, `pxt.Document`, etc. – manage diverse data consistently.
124
163
  ```python
@@ -416,12 +455,24 @@ Explore Pixeltable's capabilities interactively:
416
455
  | Object Detection | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/object-detection-in-videos.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a> | Image/Text Search | <a target="_blank" href="https://github.com/pixeltable/pixeltable/tree/main/docs/sample-apps/text-and-image-similarity-search-nextjs-fastapi"> <img src="https://img.shields.io/badge/🖥️%20App-black.svg" alt="GitHub App"/> |
417
456
  | Audio Transcription | <a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/release/docs/notebooks/use-cases/audio-transcriptions.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> | Discord Bot | <a target="_blank" href="https://github.com/pixeltable/pixeltable/blob/main/docs/sample-apps/context-aware-discord-bot"> <img src="https://img.shields.io/badge/%F0%9F%92%AC%20Bot-%235865F2.svg" alt="GitHub App"/></a> |
418
457
 
458
+ ## 🚨 Maintaining Production-Ready Multimodal AI Apps is Still Too Hard
459
+
460
+ Building robust AI applications, especially [multimodal](https://docs.pixeltable.com/docs/datastore/bringing-data) ones, requires stitching together numerous tools:
461
+ * ETL pipelines for data loading and transformation.
462
+ * Vector databases for semantic search.
463
+ * Feature stores for ML models.
464
+ * Orchestrators for scheduling.
465
+ * Model serving infrastructure for inference.
466
+ * Separate systems for parallelization, caching, versioning, and lineage tracking.
467
+
468
+ This complex "data plumbing" slows down development, increases costs, and makes applications brittle and hard to reproduce.
469
+
419
470
  ## 🔮 Roadmap (2025)
420
471
 
421
472
  ### Cloud Infrastructure and Deployment
422
473
  We're working on a hosted Pixeltable service that will:
423
474
 
424
- - Enable Multimodal Data Sharing of Pixeltable Tables and Views
475
+ - Enable Multimodal Data Sharing of Pixeltable Tables and Views | [Waitlist](https://www.pixeltable.com/waitlist)
425
476
  - Provide a persistent cloud instance
426
477
  - Turn Pixeltable workflows (Tables, Queries, UDFs) into API endpoints/[MCP Servers](https://github.com/pixeltable/pixeltable-mcp-server)
427
478
 
@@ -1,30 +1,30 @@
1
- pixeltable/__init__.py,sha256=-bu8Al-s2PyGpPYZgj016gMl9s6NMQfjxVRwvhfd8IY,1457
1
+ pixeltable/__init__.py,sha256=fAeDmkHIxf7jbpIAWhygnBy5iqTeH2blX9L1yNqLFFY,1567
2
2
  pixeltable/__version__.py,sha256=LnMIuAxx6nAQDMev_jnZyUdgsaiE3F8lulfXQBRl9qQ,112
3
3
  pixeltable/config.py,sha256=NbiB6qoE8ujjEHpRbzlNDUMTi6EFvJ0sGHGxdwkWkgc,7472
4
- pixeltable/dataframe.py,sha256=CtgHlozd6coPGcnMd1XF_Gsh0q0hy3A7co2SZJosFA0,63072
5
- pixeltable/env.py,sha256=zd2E7ZKuAdIZjAoDfdVesfwTSCOUdF9lq0-Y_l3bLmc,38290
4
+ pixeltable/dataframe.py,sha256=afWRvVjlWzwqUkrBAgTROIZSyDhdSkfI-WspEl2cOUg,63046
5
+ pixeltable/env.py,sha256=ENOkan4XcDWQKrnLfWlam-ReWItYkLatT6IIX_Q1CfM,39919
6
6
  pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
7
- pixeltable/globals.py,sha256=MYoqSgpDJxnaDfxlZfoq2sBBB-uld8xjzN0BymM-Rh8,36472
7
+ pixeltable/globals.py,sha256=GpufZW_pm4dxg6kXqVbE__jEupYTvphFzcoPwujgndk,38543
8
8
  pixeltable/plan.py,sha256=PXqq7aLQ5wRC-4RkRlAF6KEZFArA6g5RVLYamxNu6FY,48984
9
9
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- pixeltable/store.py,sha256=bZLazxAdLhR566VR9Dl6lk5ZZkZRZgW6s6_QE2HeEHQ,24023
11
- pixeltable/type_system.py,sha256=SaTgmoUugcx1PuanD21X_R52yfQFHWfHIZZgNvUorN0,55353
12
- pixeltable/catalog/__init__.py,sha256=oiiga_fe4iQsBh8lfLjLBTbvzaZfD4QM7hmMZDpAGGU,636
13
- pixeltable/catalog/catalog.py,sha256=k5F-v0NIImRHAM8zT0v2X6Ri56fjdJfnfHcnXYz39i0,93883
14
- pixeltable/catalog/column.py,sha256=HZfujfvdkJeyOWfgmVutJLWOy19R8ZFczaEjYTZ5NQo,11495
10
+ pixeltable/store.py,sha256=CneWUmgN-EwaPYLcizlAxONC7WYwMr8SNpSFeNBBmOA,22885
11
+ pixeltable/type_system.py,sha256=CvePMwTSr8ygc0wnYa-etgoXQLvzMyjNDLIC8TmIXa4,55294
12
+ pixeltable/catalog/__init__.py,sha256=zw6hiyAIjMBxCExtsr7G51ul2XQ9fTQQKcs45rIy7xA,682
13
+ pixeltable/catalog/catalog.py,sha256=ZD3XXJaWZO9o6_aDoq6P2plAH_0x8do3JiMQiopAtLo,93967
14
+ pixeltable/catalog/column.py,sha256=MXa5o3ku94T8ZFEL7wnAvqvlk65fOmmHPqIvrUVf3uo,13514
15
15
  pixeltable/catalog/dir.py,sha256=VYTscPlKR6XhupPTXlJ8txAHxS5GSpPJ3LIleDJagVQ,2047
16
16
  pixeltable/catalog/globals.py,sha256=uMIDsbeDzFxZbcgKDTOiT5plC1gAKgz1oxxdh1odIPw,2648
17
- pixeltable/catalog/insertable_table.py,sha256=uOvV3Ibcnh9xNLwfZrE6kQJWp0KWasBOk29sPuIa4c0,9485
17
+ pixeltable/catalog/insertable_table.py,sha256=PDjUhsiVKPT5utHi9ETCEnJWhQSCLBzF_1ITDIIvFRI,9292
18
18
  pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
19
19
  pixeltable/catalog/path.py,sha256=O3FfxrvyX2crijBhp_2k4-3mG3BFxwba-tlPB74QtJQ,3780
20
- pixeltable/catalog/schema_object.py,sha256=_7m3i-5IX-_yNkWXeq97ZbfDwAfrYPFhnc5ifghADcE,2195
21
- pixeltable/catalog/table.py,sha256=OF2FZ95ipQgXLa8WvDZfz4AHCawpHMe4A73j694aXPI,76111
22
- pixeltable/catalog/table_version.py,sha256=sJhIbrDcgDFCV22acOedG10jWsYAsWBEqLEnWeyfWFA,68583
20
+ pixeltable/catalog/schema_object.py,sha256=rQ6-3rzqnOHyEEHi97kai2S7BO3D9AkH7rirnfbGc14,1785
21
+ pixeltable/catalog/table.py,sha256=stZuISgW0sQwN5TJB_EOh61i_s_WV2xD9ujScCX2dFM,79644
22
+ pixeltable/catalog/table_version.py,sha256=V8g87XEOapUKT4sIQulAiWFra95hsQFVuxhRkkaFlzs,64760
23
23
  pixeltable/catalog/table_version_handle.py,sha256=FTPRqcGY-h-POcWyZbd9b8P2D5zIw5OSUvwF_dbyCGo,3608
24
24
  pixeltable/catalog/table_version_path.py,sha256=TcMG-R5b0O72HCvk0Qn8kGpZnfIsYhawOP7RjP1Sjb4,9815
25
25
  pixeltable/catalog/tbl_ops.py,sha256=Vdcz4Nzvdw09zcQaCEaOr9Uufk2rQHgG0vBvMbQp9R8,1145
26
26
  pixeltable/catalog/update_status.py,sha256=tF3KkDc6kvEQ7Tg3VMj-n774uKi1iLla61wLyeuwDRs,6888
27
- pixeltable/catalog/view.py,sha256=vIU8kOwjnuvrZTj6cJ-ZC6czdx1DBWJnD4R3bb-pwIw,15123
27
+ pixeltable/catalog/view.py,sha256=VSBy_8eO76X1ZFtT8T6syjksb-gtcNA-XPMGndRdBy0,15179
28
28
  pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
29
29
  pixeltable/exec/aggregation_node.py,sha256=2GGg0WraYYUZxUK4CURYKyCeAg-ojRHkZEAAo1Z-0vE,4490
30
30
  pixeltable/exec/cache_prefetch_node.py,sha256=rAGCSR8nJ_LkdYhyEUqVZen85xO_ikOFu_SqYOpR2Rw,11865
@@ -37,36 +37,36 @@ pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7np
37
37
  pixeltable/exec/sql_node.py,sha256=EHZNvbkzECJUgCQtqFjC1yGr6PkSYZXM3wPlAGcGuAI,27436
38
38
  pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
39
39
  pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
40
- pixeltable/exec/expr_eval/expr_eval_node.py,sha256=s7rb58bwBZsZyK7UXm9PEZa1JQpidCfewK_gin3MXP0,18933
40
+ pixeltable/exec/expr_eval/expr_eval_node.py,sha256=JIbyo61yTr4RUMyXbTFkMb88h4JWsdRjieBy9VikWTE,18919
41
41
  pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
42
42
  pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
43
- pixeltable/exec/expr_eval/schedulers.py,sha256=DuebLy_3Bu3MTUG3AQNk7JcVv69OeeRFu5bcZGT5T2c,22233
43
+ pixeltable/exec/expr_eval/schedulers.py,sha256=d48syzZ3A5zLQfjkjmLhmKvYzVEb-o_LSBKpWlMXRfE,23561
44
44
  pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,1096
45
45
  pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
46
- pixeltable/exprs/array_slice.py,sha256=8Zv0E2RghdJi1Mbk0kKtOz2ccGQuXwLLb6R9v1jk7hA,2180
46
+ pixeltable/exprs/array_slice.py,sha256=C8O0cmGHdc-iVe2FFdW_2jRVR4Gwurzeot6ESEk6RTA,2167
47
47
  pixeltable/exprs/column_property_ref.py,sha256=rq8VD34fZwAZuN9wIqQEwVay7LTPBKvXXdZPknOJM6M,4422
48
48
  pixeltable/exprs/column_ref.py,sha256=MH83bYsef5UC4vWU71PE-lPiVd8hVw4tT6sjdCCvWNw,15473
49
49
  pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
50
50
  pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
51
- pixeltable/exprs/data_row.py,sha256=ZUwx_YtQJTmY4iXHGlfM-m2N-2IJrbP3f8EDIalAQnI,11766
52
- pixeltable/exprs/expr.py,sha256=uLEMuJzHwPW3hBIcsASnhjcPyGBkY8_8sFCqgRetKP0,36013
51
+ pixeltable/exprs/data_row.py,sha256=hJJV9VYCJoBHb-8QwKwPXLvAzTciJbVWeQgGHgukjhU,12401
52
+ pixeltable/exprs/expr.py,sha256=T558PJBeVaHCGgv_TBDUIn-fOZJtSMkz26jGUTpvCVY,35961
53
53
  pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
54
54
  pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
55
- pixeltable/exprs/function_call.py,sha256=k5_a9Fb7arw1q3PnInl8kpNKvlEZcYyOR_yOzRItKUU,21992
56
- pixeltable/exprs/globals.py,sha256=NIi16GCPYNFNrhDC0_IemHjFZEtbILJNmdxdguSdy00,2315
55
+ pixeltable/exprs/function_call.py,sha256=1bHnXp6qPmBwLMdS3DX6ir1XAH8hILr6O0dE4_OoNNU,21980
56
+ pixeltable/exprs/globals.py,sha256=33fq5Ec15z_SkIqz9ILICx18wuGAazpFDUkc_Ppl03c,2288
57
57
  pixeltable/exprs/in_predicate.py,sha256=u98JmBX9XsglKe5uCy1NUMnyi3wioBri_tue2vI9_sk,3799
58
58
  pixeltable/exprs/inline_expr.py,sha256=XYVKKXZN9BtHN5qlvZna-mgdOlot6WcmPu5usRBYei0,7972
59
59
  pixeltable/exprs/is_null.py,sha256=NfA_485hfT69pWyY6u8BhykDUkz5k91AH93azGu6lCg,1087
60
60
  pixeltable/exprs/json_mapper.py,sha256=bJSB39sZgpN9KS0RReDnUhTCwg-4Y4cgXXaFNy3o3wU,7035
61
- pixeltable/exprs/json_path.py,sha256=sFuDjfz8_rlea4TKd68CS4pQTUiLDi68YwsgcQRHffI,7162
61
+ pixeltable/exprs/json_path.py,sha256=XgVhxeJEa9a48Dg2FgzE0CH4N1Qk2ZCaTJC9UOui3lo,7145
62
62
  pixeltable/exprs/literal.py,sha256=OCJL_pw_WKqx3bXMEwL6yNaKVAKDtGRzSZUFwucRxZI,4860
63
63
  pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
64
64
  pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
65
- pixeltable/exprs/row_builder.py,sha256=6-DU36EJBpfHdW8mm6o66LFUf9cg4jJsbQwpx1U4ZCk,23020
65
+ pixeltable/exprs/row_builder.py,sha256=m37FpMROIr0guWjLlY9WM0ugl0dVfcZr_FGKRPesJBE,22986
66
66
  pixeltable/exprs/rowid_ref.py,sha256=8MvQs3Uu01Gz__WXw9BCJv0CHrSaFDuQtU7rUr1AWEk,5008
67
67
  pixeltable/exprs/similarity_expr.py,sha256=i0UUnMSKKGXd3Uksu6FU2NvkfG0qzfzfi-GPy-LdutM,3688
68
68
  pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
69
- pixeltable/exprs/string_op.py,sha256=J3Cm0hrctLma1YU3CszE965fRhsP0gcsi9PM0UVlQ7Q,4161
69
+ pixeltable/exprs/string_op.py,sha256=PGWRH1yUaqj7xszdumIBOTHzVkXE0k831jXxIeFPDog,4131
70
70
  pixeltable/exprs/type_cast.py,sha256=_nDzTxg5kXVGLewI0FrH2zmwJzgptdxYd5Jvuyig0UI,2322
71
71
  pixeltable/exprs/variable.py,sha256=UwWwaNECbtwyC8v0g8iqCa3a6mO8z9lK7ta5NrlCwvs,1493
72
72
  pixeltable/ext/__init__.py,sha256=UgDXWzGWiQIrwOuEvWTePLBcR2kecllPAE7gp-42Awg,457
@@ -81,58 +81,58 @@ pixeltable/func/function.py,sha256=3nSXRdGFGi471x7_TMVdSgXs1SQuLv4HaUJA7NLhv_M,2
81
81
  pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
82
82
  pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
83
83
  pixeltable/func/mcp.py,sha256=P9M2w8cm7ad-XmAcf2ZThfWmD8W46De1spwX98bZL4Y,2861
84
- pixeltable/func/query_template_function.py,sha256=0wCcU06bv9KKJRlOsoLg8-vVNSLIYpKDCdYkUV7WShY,8040
85
- pixeltable/func/signature.py,sha256=0PI6xdhLgwy9-GMkzkm7GlsBnsNMiS9aoNI9LWXwvN0,13700
86
- pixeltable/func/tools.py,sha256=hKmQFvfpBvtLcItPRpqAmqt_tDg6latwyfv5FXBofBc,6074
84
+ pixeltable/func/query_template_function.py,sha256=aX6GgANSdDTQwrObEV-B_la_oVRVkyesCM9KMc4h1kg,8027
85
+ pixeltable/func/signature.py,sha256=LdHbdim14Zu7Xt1pMhOCzl6Xn2fq5CQQpwSXmu28umw,14988
86
+ pixeltable/func/tools.py,sha256=2_M_u0Jiy5-uToZziB4O54aTuJeaytPmh71q3I2ydNw,6062
87
87
  pixeltable/func/udf.py,sha256=6tKpMt37t3BmXwRyA5fFAd6OM4D5EPEd2KuAr7DQhr0,13231
88
88
  pixeltable/functions/__init__.py,sha256=Akk6Nk-rpz2D_V4kJTfyP56xnNbCz3EtxVAuwLoiysA,588
89
- pixeltable/functions/anthropic.py,sha256=G2E0sH5vP933eZZxhz1tOByy5cg6N2XPvhSqIBzqufo,8782
89
+ pixeltable/functions/anthropic.py,sha256=GsXEsdAoQ3P_NDRDcAIxa26phftulPBCK64nYrzlRg4,10567
90
90
  pixeltable/functions/audio.py,sha256=6_tUhSZgxhOQQJemvZYNEoKNjWdr3SgJsvLkKCSmtfw,1633
91
91
  pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
92
92
  pixeltable/functions/date.py,sha256=qs1svJ9FVod3OTa5hQNKIuashb6tVhW_2EAEXYGQX74,5308
93
93
  pixeltable/functions/deepseek.py,sha256=IAo2e_DhkM0A5NrskxuPQUGYzIYAl4do_mdO1Qc3PeY,3338
94
94
  pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
95
95
  pixeltable/functions/gemini.py,sha256=Yede8DzWEa4eboW7SNTOooBabriUlsnQMUdG5jCWRQo,8320
96
- pixeltable/functions/globals.py,sha256=ZXBV2LPXT2-yQYHHE7q8N1WdAr0WxiIO1ax0qwxhmK8,5118
96
+ pixeltable/functions/globals.py,sha256=OyPJUJ4S6VWyzxstxIzk3xzYBGIEMwgk1RmSTWTZzdI,5106
97
97
  pixeltable/functions/groq.py,sha256=FpR_LJpfZfzyhEvoBMMbQpQ-VQSRzBsS9U21qaINwww,3593
98
98
  pixeltable/functions/huggingface.py,sha256=cJyf86qMcvivkGGNduNHAvh_idI-e4wJm0Zje1KJ2vQ,20611
99
99
  pixeltable/functions/image.py,sha256=IKXljMma-uU88efptC3F4aywau7DYcD-Nqd3YpmRNRw,13971
100
100
  pixeltable/functions/json.py,sha256=d7-AvwytUQtQYF_JnWJkptT_Yq0NgMpWfVk-m3U6qTY,807
101
- pixeltable/functions/llama_cpp.py,sha256=1QB4vQ7J4Za1mL93bRIBXgokNtpzzYr_QU6KF27i9xo,3919
101
+ pixeltable/functions/llama_cpp.py,sha256=uop0K6oNxCnQXbdiL-_6PVsusc1xqCtwTipAyIbQ-Uc,4119
102
102
  pixeltable/functions/math.py,sha256=jhlD7v4eY-6KdmsFEBqb-W_vspGahOosUvFahWFzxrU,4969
103
103
  pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
104
104
  pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
105
- pixeltable/functions/openai.py,sha256=NM6ta09KBCyK60fJiM8cQJNqeGzIeF7OlC3k9AeSQV8,27985
105
+ pixeltable/functions/openai.py,sha256=VXWiz1Zzj2SBboY8MXpSIRFvB8C3s-Q76yyDUDQcceQ,28729
106
106
  pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
107
107
  pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
108
108
  pixeltable/functions/timestamp.py,sha256=3GVCVIWdry96Qk5XXuvbJ58Tp30iY5snBibzl2CHjQc,9143
109
109
  pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
110
110
  pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
111
- pixeltable/functions/video.py,sha256=zrh8De3w3zHe3QQ6T8d3IKGRNbin6wAcIQa6lRi5jL0,8511
112
- pixeltable/functions/vision.py,sha256=_a0wY3akkVhWnnxlq__1VzSLylytlNadpNOOPOwSfLk,15393
111
+ pixeltable/functions/video.py,sha256=eFaJmtuoivsCj9EkU8GfpbFgWRYO3qsu42ekms4etHQ,10574
112
+ pixeltable/functions/vision.py,sha256=17h9bOm3NJyQzFMBwXDHMqnkcuCspyQJgHdBOXV1Ip8,15380
113
113
  pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
114
114
  pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
115
115
  pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
116
116
  pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
117
117
  pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
118
118
  pixeltable/io/__init__.py,sha256=chVGh3ygtZwSY6g_skIyCsjxwzo2847jDq9YGObAY98,608
119
- pixeltable/io/datarows.py,sha256=UibRI3TH6E8WTaUSxVC4g0FfLcbM57OjbUIk3IQpU2k,6179
119
+ pixeltable/io/datarows.py,sha256=s2fDQTttGxq7cS5JwKFEJRSKn6WsXTaGdmm9VJSl_2M,6154
120
120
  pixeltable/io/external_store.py,sha256=rOYBwTqcZZVU2toWxJ_9Iy2w2YO0DhuABrM2xGmqHSo,14787
121
- pixeltable/io/fiftyone.py,sha256=v0r28bIk2I0TRP5DfVHtBIUa4DpIJDK5sgExxOmHZ_w,6882
122
- pixeltable/io/globals.py,sha256=so-skHogbXocuzI_IweH2cEX_SW_tDvFqBZyxeMyMzc,11375
123
- pixeltable/io/hf_datasets.py,sha256=USCWp0nqs2D9FFfxlGhFy6pn2kDUwGfDHgUiv0-osc8,5634
121
+ pixeltable/io/fiftyone.py,sha256=t_4WqRkKZm-G8qiiUXwld_4sijO9BGexmmzU5MmSDP0,6865
122
+ pixeltable/io/globals.py,sha256=B9ubI9Z0m2wGPZXWmZm10vlaP0UCuUsVyrMWvyudZSc,11360
123
+ pixeltable/io/hf_datasets.py,sha256=5WfWfXoQppG1Bx_pS5n44KO1Vo_mEb_S82PLB8cLfAU,5606
124
124
  pixeltable/io/label_studio.py,sha256=XpPkOLktm37Jnhh5ce1PQpUYzeuPJjoCZDaSGedagF4,31426
125
- pixeltable/io/pandas.py,sha256=wzxBggItahT0yjGoV0G_csVAcYlcMXArlF6lfePXqUc,9053
126
- pixeltable/io/parquet.py,sha256=-cxyy9wMRzGFDJWhUIjACfQMyAmajyoFcTXSkB8qESE,7818
127
- pixeltable/io/table_data_conduit.py,sha256=8pTWXr9fCWUbGPcNX7Fm3WXhipBiv3pdbTMok02vbQs,22078
128
- pixeltable/io/utils.py,sha256=YMfhpqMitWz1PhXJGkCNOgNtEM1AZ55S0zXVhljC5kY,4260
125
+ pixeltable/io/pandas.py,sha256=xQmkwbqE9_fjbbPUgeG5yNICrbVVK73UHxDL-cgrQw0,9007
126
+ pixeltable/io/parquet.py,sha256=qoVDuCoW-Tq14IlzN_psoNP7z83hIQ3ZEg_pKzHSqoY,7796
127
+ pixeltable/io/table_data_conduit.py,sha256=--UWwG6agBtOA5PLPfjxp2XKoAQ-f5nSPJqOgA5DAAI,22062
128
+ pixeltable/io/utils.py,sha256=qzBTmqdIawXMt2bfXQOraYnEstL69eC2Z33nl8RrwJk,4244
129
129
  pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
130
130
  pixeltable/iterators/audio.py,sha256=Xuv6sOuhhMbof87JrlO218Fm_j6MoMxEr88otmoXME4,9623
131
131
  pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
132
- pixeltable/iterators/document.py,sha256=wJYSnzusJFaxipv5y0uQw-surN9fFz0Aq-s7w_l_Yk8,20306
132
+ pixeltable/iterators/document.py,sha256=HcwL4X1V-RMDBlJJeF7Qcp6cF4C1C8HbJCp_AfiO1rE,20293
133
133
  pixeltable/iterators/image.py,sha256=RrFdf5cnFIQzWKJk4uYi1m1p2qAiz909THYhRQ27DbY,3603
134
134
  pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
135
- pixeltable/iterators/video.py,sha256=L5S1YPmT_zM11vW9fK6d5nQpUvHVewQWmfDmy4BD45E,9134
135
+ pixeltable/iterators/video.py,sha256=PKztCS_FEtu-AoHR6X-wJG6UJddX195lS-9eQp5ClGc,10810
136
136
  pixeltable/metadata/__init__.py,sha256=iJxMsd3s5yNZ5ciIBzQCa0frXZKgvFj2_-H0Sf4N1mk,3154
137
137
  pixeltable/metadata/notes.py,sha256=3fdZDFpL1-b194Ejv0Y0YP-vbnV-XvVP9wOmZM9XARA,1545
138
138
  pixeltable/metadata/schema.py,sha256=fs9W2SLh32Ehxc9AChVH7YCtlSSnQkgGMbEyOh0B4W0,13416
@@ -168,29 +168,29 @@ pixeltable/metadata/converters/convert_38.py,sha256=YyNyocwzzdJRcI0YSCo_70Q4hSk6
168
168
  pixeltable/metadata/converters/convert_39.py,sha256=YaEfgStxtYGRbuRLFw8wTAZVJRzIU6zL6nPU2zuDcEU,4658
169
169
  pixeltable/metadata/converters/util.py,sha256=QUBOj2F_6rCAdIo0lgD1IVgAM15Vmq7ikQspB4s0eQ8,7732
170
170
  pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
171
- pixeltable/share/packager.py,sha256=F26RmcwmeE7wsWJybZzVz0iIy1meOP-JeaJvmFwjgkA,30938
171
+ pixeltable/share/packager.py,sha256=yzqatcxR6VQDCCPKnMk8-i2YaHTPWE6jfJU-Cpr5-RQ,31259
172
172
  pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
173
- pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
174
- pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
173
+ pixeltable/utils/__init__.py,sha256=45qEM20L2VuIe-Cc3BTKWFqQb-S7A8qDtmmgl77zYK0,1728
174
+ pixeltable/utils/arrow.py,sha256=Rooa02GL5k--D2utlKATtYKrrlsHbbi6JmkarXMux1M,6384
175
175
  pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
176
176
  pixeltable/utils/code.py,sha256=SbG5OUF_fQAbOgGZHDuENijmbzisVqa4VS9guaZ0KtU,1231
177
177
  pixeltable/utils/console_output.py,sha256=x23iDnNwUbsr7Ec20BQ7BLATTsrQZflxc9NucAt_sVU,1150
178
178
  pixeltable/utils/coroutine.py,sha256=d87kLlkVIZq2u0kTE7kJ5Tc_yjEkdGi5sXAuxjLLxXY,896
179
179
  pixeltable/utils/dbms.py,sha256=cuQqlzLF7WON_mkJZ4QWlfX6lCxA97V32lhtMcOlDLg,2018
180
- pixeltable/utils/description_helper.py,sha256=acibNm36wkZG7h6k8gjcypTD_PVV2SL7YgX6cPYP1i8,3743
180
+ pixeltable/utils/description_helper.py,sha256=lwAduHT1yofH6loyNBwuCnMh-sY2e2FqHKDTVhrZDbg,3724
181
181
  pixeltable/utils/documents.py,sha256=x3UHU7eykibyA3eVkSrCK1CQoaid228vp96WUEESssU,3105
182
182
  pixeltable/utils/exception_handler.py,sha256=yrTAtUJEOhldps_k6aRLEf5yQ8gYGhl9c6ewYNC4Qfc,2476
183
183
  pixeltable/utils/filecache.py,sha256=3TTEqhGg0pEAP_l0GKn34uspC4dha1jPab1Ka9_oTBM,10877
184
184
  pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
185
185
  pixeltable/utils/http_server.py,sha256=6khOAtpVj1lDIm9Dx8VIECLm87cFEp4IFbAg8T92A2o,2441
186
- pixeltable/utils/iceberg.py,sha256=L_s9G9NMIGMQdRHtNkks6ntTVW4DKKAw97R9gRmtw5s,553
186
+ pixeltable/utils/iceberg.py,sha256=COeNqqy5RRMkDGLS8CTnaUeAccG10x2fwP3e1veuqIA,522
187
187
  pixeltable/utils/media_store.py,sha256=O3pByWHRd79Z5vcy1Dc1crIUADaLL93pPz19Y60e2wY,7011
188
188
  pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
189
189
  pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
190
190
  pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
191
191
  pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
192
- pixeltable-0.4.6.dist-info/METADATA,sha256=YZPSk81pUpZDGY7g9LMU-yzNq2lkKKdz4hgz6v6yT8k,20508
193
- pixeltable-0.4.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
194
- pixeltable-0.4.6.dist-info/entry_points.txt,sha256=rrKugZmxDtGnXCnEQ5UJMaaSYY7-g1cLjUZ4W1moIhM,98
195
- pixeltable-0.4.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
196
- pixeltable-0.4.6.dist-info/RECORD,,
192
+ pixeltable-0.4.7.dist-info/METADATA,sha256=ffhRp1xau1eRh53Io-7nhHF7Pg0MVp59qN4ci6Jhu94,22299
193
+ pixeltable-0.4.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
194
+ pixeltable-0.4.7.dist-info/entry_points.txt,sha256=rrKugZmxDtGnXCnEQ5UJMaaSYY7-g1cLjUZ4W1moIhM,98
195
+ pixeltable-0.4.7.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
196
+ pixeltable-0.4.7.dist-info/RECORD,,