pixeltable 0.4.13__py3-none-any.whl → 0.4.15__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 (55) hide show
  1. pixeltable/__init__.py +2 -1
  2. pixeltable/catalog/catalog.py +187 -63
  3. pixeltable/catalog/column.py +24 -20
  4. pixeltable/catalog/table.py +24 -8
  5. pixeltable/catalog/table_metadata.py +1 -0
  6. pixeltable/catalog/table_version.py +16 -34
  7. pixeltable/catalog/update_status.py +12 -0
  8. pixeltable/catalog/view.py +22 -22
  9. pixeltable/config.py +2 -0
  10. pixeltable/dataframe.py +4 -2
  11. pixeltable/env.py +46 -21
  12. pixeltable/exec/__init__.py +1 -0
  13. pixeltable/exec/aggregation_node.py +0 -1
  14. pixeltable/exec/cache_prefetch_node.py +74 -98
  15. pixeltable/exec/data_row_batch.py +2 -18
  16. pixeltable/exec/expr_eval/expr_eval_node.py +11 -0
  17. pixeltable/exec/in_memory_data_node.py +1 -1
  18. pixeltable/exec/object_store_save_node.py +299 -0
  19. pixeltable/exec/sql_node.py +28 -33
  20. pixeltable/exprs/data_row.py +31 -25
  21. pixeltable/exprs/json_path.py +6 -5
  22. pixeltable/exprs/row_builder.py +6 -12
  23. pixeltable/functions/gemini.py +1 -1
  24. pixeltable/functions/openai.py +1 -1
  25. pixeltable/functions/video.py +128 -15
  26. pixeltable/functions/whisperx.py +2 -0
  27. pixeltable/functions/yolox.py +2 -0
  28. pixeltable/globals.py +49 -30
  29. pixeltable/index/embedding_index.py +5 -8
  30. pixeltable/io/__init__.py +1 -0
  31. pixeltable/io/fiftyone.py +1 -1
  32. pixeltable/io/label_studio.py +4 -5
  33. pixeltable/iterators/__init__.py +1 -0
  34. pixeltable/iterators/audio.py +1 -1
  35. pixeltable/iterators/document.py +10 -12
  36. pixeltable/iterators/video.py +1 -1
  37. pixeltable/metadata/schema.py +7 -0
  38. pixeltable/plan.py +26 -1
  39. pixeltable/share/packager.py +8 -2
  40. pixeltable/share/publish.py +3 -10
  41. pixeltable/store.py +1 -1
  42. pixeltable/type_system.py +1 -3
  43. pixeltable/utils/dbms.py +31 -5
  44. pixeltable/utils/gcs_store.py +283 -0
  45. pixeltable/utils/local_store.py +316 -0
  46. pixeltable/utils/object_stores.py +497 -0
  47. pixeltable/utils/pytorch.py +5 -6
  48. pixeltable/utils/s3_store.py +354 -0
  49. {pixeltable-0.4.13.dist-info → pixeltable-0.4.15.dist-info}/METADATA +1 -1
  50. {pixeltable-0.4.13.dist-info → pixeltable-0.4.15.dist-info}/RECORD +53 -50
  51. pixeltable/utils/media_store.py +0 -248
  52. pixeltable/utils/s3.py +0 -17
  53. {pixeltable-0.4.13.dist-info → pixeltable-0.4.15.dist-info}/WHEEL +0 -0
  54. {pixeltable-0.4.13.dist-info → pixeltable-0.4.15.dist-info}/entry_points.txt +0 -0
  55. {pixeltable-0.4.13.dist-info → pixeltable-0.4.15.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,354 @@
1
+ import logging
2
+ import re
3
+ import threading
4
+ import urllib.parse
5
+ import uuid
6
+ from pathlib import Path
7
+ from typing import TYPE_CHECKING, Any, Iterator, NamedTuple, Optional
8
+
9
+ import boto3
10
+ import botocore
11
+ from botocore.exceptions import ClientError
12
+
13
+ from pixeltable import env, exceptions as excs
14
+ from pixeltable.config import Config
15
+ from pixeltable.utils.object_stores import ObjectPath, ObjectStoreBase, StorageObjectAddress, StorageTarget
16
+
17
+ if TYPE_CHECKING:
18
+ from botocore.exceptions import ClientError
19
+
20
+ from pixeltable.catalog import Column
21
+
22
+ _logger = logging.getLogger('pixeltable')
23
+
24
+ client_lock = threading.Lock()
25
+
26
+
27
+ class R2ClientDict(NamedTuple):
28
+ """Container for actual R2 access objects (clients, resources)
29
+ Thread-safe, protected by the module lock 'client_lock'"""
30
+
31
+ profile: Optional[str] # profile used to find credentials
32
+ clients: dict[str, Any] # Dictionary of URI to client object attached to the URI
33
+
34
+
35
+ @env.register_client('r2')
36
+ def _() -> Any:
37
+ profile_name = Config.get().get_string_value('r2_profile')
38
+ return R2ClientDict(profile=profile_name, clients={})
39
+
40
+
41
+ @env.register_client('r2_resource')
42
+ def _() -> Any:
43
+ profile_name = Config.get().get_string_value('r2_profile')
44
+ return R2ClientDict(profile=profile_name, clients={})
45
+
46
+
47
+ @env.register_client('s3')
48
+ def _() -> Any:
49
+ profile_name = Config.get().get_string_value('s3_profile')
50
+ return S3Store.create_boto_client(profile_name=profile_name)
51
+
52
+
53
+ @env.register_client('s3_resource')
54
+ def _() -> Any:
55
+ profile_name = Config.get().get_string_value('s3_profile')
56
+ return S3Store.create_boto_resource(profile_name=profile_name)
57
+
58
+
59
+ class S3Store(ObjectStoreBase):
60
+ """Wrapper for an s3 storage target with all needed methods."""
61
+
62
+ # URI of the S3 bucket in the format s3://bucket_name/prefix/
63
+ # Always ends with a slash
64
+ __base_uri: str
65
+
66
+ # bucket name extracted from the URI
67
+ __bucket_name: str
68
+
69
+ # prefix path within the bucket, either empty or ending with a slash
70
+ __prefix_name: str
71
+
72
+ soa: StorageObjectAddress
73
+
74
+ def __init__(self, soa: StorageObjectAddress):
75
+ self.soa = soa
76
+ self.__bucket_name = self.soa.container
77
+ self.__prefix_name = self.soa.prefix
78
+ assert self.soa.storage_target in {StorageTarget.R2_STORE, StorageTarget.S3_STORE}, (
79
+ f'Expected storage_target "s3" or "r2", got {self.soa.storage_target}'
80
+ )
81
+ self.__base_uri = self.soa.prefix_free_uri + self.soa.prefix
82
+
83
+ def client(self) -> Any:
84
+ """Return a client to access the store."""
85
+ if self.soa.storage_target == StorageTarget.R2_STORE:
86
+ cd = env.Env.get().get_client('r2')
87
+ with client_lock:
88
+ if self.soa.container_free_uri not in cd.clients:
89
+ cd.clients[self.soa.container_free_uri] = S3Store.create_boto_client(
90
+ profile_name=cd.profile,
91
+ extra_args={'endpoint_url': self.soa.container_free_uri, 'region_name': 'auto'},
92
+ )
93
+ return cd.clients[self.soa.container_free_uri]
94
+ if self.soa.storage_target == StorageTarget.S3_STORE:
95
+ return env.Env.get().get_client('s3')
96
+ raise AssertionError(f'Unexpected storage_target: {self.soa.storage_target}')
97
+
98
+ def get_resource(self) -> Any:
99
+ if self.soa.storage_target == StorageTarget.R2_STORE:
100
+ cd = env.Env.get().get_client('r2_resource')
101
+ with client_lock:
102
+ if self.soa.container_free_uri not in cd.clients:
103
+ cd.clients[self.soa.container_free_uri] = S3Store.create_boto_resource(
104
+ profile_name=cd.profile,
105
+ extra_args={'endpoint_url': self.soa.container_free_uri, 'region_name': 'auto'},
106
+ )
107
+ return cd.clients[self.soa.container_free_uri]
108
+ if self.soa.storage_target == StorageTarget.S3_STORE:
109
+ return env.Env.get().get_client('s3_resource')
110
+ raise AssertionError(f'Unexpected storage_target: {self.soa.storage_target}')
111
+
112
+ @property
113
+ def bucket_name(self) -> str:
114
+ """Return the bucket name from the base URI."""
115
+ return self.__bucket_name
116
+
117
+ @property
118
+ def prefix(self) -> str:
119
+ """Return the prefix from the base URI."""
120
+ return self.__prefix_name
121
+
122
+ def validate(self, error_col_name: str) -> Optional[str]:
123
+ """
124
+ Checks if the URI exists.
125
+
126
+ Returns:
127
+ bool: True if the S3 URI exists and is accessible, False otherwise.
128
+ """
129
+ try:
130
+ self.client().head_bucket(Bucket=self.bucket_name)
131
+ return self.__base_uri
132
+ except ClientError as e:
133
+ self.handle_s3_error(e, self.bucket_name, f'validate bucket {error_col_name}')
134
+ return None
135
+
136
+ def _prepare_uri_raw(self, tbl_id: uuid.UUID, col_id: int, tbl_version: int, ext: Optional[str] = None) -> str:
137
+ """
138
+ Construct a new, unique URI for a persisted media file.
139
+ """
140
+ prefix, filename = ObjectPath.create_prefix_raw(tbl_id, col_id, tbl_version, ext)
141
+ parent = f'{self.__base_uri}{prefix}'
142
+ return f'{parent}/{filename}'
143
+
144
+ def _prepare_uri(self, col: 'Column', ext: Optional[str] = None) -> str:
145
+ """
146
+ Construct a new, unique URI for a persisted media file.
147
+ """
148
+ assert col.tbl is not None, 'Column must be associated with a table'
149
+ return self._prepare_uri_raw(col.tbl.id, col.id, col.tbl.version, ext=ext)
150
+
151
+ def copy_object_to_local_file(self, src_path: str, dest_path: Path) -> None:
152
+ """Copies an object to a local file. Thread safe."""
153
+ try:
154
+ self.client().download_file(Bucket=self.bucket_name, Key=self.prefix + src_path, Filename=str(dest_path))
155
+ except ClientError as e:
156
+ self.handle_s3_error(e, self.bucket_name, f'download file {src_path}')
157
+ raise
158
+
159
+ def copy_local_file(self, col: 'Column', src_path: Path) -> str:
160
+ """Copy a local file, and return its new URL"""
161
+ new_file_uri = self._prepare_uri(col, ext=src_path.suffix)
162
+ parsed = urllib.parse.urlparse(new_file_uri)
163
+ key = parsed.path.lstrip('/')
164
+ if self.soa.storage_target == StorageTarget.R2_STORE:
165
+ key = key.split('/', 1)[-1] # Remove the bucket name from the key for R2
166
+ try:
167
+ _logger.debug(f'Media Storage: copying {src_path} to {new_file_uri} : Key: {key}')
168
+ self.client().upload_file(Filename=str(src_path), Bucket=self.bucket_name, Key=key)
169
+ _logger.debug(f'Media Storage: copied {src_path} to {new_file_uri}')
170
+ return new_file_uri
171
+ except ClientError as e:
172
+ self.handle_s3_error(e, self.bucket_name, f'setup iterator {self.prefix}')
173
+ raise
174
+
175
+ def _get_filtered_objects(self, tbl_id: uuid.UUID, tbl_version: Optional[int] = None) -> tuple[Iterator, Any]:
176
+ """Private method to get filtered objects for a table, optionally filtered by version.
177
+
178
+ Args:
179
+ tbl_id: Table UUID to filter by
180
+ tbl_version: Optional table version to filter by
181
+
182
+ Returns:
183
+ Tuple of (iterator over S3 objects matching the criteria, bucket object)
184
+ """
185
+ # Use ObjectPath to construct the prefix for this table
186
+ table_prefix = ObjectPath.table_prefix(tbl_id)
187
+ prefix = f'{self.prefix}{table_prefix}/'
188
+
189
+ try:
190
+ # Use S3 resource interface for filtering
191
+ s3_resource = self.get_resource()
192
+ bucket = s3_resource.Bucket(self.bucket_name)
193
+
194
+ if tbl_version is None:
195
+ # Return all objects with the table prefix
196
+ object_iterator = bucket.objects.filter(Prefix=prefix)
197
+ else:
198
+ # Filter by both table_id and table_version using the ObjectPath pattern
199
+ # Pattern: tbl_id_col_id_version_uuid
200
+ version_pattern = re.compile(
201
+ rf'{re.escape(table_prefix)}_\d+_{re.escape(str(tbl_version))}_[0-9a-fA-F]+.*'
202
+ )
203
+ # Return filtered collection - this still uses lazy loading
204
+ object_iterator = (
205
+ obj for obj in bucket.objects.filter(Prefix=prefix) if version_pattern.match(obj.key.split('/')[-1])
206
+ )
207
+
208
+ return object_iterator, bucket
209
+
210
+ except ClientError as e:
211
+ self.handle_s3_error(e, self.bucket_name, f'setup iterator {self.prefix}')
212
+ raise
213
+
214
+ def count(self, tbl_id: uuid.UUID, tbl_version: Optional[int] = None) -> int:
215
+ """Count the number of files belonging to tbl_id. If tbl_version is not None,
216
+ count only those files belonging to the specified tbl_version.
217
+
218
+ Args:
219
+ tbl_id: Table UUID to count objects for
220
+ tbl_version: Optional table version to filter by
221
+
222
+ Returns:
223
+ Number of objects matching the criteria
224
+ """
225
+ assert tbl_id is not None
226
+
227
+ object_iterator, _ = self._get_filtered_objects(tbl_id, tbl_version)
228
+
229
+ return sum(1 for _ in object_iterator)
230
+
231
+ def delete(self, tbl_id: uuid.UUID, tbl_version: Optional[int] = None) -> int:
232
+ """Delete all files belonging to tbl_id. If tbl_version is not None, delete
233
+ only those files belonging to the specified tbl_version.
234
+
235
+ Args:
236
+ tbl_id: Table UUID to delete objects for
237
+ tbl_version: Optional table version to filter by
238
+
239
+ Returns:
240
+ Number of objects deleted
241
+ """
242
+ assert tbl_id is not None
243
+
244
+ # Use shared method to get filtered objects and bucket
245
+ object_iterator, bucket = self._get_filtered_objects(tbl_id, tbl_version)
246
+
247
+ total_deleted = 0
248
+
249
+ try:
250
+ objects_to_delete = []
251
+
252
+ # Process objects in batches as we iterate (memory efficient)
253
+ for obj in object_iterator:
254
+ objects_to_delete.append({'Key': obj.key})
255
+
256
+ # Delete in batches of 1000 (S3 limit)
257
+ if len(objects_to_delete) >= 1000:
258
+ bucket.delete_objects(Delete={'Objects': objects_to_delete, 'Quiet': True})
259
+ total_deleted += len(objects_to_delete)
260
+ objects_to_delete = []
261
+
262
+ # Delete any remaining objects in the final batch
263
+ if len(objects_to_delete) > 0:
264
+ bucket.delete_objects(Delete={'Objects': objects_to_delete, 'Quiet': True})
265
+ total_deleted += len(objects_to_delete)
266
+
267
+ return total_deleted
268
+
269
+ except ClientError as e:
270
+ self.handle_s3_error(e, self.bucket_name, f'deleting with {self.prefix}')
271
+ raise
272
+
273
+ def list_objects(self, return_uri: bool, n_max: int = 10) -> list[str]:
274
+ """Return a list of objects found in the specified destination bucket.
275
+ Each returned object includes the full set of prefixes.
276
+ if return_uri is True, full URI's are returned; otherwise, just the object keys.
277
+ """
278
+ p = self.soa.prefix_free_uri if return_uri else ''
279
+
280
+ s3_client = self.client()
281
+ r: list[str] = []
282
+ try:
283
+ # Use paginator to handle more than 1000 objects
284
+ paginator = s3_client.get_paginator('list_objects_v2')
285
+ for page in paginator.paginate(Bucket=self.bucket_name, Prefix=self.prefix):
286
+ if 'Contents' not in page:
287
+ continue
288
+ for obj in page['Contents']:
289
+ if len(r) >= n_max:
290
+ return r
291
+ r.append(f'{p}{obj["Key"]}')
292
+ except ClientError as e:
293
+ self.handle_s3_error(e, self.bucket_name, f'list objects from {self.prefix}')
294
+ return r
295
+
296
+ @classmethod
297
+ def handle_s3_error(
298
+ cls, e: 'ClientError', bucket_name: str, operation: str = '', *, ignore_404: bool = False
299
+ ) -> None:
300
+ error_code = e.response.get('Error', {}).get('Code')
301
+ error_message = e.response.get('Error', {}).get('Message', str(e))
302
+ if ignore_404 and error_code == '404':
303
+ return
304
+ if error_code == '404':
305
+ raise excs.Error(f'Bucket {bucket_name} not found during {operation}: {error_message}')
306
+ elif error_code == '403':
307
+ raise excs.Error(f'Access denied to bucket {bucket_name} during {operation}: {error_message}')
308
+ elif error_code == 'PreconditionFailed' or 'PreconditionFailed' in error_message:
309
+ raise excs.Error(f'Precondition failed for bucket {bucket_name} during {operation}: {error_message}')
310
+ else:
311
+ raise excs.Error(f'Error during {operation} in bucket {bucket_name}: {error_code} - {error_message}')
312
+
313
+ @classmethod
314
+ def create_boto_session(cls, profile_name: Optional[str] = None) -> Any:
315
+ """Create a boto session using the defined profile"""
316
+ if profile_name:
317
+ try:
318
+ _logger.info(f'Creating boto session with profile {profile_name}')
319
+ session = boto3.Session(profile_name=profile_name)
320
+ return session
321
+ except Exception as e:
322
+ _logger.info(f'Error occurred while creating boto session with profile {profile_name}: {e}')
323
+ return boto3.Session()
324
+
325
+ @classmethod
326
+ def create_boto_client(cls, profile_name: Optional[str] = None, extra_args: Optional[dict[str, Any]] = None) -> Any:
327
+ config_args: dict[str, Any] = {
328
+ 'max_pool_connections': 30,
329
+ 'connect_timeout': 15,
330
+ 'read_timeout': 30,
331
+ 'retries': {'max_attempts': 3, 'mode': 'adaptive'},
332
+ }
333
+
334
+ session = cls.create_boto_session(profile_name)
335
+
336
+ try:
337
+ # Check if credentials are available
338
+ session.get_credentials().get_frozen_credentials()
339
+ config = botocore.config.Config(**config_args)
340
+ return session.client('s3', config=config, **(extra_args or {})) # credentials are available
341
+ except Exception as e:
342
+ _logger.info(f'Error occurred while creating S3 client: {e}, fallback to unsigned mode')
343
+ # No credentials available, use unsigned mode
344
+ config_args = config_args.copy()
345
+ config_args['signature_version'] = botocore.UNSIGNED
346
+ config = botocore.config.Config(**config_args)
347
+ return boto3.client('s3', config=config)
348
+
349
+ @classmethod
350
+ def create_boto_resource(
351
+ cls, profile_name: Optional[str] = None, extra_args: Optional[dict[str, Any]] = None
352
+ ) -> Any:
353
+ # Create a session using the defined profile
354
+ return cls.create_boto_session(profile_name).resource('s3', **(extra_args or {}))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pixeltable
3
- Version: 0.4.13
3
+ Version: 0.4.15
4
4
  Summary: AI Data Infrastructure: Declarative, Multimodal, and Incremental
5
5
  Project-URL: homepage, https://pixeltable.com/
6
6
  Project-URL: repository, https://github.com/pixeltable/pixeltable
@@ -1,44 +1,45 @@
1
- pixeltable/__init__.py,sha256=PDfphK_WypPopRbBNhJ0wXiX5T9Vp4Vq9Hf8Oz_oXZA,1620
1
+ pixeltable/__init__.py,sha256=NJIh6nHictV4OeKGRFJ8QQ-FU5doqPT7PFGD7qFkTuM,1628
2
2
  pixeltable/__version__.py,sha256=LnMIuAxx6nAQDMev_jnZyUdgsaiE3F8lulfXQBRl9qQ,112
3
- pixeltable/config.py,sha256=-aoSVF0Aak83IC-u-XANw3if76TDq5VnnWNWoFDR5Hc,8390
4
- pixeltable/dataframe.py,sha256=XbrzPjnPgZKJ5lVgPO71cK-nRHCpqGCGWFc52kUO8_E,64213
5
- pixeltable/env.py,sha256=LUTOi3DcinsVFoqiOmsG8Dlhe8yWBEfgIdY9rOlJMME,44203
3
+ pixeltable/config.py,sha256=GEHneFtLb47thJZ6nTuJpzcpDG39lNzKPGFdKKfOvkQ,8540
4
+ pixeltable/dataframe.py,sha256=Qu1nCwbif9QEtBGyETnGXlGgnznMa_nQjmDnc6DcqOc,64356
5
+ pixeltable/env.py,sha256=_v0Ny62RMwJkMgiXoflnXmWbvLRx0eJ4I8CRuZVcT4M,45598
6
6
  pixeltable/exceptions.py,sha256=Gm8d3TL2iiv6Pj2DLd29wp_j41qNBhxXL9iTQnL4Nk4,1116
7
- pixeltable/globals.py,sha256=dktqUbpsiLorB4-1VjYDp7LH0rfqfh_3c8OD819K_H4,39183
8
- pixeltable/plan.py,sha256=4yAe7ExAqaSvkFxwK7LPH_HpmoumwqoLeOo7czJ8CyQ,48001
7
+ pixeltable/globals.py,sha256=mLQk77dsj4QfjGL0jC-aTHAVO327hG1mjmHeOBfiuvw,39950
8
+ pixeltable/plan.py,sha256=lG_H9mkixP_Dqcy14DqDNpGBs-JXAJa9kVy6rTUsuc4,49258
9
9
  pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- pixeltable/store.py,sha256=CneWUmgN-EwaPYLcizlAxONC7WYwMr8SNpSFeNBBmOA,22885
11
- pixeltable/type_system.py,sha256=UfPZZy4zJ2kGvdHXI9rqxOGAjgIxCZ9QGvvidPWcq-M,56153
10
+ pixeltable/store.py,sha256=zgzn-28gvRxRm29hc7pFX50Ls_ca-pJOHSDdzFZzeug,22886
11
+ pixeltable/type_system.py,sha256=4xnPN684UKC3lhzOoOqVAgR1lOPlHeEHt5Njpc6cGQQ,56131
12
12
  pixeltable/catalog/__init__.py,sha256=GL0MLxqCBHlhKWqhC3e9B4kwTazagTOiqBHHRjyWbTg,726
13
- pixeltable/catalog/catalog.py,sha256=gaq10XFwkr6jyv8yVi5xV3_oiDkPvqVe55vxOo14W6k,93853
14
- pixeltable/catalog/column.py,sha256=MXa5o3ku94T8ZFEL7wnAvqvlk65fOmmHPqIvrUVf3uo,13514
13
+ pixeltable/catalog/catalog.py,sha256=x_stqOC6CFdklpefFuVflrptGmOqxH4Myo4XzYB3xmU,100345
14
+ pixeltable/catalog/column.py,sha256=qEO1eyyJMaWvC_YXnyjs8f2dz_D52jxVYDN1_iVzEPE,13737
15
15
  pixeltable/catalog/dir.py,sha256=VYTscPlKR6XhupPTXlJ8txAHxS5GSpPJ3LIleDJagVQ,2047
16
16
  pixeltable/catalog/globals.py,sha256=uMIDsbeDzFxZbcgKDTOiT5plC1gAKgz1oxxdh1odIPw,2648
17
17
  pixeltable/catalog/insertable_table.py,sha256=VUuJ8z7OtMqgy_LMzkn1KzeLXdR-9poTttClscQ_uaU,13899
18
18
  pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
19
19
  pixeltable/catalog/path.py,sha256=O3FfxrvyX2crijBhp_2k4-3mG3BFxwba-tlPB74QtJQ,3780
20
20
  pixeltable/catalog/schema_object.py,sha256=rQ6-3rzqnOHyEEHi97kai2S7BO3D9AkH7rirnfbGc14,1785
21
- pixeltable/catalog/table.py,sha256=phOf59IZJO7xPPR91F2trJpA4TC9lic-dd13mbiUz5Q,80222
22
- pixeltable/catalog/table_metadata.py,sha256=MVxJLS6Tz2PVOerlnoOOjjhq6LxUdDLeN0BUJf42Smw,3518
23
- pixeltable/catalog/table_version.py,sha256=SRF2ACp_DcPMLTbc4dbZSgYEfW6-o-UzDOBehecKbb0,65073
21
+ pixeltable/catalog/table.py,sha256=bPG9u-UnktClTQmqQ6cB0MSzp2uxfNkpzDUngJhG2ew,81010
22
+ pixeltable/catalog/table_metadata.py,sha256=cLqEgpRKmJOaJnKdJWMz3NLzZ59n41UIzfa_EloDZNU,3567
23
+ pixeltable/catalog/table_version.py,sha256=Wqm_10XivTJAT5MGVF76fNGrCEW1jiUD182RnexWuRQ,64176
24
24
  pixeltable/catalog/table_version_handle.py,sha256=FTPRqcGY-h-POcWyZbd9b8P2D5zIw5OSUvwF_dbyCGo,3608
25
25
  pixeltable/catalog/table_version_path.py,sha256=IaFVDH06_6ZMuBv5eLNCRTlWizpvz95jgAzqp4OVx_o,9713
26
26
  pixeltable/catalog/tbl_ops.py,sha256=Vdcz4Nzvdw09zcQaCEaOr9Uufk2rQHgG0vBvMbQp9R8,1145
27
- pixeltable/catalog/update_status.py,sha256=tF3KkDc6kvEQ7Tg3VMj-n774uKi1iLla61wLyeuwDRs,6888
28
- pixeltable/catalog/view.py,sha256=D01t8BNXjAEQiGyG2qCpvflNPsvl4fEk2wPkFpuScCA,15288
29
- pixeltable/exec/__init__.py,sha256=hQvj4ra4ubxu94qyuCBTHKsuYGzundkTTluOTIb5Bx8,524
30
- pixeltable/exec/aggregation_node.py,sha256=CTMR_p1_TGE-iVUP3jLvlmp5rssjukCKCRv3SjMCOo0,4502
31
- pixeltable/exec/cache_prefetch_node.py,sha256=tTFjDKnhWVWA5cVhm44afNp65cyKWIOO3wBU7fd69UM,11905
27
+ pixeltable/catalog/update_status.py,sha256=jeRy7WUZ80l4gPY1c5vYcxT1F82nL5KphNrSKKfOdk8,7667
28
+ pixeltable/catalog/view.py,sha256=Snki7QNlKThba9MSeEYCaBIwaqfiR0v_FMdIO9SJkFE,15420
29
+ pixeltable/exec/__init__.py,sha256=9B31dWrTJ9sdQiVd1OFtHgxa8A2YmAPBDPd6gnFjEqQ,580
30
+ pixeltable/exec/aggregation_node.py,sha256=54YO1tddnIGOlWUwVff9xcghrZr60UNAgBekF7OuxWA,4401
31
+ pixeltable/exec/cache_prefetch_node.py,sha256=Xq6Ty_0LLipDOQ91keUNVo5DZPn5Ogz39X2ThKQz5WA,10891
32
32
  pixeltable/exec/component_iteration_node.py,sha256=7k8Wfzjc15SO0V8rc-zYTiB3DQ-euMtNQIOsve_FY7I,4797
33
- pixeltable/exec/data_row_batch.py,sha256=kqSM33A3w8nEzUsBJ-sz3DFVfQYibz57djdm_ZYvBnk,1737
33
+ pixeltable/exec/data_row_batch.py,sha256=ryrhfXczQVrtxrTEyDTyK9ItNZ9wNt15FdM_Mpuuumw,1109
34
34
  pixeltable/exec/exec_context.py,sha256=jKeLStfkjwCKKAooC-7a7qZUnZU5O0_JQhanhVerV9c,984
35
35
  pixeltable/exec/exec_node.py,sha256=auRbL43-NR2G0rnjs8aK4Q2qAV3IeKDNqduVnoO-2AY,3315
36
- pixeltable/exec/in_memory_data_node.py,sha256=fp8sE5TH1DJSaxKb5BVTjNVW1Nmzh2ysCjMJMLaNSus,3513
36
+ pixeltable/exec/in_memory_data_node.py,sha256=XrR3ggNILrJ77n3l4qOiKWfwUVakdRIdRsVasKP17jw,3513
37
+ pixeltable/exec/object_store_save_node.py,sha256=JCgx2fYqLK_Vjj1lK5vHebgS1oSqEq52w0Uxg3hJSIU,13322
37
38
  pixeltable/exec/row_update_node.py,sha256=zU0eSyn81-vRrjAMOadRqU8luTshnPUtIbS7npyLBKY,2798
38
- pixeltable/exec/sql_node.py,sha256=EHZNvbkzECJUgCQtqFjC1yGr6PkSYZXM3wPlAGcGuAI,27436
39
+ pixeltable/exec/sql_node.py,sha256=99GW3729YzYT0vYxhACte8XQ-NxIBn1cgfRXzPbz7O4,27233
39
40
  pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
40
41
  pixeltable/exec/expr_eval/evaluators.py,sha256=-6s_y29Wh8p35SVKkXtnA0NkzcHVw1Z8PgHGiFrMsqs,17135
41
- pixeltable/exec/expr_eval/expr_eval_node.py,sha256=JIbyo61yTr4RUMyXbTFkMb88h4JWsdRjieBy9VikWTE,18919
42
+ pixeltable/exec/expr_eval/expr_eval_node.py,sha256=xi0H3vlhf00gcPI_Zojt7nhpVsKqV5GaWip8TfIz_4k,19781
42
43
  pixeltable/exec/expr_eval/globals.py,sha256=FL9DwFub1fc8ppzzTdrQytBwylyDkH4mIwciWnIGBcc,7816
43
44
  pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
44
45
  pixeltable/exec/expr_eval/schedulers.py,sha256=pNTHiwL8omHa_kodv61gynBHFbJnSg5CktvezrO_yc8,24337
@@ -49,7 +50,7 @@ pixeltable/exprs/column_property_ref.py,sha256=rq8VD34fZwAZuN9wIqQEwVay7LTPBKvXX
49
50
  pixeltable/exprs/column_ref.py,sha256=MH83bYsef5UC4vWU71PE-lPiVd8hVw4tT6sjdCCvWNw,15473
50
51
  pixeltable/exprs/comparison.py,sha256=lgaRx000ZaNH10A4hrtsi5XoZKE-CNEONGMi7jxJfcM,5133
51
52
  pixeltable/exprs/compound_predicate.py,sha256=8nGsBlKaMBe1TT1VrZQ-Khe8rVgB8vukZQSspiHDB7Y,3863
52
- pixeltable/exprs/data_row.py,sha256=Pi7oIh3YJ7lh0loeGgIGm9uRhCvOcD8wJNdatHpBMKw,12417
53
+ pixeltable/exprs/data_row.py,sha256=bFgaDSaS5rbk_ELWZd3IUmLdBd3addSOqKLa3I1MYCk,12344
53
54
  pixeltable/exprs/expr.py,sha256=T558PJBeVaHCGgv_TBDUIn-fOZJtSMkz26jGUTpvCVY,35961
54
55
  pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
55
56
  pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
@@ -59,11 +60,11 @@ pixeltable/exprs/in_predicate.py,sha256=u98JmBX9XsglKe5uCy1NUMnyi3wioBri_tue2vI9
59
60
  pixeltable/exprs/inline_expr.py,sha256=XYVKKXZN9BtHN5qlvZna-mgdOlot6WcmPu5usRBYei0,7972
60
61
  pixeltable/exprs/is_null.py,sha256=NfA_485hfT69pWyY6u8BhykDUkz5k91AH93azGu6lCg,1087
61
62
  pixeltable/exprs/json_mapper.py,sha256=bJSB39sZgpN9KS0RReDnUhTCwg-4Y4cgXXaFNy3o3wU,7035
62
- pixeltable/exprs/json_path.py,sha256=XgVhxeJEa9a48Dg2FgzE0CH4N1Qk2ZCaTJC9UOui3lo,7145
63
+ pixeltable/exprs/json_path.py,sha256=nct3ZEgJuBbN_50wdnX7kNqwt5CzxnpgpKRcL2ST-IA,7126
63
64
  pixeltable/exprs/literal.py,sha256=OCJL_pw_WKqx3bXMEwL6yNaKVAKDtGRzSZUFwucRxZI,4860
64
65
  pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
65
66
  pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
66
- pixeltable/exprs/row_builder.py,sha256=GfHPSSNKxHP3puYioKwiwR-2PMa5eYvw1HHwgQIarPQ,23241
67
+ pixeltable/exprs/row_builder.py,sha256=WyyuMRnuEUP42IMB6K3rPm-mxwIO8U9MPpw6WWMDAIM,22875
67
68
  pixeltable/exprs/rowid_ref.py,sha256=8MvQs3Uu01Gz__WXw9BCJv0CHrSaFDuQtU7rUr1AWEk,5008
68
69
  pixeltable/exprs/similarity_expr.py,sha256=i0UUnMSKKGXd3Uksu6FU2NvkfG0qzfzfi-GPy-LdutM,3688
69
70
  pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
@@ -89,7 +90,7 @@ pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfx
89
90
  pixeltable/functions/date.py,sha256=qs1svJ9FVod3OTa5hQNKIuashb6tVhW_2EAEXYGQX74,5308
90
91
  pixeltable/functions/deepseek.py,sha256=iw59TKKcw3VqbHMHB2ugtcTPeTVKuHp_3pfkjF6DYmE,3550
91
92
  pixeltable/functions/fireworks.py,sha256=q7eWlYfiWbA0d9r3CB_NAe1fw3q-Z7qsw2gyGJNgWLQ,4786
92
- pixeltable/functions/gemini.py,sha256=igtpGBiVekkaWtVE6X04pQ7C9md8nY42W7xU_XuMayE,8924
93
+ pixeltable/functions/gemini.py,sha256=Stpchxr7FfxbwCp3WsPR8zfd_GFdLMCWW1G7vt0DpNk,8924
93
94
  pixeltable/functions/globals.py,sha256=OyPJUJ4S6VWyzxstxIzk3xzYBGIEMwgk1RmSTWTZzdI,5106
94
95
  pixeltable/functions/groq.py,sha256=61XbgY4ItASomMw9t-q8HBuv8II_ssclthjA7sL6jik,3605
95
96
  pixeltable/functions/huggingface.py,sha256=Y-io3EungSs5ibr43vLEXs4dz_Ej20F1nglD0fyLrXA,20371
@@ -99,43 +100,43 @@ pixeltable/functions/llama_cpp.py,sha256=uop0K6oNxCnQXbdiL-_6PVsusc1xqCtwTipAyIb
99
100
  pixeltable/functions/math.py,sha256=jhlD7v4eY-6KdmsFEBqb-W_vspGahOosUvFahWFzxrU,4969
100
101
  pixeltable/functions/mistralai.py,sha256=Fk52mfWUfxVy-yCxhH6wrGS7nLLSiOOrWxbTkkiQ-O8,5542
101
102
  pixeltable/functions/ollama.py,sha256=4-6h9Foq_7Ut7JtEHGkeg1KbuKaFywSuMrKiw0xAyCA,4231
102
- pixeltable/functions/openai.py,sha256=tXmT7UwyUbREa44PS9TPiK1xadPx6eQ_zLfDgQL-A9k,28999
103
+ pixeltable/functions/openai.py,sha256=bxHzuJybDrjaYaLnKiI84U2NvtpIBU_iidrJq3a1Hzg,28999
103
104
  pixeltable/functions/replicate.py,sha256=sPvRGr0j0kCDc6Vz3mPUioFflApijukvZWJJUO2bqIQ,2429
104
105
  pixeltable/functions/string.py,sha256=LdBNOna5PUSPmM5VlJ_qhmwzyFhumW0k6Dvx2rXSZtc,25356
105
106
  pixeltable/functions/timestamp.py,sha256=3GVCVIWdry96Qk5XXuvbJ58Tp30iY5snBibzl2CHjQc,9143
106
107
  pixeltable/functions/together.py,sha256=A8J19BXywyWQ6a2_n05-8uIG5jquOBGqPmW3mb-NrIc,8842
107
108
  pixeltable/functions/util.py,sha256=uQNkyBSkTVMe1wbUI2Q0nz-mM3qPVTF86yK8c9OFIcE,954
108
- pixeltable/functions/video.py,sha256=0Hgfi3PHA2BPVpgWEQ3RffFtvc2YkjX3UX3dXSzrEJk,27009
109
+ pixeltable/functions/video.py,sha256=LQ-1KHoU6DjgCWlj0koBSVO6vH4JKvfl1lGIntWoSSI,30854
109
110
  pixeltable/functions/vision.py,sha256=17h9bOm3NJyQzFMBwXDHMqnkcuCspyQJgHdBOXV1Ip8,15380
110
111
  pixeltable/functions/whisper.py,sha256=u2QcDU7JdtgLIImCkFPkzjWEjLTJIrlSkAWqeITyIJw,3103
111
- pixeltable/functions/whisperx.py,sha256=BT9gwXEf5V1lgDxynkrrH6gsuCLqjCzfMJKj5DaOtSM,7661
112
- pixeltable/functions/yolox.py,sha256=ZdYr6WIqTCHOJoZSoXe4CbME54dYeeeOhkOi1I7VtcE,3518
112
+ pixeltable/functions/whisperx.py,sha256=NapvBQlIR6FfYeUP328Kjv7a9zgFZPghiFtsvgzhKZk,7724
113
+ pixeltable/functions/yolox.py,sha256=IXTE-1NDY7cQp94UDFu0wZjMMcTociUZc4GgEOcNU3I,3559
113
114
  pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
114
115
  pixeltable/index/base.py,sha256=200s7v3Zy810bRlbSAYzxxaEjVssl6r8esTHiSvWRwQ,1704
115
116
  pixeltable/index/btree.py,sha256=8B06D67ay0DFUtEBC5q4bLjxMq7ILpKyyoLAiSaamzA,2503
116
- pixeltable/index/embedding_index.py,sha256=B_k_3UJmSv7t2ljUg8GC_D4t1jc03PVsTAvxqiTmHBA,11754
117
- pixeltable/io/__init__.py,sha256=SO9xvWuQHfg_YyVahDmstB3lSuMoPKRarW8qgUR81jM,655
117
+ pixeltable/index/embedding_index.py,sha256=rXAh3ZPrsUoaqNB8JSYlceDkcjs82hIkqSDwRi70Pio,11638
118
+ pixeltable/io/__init__.py,sha256=k8jlxi2IB_yA8yYTk9lf7qyuayxUbvs9xDuZcO77sFY,716
118
119
  pixeltable/io/datarows.py,sha256=s2fDQTttGxq7cS5JwKFEJRSKn6WsXTaGdmm9VJSl_2M,6154
119
120
  pixeltable/io/external_store.py,sha256=rOYBwTqcZZVU2toWxJ_9Iy2w2YO0DhuABrM2xGmqHSo,14787
120
- pixeltable/io/fiftyone.py,sha256=JcAL9zFszSTcsws6ioF1KZZJFmUeg-11W-c4Gyh3FyQ,6891
121
+ pixeltable/io/fiftyone.py,sha256=6KyOqJbRXJzF96Ob4B3yZzyU0yveLbvuf6thjfrZZwE,6891
121
122
  pixeltable/io/globals.py,sha256=B9ubI9Z0m2wGPZXWmZm10vlaP0UCuUsVyrMWvyudZSc,11360
122
123
  pixeltable/io/hf_datasets.py,sha256=5WfWfXoQppG1Bx_pS5n44KO1Vo_mEb_S82PLB8cLfAU,5606
123
- pixeltable/io/label_studio.py,sha256=OCQBVgGjXRSdukFQv2ZKdaBmpxanqH9ibDLxZd1L3mc,31469
124
+ pixeltable/io/label_studio.py,sha256=PsKZbcko7OzxkNiay2rgpt8VoTK705k4M8AJ7AjCaew,31438
124
125
  pixeltable/io/lancedb.py,sha256=kNcYXptieMlJ6yxEIZHVFklEMOEB2mrSyp7XZmOw4qs,82
125
126
  pixeltable/io/pandas.py,sha256=xQmkwbqE9_fjbbPUgeG5yNICrbVVK73UHxDL-cgrQw0,9007
126
127
  pixeltable/io/parquet.py,sha256=qVvg9nixJnK9gXYxZocD8HE13SznyLrgW9IsehtT4j4,4101
127
128
  pixeltable/io/table_data_conduit.py,sha256=8jwQ3IOoOBS-8j2TEfgiqsFUD85kEP5IjoC0dg2uPEk,22058
128
129
  pixeltable/io/utils.py,sha256=qzBTmqdIawXMt2bfXQOraYnEstL69eC2Z33nl8RrwJk,4244
129
- pixeltable/iterators/__init__.py,sha256=hI937cmBRU3eWbfJ7miFthAGUo_xmcYciw6gAjOCg9g,470
130
- pixeltable/iterators/audio.py,sha256=HYE8JcqaJsTGdrq4NkwV5tn7lcyMp6Fjrm59efOLzb0,9671
130
+ pixeltable/iterators/__init__.py,sha256=hbQhrz0LShLGOPcT1SnWl1s1nBUzAjWino64CfFT_UA,537
131
+ pixeltable/iterators/audio.py,sha256=khW4M4P_J5twz1Eu3nuDP_73C9iWeCYZ5K_zQysvYxI,9671
131
132
  pixeltable/iterators/base.py,sha256=ZC0ZvXL4iw6AmT8cu-Mdx-T2UG9nmJYV1C6LK4efAfw,1669
132
- pixeltable/iterators/document.py,sha256=7NIN5W5jHVm4v5_FzGsH0XJigtPCm8DfXJUc3_hEtHQ,20073
133
+ pixeltable/iterators/document.py,sha256=UMmLeLQxyNfbhI8p3rBrE-sYrnJhpEUVaMLM50Iq-e8,19972
133
134
  pixeltable/iterators/image.py,sha256=RrFdf5cnFIQzWKJk4uYi1m1p2qAiz909THYhRQ27DbY,3603
134
135
  pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
135
- pixeltable/iterators/video.py,sha256=aKT2YxZGUsAifkWK434RDnqZj_gGtcQ1waN9AV98fMA,16105
136
+ pixeltable/iterators/video.py,sha256=8xjoelWoSsP0YDr9YGdugseXviGmqoytkgz4ESXC3iw,16105
136
137
  pixeltable/metadata/__init__.py,sha256=oTO9kN6h4xJ2lsk4a2bq6ejAD-4wToy7b5_i3Pq1Qnc,3289
137
138
  pixeltable/metadata/notes.py,sha256=3fdZDFpL1-b194Ejv0Y0YP-vbnV-XvVP9wOmZM9XARA,1545
138
- pixeltable/metadata/schema.py,sha256=fs9W2SLh32Ehxc9AChVH7YCtlSSnQkgGMbEyOh0B4W0,13416
139
+ pixeltable/metadata/schema.py,sha256=CL877NmO5ZOusqhURKkMjCoh00alW199p4onXab3iVg,13824
139
140
  pixeltable/metadata/utils.py,sha256=NJQXWhhK1hdOZ4H3hh9N0mqbl-I9JqMUqrfA6OWLflE,2682
140
141
  pixeltable/metadata/converters/convert_10.py,sha256=myYIo1DyccnsQUxDKG6mafnU5ge_EhZpHg_pesKBoK4,708
141
142
  pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
@@ -170,8 +171,8 @@ pixeltable/metadata/converters/util.py,sha256=QUBOj2F_6rCAdIo0lgD1IVgAM15Vmq7ikQ
170
171
  pixeltable/mypy/__init__.py,sha256=cD_oHXClR_bDM8qVNIfaOAgRhQjPfcWvLcinz79ua6o,54
171
172
  pixeltable/mypy/mypy_plugin.py,sha256=KCjzKOeKW5CBqJOq9Ch7ZJ25ICPc4nlTB49DxtC6oDM,5460
172
173
  pixeltable/share/__init__.py,sha256=PTX1mw61Ss4acEOI-sUlu0HaoVsosLqwDfh0ldn8Hkg,84
173
- pixeltable/share/packager.py,sha256=5rSKnQCs3YP5h48d79bXEK4L8tLUSeTSbXaB8X9SmBI,31265
174
- pixeltable/share/publish.py,sha256=VE_H3ux56gdSHd8_ganxCnNYtxrjaalMPgwAIYmdbE8,11300
174
+ pixeltable/share/packager.py,sha256=UjpEv7wU_R4BKstMYw7PPULrSa4szN9KP8wwM4NU1-g,31563
175
+ pixeltable/share/publish.py,sha256=Cpbn10duCXoe5k0RaB2WpJjbeMhXd5DXEV7OLQpmtJA,10899
175
176
  pixeltable/utils/__init__.py,sha256=45qEM20L2VuIe-Cc3BTKWFqQb-S7A8qDtmmgl77zYK0,1728
176
177
  pixeltable/utils/arrow.py,sha256=U7vb_ffPCR7zv-phyBMPMDosPdKN6LK4IVMpfm2mRy8,10424
177
178
  pixeltable/utils/av.py,sha256=omJufz62dzaTTwlR7quKfcT7apf8KkBLJ9cQ9240dt0,4016
@@ -179,23 +180,25 @@ pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
179
180
  pixeltable/utils/code.py,sha256=3CZMVJm69JIG5sxmd56mjB4Fo4L-s0_Y8YvQeJIj0F0,1280
180
181
  pixeltable/utils/console_output.py,sha256=x23iDnNwUbsr7Ec20BQ7BLATTsrQZflxc9NucAt_sVU,1150
181
182
  pixeltable/utils/coroutine.py,sha256=d87kLlkVIZq2u0kTE7kJ5Tc_yjEkdGi5sXAuxjLLxXY,896
182
- pixeltable/utils/dbms.py,sha256=cuQqlzLF7WON_mkJZ4QWlfX6lCxA97V32lhtMcOlDLg,2018
183
+ pixeltable/utils/dbms.py,sha256=qigvBIVzEfii9rcxrkEvwNpNi7gvmf0uwr2CMjenJYc,3012
183
184
  pixeltable/utils/description_helper.py,sha256=lwAduHT1yofH6loyNBwuCnMh-sY2e2FqHKDTVhrZDbg,3724
184
185
  pixeltable/utils/documents.py,sha256=x3UHU7eykibyA3eVkSrCK1CQoaid228vp96WUEESssU,3105
185
186
  pixeltable/utils/exception_handler.py,sha256=yrTAtUJEOhldps_k6aRLEf5yQ8gYGhl9c6ewYNC4Qfc,2476
186
187
  pixeltable/utils/filecache.py,sha256=3TTEqhGg0pEAP_l0GKn34uspC4dha1jPab1Ka9_oTBM,10877
187
188
  pixeltable/utils/formatter.py,sha256=tbMxE9rBw6wdKUnJhNZ8h9uAF8dZKcihQ2KesqAag9A,10096
189
+ pixeltable/utils/gcs_store.py,sha256=sk2TYZZv4QMJi_hyGvKAzORuABBblEGt4tgnq4eXdho,11361
188
190
  pixeltable/utils/http_server.py,sha256=6khOAtpVj1lDIm9Dx8VIECLm87cFEp4IFbAg8T92A2o,2441
189
191
  pixeltable/utils/iceberg.py,sha256=COeNqqy5RRMkDGLS8CTnaUeAccG10x2fwP3e1veuqIA,522
190
192
  pixeltable/utils/lancedb.py,sha256=Otr-t47YACRo0Cq9-FyelcUuan1Kgs4gxCOpLOckj3s,2988
191
- pixeltable/utils/media_store.py,sha256=-rYfpZOUrWU1YtEFrxdrn9Na0NeyRW3HJYsOdH-kJO4,10898
193
+ pixeltable/utils/local_store.py,sha256=HwxgkjW0r4Uc50XqLjMFpLecWnFeUIU0GPcIp_V5cig,13529
194
+ pixeltable/utils/object_stores.py,sha256=KUWYYm8g5HIPnwL4h1VgGQnGcDESX9ZQ65PaCxmfum4,21407
192
195
  pixeltable/utils/pydantic.py,sha256=-ztUsuRXA7B6bywb5Yy1h5pNQ2DnsT1d0oHMxqtK3WY,2011
193
- pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
194
- pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
196
+ pixeltable/utils/pytorch.py,sha256=77x2g4N6dkfYvqbxjYi_rBRiNnMMZAb2cNtBw0hOCHg,3582
197
+ pixeltable/utils/s3_store.py,sha256=l6X6vakjxtryUBJMsFYk7PUJLsMdmrVcUkF7LwZXdk0,14714
195
198
  pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
196
199
  pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
197
- pixeltable-0.4.13.dist-info/METADATA,sha256=VSQp0eAebSMwoxcFkjAwTQbtuLISMx-PZ-LoCJo55hg,25631
198
- pixeltable-0.4.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
199
- pixeltable-0.4.13.dist-info/entry_points.txt,sha256=rrKugZmxDtGnXCnEQ5UJMaaSYY7-g1cLjUZ4W1moIhM,98
200
- pixeltable-0.4.13.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
201
- pixeltable-0.4.13.dist-info/RECORD,,
200
+ pixeltable-0.4.15.dist-info/METADATA,sha256=yaHrz0jidyCrfvXfZ1ANwI5nGvTAGkaroXZRrpMUZpU,25631
201
+ pixeltable-0.4.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
202
+ pixeltable-0.4.15.dist-info/entry_points.txt,sha256=rrKugZmxDtGnXCnEQ5UJMaaSYY7-g1cLjUZ4W1moIhM,98
203
+ pixeltable-0.4.15.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
204
+ pixeltable-0.4.15.dist-info/RECORD,,