pixeltable 0.4.2__py3-none-any.whl → 0.4.4__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 -0
  2. pixeltable/__version__.py +2 -2
  3. pixeltable/catalog/__init__.py +3 -11
  4. pixeltable/catalog/catalog.py +575 -220
  5. pixeltable/catalog/column.py +22 -23
  6. pixeltable/catalog/dir.py +1 -2
  7. pixeltable/catalog/globals.py +2 -148
  8. pixeltable/catalog/insertable_table.py +15 -13
  9. pixeltable/catalog/path.py +6 -0
  10. pixeltable/catalog/schema_object.py +9 -4
  11. pixeltable/catalog/table.py +96 -85
  12. pixeltable/catalog/table_version.py +257 -174
  13. pixeltable/catalog/table_version_path.py +1 -1
  14. pixeltable/catalog/tbl_ops.py +44 -0
  15. pixeltable/catalog/update_status.py +179 -0
  16. pixeltable/catalog/view.py +50 -56
  17. pixeltable/config.py +76 -12
  18. pixeltable/dataframe.py +19 -6
  19. pixeltable/env.py +50 -4
  20. pixeltable/exec/data_row_batch.py +3 -1
  21. pixeltable/exec/exec_node.py +7 -24
  22. pixeltable/exec/expr_eval/schedulers.py +134 -7
  23. pixeltable/exec/in_memory_data_node.py +6 -7
  24. pixeltable/exprs/column_property_ref.py +21 -9
  25. pixeltable/exprs/column_ref.py +7 -2
  26. pixeltable/exprs/function_call.py +2 -2
  27. pixeltable/exprs/row_builder.py +10 -9
  28. pixeltable/exprs/rowid_ref.py +0 -4
  29. pixeltable/func/function.py +3 -3
  30. pixeltable/functions/audio.py +36 -9
  31. pixeltable/functions/gemini.py +4 -4
  32. pixeltable/functions/openai.py +1 -2
  33. pixeltable/functions/video.py +59 -16
  34. pixeltable/globals.py +109 -24
  35. pixeltable/io/__init__.py +1 -1
  36. pixeltable/io/datarows.py +2 -1
  37. pixeltable/io/external_store.py +3 -55
  38. pixeltable/io/globals.py +4 -4
  39. pixeltable/io/hf_datasets.py +10 -2
  40. pixeltable/io/label_studio.py +16 -16
  41. pixeltable/io/pandas.py +1 -0
  42. pixeltable/io/table_data_conduit.py +12 -13
  43. pixeltable/iterators/audio.py +17 -8
  44. pixeltable/iterators/image.py +5 -2
  45. pixeltable/metadata/__init__.py +1 -1
  46. pixeltable/metadata/converters/convert_39.py +125 -0
  47. pixeltable/metadata/converters/util.py +3 -0
  48. pixeltable/metadata/notes.py +1 -0
  49. pixeltable/metadata/schema.py +50 -1
  50. pixeltable/plan.py +4 -0
  51. pixeltable/share/packager.py +20 -38
  52. pixeltable/store.py +40 -51
  53. pixeltable/type_system.py +2 -2
  54. pixeltable/utils/coroutine.py +6 -23
  55. pixeltable/utils/media_store.py +50 -0
  56. {pixeltable-0.4.2.dist-info → pixeltable-0.4.4.dist-info}/METADATA +1 -1
  57. {pixeltable-0.4.2.dist-info → pixeltable-0.4.4.dist-info}/RECORD +60 -57
  58. {pixeltable-0.4.2.dist-info → pixeltable-0.4.4.dist-info}/LICENSE +0 -0
  59. {pixeltable-0.4.2.dist-info → pixeltable-0.4.4.dist-info}/WHEEL +0 -0
  60. {pixeltable-0.4.2.dist-info → pixeltable-0.4.4.dist-info}/entry_points.txt +0 -0
pixeltable/store.py CHANGED
@@ -2,19 +2,17 @@ from __future__ import annotations
2
2
 
3
3
  import abc
4
4
  import logging
5
- import os
6
5
  import sys
7
- import urllib.parse
8
- import urllib.request
9
6
  import warnings
10
7
  from typing import Any, Iterable, Iterator, Optional, Union
11
8
 
12
9
  import more_itertools
10
+ import psycopg
13
11
  import sqlalchemy as sql
14
12
  from tqdm import TqdmWarning, tqdm
15
13
 
16
14
  from pixeltable import catalog, exceptions as excs
17
- from pixeltable.catalog import RowCountStats, UpdateStatus
15
+ from pixeltable.catalog.update_status import RowCountStats
18
16
  from pixeltable.env import Env
19
17
  from pixeltable.exec import ExecNode
20
18
  from pixeltable.metadata import schema
@@ -93,9 +91,8 @@ class StoreBase:
93
91
  # to the last sql.Table version we created and cannot be reused
94
92
  col.create_sa_cols()
95
93
  all_cols.append(col.sa_col)
96
- if col.records_errors:
97
- all_cols.append(col.sa_errormsg_col)
98
- all_cols.append(col.sa_errortype_col)
94
+ if col.stores_cellmd:
95
+ all_cols.append(col.sa_cellmd_col)
99
96
 
100
97
  if self.sa_tbl is not None:
101
98
  # if we're called in response to a schema change, we need to remove the old table first
@@ -127,27 +124,7 @@ class StoreBase:
127
124
  """Return the name of the data store table"""
128
125
 
129
126
  def _move_tmp_media_file(self, file_url: Optional[str], col: catalog.Column, v_min: int) -> str:
130
- """Move tmp media file with given url to Env.media_dir and return new url, or given url if not a tmp_dir file"""
131
- if file_url is None:
132
- return None
133
- assert isinstance(file_url, str), type(file_url)
134
- pxt_tmp_dir = str(Env.get().tmp_dir)
135
- parsed = urllib.parse.urlparse(file_url)
136
- # We should never be passed a local file path here. The "len > 1" ensures that Windows
137
- # file paths aren't mistaken for URLs with a single-character scheme.
138
- assert len(parsed.scheme) > 1, file_url
139
- if parsed.scheme != 'file':
140
- # remote url
141
- return file_url
142
- file_path = urllib.parse.unquote(urllib.request.url2pathname(parsed.path))
143
- if not file_path.startswith(pxt_tmp_dir):
144
- # not a tmp file
145
- return file_url
146
- _, ext = os.path.splitext(file_path)
147
- new_path = str(MediaStore.prepare_media_path(self.tbl_version.id, col.id, v_min, ext=ext))
148
- os.rename(file_path, new_path)
149
- new_file_url = urllib.parse.urljoin('file:', urllib.request.pathname2url(new_path))
150
- return new_file_url
127
+ return MediaStore.move_tmp_media_file(file_url, self.tbl_version.id, col.id, v_min)
151
128
 
152
129
  def _move_tmp_media_files(
153
130
  self, table_row: list[Any], media_cols_by_sql_idx: dict[int, catalog.Column], v_min: int
@@ -170,8 +147,28 @@ class StoreBase:
170
147
  return result
171
148
 
172
149
  def create(self) -> None:
150
+ """Create If Not Exists for this table"""
173
151
  conn = Env.get().conn
174
- self.sa_md.create_all(bind=conn)
152
+ stmt = sql.schema.CreateTable(self.sa_tbl).compile(conn)
153
+ create_stmt = str(stmt)
154
+ if_not_exists_stmt = create_stmt.replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS')
155
+
156
+ # Postgres seems not to handle concurrent Create Table If Not Exists correctly, we need to ignore the various
157
+ # errors that can occur when two connections run the same Create Table statement.
158
+ try:
159
+ conn.execute(sql.text(if_not_exists_stmt))
160
+ except (sql.exc.IntegrityError, sql.exc.ProgrammingError) as e:
161
+ Env.get().console_logger.info(f'StoreBase.create() failed with: {e}')
162
+ if (
163
+ isinstance(e.orig, psycopg.errors.UniqueViolation)
164
+ and 'duplicate key value violates unique constraint "pg_type_typname_nsp_index"' in str(e.orig)
165
+ ) or (
166
+ isinstance(e.orig, (psycopg.errors.DuplicateObject, psycopg.errors.DuplicateTable))
167
+ and 'already exists' in str(e.orig)
168
+ ):
169
+ pass
170
+ else:
171
+ raise
175
172
 
176
173
  def drop(self) -> None:
177
174
  """Drop store table"""
@@ -189,11 +186,10 @@ class StoreBase:
189
186
  col_type_str = col.get_sa_col_type().compile(dialect=conn.dialect)
190
187
  s_txt = f'ALTER TABLE {self._storage_name()} ADD COLUMN {col.store_name()} {col_type_str} NULL'
191
188
  added_storage_cols = [col.store_name()]
192
- if col.records_errors:
193
- # we also need to create the errormsg and errortype storage cols
194
- s_txt += f' , ADD COLUMN {col.errormsg_store_name()} VARCHAR DEFAULT NULL'
195
- s_txt += f' , ADD COLUMN {col.errortype_store_name()} VARCHAR DEFAULT NULL'
196
- added_storage_cols.extend([col.errormsg_store_name(), col.errortype_store_name()])
189
+ if col.stores_cellmd:
190
+ cellmd_type_str = col.sa_cellmd_type().compile(dialect=conn.dialect)
191
+ s_txt += f' , ADD COLUMN {col.cellmd_store_name()} {cellmd_type_str} DEFAULT NULL'
192
+ added_storage_cols.append(col.cellmd_store_name())
197
193
 
198
194
  stmt = sql.text(s_txt)
199
195
  log_stmt(_logger, stmt)
@@ -204,9 +200,8 @@ class StoreBase:
204
200
  def drop_column(self, col: catalog.Column) -> None:
205
201
  """Execute Alter Table Drop Column statement"""
206
202
  s_txt = f'ALTER TABLE {self._storage_name()} DROP COLUMN {col.store_name()}'
207
- if col.records_errors:
208
- s_txt += f' , DROP COLUMN {col.errormsg_store_name()}'
209
- s_txt += f' , DROP COLUMN {col.errortype_store_name()}'
203
+ if col.stores_cellmd:
204
+ s_txt += f' , DROP COLUMN {col.cellmd_store_name()}'
210
205
  stmt = sql.text(s_txt)
211
206
  log_stmt(_logger, stmt)
212
207
  Env.get().conn.execute(stmt)
@@ -239,10 +234,9 @@ class StoreBase:
239
234
  tmp_val_col = sql.Column(col.sa_col.name, col.sa_col.type)
240
235
  tmp_cols = [*tmp_pk_cols, tmp_val_col]
241
236
  # add error columns if the store column records errors
242
- if col.records_errors:
243
- tmp_errortype_col = sql.Column(col.sa_errortype_col.name, col.sa_errortype_col.type)
244
- tmp_errormsg_col = sql.Column(col.sa_errormsg_col.name, col.sa_errormsg_col.type)
245
- tmp_cols.extend((tmp_errortype_col, tmp_errormsg_col))
237
+ if col.stores_cellmd:
238
+ tmp_cellmd_col = sql.Column(col.sa_cellmd_col.name, col.sa_cellmd_col.type)
239
+ tmp_cols.append(tmp_cellmd_col)
246
240
  tmp_col_names = [col.name for col in tmp_cols]
247
241
 
248
242
  tmp_tbl = sql.Table(tmp_name, self.sa_md, *tmp_cols, prefixes=['TEMPORARY'])
@@ -285,10 +279,8 @@ class StoreBase:
285
279
  for pk_col, tmp_pk_col in zip(self.pk_columns(), tmp_pk_cols):
286
280
  update_stmt = update_stmt.where(pk_col == tmp_pk_col)
287
281
  update_stmt = update_stmt.values({col.sa_col: tmp_val_col})
288
- if col.records_errors:
289
- update_stmt = update_stmt.values(
290
- {col.sa_errortype_col: tmp_errortype_col, col.sa_errormsg_col: tmp_errormsg_col}
291
- )
282
+ if col.stores_cellmd:
283
+ update_stmt = update_stmt.values({col.sa_cellmd_col: tmp_cellmd_col})
292
284
  log_explain(_logger, update_stmt, conn)
293
285
  conn.execute(update_stmt)
294
286
 
@@ -309,7 +301,7 @@ class StoreBase:
309
301
  show_progress: bool = True,
310
302
  rowids: Optional[Iterator[int]] = None,
311
303
  abort_on_exc: bool = False,
312
- ) -> tuple[set[int], UpdateStatus]:
304
+ ) -> tuple[set[int], RowCountStats]:
313
305
  """Insert rows into the store table and update the catalog table's md
314
306
  Returns:
315
307
  number of inserted rows, number of exceptions, set of column ids that have exceptions
@@ -373,12 +365,9 @@ class StoreBase:
373
365
  if progress_bar is not None:
374
366
  progress_bar.close()
375
367
  computed_values = exec_plan.ctx.num_computed_exprs * num_rows
376
- row_counts = RowCountStats(
377
- ins_rows=num_rows, num_excs=num_excs, computed_values=computed_values
378
- ) # insert (StoreBase)
379
-
380
- return cols_with_excs, UpdateStatus(row_count_stats=row_counts)
368
+ row_counts = RowCountStats(ins_rows=num_rows, num_excs=num_excs, computed_values=computed_values)
381
369
 
370
+ return cols_with_excs, row_counts
382
371
  finally:
383
372
  exec_plan.close()
384
373
 
pixeltable/type_system.py CHANGED
@@ -1153,8 +1153,8 @@ class ImageType(ColumnType):
1153
1153
  img.load()
1154
1154
  return img
1155
1155
  except Exception as exc:
1156
- errormsg_val = val if len(val) < 50 else val[:50] + '...'
1157
- raise excs.Error(f'data URL could not be decoded into a valid image: {errormsg_val}') from exc
1156
+ error_msg_val = val if len(val) < 50 else val[:50] + '...'
1157
+ raise excs.Error(f'data URL could not be decoded into a valid image: {error_msg_val}') from exc
1158
1158
  return val
1159
1159
 
1160
1160
  def _validate_literal(self, val: Any) -> None:
@@ -1,10 +1,10 @@
1
1
  import asyncio
2
2
  import threading
3
- from concurrent.futures import ThreadPoolExecutor
4
3
  from typing import Any, Coroutine, TypeVar
5
4
 
6
- T = TypeVar('T')
5
+ from pixeltable.env import Env
7
6
 
7
+ T = TypeVar('T')
8
8
 
9
9
  # TODO This is a temporary hack to be able to run async UDFs in contexts that are not properly handled by the existing
10
10
  # scheduler logic (e.g., as an embedding function as part of a similarity lookup). Once the scheduler is fully
@@ -15,27 +15,10 @@ def run_coroutine_synchronously(coroutine: Coroutine[Any, Any, T], timeout: floa
15
15
  """
16
16
  Runs the given coroutine synchronously, even if called in the context of a running event loop.
17
17
  """
18
-
19
- def run_in_new_loop() -> T:
20
- new_loop = asyncio.new_event_loop()
21
- asyncio.set_event_loop(new_loop)
22
- try:
23
- return new_loop.run_until_complete(coroutine)
24
- finally:
25
- new_loop.close()
26
-
27
- try:
28
- loop = asyncio.get_running_loop()
29
- except RuntimeError:
30
- # No event loop; just call `asyncio.run()`
31
- return asyncio.run(coroutine)
18
+ loop = Env.get().event_loop
32
19
 
33
20
  if threading.current_thread() is threading.main_thread():
34
- if not loop.is_running():
35
- return loop.run_until_complete(coroutine)
36
- else:
37
- with ThreadPoolExecutor() as pool:
38
- future = pool.submit(run_in_new_loop)
39
- return future.result(timeout=timeout)
21
+ return loop.run_until_complete(coroutine)
40
22
  else:
41
- return asyncio.run_coroutine_threadsafe(coroutine, loop).result()
23
+ # Not in main thread, use run_coroutine_threadsafe
24
+ return asyncio.run_coroutine_threadsafe(coroutine, loop).result(timeout)
@@ -2,6 +2,7 @@ import glob
2
2
  import os
3
3
  import re
4
4
  import shutil
5
+ import urllib
5
6
  import uuid
6
7
  from collections import defaultdict
7
8
  from pathlib import Path
@@ -34,6 +35,55 @@ class MediaStore:
34
35
  parent.mkdir(parents=True, exist_ok=True)
35
36
  return parent / f'{tbl_id.hex}_{col_id}_{version}_{id_hex}{ext or ""}'
36
37
 
38
+ @classmethod
39
+ def move_tmp_media_file(cls, file_url: Optional[str], tbl_id: UUID, col_id: int, v_min: int) -> Optional[str]:
40
+ """Move a tmp media file with given url into the MediaStore, and return new url
41
+ If it is not a tmp file in the tmp_dir, return the original url.
42
+
43
+ Args:
44
+ file_url: URL of the tmp media file to move
45
+ tbl_id: Table ID to associate with the media file
46
+ col_id: Column ID to associate with the media file
47
+ v_min: Version number to associate with the media file
48
+
49
+ Returns:
50
+ URL of the media final location of the file
51
+ """
52
+ if file_url is None:
53
+ return None
54
+ assert isinstance(file_url, str), type(file_url)
55
+ pxt_tmp_dir = str(Env.get().tmp_dir)
56
+ parsed = urllib.parse.urlparse(file_url)
57
+ # We should never be passed a local file path here. The "len > 1" ensures that Windows
58
+ # file paths aren't mistaken for URLs with a single-character scheme.
59
+ assert len(parsed.scheme) > 1, file_url
60
+ if parsed.scheme != 'file':
61
+ # remote url
62
+ return file_url
63
+ file_path = urllib.parse.unquote(urllib.request.url2pathname(parsed.path))
64
+ if not file_path.startswith(pxt_tmp_dir):
65
+ # not a tmp file
66
+ return file_url
67
+ new_file_url = cls.relocate_local_media_file(Path(file_path), tbl_id, col_id, v_min)
68
+ return new_file_url
69
+
70
+ @classmethod
71
+ def relocate_local_media_file(cls, src_path: Path, tbl_id: UUID, col_id: int, tbl_version: int) -> str:
72
+ dest_path = MediaStore.prepare_media_path(tbl_id, col_id, tbl_version, ext=src_path.suffix)
73
+ src_path.rename(dest_path)
74
+ return urllib.parse.urljoin('file:', urllib.request.pathname2url(str(dest_path)))
75
+
76
+ @classmethod
77
+ def save_media_file(cls, file_data: bytes, tbl_id: UUID, col_id: int, tbl_version: int) -> Path:
78
+ """Save a media binary data to a file in the MediaStore."""
79
+ assert isinstance(file_data, bytes)
80
+ media_path = cls.prepare_media_path(tbl_id, col_id, tbl_version)
81
+ with open(media_path, 'wb') as f:
82
+ f.write(file_data)
83
+ f.flush() # Ensures Python buffers are written to OS
84
+ os.fsync(f.fileno()) # Forces OS to write to physical storage
85
+ return media_path
86
+
37
87
  @classmethod
38
88
  def delete(cls, tbl_id: UUID, version: Optional[int] = None) -> None:
39
89
  """Delete all files belonging to tbl_id. If version is not None, delete
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pixeltable
3
- Version: 0.4.2
3
+ Version: 0.4.4
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,51 +1,53 @@
1
- pixeltable/__init__.py,sha256=WHZxJNz7vYcx_z3ebEg-RF22lJmlkfeqF2gv6mnrM1A,1449
2
- pixeltable/__version__.py,sha256=Tmdd4CrKsWN9gJkcXq-VR-egqtuKLYkyRkraXpi-2Kk,112
3
- pixeltable/catalog/__init__.py,sha256=pI6ncW9nJadW9ht_Mt1BYiY9kNMOwGxAb6n4q1oV61w,635
4
- pixeltable/catalog/catalog.py,sha256=pcZMrz9THSzjYusTlB0jTtrxOQzFT_xanONYTTpvhaU,73943
5
- pixeltable/catalog/column.py,sha256=ujoVR8gxuJwqYfIVsRT14TJ9nUxuczKJBJ-q-2klHUw,11571
6
- pixeltable/catalog/dir.py,sha256=HFemOf67Nfw13EOpQsR_UgzP2L1w4LDfw2009DrSK0Y,2063
7
- pixeltable/catalog/globals.py,sha256=_qAs5g0Uxtw8oUjCdnRlZ9-_F6E2bm4OmLYb2Fg6YiU,8470
8
- pixeltable/catalog/insertable_table.py,sha256=inBrPkcu08DAsYzFkq3I53eU-j7pqmlscoTZzEdaI54,9377
1
+ pixeltable/__init__.py,sha256=-bu8Al-s2PyGpPYZgj016gMl9s6NMQfjxVRwvhfd8IY,1457
2
+ pixeltable/__version__.py,sha256=T7KXb1Im-4kQujXd5F_u-Wak6ZZevjWPic8US5EaoQE,112
3
+ pixeltable/catalog/__init__.py,sha256=oiiga_fe4iQsBh8lfLjLBTbvzaZfD4QM7hmMZDpAGGU,636
4
+ pixeltable/catalog/catalog.py,sha256=u4FsoduYQKYrKGN_yRvq7K4kU0-332ILozOS5fnPt90,91162
5
+ pixeltable/catalog/column.py,sha256=HZfujfvdkJeyOWfgmVutJLWOy19R8ZFczaEjYTZ5NQo,11495
6
+ pixeltable/catalog/dir.py,sha256=VYTscPlKR6XhupPTXlJ8txAHxS5GSpPJ3LIleDJagVQ,2047
7
+ pixeltable/catalog/globals.py,sha256=uMIDsbeDzFxZbcgKDTOiT5plC1gAKgz1oxxdh1odIPw,2648
8
+ pixeltable/catalog/insertable_table.py,sha256=uOvV3Ibcnh9xNLwfZrE6kQJWp0KWasBOk29sPuIa4c0,9485
9
9
  pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
10
- pixeltable/catalog/path.py,sha256=gk8TIlO_7Jpji5mAN0dUNvHmvU0uneTHeB_qCTWnszQ,2529
11
- pixeltable/catalog/schema_object.py,sha256=jqOhZcI9QbT_EseDRQsVrp4pZ7jKB1wy4Sa-6aAvUCI,2004
12
- pixeltable/catalog/table.py,sha256=SZohsmgrjcdOCS_xTvkZXzFPTSfHuXE3bQBsDhyFHSU,75618
13
- pixeltable/catalog/table_version.py,sha256=EWB-49ce8Sm9DNaSGTxZohr2IecyzAhf9c6Bm4zQtOc,67018
10
+ pixeltable/catalog/path.py,sha256=VdoRy2eRVyR3FhJoo8wVFcuqqEq4o36RJsJ0cDX4Cac,2705
11
+ pixeltable/catalog/schema_object.py,sha256=XJ5kV7jEsjWmHTwQVQGHrInlOmu-vUDhBvczB_hTtxI,2123
12
+ pixeltable/catalog/table.py,sha256=1Z7fIza2v_CuVlLLmpEniZTls-_4EIfXwBov9pwtdmA,75786
13
+ pixeltable/catalog/table_version.py,sha256=XMwsHNWE8ybX7xecXREwVViT194t1dU0tIOInzLHYKc,68544
14
14
  pixeltable/catalog/table_version_handle.py,sha256=FTPRqcGY-h-POcWyZbd9b8P2D5zIw5OSUvwF_dbyCGo,3608
15
- pixeltable/catalog/table_version_path.py,sha256=uRATYbAN0OXEkW1GZEC4hZulzvh8IJRwaN66ifUTJfw,9787
16
- pixeltable/catalog/view.py,sha256=oo1JU5dtz3tasXZm3FkbfZqwyCc9xgdIE9hOqh5tRy4,14677
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
15
+ pixeltable/catalog/table_version_path.py,sha256=TcMG-R5b0O72HCvk0Qn8kGpZnfIsYhawOP7RjP1Sjb4,9815
16
+ pixeltable/catalog/tbl_ops.py,sha256=Vdcz4Nzvdw09zcQaCEaOr9Uufk2rQHgG0vBvMbQp9R8,1145
17
+ pixeltable/catalog/update_status.py,sha256=tF3KkDc6kvEQ7Tg3VMj-n774uKi1iLla61wLyeuwDRs,6888
18
+ pixeltable/catalog/view.py,sha256=lG_8x3g_-1wDLUTIG-q-bva5IAf_s-S_NAyDWTOu7Oo,14593
19
+ pixeltable/config.py,sha256=UGLZ-A7exqGB5os3BluMXXj3iEo7mGQKBXebriTZjkQ,7148
20
+ pixeltable/dataframe.py,sha256=QkyXKXd-TNPEvgRlCNSfGPmw5cz5s4RdOINsWYIyxfk,61386
21
+ pixeltable/env.py,sha256=yZZBWgqw4ez2bbHpVCuBlkbiJZMyB1QzfEGUEiYyaEg,37765
20
22
  pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
21
23
  pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
22
24
  pixeltable/exec/aggregation_node.py,sha256=HqzISO1nv7_DFyqjZLRkjtbDJl9fIEto1i6Kh5ru8vA,4498
23
25
  pixeltable/exec/cache_prefetch_node.py,sha256=GOa70eJDFY3FQV3VvJOrUVI8LFvro-r-V6sh3w-eJAc,12130
24
26
  pixeltable/exec/component_iteration_node.py,sha256=FZszWHrzsjHxCbUTwXtJIlgQqgYtvKZB6QWiDGkfIbs,4757
25
- pixeltable/exec/data_row_batch.py,sha256=EAB15JRhXbWIe91x1J5N5lFiMXzjB8NGTFjZsBDSbf8,3393
27
+ pixeltable/exec/data_row_batch.py,sha256=s85NVDAMdPzx1C9XbS9xieDtnpad33w86PbW1k8ar0U,3460
26
28
  pixeltable/exec/exec_context.py,sha256=jKeLStfkjwCKKAooC-7a7qZUnZU5O0_JQhanhVerV9c,984
27
- pixeltable/exec/exec_node.py,sha256=MsuCO7nCpmqfuNxTNKsz36sJVDrR-o-0-3S2FcXLwvM,4237
29
+ pixeltable/exec/exec_node.py,sha256=dEPVuXFU4niYONCk9ThKx8cZUBNkv0gbmKMDERgdDks,3671
28
30
  pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
29
31
  pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
30
32
  pixeltable/exec/expr_eval/expr_eval_node.py,sha256=klPhvsug91GiPIHkwcTj1ympxsoj8nbNHzkzkC-NR88,18953
31
33
  pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
32
34
  pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
33
- pixeltable/exec/expr_eval/schedulers.py,sha256=tAvCQKa1q0x7y7cdnGcTGbeku8QcoKH1GkgSm8ktOnM,17000
34
- pixeltable/exec/in_memory_data_node.py,sha256=vmxD2Jwn15Wjkf_3wufr35SPjb60H_I4zpUKaO1Zo_s,3592
35
+ pixeltable/exec/expr_eval/schedulers.py,sha256=DuebLy_3Bu3MTUG3AQNk7JcVv69OeeRFu5bcZGT5T2c,22233
36
+ pixeltable/exec/in_memory_data_node.py,sha256=OEyF7t9i0jN_hIRGqxWbV6dk1c-wWCaa-hx7m7v1dBE,3569
35
37
  pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7npyLBKY,2798
36
38
  pixeltable/exec/sql_node.py,sha256=cMoBGPOFVmvL3UFjCKxhU3huJu_ko0PRr55-XhbF1i0,27572
37
39
  pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,1096
38
40
  pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
39
41
  pixeltable/exprs/array_slice.py,sha256=8Zv0E2RghdJi1Mbk0kKtOz2ccGQuXwLLb6R9v1jk7hA,2180
40
- pixeltable/exprs/column_property_ref.py,sha256=zcp0tuW0m1czslIAo_ucGkmGAIWxeeCvWzXy1NyetgQ,3760
41
- pixeltable/exprs/column_ref.py,sha256=0n6jcHeWd3dOaqrLPHQ6VjYDwgS0OMLqX3H0k60_-lE,15216
42
+ pixeltable/exprs/column_property_ref.py,sha256=rq8VD34fZwAZuN9wIqQEwVay7LTPBKvXXdZPknOJM6M,4422
43
+ pixeltable/exprs/column_ref.py,sha256=MH83bYsef5UC4vWU71PE-lPiVd8hVw4tT6sjdCCvWNw,15473
42
44
  pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
43
45
  pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
44
46
  pixeltable/exprs/data_row.py,sha256=4mW5Q56L53gLAX7xI0uBRW7a5Ax66Q0W9Bi-k_ZBoe8,11800
45
47
  pixeltable/exprs/expr.py,sha256=uLEMuJzHwPW3hBIcsASnhjcPyGBkY8_8sFCqgRetKP0,36013
46
48
  pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
47
49
  pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
48
- pixeltable/exprs/function_call.py,sha256=_PxrEACVyiihdQdmTiiSv5WkZfOXSQFcGO18wPueM_Y,21989
50
+ pixeltable/exprs/function_call.py,sha256=k5_a9Fb7arw1q3PnInl8kpNKvlEZcYyOR_yOzRItKUU,21992
49
51
  pixeltable/exprs/globals.py,sha256=NIi16GCPYNFNrhDC0_IemHjFZEtbILJNmdxdguSdy00,2315
50
52
  pixeltable/exprs/in_predicate.py,sha256=u98JmBX9XsglKe5uCy1NUMnyi3wioBri_tue2vI9_sk,3799
51
53
  pixeltable/exprs/inline_expr.py,sha256=XYVKKXZN9BtHN5qlvZna-mgdOlot6WcmPu5usRBYei0,7972
@@ -55,8 +57,8 @@ pixeltable/exprs/json_path.py,sha256=sFuDjfz8_rlea4TKd68CS4pQTUiLDi68YwsgcQRHffI
55
57
  pixeltable/exprs/literal.py,sha256=OCJL_pw_WKqx3bXMEwL6yNaKVAKDtGRzSZUFwucRxZI,4860
56
58
  pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
57
59
  pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
58
- pixeltable/exprs/row_builder.py,sha256=90pYDuHd1fbaqbriYwl9iz3ciilbUAg_dq7M3lRq1j4,22334
59
- pixeltable/exprs/rowid_ref.py,sha256=SCPsDx3R55wtK-ND2xQQdV823RdeTF5HTcQ76e40NOE,5186
60
+ pixeltable/exprs/row_builder.py,sha256=K_HVjS1yxq2WImhVxSG_BG86ZyHaftfLenX5eVkQBmI,22394
61
+ pixeltable/exprs/rowid_ref.py,sha256=8MvQs3Uu01Gz__WXw9BCJv0CHrSaFDuQtU7rUr1AWEk,5008
60
62
  pixeltable/exprs/similarity_expr.py,sha256=i0UUnMSKKGXd3Uksu6FU2NvkfG0qzfzfi-GPy-LdutM,3688
61
63
  pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
62
64
  pixeltable/exprs/string_op.py,sha256=8GkqYpZrSJjHX1ghsUMI9Op2NJyBbvmLWJwDYf_vad0,4171
@@ -70,7 +72,7 @@ pixeltable/func/__init__.py,sha256=SQPtGr_9dZNyXzxaZQcP3oVLKnbbs4UqV6sg8XUQHxQ,5
70
72
  pixeltable/func/aggregate_function.py,sha256=5_MgqHAlMaacX2sPIHv_auTvYXtqR5MIZy_WqYQSdho,13264
71
73
  pixeltable/func/callable_function.py,sha256=g_pA-g631YcFGLix9PpHYfgjOeS2qF0Csm1VxX8fah0,9278
72
74
  pixeltable/func/expr_template_function.py,sha256=wEidKrOBTZkA3U1PAtG6-6RlDFiiRJszIG4zNOuPcNY,5940
73
- pixeltable/func/function.py,sha256=w1U3j8XNeE4ZZ-rKuG13aTa8YGFkWAXjalh4j29_-e4,23136
75
+ pixeltable/func/function.py,sha256=3nSXRdGFGi471x7_TMVdSgXs1SQuLv4HaUJA7NLhv_M,23140
74
76
  pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
75
77
  pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
76
78
  pixeltable/func/mcp.py,sha256=P9M2w8cm7ad-XmAcf2ZThfWmD8W46De1spwX98bZL4Y,2861
@@ -80,12 +82,12 @@ pixeltable/func/tools.py,sha256=hKmQFvfpBvtLcItPRpqAmqt_tDg6latwyfv5FXBofBc,6074
80
82
  pixeltable/func/udf.py,sha256=6tKpMt37t3BmXwRyA5fFAd6OM4D5EPEd2KuAr7DQhr0,13231
81
83
  pixeltable/functions/__init__.py,sha256=Akk6Nk-rpz2D_V4kJTfyP56xnNbCz3EtxVAuwLoiysA,588
82
84
  pixeltable/functions/anthropic.py,sha256=G2E0sH5vP933eZZxhz1tOByy5cg6N2XPvhSqIBzqufo,8782
83
- pixeltable/functions/audio.py,sha256=7bsm4igQEW7RYSrSevwqaUOqyEnvBbPbJ8c-VknDl1E,657
85
+ pixeltable/functions/audio.py,sha256=6_tUhSZgxhOQQJemvZYNEoKNjWdr3SgJsvLkKCSmtfw,1633
84
86
  pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
85
87
  pixeltable/functions/date.py,sha256=WUwqyrOWB8A00cTNEd6Vd7anQZo40_-7EWhpfpI-P6c,5323
86
88
  pixeltable/functions/deepseek.py,sha256=IAo2e_DhkM0A5NrskxuPQUGYzIYAl4do_mdO1Qc3PeY,3338
87
89
  pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
88
- pixeltable/functions/gemini.py,sha256=ZsbySkoMdOgZEUfFUccDbIdrbLb6DGRxzD88fHW-cRI,8317
90
+ pixeltable/functions/gemini.py,sha256=Yede8DzWEa4eboW7SNTOooBabriUlsnQMUdG5jCWRQo,8320
89
91
  pixeltable/functions/globals.py,sha256=ZXBV2LPXT2-yQYHHE7q8N1WdAr0WxiIO1ax0qwxhmK8,5118
90
92
  pixeltable/functions/groq.py,sha256=FpR_LJpfZfzyhEvoBMMbQpQ-VQSRzBsS9U21qaINwww,3593
91
93
  pixeltable/functions/huggingface.py,sha256=cJyf86qMcvivkGGNduNHAvh_idI-e4wJm0Zje1KJ2vQ,20611
@@ -95,39 +97,39 @@ pixeltable/functions/llama_cpp.py,sha256=1QB4vQ7J4Za1mL93bRIBXgokNtpzzYr_QU6KF27
95
97
  pixeltable/functions/math.py,sha256=eZEFjXxNHDHjcCsOMhzfNbJthTsmtNxtSFV8AEeRIfM,4979
96
98
  pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
97
99
  pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
98
- pixeltable/functions/openai.py,sha256=SxhYrL3vgIfjzwCPnjR6yoaNr7BbFwpGy7Su1FSY7G4,27713
100
+ pixeltable/functions/openai.py,sha256=8kGOUv2jh-df0ByMwP2sAQdSgzzSCj5WypCfhnvoD2c,27694
99
101
  pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
100
102
  pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
101
103
  pixeltable/functions/timestamp.py,sha256=0zp4urJagCcNLfJE0ltTCft-J9qs2C716TmRngKYaa0,9171
102
104
  pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
103
105
  pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
104
- pixeltable/functions/video.py,sha256=jS4YhMofD448YhGtI6ZXBAkeGw_AYYQTN0AbgHh_hok,6933
106
+ pixeltable/functions/video.py,sha256=zrh8De3w3zHe3QQ6T8d3IKGRNbin6wAcIQa6lRi5jL0,8511
105
107
  pixeltable/functions/vision.py,sha256=_a0wY3akkVhWnnxlq__1VzSLylytlNadpNOOPOwSfLk,15393
106
108
  pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
107
- pixeltable/globals.py,sha256=cQUzDiYzDftRhX1jwi1hi6OYx0zlDAMr04nShq75Knk,32226
109
+ pixeltable/globals.py,sha256=6BrrjMUWRae92vSglWXpMgGRIWf8Wutop1OQxU3A6n0,36269
108
110
  pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
109
111
  pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
110
112
  pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
111
113
  pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
112
- pixeltable/io/__init__.py,sha256=Yjq13pBCBoaZv-OkIY2XSusVOC5b6cB5C6NbgJq5H1g,620
113
- pixeltable/io/datarows.py,sha256=p1UGxQOTjqI6kgQNAa3aj8TkylcNDtaGBTorOg_Pk84,6088
114
- pixeltable/io/external_store.py,sha256=cs-_pbRpINTpVMoMRmaoHdYjrjoW--6MyYAG7aF_Efc,16515
114
+ pixeltable/io/__init__.py,sha256=chVGh3ygtZwSY6g_skIyCsjxwzo2847jDq9YGObAY98,608
115
+ pixeltable/io/datarows.py,sha256=UibRI3TH6E8WTaUSxVC4g0FfLcbM57OjbUIk3IQpU2k,6179
116
+ pixeltable/io/external_store.py,sha256=rOYBwTqcZZVU2toWxJ_9Iy2w2YO0DhuABrM2xGmqHSo,14787
115
117
  pixeltable/io/fiftyone.py,sha256=v0r28bIk2I0TRP5DfVHtBIUa4DpIJDK5sgExxOmHZ_w,6882
116
- pixeltable/io/globals.py,sha256=hxiwdCrRMGZ0IMPtleVkiqnthwHG-oemDV10Kf1Lbnk,11362
117
- pixeltable/io/hf_datasets.py,sha256=gWyBH_0iFvxcrrxMY9_W399ZRcNDCmWFOAMmb1apnY0,5246
118
- pixeltable/io/label_studio.py,sha256=rcsOp45c5CyY5ArkKJz_jyE40edpFPgU_8ZDaV2UrgQ,31423
119
- pixeltable/io/pandas.py,sha256=AbOeRDlA4MvUvianSKixsU-x-64nasPWw4HCHD6emz4,8981
118
+ pixeltable/io/globals.py,sha256=so-skHogbXocuzI_IweH2cEX_SW_tDvFqBZyxeMyMzc,11375
119
+ pixeltable/io/hf_datasets.py,sha256=USCWp0nqs2D9FFfxlGhFy6pn2kDUwGfDHgUiv0-osc8,5634
120
+ pixeltable/io/label_studio.py,sha256=XpPkOLktm37Jnhh5ce1PQpUYzeuPJjoCZDaSGedagF4,31426
121
+ pixeltable/io/pandas.py,sha256=wzxBggItahT0yjGoV0G_csVAcYlcMXArlF6lfePXqUc,9053
120
122
  pixeltable/io/parquet.py,sha256=-cxyy9wMRzGFDJWhUIjACfQMyAmajyoFcTXSkB8qESE,7818
121
- pixeltable/io/table_data_conduit.py,sha256=8SEcOPTgPiKHqlDp0rvGcPOF4v8jRX5TwHwfi5MHYt4,22003
123
+ pixeltable/io/table_data_conduit.py,sha256=8pTWXr9fCWUbGPcNX7Fm3WXhipBiv3pdbTMok02vbQs,22078
122
124
  pixeltable/io/utils.py,sha256=YMfhpqMitWz1PhXJGkCNOgNtEM1AZ55S0zXVhljC5kY,4260
123
125
  pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
124
- pixeltable/iterators/audio.py,sha256=wSVGdL5GeO3uY_lU-pNlY49E5dExIaJWY6oaXm-MnSU,9150
126
+ pixeltable/iterators/audio.py,sha256=Xuv6sOuhhMbof87JrlO218Fm_j6MoMxEr88otmoXME4,9623
125
127
  pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
126
128
  pixeltable/iterators/document.py,sha256=wJYSnzusJFaxipv5y0uQw-surN9fFz0Aq-s7w_l_Yk8,20306
127
- pixeltable/iterators/image.py,sha256=nWm-03CxNvHRdTr8U6PvWEnEiquqIQNG5rB-3Y44Mm4,3440
129
+ pixeltable/iterators/image.py,sha256=RrFdf5cnFIQzWKJk4uYi1m1p2qAiz909THYhRQ27DbY,3603
128
130
  pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
129
131
  pixeltable/iterators/video.py,sha256=L5S1YPmT_zM11vW9fK6d5nQpUvHVewQWmfDmy4BD45E,9134
130
- pixeltable/metadata/__init__.py,sha256=iDL2NJXvrJoc6pJ7xWLaQLZnzXt58UfnPRZw0U3Ci2Q,3154
132
+ pixeltable/metadata/__init__.py,sha256=iJxMsd3s5yNZ5ciIBzQCa0frXZKgvFj2_-H0Sf4N1mk,3154
131
133
  pixeltable/metadata/converters/convert_10.py,sha256=myYIo1DyccnsQUxDKG6mafnU5ge_EhZpHg_pesKBoK4,708
132
134
  pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
133
135
  pixeltable/metadata/converters/convert_13.py,sha256=B-_EkL0pSl1mAiv6DymeUAyBQUcYcV1qDdNz3Q359kc,1369
@@ -156,23 +158,24 @@ pixeltable/metadata/converters/convert_35.py,sha256=c88qft0RFQbdFIE_PZRHMjeku1r5
156
158
  pixeltable/metadata/converters/convert_36.py,sha256=g1rhZhAYfZpAwUgE3D1aipIR4RNvikhbKcrnBJzm0wM,1215
157
159
  pixeltable/metadata/converters/convert_37.py,sha256=IVZGtKFaaYMGBs39V_H_okWvpxxadTUWqxoln0cNeQI,392
158
160
  pixeltable/metadata/converters/convert_38.py,sha256=YyNyocwzzdJRcI0YSCo_70Q4hSk63235iE4IxhwSEzs,1169
159
- pixeltable/metadata/converters/util.py,sha256=95pfg9amEOmhho32PIbNYnqagVIN9adIcLXxB6zSYDY,7527
160
- pixeltable/metadata/notes.py,sha256=HXskIW7HqbVXqhzZm0VTZn2q1RW6Qk0P5mpifmBS_9w,1485
161
- pixeltable/metadata/schema.py,sha256=l8ZGcASiTrtaMW9jPDMtZmoT2BamGIDhujNUVgdag5E,11720
161
+ pixeltable/metadata/converters/convert_39.py,sha256=YaEfgStxtYGRbuRLFw8wTAZVJRzIU6zL6nPU2zuDcEU,4658
162
+ pixeltable/metadata/converters/util.py,sha256=QUBOj2F_6rCAdIo0lgD1IVgAM15Vmq7ikQspB4s0eQ8,7732
163
+ pixeltable/metadata/notes.py,sha256=3fdZDFpL1-b194Ejv0Y0YP-vbnV-XvVP9wOmZM9XARA,1545
164
+ pixeltable/metadata/schema.py,sha256=3x-ZBzjoTep7UScSqsVKU-dWSOCgsM8YYZYE0a9S5ZU,13446
162
165
  pixeltable/metadata/utils.py,sha256=NJQXWhhK1hdOZ4H3hh9N0mqbl-I9JqMUqrfA6OWLflE,2682
163
- pixeltable/plan.py,sha256=K_qO-BnSZOShGr9uGRsiCLPXJOeOzh5eGeODrqviMlQ,49053
166
+ pixeltable/plan.py,sha256=nnMiBiQNJ0fWBNetyypVggCBCDWekTvKiSCMeays7Os,49369
164
167
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
168
  pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
166
- pixeltable/share/packager.py,sha256=wqOuuUXOor6YLzR9oZSYuJmdbkfBetZB3NkndsqbX3I,32172
169
+ pixeltable/share/packager.py,sha256=WDid1dOogPbAkF7pPrLe17eYR0_FWubvExU26ooQl4c,30994
167
170
  pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
168
- pixeltable/store.py,sha256=v0TI_w8NemhV-njrsj7IH8PXE4gz4mjjHesWoFNIQf4,24402
169
- pixeltable/type_system.py,sha256=P-ykQDPKbMZHtkozdrcBBpuX60Zc1nzwjwzSwlxIzPg,55319
171
+ pixeltable/store.py,sha256=cSTcgx_OtXnHH2pSM2Fv9D8gP9vFiLSGIDUSzht_QEs,23874
172
+ pixeltable/type_system.py,sha256=DuCWaHPeToQ22lDmcQRRHKTEz7ATAfFSYcRgQvdniQM,55321
170
173
  pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
171
174
  pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
172
175
  pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
173
176
  pixeltable/utils/code.py,sha256=SbG5OUF_fQAbOgGZHDuENijmbzisVqa4VS9guaZ0KtU,1231
174
177
  pixeltable/utils/console_output.py,sha256=x23iDnNwUbsr7Ec20BQ7BLATTsrQZflxc9NucAt_sVU,1150
175
- pixeltable/utils/coroutine.py,sha256=IPUqBpwHkDNaioMde7Km3LU8s54SGXVOtRJpYPkm1gE,1425
178
+ pixeltable/utils/coroutine.py,sha256=d87kLlkVIZq2u0kTE7kJ5Tc_yjEkdGi5sXAuxjLLxXY,896
176
179
  pixeltable/utils/dbms.py,sha256=cuQqlzLF7WON_mkJZ4QWlfX6lCxA97V32lhtMcOlDLg,2018
177
180
  pixeltable/utils/description_helper.py,sha256=acibNm36wkZG7h6k8gjcypTD_PVV2SL7YgX6cPYP1i8,3743
178
181
  pixeltable/utils/documents.py,sha256=x3UHU7eykibyA3eVkSrCK1CQoaid228vp96WUEESssU,3105
@@ -181,13 +184,13 @@ pixeltable/utils/filecache.py,sha256=8RZZiEkD4awZpR-mn7OhoZPc6_JlPUNSBnMU8BcEAv4
181
184
  pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
182
185
  pixeltable/utils/http_server.py,sha256=B5iQ1s_VuwsVC7pUm1joGjLZqaluV8_RfFiU8V1FuG8,2453
183
186
  pixeltable/utils/iceberg.py,sha256=L_s9G9NMIGMQdRHtNkks6ntTVW4DKKAw97R9gRmtw5s,553
184
- pixeltable/utils/media_store.py,sha256=Dhsnj1ZPRSX0iyGOu4JU4pC3fvSBd7sQpruVHqzKm7A,3089
187
+ pixeltable/utils/media_store.py,sha256=A93aYYhkq3Bz2Q9O7THwAew6z3peOssHK-Tg6YGWCNc,5466
185
188
  pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
186
189
  pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
187
190
  pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
188
191
  pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
189
- pixeltable-0.4.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
190
- pixeltable-0.4.2.dist-info/METADATA,sha256=RFiialgbsCHPt69fJ4aRgUpLcL1XGo47icfCrzJiMCo,20577
191
- pixeltable-0.4.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
192
- pixeltable-0.4.2.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
193
- pixeltable-0.4.2.dist-info/RECORD,,
192
+ pixeltable-0.4.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
193
+ pixeltable-0.4.4.dist-info/METADATA,sha256=vZzbRSRb1dnaspIVYNFnD5Q6NsxIo-zNkY4qCCGBvSk,20577
194
+ pixeltable-0.4.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
195
+ pixeltable-0.4.4.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
196
+ pixeltable-0.4.4.dist-info/RECORD,,