pixeltable 0.4.3__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.

@@ -47,13 +47,13 @@ class TableDataConduitFormat(str, enum.Enum):
47
47
 
48
48
  @dataclass
49
49
  class TableDataConduit:
50
- source: TableDataSource
50
+ source: 'TableDataSource'
51
51
  source_format: Optional[str] = None
52
52
  source_column_map: Optional[dict[str, str]] = None
53
53
  if_row_exists: Literal['update', 'ignore', 'error'] = 'error'
54
- pxt_schema: Optional[dict[str, Any]] = None
55
- src_schema_overrides: Optional[dict[str, Any]] = None
56
- src_schema: Optional[dict[str, Any]] = None
54
+ pxt_schema: Optional[dict[str, ts.ColumnType]] = None
55
+ src_schema_overrides: Optional[dict[str, ts.ColumnType]] = None
56
+ src_schema: Optional[dict[str, ts.ColumnType]] = None
57
57
  pxt_pk: Optional[list[str]] = None
58
58
  src_pk: Optional[list[str]] = None
59
59
  valid_rows: Optional[RowData] = None
@@ -87,7 +87,7 @@ class TableDataConduit:
87
87
  for name, coltype in self.pxt_schema.items():
88
88
  self.pxt_schema[name] = ts.ColumnType.normalize_type(coltype)
89
89
 
90
- def infer_schema(self) -> dict[str, Any]:
90
+ def infer_schema(self) -> dict[str, ts.ColumnType]:
91
91
  raise NotImplementedError
92
92
 
93
93
  def valid_row_batch(self) -> Iterator[RowData]:
@@ -137,7 +137,7 @@ class DFTableDataConduit(TableDataConduit):
137
137
  t.pxt_df = tds.source
138
138
  return t
139
139
 
140
- def infer_schema(self) -> dict[str, Any]:
140
+ def infer_schema(self) -> dict[str, ts.ColumnType]:
141
141
  self.pxt_schema = self.pxt_df.schema
142
142
  self.pxt_pk = self.src_pk
143
143
  return self.pxt_schema
@@ -168,7 +168,7 @@ class RowDataTableDataConduit(TableDataConduit):
168
168
  t.batch_count = 0
169
169
  return t
170
170
 
171
- def infer_schema(self) -> dict[str, Any]:
171
+ def infer_schema(self) -> dict[str, ts.ColumnType]:
172
172
  from .datarows import _infer_schema_from_rows
173
173
 
174
174
  if self.source_column_map is None:
@@ -239,7 +239,7 @@ class PandasTableDataConduit(TableDataConduit):
239
239
  t.batch_count = 0
240
240
  return t
241
241
 
242
- def infer_schema_part1(self) -> tuple[dict[str, Any], list[str]]:
242
+ def infer_schema_part1(self) -> tuple[dict[str, ts.ColumnType], list[str]]:
243
243
  """Return inferred schema, inferred primary key, and source column map"""
244
244
  if self.source_column_map is None:
245
245
  if self.src_schema_overrides is None:
@@ -252,7 +252,7 @@ class PandasTableDataConduit(TableDataConduit):
252
252
  else:
253
253
  raise NotImplementedError()
254
254
 
255
- def infer_schema(self) -> dict[str, Any]:
255
+ def infer_schema(self) -> dict[str, ts.ColumnType]:
256
256
  self.pxt_schema, self.pxt_pk = self.infer_schema_part1()
257
257
  self.normalize_pxt_schema_types()
258
258
  _df_check_primary_key_values(self.pd_df, self.src_pk)
@@ -328,7 +328,6 @@ class HFTableDataConduit(TableDataConduit):
328
328
  hf_ds: Optional[Union[datasets.Dataset, datasets.DatasetDict]] = None
329
329
  column_name_for_split: Optional[str] = None
330
330
  categorical_features: dict[str, dict[int, str]]
331
- hf_schema: dict[str, Any] = None
332
331
  dataset_dict: dict[str, datasets.Dataset] = None
333
332
  hf_schema_source: dict[str, Any] = None
334
333
 
@@ -356,7 +355,7 @@ class HFTableDataConduit(TableDataConduit):
356
355
  except ImportError:
357
356
  return False
358
357
 
359
- def infer_schema_part1(self) -> tuple[dict[str, Any], list[str]]:
358
+ def infer_schema_part1(self) -> tuple[dict[str, ts.ColumnType], list[str]]:
360
359
  from pixeltable.io.hf_datasets import _get_hf_schema, huggingface_schema_to_pxt_schema
361
360
 
362
361
  if self.source_column_map is None:
@@ -469,7 +468,7 @@ class ParquetTableDataConduit(TableDataConduit):
469
468
  t.pq_ds = parquet.ParquetDataset(str(input_path))
470
469
  return t
471
470
 
472
- def infer_schema_part1(self) -> tuple[dict[str, Any], list[str]]:
471
+ def infer_schema_part1(self) -> tuple[dict[str, ts.ColumnType], list[str]]:
473
472
  from pixeltable.utils.arrow import ar_infer_schema
474
473
 
475
474
  if self.source_column_map is None:
@@ -483,7 +482,7 @@ class ParquetTableDataConduit(TableDataConduit):
483
482
  else:
484
483
  raise NotImplementedError()
485
484
 
486
- def infer_schema(self) -> dict[str, Any]:
485
+ def infer_schema(self) -> dict[str, ts.ColumnType]:
487
486
  self.pxt_schema, self.pxt_pk = self.infer_schema_part1()
488
487
  self.normalize_pxt_schema_types()
489
488
  self.prepare_insert()
@@ -1,5 +1,4 @@
1
1
  import logging
2
- import uuid
3
2
  from fractions import Fraction
4
3
  from pathlib import Path
5
4
  from typing import Any, ClassVar, Optional
@@ -55,12 +54,9 @@ class AudioSplitter(ComponentIterator):
55
54
  def __init__(
56
55
  self, audio: str, chunk_duration_sec: float, *, overlap_sec: float = 0.0, min_chunk_duration_sec: float = 0.0
57
56
  ):
58
- if chunk_duration_sec <= 0.0:
59
- raise excs.Error('chunk_duration_sec must be a positive number')
60
- if chunk_duration_sec < min_chunk_duration_sec:
61
- raise excs.Error('chunk_duration_sec must be at least min_chunk_duration_sec')
62
- if overlap_sec >= chunk_duration_sec:
63
- raise excs.Error('overlap_sec must be less than chunk_duration_sec')
57
+ assert chunk_duration_sec > 0.0
58
+ assert chunk_duration_sec >= min_chunk_duration_sec
59
+ assert overlap_sec < chunk_duration_sec
64
60
  audio_path = Path(audio)
65
61
  assert audio_path.exists() and audio_path.is_file()
66
62
  self.audio_path = audio_path
@@ -128,6 +124,19 @@ class AudioSplitter(ComponentIterator):
128
124
 
129
125
  @classmethod
130
126
  def output_schema(cls, *args: Any, **kwargs: Any) -> tuple[dict[str, ts.ColumnType], list[str]]:
127
+ param_names = ['chunk_duration_sec', 'min_chunk_duration_sec', 'overlap_sec']
128
+ params = dict(zip(param_names, args))
129
+ params.update(kwargs)
130
+
131
+ chunk_duration_sec = params['chunk_duration_sec']
132
+ min_chunk_duration_sec = params.get('min_chunk_duration_sec', 0.0)
133
+ overlap_sec = params.get('overlap_sec', 0.0)
134
+ if chunk_duration_sec <= 0.0:
135
+ raise excs.Error('chunk_duration_sec must be a positive number')
136
+ if chunk_duration_sec < min_chunk_duration_sec:
137
+ raise excs.Error('chunk_duration_sec must be at least min_chunk_duration_sec')
138
+ if overlap_sec >= chunk_duration_sec:
139
+ raise excs.Error('overlap_sec must be less than chunk_duration_sec')
131
140
  return {
132
141
  'start_time_sec': ts.FloatType(),
133
142
  'end_time_sec': ts.FloatType(),
@@ -140,7 +149,7 @@ class AudioSplitter(ComponentIterator):
140
149
  target_chunk_start, target_chunk_end = self.chunks_to_extract_in_pts[self.next_pos]
141
150
  chunk_start_pts = 0
142
151
  chunk_end_pts = 0
143
- chunk_file = str(env.Env.get().tmp_dir / f'{uuid.uuid4()}{self.audio_path.suffix}')
152
+ chunk_file = str(env.Env.get().create_tmp_path(self.audio_path.suffix))
144
153
  output_container = av.open(chunk_file, mode='w')
145
154
  input_stream = self.container.streams.audio[0]
146
155
  codec_name = AudioSplitter.__codec_map.get(input_stream.codec_context.name, input_stream.codec_context.name)
@@ -31,8 +31,7 @@ class TileIterator(ComponentIterator):
31
31
  __j: int
32
32
 
33
33
  def __init__(self, image: PIL.Image.Image, *, tile_size: tuple[int, int], overlap: tuple[int, int] = (0, 0)):
34
- if overlap[0] >= tile_size[0] or overlap[1] >= tile_size[1]:
35
- raise excs.Error(f'overlap dimensions {overlap} are not strictly smaller than tile size {tile_size}')
34
+ assert overlap[0] < tile_size[0] and overlap[1] < tile_size[1]
36
35
 
37
36
  self.__image = image
38
37
  self.__image.load()
@@ -79,4 +78,8 @@ class TileIterator(ComponentIterator):
79
78
 
80
79
  @classmethod
81
80
  def output_schema(cls, *args: Any, **kwargs: Any) -> tuple[dict[str, ts.ColumnType], list[str]]:
81
+ tile_size = kwargs.get('tile_size')
82
+ overlap = kwargs.get('overlap', (0, 0))
83
+ if overlap[0] >= tile_size[0] or overlap[1] >= tile_size[1]:
84
+ raise excs.Error(f'overlap dimensions {overlap} are not strictly smaller than tile size {tile_size}')
82
85
  return {'tile': ts.ImageType(), 'tile_coord': ts.JsonType(), 'tile_box': ts.JsonType()}, ['tile']
@@ -182,6 +182,7 @@ class TableMd:
182
182
  # sequence number to track changes in the set of mutable views of this table (ie, this table = the view base)
183
183
  # - incremented for each add/drop of a mutable view
184
184
  # - only maintained for mutable tables
185
+ # TODO: replace with mutable_views: list[UUID] to help with debugging
185
186
  view_sn: int
186
187
 
187
188
  # Metadata format for external stores:
@@ -193,6 +194,26 @@ class TableMd:
193
194
  view_md: Optional[ViewMd]
194
195
  additional_md: dict[str, Any]
195
196
 
197
+ has_pending_ops: bool = False
198
+
199
+ @property
200
+ def is_snapshot(self) -> bool:
201
+ return self.view_md is not None and self.view_md.is_snapshot
202
+
203
+ @property
204
+ def is_mutable(self) -> bool:
205
+ return not self.is_snapshot and not self.is_replica
206
+
207
+ @property
208
+ def is_pure_snapshot(self) -> bool:
209
+ return (
210
+ self.view_md is not None
211
+ and self.view_md.is_snapshot
212
+ and self.view_md.sample_clause is None
213
+ and self.view_md.predicate is None
214
+ and len(self.column_md) == 0
215
+ )
216
+
196
217
 
197
218
  class Table(Base):
198
219
  """
@@ -215,7 +236,7 @@ class Table(Base):
215
236
  lock_dummy: orm.Mapped[int] = orm.mapped_column(BigInteger, nullable=True)
216
237
 
217
238
 
218
- @dataclasses.dataclass(frozen=True)
239
+ @dataclasses.dataclass
219
240
  class TableVersionMd:
220
241
  tbl_id: str # uuid.UUID
221
242
  created_at: float # time.time()
@@ -279,6 +300,22 @@ class TableSchemaVersion(Base):
279
300
  md: orm.Mapped[dict[str, Any]] = orm.mapped_column(JSONB, nullable=False) # TableSchemaVersionMd
280
301
 
281
302
 
303
+ class PendingTableOp(Base):
304
+ """
305
+ Table operation that needs to be completed before the table can be used.
306
+
307
+ Operations need to be completed in order of increasing seq_num.
308
+ """
309
+
310
+ __tablename__ = 'pendingtableops'
311
+
312
+ tbl_id: orm.Mapped[uuid.UUID] = orm.mapped_column(
313
+ UUID(as_uuid=True), ForeignKey('tables.id'), primary_key=True, nullable=False
314
+ )
315
+ op_sn: orm.Mapped[int] = orm.mapped_column(Integer, primary_key=True, nullable=False) # catalog.TableOp.op_sn
316
+ op: orm.Mapped[dict[str, Any]] = orm.mapped_column(JSONB, nullable=False) # catalog.TableOp
317
+
318
+
282
319
  @dataclasses.dataclass
283
320
  class FunctionMd:
284
321
  name: str
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
 
@@ -146,8 +147,28 @@ class StoreBase:
146
147
  return result
147
148
 
148
149
  def create(self) -> None:
150
+ """Create If Not Exists for this table"""
149
151
  conn = Env.get().conn
150
- 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
151
172
 
152
173
  def drop(self) -> None:
153
174
  """Drop store table"""
@@ -73,6 +73,17 @@ class MediaStore:
73
73
  src_path.rename(dest_path)
74
74
  return urllib.parse.urljoin('file:', urllib.request.pathname2url(str(dest_path)))
75
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
+
76
87
  @classmethod
77
88
  def delete(cls, tbl_id: UUID, version: Optional[int] = None) -> None:
78
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.3
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,29 +1,30 @@
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=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
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
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
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
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/catalog/view.py,sha256=lG_8x3g_-1wDLUTIG-q-bva5IAf_s-S_NAyDWTOu7Oo,14593
18
19
  pixeltable/config.py,sha256=UGLZ-A7exqGB5os3BluMXXj3iEo7mGQKBXebriTZjkQ,7148
19
- pixeltable/dataframe.py,sha256=964O5FaXup7XxcwwRQCgEgq62UrqWnGWn8TLU5UOuoY,60679
20
- pixeltable/env.py,sha256=GyQAE6R5IXbvdvNFgWj8BxEuKOpBwLSNUlde0e1YSME,36913
20
+ pixeltable/dataframe.py,sha256=QkyXKXd-TNPEvgRlCNSfGPmw5cz5s4RdOINsWYIyxfk,61386
21
+ pixeltable/env.py,sha256=yZZBWgqw4ez2bbHpVCuBlkbiJZMyB1QzfEGUEiYyaEg,37765
21
22
  pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
22
23
  pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
23
24
  pixeltable/exec/aggregation_node.py,sha256=HqzISO1nv7_DFyqjZLRkjtbDJl9fIEto1i6Kh5ru8vA,4498
24
25
  pixeltable/exec/cache_prefetch_node.py,sha256=GOa70eJDFY3FQV3VvJOrUVI8LFvro-r-V6sh3w-eJAc,12130
25
26
  pixeltable/exec/component_iteration_node.py,sha256=FZszWHrzsjHxCbUTwXtJIlgQqgYtvKZB6QWiDGkfIbs,4757
26
- pixeltable/exec/data_row_batch.py,sha256=EAB15JRhXbWIe91x1J5N5lFiMXzjB8NGTFjZsBDSbf8,3393
27
+ pixeltable/exec/data_row_batch.py,sha256=s85NVDAMdPzx1C9XbS9xieDtnpad33w86PbW1k8ar0U,3460
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
@@ -32,14 +33,14 @@ pixeltable/exec/expr_eval/expr_eval_node.py,sha256=klPhvsug91GiPIHkwcTj1ympxsoj8
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=OEyF7t9i0jN_hIRGqxWbV6dk1c-wWCaa-hx7m7v1dBE,3569
36
37
  pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7npyLBKY,2798
37
38
  pixeltable/exec/sql_node.py,sha256=cMoBGPOFVmvL3UFjCKxhU3huJu_ko0PRr55-XhbF1i0,27572
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
46
  pixeltable/exprs/data_row.py,sha256=4mW5Q56L53gLAX7xI0uBRW7a5Ax66Q0W9Bi-k_ZBoe8,11800
@@ -86,7 +87,7 @@ pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfx
86
87
  pixeltable/functions/date.py,sha256=WUwqyrOWB8A00cTNEd6Vd7anQZo40_-7EWhpfpI-P6c,5323
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
@@ -96,36 +97,36 @@ pixeltable/functions/llama_cpp.py,sha256=1QB4vQ7J4Za1mL93bRIBXgokNtpzzYr_QU6KF27
96
97
  pixeltable/functions/math.py,sha256=eZEFjXxNHDHjcCsOMhzfNbJthTsmtNxtSFV8AEeRIfM,4979
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=8kGOUv2jh-df0ByMwP2sAQdSgzzSCj5WypCfhnvoD2c,27694
100
101
  pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
101
102
  pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
102
103
  pixeltable/functions/timestamp.py,sha256=0zp4urJagCcNLfJE0ltTCft-J9qs2C716TmRngKYaa0,9171
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=6BrrjMUWRae92vSglWXpMgGRIWf8Wutop1OQxU3A6n0,36269
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,14 +161,14 @@ 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=3x-ZBzjoTep7UScSqsVKU-dWSOCgsM8YYZYE0a9S5ZU,13446
164
165
  pixeltable/metadata/utils.py,sha256=NJQXWhhK1hdOZ4H3hh9N0mqbl-I9JqMUqrfA6OWLflE,2682
165
166
  pixeltable/plan.py,sha256=nnMiBiQNJ0fWBNetyypVggCBCDWekTvKiSCMeays7Os,49369
166
167
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
168
  pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
168
169
  pixeltable/share/packager.py,sha256=WDid1dOogPbAkF7pPrLe17eYR0_FWubvExU26ooQl4c,30994
169
170
  pixeltable/share/publish.py,sha256=U6PzOUYiZaPu-sVNjh2nN8qzY2-uMsYeTwQCCuGk7Jg,6537
170
- pixeltable/store.py,sha256=pM0d8oaRBH7BVt4fJxV-xcrIcwTOOHv8jLVgNwBFYEc,22784
171
+ pixeltable/store.py,sha256=cSTcgx_OtXnHH2pSM2Fv9D8gP9vFiLSGIDUSzht_QEs,23874
171
172
  pixeltable/type_system.py,sha256=DuCWaHPeToQ22lDmcQRRHKTEz7ATAfFSYcRgQvdniQM,55321
172
173
  pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
173
174
  pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
@@ -183,13 +184,13 @@ pixeltable/utils/filecache.py,sha256=8RZZiEkD4awZpR-mn7OhoZPc6_JlPUNSBnMU8BcEAv4
183
184
  pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
184
185
  pixeltable/utils/http_server.py,sha256=B5iQ1s_VuwsVC7pUm1joGjLZqaluV8_RfFiU8V1FuG8,2453
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=A93aYYhkq3Bz2Q9O7THwAew6z3peOssHK-Tg6YGWCNc,5466
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.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,,