pixeltable 0.4.3__py3-none-any.whl → 0.4.5__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (52) hide show
  1. pixeltable/__version__.py +2 -2
  2. pixeltable/catalog/__init__.py +1 -1
  3. pixeltable/catalog/catalog.py +619 -255
  4. pixeltable/catalog/dir.py +1 -2
  5. pixeltable/catalog/insertable_table.py +9 -9
  6. pixeltable/catalog/path.py +59 -20
  7. pixeltable/catalog/schema_object.py +10 -4
  8. pixeltable/catalog/table.py +51 -53
  9. pixeltable/catalog/table_version.py +216 -156
  10. pixeltable/catalog/table_version_path.py +1 -1
  11. pixeltable/catalog/tbl_ops.py +44 -0
  12. pixeltable/catalog/view.py +63 -65
  13. pixeltable/config.py +12 -4
  14. pixeltable/dataframe.py +75 -6
  15. pixeltable/env.py +46 -17
  16. pixeltable/exec/aggregation_node.py +1 -1
  17. pixeltable/exec/cache_prefetch_node.py +2 -6
  18. pixeltable/exec/component_iteration_node.py +4 -3
  19. pixeltable/exec/data_row_batch.py +10 -51
  20. pixeltable/exec/expr_eval/expr_eval_node.py +2 -2
  21. pixeltable/exec/in_memory_data_node.py +17 -16
  22. pixeltable/exec/sql_node.py +6 -7
  23. pixeltable/exprs/column_ref.py +2 -1
  24. pixeltable/exprs/data_row.py +13 -13
  25. pixeltable/exprs/row_builder.py +16 -4
  26. pixeltable/exprs/string_op.py +1 -1
  27. pixeltable/func/expr_template_function.py +1 -4
  28. pixeltable/functions/date.py +1 -1
  29. pixeltable/functions/gemini.py +4 -4
  30. pixeltable/functions/math.py +1 -1
  31. pixeltable/functions/openai.py +9 -6
  32. pixeltable/functions/timestamp.py +6 -6
  33. pixeltable/functions/video.py +2 -6
  34. pixeltable/globals.py +62 -33
  35. pixeltable/io/datarows.py +2 -1
  36. pixeltable/io/pandas.py +1 -0
  37. pixeltable/io/table_data_conduit.py +12 -13
  38. pixeltable/iterators/audio.py +17 -8
  39. pixeltable/iterators/image.py +5 -2
  40. pixeltable/metadata/schema.py +39 -2
  41. pixeltable/plan.py +5 -14
  42. pixeltable/share/packager.py +13 -13
  43. pixeltable/store.py +31 -7
  44. pixeltable/type_system.py +2 -1
  45. pixeltable/utils/filecache.py +1 -1
  46. pixeltable/utils/http_server.py +2 -3
  47. pixeltable/utils/media_store.py +90 -34
  48. {pixeltable-0.4.3.dist-info → pixeltable-0.4.5.dist-info}/METADATA +1 -1
  49. {pixeltable-0.4.3.dist-info → pixeltable-0.4.5.dist-info}/RECORD +52 -51
  50. {pixeltable-0.4.3.dist-info → pixeltable-0.4.5.dist-info}/LICENSE +0 -0
  51. {pixeltable-0.4.3.dist-info → pixeltable-0.4.5.dist-info}/WHEEL +0 -0
  52. {pixeltable-0.4.3.dist-info → pixeltable-0.4.5.dist-info}/entry_points.txt +0 -0
pixeltable/store.py CHANGED
@@ -7,6 +7,7 @@ import warnings
7
7
  from typing import Any, Iterable, Iterator, Optional, Union
8
8
 
9
9
  import more_itertools
10
+ import psycopg
10
11
  import sqlalchemy as sql
11
12
  from tqdm import TqdmWarning, tqdm
12
13
 
@@ -122,15 +123,20 @@ class StoreBase:
122
123
  def _storage_name(self) -> str:
123
124
  """Return the name of the data store table"""
124
125
 
125
- def _move_tmp_media_file(self, file_url: Optional[str], col: catalog.Column, v_min: int) -> str:
126
- return MediaStore.move_tmp_media_file(file_url, self.tbl_version.id, col.id, v_min)
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
127
133
 
128
134
  def _move_tmp_media_files(
129
135
  self, table_row: list[Any], media_cols_by_sql_idx: dict[int, catalog.Column], v_min: int
130
136
  ) -> None:
131
137
  """Move tmp media files that we generated to a permanent location"""
132
138
  for n, col in media_cols_by_sql_idx.items():
133
- table_row[n] = self._move_tmp_media_file(table_row[n], col, v_min)
139
+ table_row[n] = self._move_tmp_media_file(table_row[n], col)
134
140
 
135
141
  def count(self) -> int:
136
142
  """Return the number of rows visible in self.tbl_version"""
@@ -146,8 +152,28 @@ class StoreBase:
146
152
  return result
147
153
 
148
154
  def create(self) -> None:
155
+ """Create If Not Exists for this table"""
149
156
  conn = Env.get().conn
150
- self.sa_md.create_all(bind=conn)
157
+ stmt = sql.schema.CreateTable(self.sa_tbl).compile(conn)
158
+ create_stmt = str(stmt)
159
+ if_not_exists_stmt = create_stmt.replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS')
160
+
161
+ # Postgres seems not to handle concurrent Create Table If Not Exists correctly, we need to ignore the various
162
+ # errors that can occur when two connections run the same Create Table statement.
163
+ try:
164
+ conn.execute(sql.text(if_not_exists_stmt))
165
+ except (sql.exc.IntegrityError, sql.exc.ProgrammingError) as e:
166
+ Env.get().console_logger.info(f'StoreBase.create() failed with: {e}')
167
+ if (
168
+ isinstance(e.orig, psycopg.errors.UniqueViolation)
169
+ and 'duplicate key value violates unique constraint "pg_type_typname_nsp_index"' in str(e.orig)
170
+ ) or (
171
+ isinstance(e.orig, (psycopg.errors.DuplicateObject, psycopg.errors.DuplicateTable))
172
+ and 'already exists' in str(e.orig)
173
+ ):
174
+ pass
175
+ else:
176
+ raise
151
177
 
152
178
  def drop(self) -> None:
153
179
  """Drop store table"""
@@ -238,9 +264,7 @@ class StoreBase:
238
264
  raise excs.Error(f'Error while evaluating computed column {col.name!r}:\n{exc}') from exc
239
265
  table_row, num_row_exc = row_builder.create_table_row(row, None, row.pk)
240
266
  if col.col_type.is_media_type():
241
- table_row[tmp_val_col_sql_idx] = self._move_tmp_media_file(
242
- table_row[tmp_val_col_sql_idx], col, row.pk[-1]
243
- )
267
+ table_row[tmp_val_col_sql_idx] = self._move_tmp_media_file(table_row[tmp_val_col_sql_idx], col)
244
268
  num_excs += num_row_exc
245
269
  batch_table_rows.append(tuple(table_row))
246
270
 
pixeltable/type_system.py CHANGED
@@ -5,6 +5,7 @@ import datetime
5
5
  import enum
6
6
  import io
7
7
  import json
8
+ import types
8
9
  import typing
9
10
  import urllib.parse
10
11
  import urllib.request
@@ -307,7 +308,7 @@ class ColumnType:
307
308
  """
308
309
  origin = typing.get_origin(t)
309
310
  type_args = typing.get_args(t)
310
- if origin is typing.Union:
311
+ if origin in (typing.Union, types.UnionType):
311
312
  # Check if `t` has the form Optional[T].
312
313
  if len(type_args) == 2 and type(None) in type_args:
313
314
  # `t` is a type of the form Optional[T] (equivalently, Union[T, None] or Union[None, T]).
@@ -214,7 +214,7 @@ class FileCache:
214
214
  new_path = entry.path
215
215
  os.rename(str(path), str(new_path))
216
216
  new_path.touch(exist_ok=True)
217
- _logger.debug(f'added entry for cell {url} to file cache')
217
+ _logger.debug(f'FileCache: cached url {url} with file name {new_path}')
218
218
  return new_path
219
219
 
220
220
  def ensure_capacity(self, size: int) -> None:
@@ -2,7 +2,7 @@ import http
2
2
  import http.server
3
3
  import logging
4
4
  import pathlib
5
- import urllib
5
+ import urllib.request
6
6
  from typing import Any
7
7
 
8
8
  _logger = logging.getLogger('pixeltable.http.server')
@@ -36,8 +36,7 @@ class AbsolutePathHandler(http.server.SimpleHTTPRequestHandler):
36
36
  path = path.split('?', 1)[0]
37
37
  path = path.split('#', 1)[0]
38
38
 
39
- path = pathlib.Path(urllib.request.url2pathname(path))
40
- return str(path)
39
+ return str(pathlib.Path(urllib.request.url2pathname(path)))
41
40
 
42
41
  def log_message(self, format: str, *args: Any) -> None:
43
42
  """override logging to stderr in http.server.BaseHTTPRequestHandler"""
@@ -1,91 +1,147 @@
1
+ from __future__ import annotations
2
+
1
3
  import glob
2
4
  import os
3
5
  import re
4
6
  import shutil
5
- import urllib
7
+ import urllib.parse
8
+ import urllib.request
6
9
  import uuid
7
10
  from collections import defaultdict
8
11
  from pathlib import Path
9
- from typing import Optional
12
+ from typing import TYPE_CHECKING, Optional
10
13
  from uuid import UUID
11
14
 
12
- from pixeltable.env import Env
15
+ import PIL.Image
16
+
17
+ from pixeltable import env
18
+
19
+ if TYPE_CHECKING:
20
+ from pixeltable.catalog import Column
13
21
 
14
22
 
15
23
  class MediaStore:
16
24
  """
17
25
  Utilities to manage media files stored in Env.media_dir
18
26
 
19
- Media file names are a composite of: table id, column id, version, uuid:
20
- the table id/column id/version are redundant but useful for identifying all files for a table
27
+ Media file names are a composite of: table id, column id, tbl_version, new uuid:
28
+ the table id/column id/tbl_version are redundant but useful for identifying all files for a table
21
29
  or all files created for a particular version of a table
22
30
  """
23
31
 
24
32
  pattern = re.compile(r'([0-9a-fA-F]+)_(\d+)_(\d+)_([0-9a-fA-F]+)') # tbl_id, col_id, version, uuid
25
33
 
26
34
  @classmethod
27
- def prepare_media_path(cls, tbl_id: UUID, col_id: int, version: int, ext: Optional[str] = None) -> Path:
35
+ def _media_dir(cls) -> Path:
36
+ """Returns the media directory path."""
37
+ return env.Env.get().media_dir
38
+
39
+ @classmethod
40
+ def _tmp_dir(cls) -> Path:
41
+ """Returns the temporary directory path."""
42
+ return env.Env.get().tmp_dir
43
+
44
+ @classmethod
45
+ def _prepare_media_path(cls, col: Column, ext: Optional[str] = None) -> Path:
28
46
  """
29
47
  Construct a new, unique Path name for a persisted media file, and create the parent directory
30
48
  for the new Path if it does not already exist. The Path will reside in
31
49
  the environment's media_dir.
32
50
  """
33
51
  id_hex = uuid.uuid4().hex
34
- parent = Env.get().media_dir / tbl_id.hex / id_hex[:2] / id_hex[:4]
52
+ parent = cls._media_dir() / col.tbl.id.hex / id_hex[:2] / id_hex[:4]
35
53
  parent.mkdir(parents=True, exist_ok=True)
36
- return parent / f'{tbl_id.hex}_{col_id}_{version}_{id_hex}{ext or ""}'
54
+ return parent / f'{col.tbl.id.hex}_{col.id}_{col.tbl.version}_{id_hex}{ext or ""}'
37
55
 
38
56
  @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.
57
+ def resolve_tmp_url(cls, file_url: Optional[str]) -> Optional[Path]:
58
+ """Return path if the given url is a tmp file.
42
59
 
43
60
  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
61
+ file_url: URL of the tmp media file to check
48
62
 
49
63
  Returns:
50
- URL of the media final location of the file
64
+ If the file_url is a tmp file, return a Path() to the tmp file, None, otherwise
51
65
  """
52
66
  if file_url is None:
53
67
  return None
54
68
  assert isinstance(file_url, str), type(file_url)
55
- pxt_tmp_dir = str(Env.get().tmp_dir)
56
69
  parsed = urllib.parse.urlparse(file_url)
57
70
  # We should never be passed a local file path here. The "len > 1" ensures that Windows
58
71
  # file paths aren't mistaken for URLs with a single-character scheme.
59
72
  assert len(parsed.scheme) > 1, file_url
60
73
  if parsed.scheme != 'file':
61
74
  # 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):
75
+ return None
76
+ src_path = urllib.parse.unquote(urllib.request.url2pathname(parsed.path))
77
+ pxt_tmp_dir = str(cls._tmp_dir())
78
+ if not src_path.startswith(pxt_tmp_dir):
65
79
  # 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
80
+ return None
81
+ return Path(src_path)
69
82
 
70
83
  @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)
84
+ def relocate_local_media_file(cls, src_path: Path, col: Column) -> str:
85
+ """Relocate a local file to the MediaStore, and return its new URL"""
86
+ dest_path = cls._prepare_media_path(col, ext=src_path.suffix)
73
87
  src_path.rename(dest_path)
74
88
  return urllib.parse.urljoin('file:', urllib.request.pathname2url(str(dest_path)))
75
89
 
76
90
  @classmethod
77
- def delete(cls, tbl_id: UUID, version: Optional[int] = None) -> None:
78
- """Delete all files belonging to tbl_id. If version is not None, delete
79
- only those files belonging to the specified version."""
91
+ def save_media_object(cls, data: bytes | PIL.Image.Image, col: Column, format: Optional[str]) -> tuple[Path, str]:
92
+ """Save a media data to a file in the MediaStore
93
+ Returns:
94
+ dest_path: Path to the saved media file
95
+ url: URL of the saved media file
96
+ """
97
+ assert col.col_type.is_media_type(), f'MediaStore: request to store non media_type Column {col.name}'
98
+ dest_path = cls._prepare_media_path(col)
99
+ if isinstance(data, bytes):
100
+ dest_path = cls._save_binary_media_file(data, dest_path, format)
101
+ elif isinstance(data, PIL.Image.Image):
102
+ dest_path = cls._save_pil_image_file(data, dest_path, format)
103
+ else:
104
+ raise ValueError(f'Unsupported media object type: {type(data)}')
105
+ url = urllib.parse.urljoin('file:', urllib.request.pathname2url(str(dest_path)))
106
+ return dest_path, url
107
+
108
+ @classmethod
109
+ def _save_binary_media_file(cls, file_data: bytes, dest_path: Path, format: Optional[str]) -> Path:
110
+ """Save a media binary data to a file in the MediaStore. format is ignored for binary data."""
111
+ assert isinstance(file_data, bytes)
112
+ with open(dest_path, 'wb') as f:
113
+ f.write(file_data)
114
+ f.flush() # Ensures Python buffers are written to OS
115
+ os.fsync(f.fileno()) # Forces OS to write to physical storage
116
+ return dest_path
117
+
118
+ @classmethod
119
+ def _save_pil_image_file(cls, image: PIL.Image.Image, dest_path: Path, format: Optional[str]) -> Path:
120
+ """Save a PIL Image to a file in the MediaStore with the specified format."""
121
+ if dest_path.suffix != f'.{format}':
122
+ dest_path = dest_path.with_name(f'{dest_path.name}.{format}')
123
+
124
+ with open(dest_path, 'wb') as f:
125
+ image.save(f, format=format)
126
+ f.flush() # Ensures Python buffers are written to OS
127
+ os.fsync(f.fileno()) # Forces OS to write to physical storage
128
+ return dest_path
129
+
130
+ @classmethod
131
+ def delete(cls, tbl_id: UUID, tbl_version: Optional[int] = None) -> None:
132
+ """Delete all files belonging to tbl_id. If tbl_version is not None, delete
133
+ only those files belonging to the specified tbl_version."""
80
134
  assert tbl_id is not None
81
- if version is None:
135
+ if tbl_version is None:
82
136
  # Remove the entire folder for this table id.
83
- path = Env.get().media_dir / tbl_id.hex
137
+ path = cls._media_dir() / tbl_id.hex
84
138
  if path.exists():
85
139
  shutil.rmtree(path)
86
140
  else:
87
- # Remove only the elements for the specified version.
88
- paths = glob.glob(str(Env.get().media_dir / tbl_id.hex) + f'/**/{tbl_id.hex}_*_{version}_*', recursive=True)
141
+ # Remove only the elements for the specified tbl_version.
142
+ paths = glob.glob(
143
+ str(cls._media_dir() / tbl_id.hex) + f'/**/{tbl_id.hex}_*_{tbl_version}_*', recursive=True
144
+ )
89
145
  for p in paths:
90
146
  os.remove(p)
91
147
 
@@ -94,12 +150,12 @@ class MediaStore:
94
150
  """
95
151
  Return number of files for given tbl_id.
96
152
  """
97
- paths = glob.glob(str(Env.get().media_dir / tbl_id.hex) + f'/**/{tbl_id.hex}_*', recursive=True)
153
+ paths = glob.glob(str(cls._media_dir() / tbl_id.hex) + f'/**/{tbl_id.hex}_*', recursive=True)
98
154
  return len(paths)
99
155
 
100
156
  @classmethod
101
157
  def stats(cls) -> list[tuple[UUID, int, int, int]]:
102
- paths = glob.glob(str(Env.get().media_dir) + '/**', recursive=True)
158
+ paths = glob.glob(str(cls._media_dir()) + '/**', recursive=True)
103
159
  # key: (tbl_id, col_id), value: (num_files, size)
104
160
  d: dict[tuple[UUID, int], list[int]] = defaultdict(lambda: [0, 0])
105
161
  for p in paths:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pixeltable
3
- Version: 0.4.3
3
+ Version: 0.4.5
4
4
  Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
5
  License: Apache-2.0
6
6
  Keywords: data-science,machine-learning,database,ai,computer-vision,chatbot,ml,artificial-intelligence,feature-engineering,multimodal,mlops,feature-store,vector-database,llm,genai
@@ -1,48 +1,49 @@
1
1
  pixeltable/__init__.py,sha256=-bu8Al-s2PyGpPYZgj016gMl9s6NMQfjxVRwvhfd8IY,1457
2
- pixeltable/__version__.py,sha256=M4v_pNiomPFxqBLXiV15gErZhRoX50LOCHOE430L1kM,112
3
- pixeltable/catalog/__init__.py,sha256=qXP4X1r5rVPvex_lIPSlQZrM7CoIxuvSI69h50SUlaE,624
4
- pixeltable/catalog/catalog.py,sha256=GMXR63x0OzGrST0vhg7OEfyTBllaYkt-8AY_b7mbbfM,75418
2
+ pixeltable/__version__.py,sha256=Rp6F2grEwgqmKV0IXDP2NQb_ynOCuLS_E2fEnAzoerI,112
3
+ pixeltable/catalog/__init__.py,sha256=oiiga_fe4iQsBh8lfLjLBTbvzaZfD4QM7hmMZDpAGGU,636
4
+ pixeltable/catalog/catalog.py,sha256=k5F-v0NIImRHAM8zT0v2X6Ri56fjdJfnfHcnXYz39i0,93883
5
5
  pixeltable/catalog/column.py,sha256=HZfujfvdkJeyOWfgmVutJLWOy19R8ZFczaEjYTZ5NQo,11495
6
- pixeltable/catalog/dir.py,sha256=HFemOf67Nfw13EOpQsR_UgzP2L1w4LDfw2009DrSK0Y,2063
6
+ pixeltable/catalog/dir.py,sha256=VYTscPlKR6XhupPTXlJ8txAHxS5GSpPJ3LIleDJagVQ,2047
7
7
  pixeltable/catalog/globals.py,sha256=uMIDsbeDzFxZbcgKDTOiT5plC1gAKgz1oxxdh1odIPw,2648
8
- pixeltable/catalog/insertable_table.py,sha256=zK48JZYWz4aKus97OOH51E1vcSFdEwzY_muf5X6wpP0,9442
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=VdoRy2eRVyR3FhJoo8wVFcuqqEq4o36RJsJ0cDX4Cac,2705
11
- pixeltable/catalog/schema_object.py,sha256=jqOhZcI9QbT_EseDRQsVrp4pZ7jKB1wy4Sa-6aAvUCI,2004
12
- pixeltable/catalog/table.py,sha256=7CL-_xsO258VH-3vbQ7XgS_kr8-dGHpJT4w07bH9nI4,76331
13
- pixeltable/catalog/table_version.py,sha256=9K9_QDM8-PyRH79nE5KX-C__QAounUPB24-QQ3aPiEk,68208
10
+ pixeltable/catalog/path.py,sha256=O3FfxrvyX2crijBhp_2k4-3mG3BFxwba-tlPB74QtJQ,3780
11
+ pixeltable/catalog/schema_object.py,sha256=_7m3i-5IX-_yNkWXeq97ZbfDwAfrYPFhnc5ifghADcE,2195
12
+ pixeltable/catalog/table.py,sha256=OF2FZ95ipQgXLa8WvDZfz4AHCawpHMe4A73j694aXPI,76111
13
+ pixeltable/catalog/table_version.py,sha256=sJhIbrDcgDFCV22acOedG10jWsYAsWBEqLEnWeyfWFA,68583
14
14
  pixeltable/catalog/table_version_handle.py,sha256=FTPRqcGY-h-POcWyZbd9b8P2D5zIw5OSUvwF_dbyCGo,3608
15
- pixeltable/catalog/table_version_path.py,sha256=uRATYbAN0OXEkW1GZEC4hZulzvh8IJRwaN66ifUTJfw,9787
15
+ pixeltable/catalog/table_version_path.py,sha256=TcMG-R5b0O72HCvk0Qn8kGpZnfIsYhawOP7RjP1Sjb4,9815
16
+ pixeltable/catalog/tbl_ops.py,sha256=Vdcz4Nzvdw09zcQaCEaOr9Uufk2rQHgG0vBvMbQp9R8,1145
16
17
  pixeltable/catalog/update_status.py,sha256=tF3KkDc6kvEQ7Tg3VMj-n774uKi1iLla61wLyeuwDRs,6888
17
- pixeltable/catalog/view.py,sha256=FeTKerWVQfWv2yJgj2yc2E_m0qINFyTbCPO5SSYixZM,15053
18
- pixeltable/config.py,sha256=UGLZ-A7exqGB5os3BluMXXj3iEo7mGQKBXebriTZjkQ,7148
19
- pixeltable/dataframe.py,sha256=964O5FaXup7XxcwwRQCgEgq62UrqWnGWn8TLU5UOuoY,60679
20
- pixeltable/env.py,sha256=GyQAE6R5IXbvdvNFgWj8BxEuKOpBwLSNUlde0e1YSME,36913
18
+ pixeltable/catalog/view.py,sha256=vIU8kOwjnuvrZTj6cJ-ZC6czdx1DBWJnD4R3bb-pwIw,15123
19
+ pixeltable/config.py,sha256=NbiB6qoE8ujjEHpRbzlNDUMTi6EFvJ0sGHGxdwkWkgc,7472
20
+ pixeltable/dataframe.py,sha256=CtgHlozd6coPGcnMd1XF_Gsh0q0hy3A7co2SZJosFA0,63072
21
+ pixeltable/env.py,sha256=zd2E7ZKuAdIZjAoDfdVesfwTSCOUdF9lq0-Y_l3bLmc,38290
21
22
  pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
22
23
  pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
23
- pixeltable/exec/aggregation_node.py,sha256=HqzISO1nv7_DFyqjZLRkjtbDJl9fIEto1i6Kh5ru8vA,4498
24
- pixeltable/exec/cache_prefetch_node.py,sha256=GOa70eJDFY3FQV3VvJOrUVI8LFvro-r-V6sh3w-eJAc,12130
25
- pixeltable/exec/component_iteration_node.py,sha256=FZszWHrzsjHxCbUTwXtJIlgQqgYtvKZB6QWiDGkfIbs,4757
26
- pixeltable/exec/data_row_batch.py,sha256=EAB15JRhXbWIe91x1J5N5lFiMXzjB8NGTFjZsBDSbf8,3393
24
+ pixeltable/exec/aggregation_node.py,sha256=2GGg0WraYYUZxUK4CURYKyCeAg-ojRHkZEAAo1Z-0vE,4490
25
+ pixeltable/exec/cache_prefetch_node.py,sha256=rAGCSR8nJ_LkdYhyEUqVZen85xO_ikOFu_SqYOpR2Rw,11865
26
+ pixeltable/exec/component_iteration_node.py,sha256=7k8Wfzjc15SO0V8rc-zYTiB3DQ-euMtNQIOsve_FY7I,4797
27
+ pixeltable/exec/data_row_batch.py,sha256=kqSM33A3w8nEzUsBJ-sz3DFVfQYibz57djdm_ZYvBnk,1737
27
28
  pixeltable/exec/exec_context.py,sha256=jKeLStfkjwCKKAooC-7a7qZUnZU5O0_JQhanhVerV9c,984
28
29
  pixeltable/exec/exec_node.py,sha256=dEPVuXFU4niYONCk9ThKx8cZUBNkv0gbmKMDERgdDks,3671
29
30
  pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
30
31
  pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
31
- pixeltable/exec/expr_eval/expr_eval_node.py,sha256=klPhvsug91GiPIHkwcTj1ympxsoj8nbNHzkzkC-NR88,18953
32
+ pixeltable/exec/expr_eval/expr_eval_node.py,sha256=s7rb58bwBZsZyK7UXm9PEZa1JQpidCfewK_gin3MXP0,18933
32
33
  pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
33
34
  pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
34
35
  pixeltable/exec/expr_eval/schedulers.py,sha256=DuebLy_3Bu3MTUG3AQNk7JcVv69OeeRFu5bcZGT5T2c,22233
35
- pixeltable/exec/in_memory_data_node.py,sha256=vmxD2Jwn15Wjkf_3wufr35SPjb60H_I4zpUKaO1Zo_s,3592
36
+ pixeltable/exec/in_memory_data_node.py,sha256=xg7dyX0EMs35AgAMW98SGt7X48F9teQgQR4Awb8BhVI,3568
36
37
  pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7npyLBKY,2798
37
- pixeltable/exec/sql_node.py,sha256=cMoBGPOFVmvL3UFjCKxhU3huJu_ko0PRr55-XhbF1i0,27572
38
+ pixeltable/exec/sql_node.py,sha256=EHZNvbkzECJUgCQtqFjC1yGr6PkSYZXM3wPlAGcGuAI,27436
38
39
  pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,1096
39
40
  pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
40
41
  pixeltable/exprs/array_slice.py,sha256=8Zv0E2RghdJi1Mbk0kKtOz2ccGQuXwLLb6R9v1jk7hA,2180
41
42
  pixeltable/exprs/column_property_ref.py,sha256=rq8VD34fZwAZuN9wIqQEwVay7LTPBKvXXdZPknOJM6M,4422
42
- pixeltable/exprs/column_ref.py,sha256=msZ0m-Da_H-jpm89TkFiVHx_0LidCyN91gluBqZ0Wys,15359
43
+ pixeltable/exprs/column_ref.py,sha256=MH83bYsef5UC4vWU71PE-lPiVd8hVw4tT6sjdCCvWNw,15473
43
44
  pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
44
45
  pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
45
- pixeltable/exprs/data_row.py,sha256=4mW5Q56L53gLAX7xI0uBRW7a5Ax66Q0W9Bi-k_ZBoe8,11800
46
+ pixeltable/exprs/data_row.py,sha256=ZUwx_YtQJTmY4iXHGlfM-m2N-2IJrbP3f8EDIalAQnI,11766
46
47
  pixeltable/exprs/expr.py,sha256=uLEMuJzHwPW3hBIcsASnhjcPyGBkY8_8sFCqgRetKP0,36013
47
48
  pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
48
49
  pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
@@ -56,11 +57,11 @@ pixeltable/exprs/json_path.py,sha256=sFuDjfz8_rlea4TKd68CS4pQTUiLDi68YwsgcQRHffI
56
57
  pixeltable/exprs/literal.py,sha256=OCJL_pw_WKqx3bXMEwL6yNaKVAKDtGRzSZUFwucRxZI,4860
57
58
  pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
58
59
  pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
59
- pixeltable/exprs/row_builder.py,sha256=K_HVjS1yxq2WImhVxSG_BG86ZyHaftfLenX5eVkQBmI,22394
60
+ pixeltable/exprs/row_builder.py,sha256=6-DU36EJBpfHdW8mm6o66LFUf9cg4jJsbQwpx1U4ZCk,23020
60
61
  pixeltable/exprs/rowid_ref.py,sha256=8MvQs3Uu01Gz__WXw9BCJv0CHrSaFDuQtU7rUr1AWEk,5008
61
62
  pixeltable/exprs/similarity_expr.py,sha256=i0UUnMSKKGXd3Uksu6FU2NvkfG0qzfzfi-GPy-LdutM,3688
62
63
  pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
63
- pixeltable/exprs/string_op.py,sha256=8GkqYpZrSJjHX1ghsUMI9Op2NJyBbvmLWJwDYf_vad0,4171
64
+ pixeltable/exprs/string_op.py,sha256=J3Cm0hrctLma1YU3CszE965fRhsP0gcsi9PM0UVlQ7Q,4161
64
65
  pixeltable/exprs/type_cast.py,sha256=_nDzTxg5kXVGLewI0FrH2zmwJzgptdxYd5Jvuyig0UI,2322
65
66
  pixeltable/exprs/variable.py,sha256=UwWwaNECbtwyC8v0g8iqCa3a6mO8z9lK7ta5NrlCwvs,1493
66
67
  pixeltable/ext/__init__.py,sha256=UgDXWzGWiQIrwOuEvWTePLBcR2kecllPAE7gp-42Awg,457
@@ -70,7 +71,7 @@ pixeltable/ext/functions/yolox.py,sha256=dX22nMb-0n2hZi7WhZ1Y4LIpFk5loyeXXuSUcc2
70
71
  pixeltable/func/__init__.py,sha256=SQPtGr_9dZNyXzxaZQcP3oVLKnbbs4UqV6sg8XUQHxQ,535
71
72
  pixeltable/func/aggregate_function.py,sha256=5_MgqHAlMaacX2sPIHv_auTvYXtqR5MIZy_WqYQSdho,13264
72
73
  pixeltable/func/callable_function.py,sha256=g_pA-g631YcFGLix9PpHYfgjOeS2qF0Csm1VxX8fah0,9278
73
- pixeltable/func/expr_template_function.py,sha256=wEidKrOBTZkA3U1PAtG6-6RlDFiiRJszIG4zNOuPcNY,5940
74
+ pixeltable/func/expr_template_function.py,sha256=plKj8k51q4c4eyy7mWrix6M0x48XmKIUSzCq_UnlwhA,5828
74
75
  pixeltable/func/function.py,sha256=3nSXRdGFGi471x7_TMVdSgXs1SQuLv4HaUJA7NLhv_M,23140
75
76
  pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
76
77
  pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
@@ -83,49 +84,49 @@ pixeltable/functions/__init__.py,sha256=Akk6Nk-rpz2D_V4kJTfyP56xnNbCz3EtxVAuwLoi
83
84
  pixeltable/functions/anthropic.py,sha256=G2E0sH5vP933eZZxhz1tOByy5cg6N2XPvhSqIBzqufo,8782
84
85
  pixeltable/functions/audio.py,sha256=6_tUhSZgxhOQQJemvZYNEoKNjWdr3SgJsvLkKCSmtfw,1633
85
86
  pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
86
- pixeltable/functions/date.py,sha256=WUwqyrOWB8A00cTNEd6Vd7anQZo40_-7EWhpfpI-P6c,5323
87
+ pixeltable/functions/date.py,sha256=qs1svJ9FVod3OTa5hQNKIuashb6tVhW_2EAEXYGQX74,5308
87
88
  pixeltable/functions/deepseek.py,sha256=IAo2e_DhkM0A5NrskxuPQUGYzIYAl4do_mdO1Qc3PeY,3338
88
89
  pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
89
- pixeltable/functions/gemini.py,sha256=ZsbySkoMdOgZEUfFUccDbIdrbLb6DGRxzD88fHW-cRI,8317
90
+ pixeltable/functions/gemini.py,sha256=Yede8DzWEa4eboW7SNTOooBabriUlsnQMUdG5jCWRQo,8320
90
91
  pixeltable/functions/globals.py,sha256=ZXBV2LPXT2-yQYHHE7q8N1WdAr0WxiIO1ax0qwxhmK8,5118
91
92
  pixeltable/functions/groq.py,sha256=FpR_LJpfZfzyhEvoBMMbQpQ-VQSRzBsS9U21qaINwww,3593
92
93
  pixeltable/functions/huggingface.py,sha256=cJyf86qMcvivkGGNduNHAvh_idI-e4wJm0Zje1KJ2vQ,20611
93
94
  pixeltable/functions/image.py,sha256=IKXljMma-uU88efptC3F4aywau7DYcD-Nqd3YpmRNRw,13971
94
95
  pixeltable/functions/json.py,sha256=d7-AvwytUQtQYF_JnWJkptT_Yq0NgMpWfVk-m3U6qTY,807
95
96
  pixeltable/functions/llama_cpp.py,sha256=1QB4vQ7J4Za1mL93bRIBXgokNtpzzYr_QU6KF27i9xo,3919
96
- pixeltable/functions/math.py,sha256=eZEFjXxNHDHjcCsOMhzfNbJthTsmtNxtSFV8AEeRIfM,4979
97
+ pixeltable/functions/math.py,sha256=jhlD7v4eY-6KdmsFEBqb-W_vspGahOosUvFahWFzxrU,4969
97
98
  pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
98
99
  pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
99
- pixeltable/functions/openai.py,sha256=SxhYrL3vgIfjzwCPnjR6yoaNr7BbFwpGy7Su1FSY7G4,27713
100
+ pixeltable/functions/openai.py,sha256=NM6ta09KBCyK60fJiM8cQJNqeGzIeF7OlC3k9AeSQV8,27985
100
101
  pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
101
102
  pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
102
- pixeltable/functions/timestamp.py,sha256=0zp4urJagCcNLfJE0ltTCft-J9qs2C716TmRngKYaa0,9171
103
+ pixeltable/functions/timestamp.py,sha256=3GVCVIWdry96Qk5XXuvbJ58Tp30iY5snBibzl2CHjQc,9143
103
104
  pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
104
105
  pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
105
- pixeltable/functions/video.py,sha256=XYxfVH7kTHx3RXruKIy2bfiNdX5uCjJ85u2G4kZFJFA,8654
106
+ pixeltable/functions/video.py,sha256=zrh8De3w3zHe3QQ6T8d3IKGRNbin6wAcIQa6lRi5jL0,8511
106
107
  pixeltable/functions/vision.py,sha256=_a0wY3akkVhWnnxlq__1VzSLylytlNadpNOOPOwSfLk,15393
107
108
  pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
108
- pixeltable/globals.py,sha256=eAe9fLz47ergwatmlxptzMc0Z1dfWXHSV8Ih_6dgSjo,34438
109
+ pixeltable/globals.py,sha256=MYoqSgpDJxnaDfxlZfoq2sBBB-uld8xjzN0BymM-Rh8,36472
109
110
  pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
110
111
  pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
111
112
  pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
112
113
  pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
113
114
  pixeltable/io/__init__.py,sha256=chVGh3ygtZwSY6g_skIyCsjxwzo2847jDq9YGObAY98,608
114
- pixeltable/io/datarows.py,sha256=p1UGxQOTjqI6kgQNAa3aj8TkylcNDtaGBTorOg_Pk84,6088
115
+ pixeltable/io/datarows.py,sha256=UibRI3TH6E8WTaUSxVC4g0FfLcbM57OjbUIk3IQpU2k,6179
115
116
  pixeltable/io/external_store.py,sha256=rOYBwTqcZZVU2toWxJ_9Iy2w2YO0DhuABrM2xGmqHSo,14787
116
117
  pixeltable/io/fiftyone.py,sha256=v0r28bIk2I0TRP5DfVHtBIUa4DpIJDK5sgExxOmHZ_w,6882
117
118
  pixeltable/io/globals.py,sha256=so-skHogbXocuzI_IweH2cEX_SW_tDvFqBZyxeMyMzc,11375
118
119
  pixeltable/io/hf_datasets.py,sha256=USCWp0nqs2D9FFfxlGhFy6pn2kDUwGfDHgUiv0-osc8,5634
119
120
  pixeltable/io/label_studio.py,sha256=XpPkOLktm37Jnhh5ce1PQpUYzeuPJjoCZDaSGedagF4,31426
120
- pixeltable/io/pandas.py,sha256=AbOeRDlA4MvUvianSKixsU-x-64nasPWw4HCHD6emz4,8981
121
+ pixeltable/io/pandas.py,sha256=wzxBggItahT0yjGoV0G_csVAcYlcMXArlF6lfePXqUc,9053
121
122
  pixeltable/io/parquet.py,sha256=-cxyy9wMRzGFDJWhUIjACfQMyAmajyoFcTXSkB8qESE,7818
122
- pixeltable/io/table_data_conduit.py,sha256=8SEcOPTgPiKHqlDp0rvGcPOF4v8jRX5TwHwfi5MHYt4,22003
123
+ pixeltable/io/table_data_conduit.py,sha256=8pTWXr9fCWUbGPcNX7Fm3WXhipBiv3pdbTMok02vbQs,22078
123
124
  pixeltable/io/utils.py,sha256=YMfhpqMitWz1PhXJGkCNOgNtEM1AZ55S0zXVhljC5kY,4260
124
125
  pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
125
- pixeltable/iterators/audio.py,sha256=wSVGdL5GeO3uY_lU-pNlY49E5dExIaJWY6oaXm-MnSU,9150
126
+ pixeltable/iterators/audio.py,sha256=Xuv6sOuhhMbof87JrlO218Fm_j6MoMxEr88otmoXME4,9623
126
127
  pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
127
128
  pixeltable/iterators/document.py,sha256=wJYSnzusJFaxipv5y0uQw-surN9fFz0Aq-s7w_l_Yk8,20306
128
- pixeltable/iterators/image.py,sha256=nWm-03CxNvHRdTr8U6PvWEnEiquqIQNG5rB-3Y44Mm4,3440
129
+ pixeltable/iterators/image.py,sha256=RrFdf5cnFIQzWKJk4uYi1m1p2qAiz909THYhRQ27DbY,3603
129
130
  pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
130
131
  pixeltable/iterators/video.py,sha256=L5S1YPmT_zM11vW9fK6d5nQpUvHVewQWmfDmy4BD45E,9134
131
132
  pixeltable/metadata/__init__.py,sha256=iJxMsd3s5yNZ5ciIBzQCa0frXZKgvFj2_-H0Sf4N1mk,3154
@@ -160,15 +161,15 @@ pixeltable/metadata/converters/convert_38.py,sha256=YyNyocwzzdJRcI0YSCo_70Q4hSk6
160
161
  pixeltable/metadata/converters/convert_39.py,sha256=YaEfgStxtYGRbuRLFw8wTAZVJRzIU6zL6nPU2zuDcEU,4658
161
162
  pixeltable/metadata/converters/util.py,sha256=QUBOj2F_6rCAdIo0lgD1IVgAM15Vmq7ikQspB4s0eQ8,7732
162
163
  pixeltable/metadata/notes.py,sha256=3fdZDFpL1-b194Ejv0Y0YP-vbnV-XvVP9wOmZM9XARA,1545
163
- pixeltable/metadata/schema.py,sha256=pc7MEzyGGHOoa45un7Eld0av-M84iV-b8X3UOpPjvEU,12232
164
+ pixeltable/metadata/schema.py,sha256=fs9W2SLh32Ehxc9AChVH7YCtlSSnQkgGMbEyOh0B4W0,13416
164
165
  pixeltable/metadata/utils.py,sha256=NJQXWhhK1hdOZ4H3hh9N0mqbl-I9JqMUqrfA6OWLflE,2682
165
- pixeltable/plan.py,sha256=nnMiBiQNJ0fWBNetyypVggCBCDWekTvKiSCMeays7Os,49369
166
+ pixeltable/plan.py,sha256=PXqq7aLQ5wRC-4RkRlAF6KEZFArA6g5RVLYamxNu6FY,48984
166
167
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
168
  pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
168
- pixeltable/share/packager.py,sha256=WDid1dOogPbAkF7pPrLe17eYR0_FWubvExU26ooQl4c,30994
169
+ pixeltable/share/packager.py,sha256=F26RmcwmeE7wsWJybZzVz0iIy1meOP-JeaJvmFwjgkA,30938
169
170
  pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
170
- pixeltable/store.py,sha256=pM0d8oaRBH7BVt4fJxV-xcrIcwTOOHv8jLVgNwBFYEc,22784
171
- pixeltable/type_system.py,sha256=DuCWaHPeToQ22lDmcQRRHKTEz7ATAfFSYcRgQvdniQM,55321
171
+ pixeltable/store.py,sha256=bZLazxAdLhR566VR9Dl6lk5ZZkZRZgW6s6_QE2HeEHQ,24023
172
+ pixeltable/type_system.py,sha256=SaTgmoUugcx1PuanD21X_R52yfQFHWfHIZZgNvUorN0,55353
172
173
  pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
173
174
  pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
174
175
  pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
@@ -179,17 +180,17 @@ pixeltable/utils/dbms.py,sha256=cuQqlzLF7WON_mkJZ4QWlfX6lCxA97V32lhtMcOlDLg,2018
179
180
  pixeltable/utils/description_helper.py,sha256=acibNm36wkZG7h6k8gjcypTD_PVV2SL7YgX6cPYP1i8,3743
180
181
  pixeltable/utils/documents.py,sha256=x3UHU7eykibyA3eVkSrCK1CQoaid228vp96WUEESssU,3105
181
182
  pixeltable/utils/exception_handler.py,sha256=yrTAtUJEOhldps_k6aRLEf5yQ8gYGhl9c6ewYNC4Qfc,2476
182
- pixeltable/utils/filecache.py,sha256=8RZZiEkD4awZpR-mn7OhoZPc6_JlPUNSBnMU8BcEAv4,10864
183
+ pixeltable/utils/filecache.py,sha256=3TTEqhGg0pEAP_l0GKn34uspC4dha1jPab1Ka9_oTBM,10877
183
184
  pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
184
- pixeltable/utils/http_server.py,sha256=B5iQ1s_VuwsVC7pUm1joGjLZqaluV8_RfFiU8V1FuG8,2453
185
+ pixeltable/utils/http_server.py,sha256=6khOAtpVj1lDIm9Dx8VIECLm87cFEp4IFbAg8T92A2o,2441
185
186
  pixeltable/utils/iceberg.py,sha256=L_s9G9NMIGMQdRHtNkks6ntTVW4DKKAw97R9gRmtw5s,553
186
- pixeltable/utils/media_store.py,sha256=a63_fck6d32AlW24cp5UoJvekCpKmU-UYlZ2yijHCbI,4922
187
+ pixeltable/utils/media_store.py,sha256=O3pByWHRd79Z5vcy1Dc1crIUADaLL93pPz19Y60e2wY,7011
187
188
  pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
188
189
  pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
189
190
  pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
190
191
  pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
191
- pixeltable-0.4.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
192
- pixeltable-0.4.3.dist-info/METADATA,sha256=VfhTi_6PA51fE0XOxSTd9ZcIm4Af3sUPg3N9Z4YgSMk,20577
193
- pixeltable-0.4.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
194
- pixeltable-0.4.3.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
195
- pixeltable-0.4.3.dist-info/RECORD,,
192
+ pixeltable-0.4.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
193
+ pixeltable-0.4.5.dist-info/METADATA,sha256=xCDcQuJu2JImAGSkvKH-b_h4emPtjOpeN8wNVxJxbag,20577
194
+ pixeltable-0.4.5.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
195
+ pixeltable-0.4.5.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
196
+ pixeltable-0.4.5.dist-info/RECORD,,