pixeltable 0.3.13__py3-none-any.whl → 0.3.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.
- pixeltable/__init__.py +2 -2
- pixeltable/__version__.py +2 -2
- pixeltable/catalog/catalog.py +9 -7
- pixeltable/catalog/column.py +6 -2
- pixeltable/catalog/dir.py +2 -1
- pixeltable/catalog/insertable_table.py +1 -1
- pixeltable/catalog/schema_object.py +2 -1
- pixeltable/catalog/table.py +12 -8
- pixeltable/catalog/table_version.py +21 -0
- pixeltable/catalog/view.py +3 -3
- pixeltable/dataframe.py +48 -5
- pixeltable/env.py +1 -1
- pixeltable/exec/aggregation_node.py +14 -0
- pixeltable/exec/cache_prefetch_node.py +1 -1
- pixeltable/exec/expr_eval/expr_eval_node.py +1 -1
- pixeltable/exprs/column_ref.py +42 -17
- pixeltable/exprs/data_row.py +3 -0
- pixeltable/exprs/globals.py +1 -1
- pixeltable/exprs/literal.py +11 -1
- pixeltable/exprs/rowid_ref.py +4 -1
- pixeltable/exprs/similarity_expr.py +1 -1
- pixeltable/func/function.py +1 -1
- pixeltable/functions/__init__.py +1 -0
- pixeltable/functions/date.py +185 -0
- pixeltable/functions/gemini.py +184 -49
- pixeltable/functions/globals.py +1 -16
- pixeltable/functions/json.py +2 -1
- pixeltable/functions/math.py +103 -0
- pixeltable/functions/string.py +1 -2
- pixeltable/functions/video.py +2 -2
- pixeltable/globals.py +26 -9
- pixeltable/io/hf_datasets.py +2 -2
- pixeltable/io/pandas.py +16 -4
- pixeltable/io/parquet.py +4 -2
- pixeltable/metadata/__init__.py +1 -1
- pixeltable/metadata/converters/convert_34.py +21 -0
- pixeltable/metadata/notes.py +1 -0
- pixeltable/plan.py +12 -5
- pixeltable/share/__init__.py +1 -1
- pixeltable/share/packager.py +397 -120
- pixeltable/share/publish.py +61 -16
- pixeltable/store.py +57 -20
- pixeltable/type_system.py +46 -2
- pixeltable/utils/arrow.py +8 -2
- pixeltable/utils/pytorch.py +4 -0
- {pixeltable-0.3.13.dist-info → pixeltable-0.3.15.dist-info}/METADATA +2 -4
- {pixeltable-0.3.13.dist-info → pixeltable-0.3.15.dist-info}/RECORD +50 -48
- {pixeltable-0.3.13.dist-info → pixeltable-0.3.15.dist-info}/LICENSE +0 -0
- {pixeltable-0.3.13.dist-info → pixeltable-0.3.15.dist-info}/WHEEL +0 -0
- {pixeltable-0.3.13.dist-info → pixeltable-0.3.15.dist-info}/entry_points.txt +0 -0
pixeltable/share/publish.py
CHANGED
|
@@ -9,10 +9,9 @@ from tqdm import tqdm
|
|
|
9
9
|
import pixeltable as pxt
|
|
10
10
|
from pixeltable import exceptions as excs
|
|
11
11
|
from pixeltable.env import Env
|
|
12
|
-
from pixeltable.metadata.schema import FullTableMd
|
|
13
12
|
from pixeltable.utils import sha256sum
|
|
14
13
|
|
|
15
|
-
from .packager import TablePackager
|
|
14
|
+
from .packager import TablePackager, TableRestorer
|
|
16
15
|
|
|
17
16
|
# These URLs are abstracted out for now, but will be replaced with actual (hard-coded) URLs once the
|
|
18
17
|
# pixeltable.com URLs are available.
|
|
@@ -20,7 +19,10 @@ from .packager import TablePackager
|
|
|
20
19
|
PIXELTABLE_API_URL = 'https://internal-api.pixeltable.com'
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
def
|
|
22
|
+
def push_replica(dest_tbl_uri: str, src_tbl: pxt.Table) -> str:
|
|
23
|
+
if not src_tbl._tbl_version.get().is_snapshot:
|
|
24
|
+
raise excs.Error('Only snapshots may be published.')
|
|
25
|
+
|
|
24
26
|
packager = TablePackager(src_tbl, additional_md={'table_uri': dest_tbl_uri})
|
|
25
27
|
request_json = packager.md | {'operation_type': 'publish_snapshot'}
|
|
26
28
|
headers_json = {'X-api-key': Env.get().pxt_api_key, 'Content-Type': 'application/json'}
|
|
@@ -65,18 +67,6 @@ def publish_snapshot(dest_tbl_uri: str, src_tbl: pxt.Table) -> str:
|
|
|
65
67
|
return confirmed_tbl_uri
|
|
66
68
|
|
|
67
69
|
|
|
68
|
-
def clone_snapshot(dest_tbl_uri: str) -> list[FullTableMd]:
|
|
69
|
-
headers_json = {'X-api-key': Env.get().pxt_api_key, 'Content-Type': 'application/json'}
|
|
70
|
-
clone_request_json = {'operation_type': 'clone_snapshot', 'table_uri': dest_tbl_uri}
|
|
71
|
-
response = requests.post(PIXELTABLE_API_URL, json=clone_request_json, headers=headers_json)
|
|
72
|
-
if response.status_code != 200:
|
|
73
|
-
raise excs.Error(f'Error cloning snapshot: {response.text}')
|
|
74
|
-
response_json = response.json()
|
|
75
|
-
if not isinstance(response_json, dict) or 'table_uri' not in response_json:
|
|
76
|
-
raise excs.Error(f'Unexpected response from server.\n{response_json}')
|
|
77
|
-
return [FullTableMd.from_dict(t) for t in response_json['md']['tables']]
|
|
78
|
-
|
|
79
|
-
|
|
80
70
|
def _upload_bundle_to_s3(bundle: Path, parsed_location: urllib.parse.ParseResult) -> None:
|
|
81
71
|
from pixeltable.utils.s3 import get_client
|
|
82
72
|
|
|
@@ -102,5 +92,60 @@ def _upload_bundle_to_s3(bundle: Path, parsed_location: urllib.parse.ParseResult
|
|
|
102
92
|
file=sys.stdout,
|
|
103
93
|
)
|
|
104
94
|
s3_client.upload_file(
|
|
105
|
-
Filename=str(bundle), Bucket=bucket, Key=
|
|
95
|
+
Filename=str(bundle), Bucket=bucket, Key=remote_path, ExtraArgs=upload_args, Callback=progress_bar.update
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def pull_replica(dest_path: str, src_tbl_uri: str) -> pxt.Table:
|
|
100
|
+
headers_json = {'X-api-key': Env.get().pxt_api_key, 'Content-Type': 'application/json'}
|
|
101
|
+
clone_request_json = {'operation_type': 'clone_snapshot', 'table_uri': src_tbl_uri}
|
|
102
|
+
response = requests.post(PIXELTABLE_API_URL, json=clone_request_json, headers=headers_json)
|
|
103
|
+
if response.status_code != 200:
|
|
104
|
+
raise excs.Error(f'Error cloning snapshot: {response.text}')
|
|
105
|
+
response_json = response.json()
|
|
106
|
+
if not isinstance(response_json, dict) or 'table_uri' not in response_json:
|
|
107
|
+
raise excs.Error(f'Error cloning shapshot: unexpected response from server.\n{response_json}')
|
|
108
|
+
|
|
109
|
+
primary_tbl_additional_md = response_json['md']['tables'][0]['table_md']['additional_md']
|
|
110
|
+
bundle_uri = primary_tbl_additional_md['destination_uri']
|
|
111
|
+
bundle_filename = primary_tbl_additional_md['datafile']
|
|
112
|
+
parsed_location = urllib.parse.urlparse(bundle_uri)
|
|
113
|
+
if parsed_location.scheme == 's3':
|
|
114
|
+
bundle_path = _download_bundle_from_s3(parsed_location, bundle_filename)
|
|
115
|
+
else:
|
|
116
|
+
raise excs.Error(f'Unexpected response from server: unsupported bundle uri: {bundle_uri}')
|
|
117
|
+
|
|
118
|
+
restorer = TableRestorer(dest_path, response_json)
|
|
119
|
+
tbl = restorer.restore(bundle_path)
|
|
120
|
+
Env.get().console_logger.info(f'Created local replica {tbl._path!r} from URI: {src_tbl_uri}')
|
|
121
|
+
return tbl
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _download_bundle_from_s3(parsed_location: urllib.parse.ParseResult, bundle_filename: str) -> Path:
|
|
125
|
+
from pixeltable.utils.s3 import get_client
|
|
126
|
+
|
|
127
|
+
bucket = parsed_location.netloc
|
|
128
|
+
remote_dir = Path(urllib.parse.unquote(urllib.request.url2pathname(parsed_location.path)))
|
|
129
|
+
remote_path = str(remote_dir / bundle_filename)[1:] # Remove initial /
|
|
130
|
+
|
|
131
|
+
Env.get().console_logger.info(f'Downloading snapshot from: {bucket}:{remote_path}')
|
|
132
|
+
|
|
133
|
+
boto_config = {'max_pool_connections': 5, 'connect_timeout': 15, 'retries': {'max_attempts': 3, 'mode': 'adaptive'}}
|
|
134
|
+
s3_client = get_client(**boto_config)
|
|
135
|
+
|
|
136
|
+
obj = s3_client.head_object(Bucket=bucket, Key=remote_path) # Check if the object exists
|
|
137
|
+
bundle_size = obj['ContentLength']
|
|
138
|
+
|
|
139
|
+
bundle_path = Path(Env.get().create_tmp_path())
|
|
140
|
+
progress_bar = tqdm(
|
|
141
|
+
desc='Downloading',
|
|
142
|
+
total=bundle_size,
|
|
143
|
+
unit='B',
|
|
144
|
+
unit_scale=True,
|
|
145
|
+
unit_divisor=1024,
|
|
146
|
+
miniters=1,
|
|
147
|
+
ncols=100,
|
|
148
|
+
file=sys.stdout,
|
|
106
149
|
)
|
|
150
|
+
s3_client.download_file(Bucket=bucket, Key=remote_path, Filename=str(bundle_path), Callback=progress_bar.update)
|
|
151
|
+
return bundle_path
|
pixeltable/store.py
CHANGED
|
@@ -7,8 +7,9 @@ import sys
|
|
|
7
7
|
import urllib.parse
|
|
8
8
|
import urllib.request
|
|
9
9
|
import warnings
|
|
10
|
-
from typing import Any, Iterator, Literal, Optional, Union
|
|
10
|
+
from typing import Any, Iterable, Iterator, Literal, Optional, Union
|
|
11
11
|
|
|
12
|
+
import more_itertools
|
|
12
13
|
import sqlalchemy as sql
|
|
13
14
|
from tqdm import TqdmWarning, tqdm
|
|
14
15
|
|
|
@@ -53,6 +54,9 @@ class StoreBase:
|
|
|
53
54
|
self.base = tbl_version.base.get().store_tbl if tbl_version.base is not None else None
|
|
54
55
|
self.create_sa_tbl()
|
|
55
56
|
|
|
57
|
+
def system_columns(self) -> list[sql.Column]:
|
|
58
|
+
return [*self._pk_cols, self.v_max_col]
|
|
59
|
+
|
|
56
60
|
def pk_columns(self) -> list[sql.Column]:
|
|
57
61
|
return self._pk_cols
|
|
58
62
|
|
|
@@ -190,34 +194,38 @@ class StoreBase:
|
|
|
190
194
|
assert col.is_stored
|
|
191
195
|
conn = Env.get().conn
|
|
192
196
|
col_type_str = col.get_sa_col_type().compile(dialect=conn.dialect)
|
|
193
|
-
|
|
194
|
-
log_stmt(_logger, stmt)
|
|
195
|
-
conn.execute(stmt)
|
|
197
|
+
s_txt = f'ALTER TABLE {self._storage_name()} ADD COLUMN {col.store_name()} {col_type_str} NULL'
|
|
196
198
|
added_storage_cols = [col.store_name()]
|
|
197
199
|
if col.records_errors:
|
|
198
200
|
# we also need to create the errormsg and errortype storage cols
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
)
|
|
202
|
-
conn.execute(stmt)
|
|
203
|
-
stmt = sql.text(
|
|
204
|
-
f'ALTER TABLE {self._storage_name()} ADD COLUMN {col.errortype_store_name()} VARCHAR DEFAULT NULL'
|
|
205
|
-
)
|
|
206
|
-
conn.execute(stmt)
|
|
201
|
+
s_txt += f' , ADD COLUMN {col.errormsg_store_name()} VARCHAR DEFAULT NULL'
|
|
202
|
+
s_txt += f' , ADD COLUMN {col.errortype_store_name()} VARCHAR DEFAULT NULL'
|
|
207
203
|
added_storage_cols.extend([col.errormsg_store_name(), col.errortype_store_name()])
|
|
204
|
+
|
|
205
|
+
stmt = sql.text(s_txt)
|
|
206
|
+
log_stmt(_logger, stmt)
|
|
207
|
+
conn.execute(stmt)
|
|
208
208
|
self.create_sa_tbl()
|
|
209
209
|
_logger.info(f'Added columns {added_storage_cols} to storage table {self._storage_name()}')
|
|
210
210
|
|
|
211
211
|
def drop_column(self, col: catalog.Column) -> None:
|
|
212
212
|
"""Execute Alter Table Drop Column statement"""
|
|
213
|
-
|
|
214
|
-
stmt = f'ALTER TABLE {self._storage_name()} DROP COLUMN {col.store_name()}'
|
|
215
|
-
conn.execute(sql.text(stmt))
|
|
213
|
+
s_txt = f'ALTER TABLE {self._storage_name()} DROP COLUMN {col.store_name()}'
|
|
216
214
|
if col.records_errors:
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
s_txt += f' , DROP COLUMN {col.errormsg_store_name()}'
|
|
216
|
+
s_txt += f' , DROP COLUMN {col.errortype_store_name()}'
|
|
217
|
+
stmt = sql.text(s_txt)
|
|
218
|
+
log_stmt(_logger, stmt)
|
|
219
|
+
Env.get().conn.execute(stmt)
|
|
220
|
+
|
|
221
|
+
def ensure_columns_exist(self, cols: Iterable[catalog.Column]) -> None:
|
|
222
|
+
conn = Env.get().conn
|
|
223
|
+
sql_text = f'SELECT column_name FROM information_schema.columns WHERE table_name = {self._storage_name()!r}'
|
|
224
|
+
result = conn.execute(sql.text(sql_text))
|
|
225
|
+
existing_cols = {row[0] for row in result}
|
|
226
|
+
for col in cols:
|
|
227
|
+
if col.store_name() not in existing_cols:
|
|
228
|
+
self.add_column(col)
|
|
221
229
|
|
|
222
230
|
def load_column(
|
|
223
231
|
self, col: catalog.Column, exec_plan: ExecNode, value_expr_slot_idx: int, on_error: Literal['abort', 'ignore']
|
|
@@ -313,7 +321,7 @@ class StoreBase:
|
|
|
313
321
|
def insert_rows(
|
|
314
322
|
self,
|
|
315
323
|
exec_plan: ExecNode,
|
|
316
|
-
v_min:
|
|
324
|
+
v_min: int,
|
|
317
325
|
show_progress: bool = True,
|
|
318
326
|
rowids: Optional[Iterator[int]] = None,
|
|
319
327
|
abort_on_exc: bool = False,
|
|
@@ -432,6 +440,35 @@ class StoreBase:
|
|
|
432
440
|
status = conn.execute(stmt)
|
|
433
441
|
return status.rowcount
|
|
434
442
|
|
|
443
|
+
def dump_rows(self, version: int, filter_view: StoreBase, filter_view_version: int) -> Iterator[dict[str, Any]]:
|
|
444
|
+
filter_predicate = sql.and_(
|
|
445
|
+
filter_view.v_min_col <= filter_view_version,
|
|
446
|
+
filter_view.v_max_col > filter_view_version,
|
|
447
|
+
*[c1 == c2 for c1, c2 in zip(self.rowid_columns(), filter_view.rowid_columns())],
|
|
448
|
+
)
|
|
449
|
+
stmt = (
|
|
450
|
+
sql.select('*') # TODO: Use a more specific list of columns?
|
|
451
|
+
.select_from(self.sa_tbl)
|
|
452
|
+
.where(self.v_min_col <= version)
|
|
453
|
+
.where(self.v_max_col > version)
|
|
454
|
+
.where(sql.exists().where(filter_predicate))
|
|
455
|
+
)
|
|
456
|
+
conn = Env.get().conn
|
|
457
|
+
_logger.debug(stmt)
|
|
458
|
+
log_explain(_logger, stmt, conn)
|
|
459
|
+
result = conn.execute(stmt)
|
|
460
|
+
for row in result:
|
|
461
|
+
yield dict(zip(result.keys(), row))
|
|
462
|
+
|
|
463
|
+
def load_rows(self, rows: Iterable[dict[str, Any]], batch_size: int = 10_000) -> None:
|
|
464
|
+
"""
|
|
465
|
+
When instantiating a replica, we can't rely on the usual insertion code path, which contains error handling
|
|
466
|
+
and other logic that doesn't apply.
|
|
467
|
+
"""
|
|
468
|
+
conn = Env.get().conn
|
|
469
|
+
for batch in more_itertools.batched(rows, batch_size):
|
|
470
|
+
conn.execute(sql.insert(self.sa_tbl), batch)
|
|
471
|
+
|
|
435
472
|
|
|
436
473
|
class StoreTable(StoreBase):
|
|
437
474
|
def __init__(self, tbl_version: catalog.TableVersion):
|
pixeltable/type_system.py
CHANGED
|
@@ -40,6 +40,7 @@ class ColumnType:
|
|
|
40
40
|
VIDEO = 8
|
|
41
41
|
AUDIO = 9
|
|
42
42
|
DOCUMENT = 10
|
|
43
|
+
DATE = 11
|
|
43
44
|
|
|
44
45
|
# exprs that don't evaluate to a computable value in Pixeltable, such as an Image member function
|
|
45
46
|
INVALID = 255
|
|
@@ -81,7 +82,7 @@ class ColumnType:
|
|
|
81
82
|
FLOAT32 = (10,)
|
|
82
83
|
FLOAT64 = 11
|
|
83
84
|
|
|
84
|
-
scalar_types: ClassVar[set[Type]] = {Type.STRING, Type.INT, Type.FLOAT, Type.BOOL, Type.TIMESTAMP}
|
|
85
|
+
scalar_types: ClassVar[set[Type]] = {Type.STRING, Type.INT, Type.FLOAT, Type.BOOL, Type.TIMESTAMP, Type.DATE}
|
|
85
86
|
numeric_types: ClassVar[set[Type]] = {Type.INT, Type.FLOAT}
|
|
86
87
|
common_supertypes: ClassVar[dict[tuple[Type, Type], Type]] = {
|
|
87
88
|
(Type.BOOL, Type.INT): Type.INT,
|
|
@@ -173,6 +174,8 @@ class ColumnType:
|
|
|
173
174
|
return AudioType()
|
|
174
175
|
if t == cls.Type.DOCUMENT:
|
|
175
176
|
return DocumentType()
|
|
177
|
+
if t == cls.Type.DATE:
|
|
178
|
+
return DateType()
|
|
176
179
|
|
|
177
180
|
def __repr__(self) -> str:
|
|
178
181
|
return self._to_str(as_schema=False)
|
|
@@ -243,8 +246,12 @@ class ColumnType:
|
|
|
243
246
|
return IntType(nullable=nullable)
|
|
244
247
|
if isinstance(val, float):
|
|
245
248
|
return FloatType(nullable=nullable)
|
|
249
|
+
# When checking types of dates / timestamps, be aware that a datetime is also a date,
|
|
250
|
+
# but a date is not a datetime. So check for datetime first.
|
|
246
251
|
if isinstance(val, datetime.datetime):
|
|
247
252
|
return TimestampType(nullable=nullable)
|
|
253
|
+
if isinstance(val, datetime.date):
|
|
254
|
+
return DateType(nullable=nullable)
|
|
248
255
|
if isinstance(val, PIL.Image.Image):
|
|
249
256
|
return ImageType(width=val.width, height=val.height, mode=val.mode, nullable=nullable)
|
|
250
257
|
if isinstance(val, np.ndarray):
|
|
@@ -343,6 +350,8 @@ class ColumnType:
|
|
|
343
350
|
return BoolType(nullable=nullable_default)
|
|
344
351
|
if t is datetime.datetime:
|
|
345
352
|
return TimestampType(nullable=nullable_default)
|
|
353
|
+
if t is datetime.date:
|
|
354
|
+
return DateType(nullable=nullable_default)
|
|
346
355
|
if t is PIL.Image.Image:
|
|
347
356
|
return ImageType(nullable=nullable_default)
|
|
348
357
|
if isinstance(t, type) and issubclass(t, (Sequence, Mapping, pydantic.BaseModel)):
|
|
@@ -372,6 +381,7 @@ class ColumnType:
|
|
|
372
381
|
(int, 'pxt.Int'),
|
|
373
382
|
(float, 'pxt.Float'),
|
|
374
383
|
(datetime.datetime, 'pxt.Timestamp'),
|
|
384
|
+
(datetime.date, 'pxt.Date'),
|
|
375
385
|
(PIL.Image.Image, 'pxt.Image'),
|
|
376
386
|
(Sequence, 'pxt.Json'),
|
|
377
387
|
(Mapping, 'pxt.Json'),
|
|
@@ -454,6 +464,9 @@ class ColumnType:
|
|
|
454
464
|
def is_timestamp_type(self) -> bool:
|
|
455
465
|
return self._type == self.Type.TIMESTAMP
|
|
456
466
|
|
|
467
|
+
def is_date_type(self) -> bool:
|
|
468
|
+
return self._type == self.Type.DATE
|
|
469
|
+
|
|
457
470
|
def is_json_type(self) -> bool:
|
|
458
471
|
return self._type == self.Type.JSON
|
|
459
472
|
|
|
@@ -621,6 +634,29 @@ class TimestampType(ColumnType):
|
|
|
621
634
|
return val
|
|
622
635
|
|
|
623
636
|
|
|
637
|
+
class DateType(ColumnType):
|
|
638
|
+
def __init__(self, nullable: bool = False):
|
|
639
|
+
super().__init__(self.Type.DATE, nullable=nullable)
|
|
640
|
+
|
|
641
|
+
def has_supertype(self) -> bool:
|
|
642
|
+
return not self.nullable
|
|
643
|
+
|
|
644
|
+
@classmethod
|
|
645
|
+
def to_sa_type(cls) -> sql.types.TypeEngine:
|
|
646
|
+
return sql.Date()
|
|
647
|
+
|
|
648
|
+
def _validate_literal(self, val: Any) -> None:
|
|
649
|
+
if not isinstance(val, datetime.date):
|
|
650
|
+
raise TypeError(f'Expected datetime.date, got {val.__class__.__name__}')
|
|
651
|
+
|
|
652
|
+
def _create_literal(self, val: Any) -> Any:
|
|
653
|
+
if isinstance(val, str):
|
|
654
|
+
return datetime.datetime.fromisoformat(val).date()
|
|
655
|
+
if isinstance(val, datetime.date):
|
|
656
|
+
return val
|
|
657
|
+
return val
|
|
658
|
+
|
|
659
|
+
|
|
624
660
|
class JsonType(ColumnType):
|
|
625
661
|
json_schema: Optional[dict[str, Any]]
|
|
626
662
|
__validator: Optional[jsonschema.protocols.Validator]
|
|
@@ -903,7 +939,11 @@ class ArrayType(ColumnType):
|
|
|
903
939
|
return StringType(nullable=nullable)
|
|
904
940
|
|
|
905
941
|
if np.issubdtype(dtype, np.datetime64):
|
|
906
|
-
|
|
942
|
+
unit, _ = np.datetime_data(dtype)
|
|
943
|
+
if unit in ['D', 'M', 'Y']:
|
|
944
|
+
return DateType(nullable=nullable)
|
|
945
|
+
else:
|
|
946
|
+
return TimestampType(nullable=nullable)
|
|
907
947
|
|
|
908
948
|
return None
|
|
909
949
|
|
|
@@ -1237,6 +1277,7 @@ Int = typing.Annotated[int, IntType(nullable=False)]
|
|
|
1237
1277
|
Float = typing.Annotated[float, FloatType(nullable=False)]
|
|
1238
1278
|
Bool = typing.Annotated[bool, BoolType(nullable=False)]
|
|
1239
1279
|
Timestamp = typing.Annotated[datetime.datetime, TimestampType(nullable=False)]
|
|
1280
|
+
Date = typing.Annotated[datetime.date, DateType(nullable=False)]
|
|
1240
1281
|
|
|
1241
1282
|
|
|
1242
1283
|
class _PxtType:
|
|
@@ -1370,3 +1411,6 @@ class Document(str, _PxtType):
|
|
|
1370
1411
|
@classmethod
|
|
1371
1412
|
def as_col_type(cls, nullable: bool) -> ColumnType:
|
|
1372
1413
|
return DocumentType(nullable=nullable)
|
|
1414
|
+
|
|
1415
|
+
|
|
1416
|
+
ALL_PIXELTABLE_TYPES = (String, Bool, Int, Float, Timestamp, Json, Array, Image, Video, Audio, Document)
|
pixeltable/utils/arrow.py
CHANGED
|
@@ -21,14 +21,15 @@ PA_TO_PXT_TYPES: dict[pa.DataType, ts.ColumnType] = {
|
|
|
21
21
|
pa.uint64(): ts.IntType(nullable=True),
|
|
22
22
|
pa.float32(): ts.FloatType(nullable=True),
|
|
23
23
|
pa.float64(): ts.FloatType(nullable=True),
|
|
24
|
-
pa.date32(): ts.
|
|
25
|
-
pa.date64(): ts.
|
|
24
|
+
pa.date32(): ts.DateType(nullable=True),
|
|
25
|
+
pa.date64(): ts.DateType(nullable=True),
|
|
26
26
|
pa.binary(): None, # cannot import binary (inline image)
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
PXT_TO_PA_TYPES: dict[type[ts.ColumnType], pa.DataType] = {
|
|
30
30
|
ts.StringType: pa.string(),
|
|
31
31
|
ts.TimestampType: pa.timestamp('us', tz=datetime.timezone.utc), # postgres timestamp is microseconds
|
|
32
|
+
ts.DateType: pa.date32(), # This could be date64
|
|
32
33
|
ts.BoolType: pa.bool_(),
|
|
33
34
|
ts.IntType: pa.int64(),
|
|
34
35
|
ts.FloatType: pa.float32(),
|
|
@@ -128,6 +129,11 @@ def _ar_val_to_pxt_val(val: Any, pxt_type: ts.ColumnType) -> Any:
|
|
|
128
129
|
return bool(val)
|
|
129
130
|
elif pxt_type.is_string_type():
|
|
130
131
|
return str(val)
|
|
132
|
+
elif pxt_type.is_date_type():
|
|
133
|
+
if isinstance(val, str):
|
|
134
|
+
return datetime.date.fromisoformat(val)
|
|
135
|
+
if isinstance(val, datetime.date):
|
|
136
|
+
return val
|
|
131
137
|
elif pxt_type.is_timestamp_type():
|
|
132
138
|
if isinstance(val, str):
|
|
133
139
|
return datetime.datetime.fromisoformat(val)
|
pixeltable/utils/pytorch.py
CHANGED
|
@@ -65,6 +65,10 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
65
65
|
v = v.copy()
|
|
66
66
|
assert v.flags['WRITEABLE']
|
|
67
67
|
return v
|
|
68
|
+
elif self.column_types[k].is_date_type():
|
|
69
|
+
# pytorch default collation only supports numeric types
|
|
70
|
+
assert isinstance(v, datetime.date)
|
|
71
|
+
return v.toordinal()
|
|
68
72
|
elif self.column_types[k].is_timestamp_type():
|
|
69
73
|
# pytorch default collation only supports numeric types
|
|
70
74
|
assert isinstance(v, datetime.datetime)
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pixeltable
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.15
|
|
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
|
|
7
7
|
Author: Pixeltable, Inc.
|
|
8
8
|
Author-email: contact@pixeltable.com>
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.10
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
11
|
Classifier: Intended Audience :: Science/Research
|
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
13
|
Classifier: Operating System :: MacOS
|
|
14
14
|
Classifier: Operating System :: Microsoft :: Windows
|
|
15
15
|
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -43,7 +42,6 @@ Requires-Dist: psycopg[binary] (>=3.1.18)
|
|
|
43
42
|
Requires-Dist: puremagic (>=1.20)
|
|
44
43
|
Requires-Dist: pyarrow (>=13.0.0)
|
|
45
44
|
Requires-Dist: pydantic (>=2.7.4)
|
|
46
|
-
Requires-Dist: pyiceberg (>=0.6.0)
|
|
47
45
|
Requires-Dist: pymupdf (>=1.24.1)
|
|
48
46
|
Requires-Dist: pyyaml (>=6.0.1)
|
|
49
47
|
Requires-Dist: requests (>=2.31.0)
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
pixeltable/__init__.py,sha256
|
|
2
|
-
pixeltable/__version__.py,sha256=
|
|
1
|
+
pixeltable/__init__.py,sha256=-uXHuiXH98kAlCupUTPbkBh4ToZgxcYUOk7-c9hqCC8,1439
|
|
2
|
+
pixeltable/__version__.py,sha256=HD2KV9QVAFaAv42gJZzYHDLMgRFeCQBTYL5eYWvU_Kk,114
|
|
3
3
|
pixeltable/catalog/__init__.py,sha256=rQmjveID4bk6NI4Ql09lGsZ0K0HVE2l1yqKAveipHzc,558
|
|
4
|
-
pixeltable/catalog/catalog.py,sha256=
|
|
5
|
-
pixeltable/catalog/column.py,sha256=
|
|
6
|
-
pixeltable/catalog/dir.py,sha256=
|
|
4
|
+
pixeltable/catalog/catalog.py,sha256=E-Fqf3xDsFWLuau41trwqFRQbmNjy-LlT_votgYRM8k,48780
|
|
5
|
+
pixeltable/catalog/column.py,sha256=f_jSvdV7DIe3MYXc4n4tSSJmAKIiNfPyT6i97rt2ewA,11133
|
|
6
|
+
pixeltable/catalog/dir.py,sha256=g7k9ebx20-NDMKkPGQxOVMRNGOgLmPvekuPIjSlo3WU,2075
|
|
7
7
|
pixeltable/catalog/globals.py,sha256=7fNUs67D18PZ1ZajcGz7KQOV6tuXEcYLSrePzgmDkRw,4036
|
|
8
|
-
pixeltable/catalog/insertable_table.py,sha256=
|
|
8
|
+
pixeltable/catalog/insertable_table.py,sha256=6kXMHAZtqoTGqYgMDMJwCbxoLaPz1VG4trh-rAepvF0,8841
|
|
9
9
|
pixeltable/catalog/named_function.py,sha256=vZ-j7P4HugWh9OmUzBMwyRYvO3tQn9jWyJz_1stPavU,1210
|
|
10
10
|
pixeltable/catalog/path.py,sha256=gk8TIlO_7Jpji5mAN0dUNvHmvU0uneTHeB_qCTWnszQ,2529
|
|
11
|
-
pixeltable/catalog/schema_object.py,sha256=
|
|
12
|
-
pixeltable/catalog/table.py,sha256=
|
|
13
|
-
pixeltable/catalog/table_version.py,sha256=
|
|
11
|
+
pixeltable/catalog/schema_object.py,sha256=J96iXsKMvqTNN0jbcMOPZDSZDNq8688Vkybs5bFcqNk,1818
|
|
12
|
+
pixeltable/catalog/table.py,sha256=mlMbV6cWafm6OC9AHmMfpHuTYTyhGf5rhMHV2537tF8,65129
|
|
13
|
+
pixeltable/catalog/table_version.py,sha256=BlxPBec17v_zcZ2pJGqyT9rJfj2Jyxau472DfZYc3jg,62440
|
|
14
14
|
pixeltable/catalog/table_version_handle.py,sha256=LYJFTdRssPu4uOBPbP93wKqXygJXr3Gwdc9wHzzZRag,1654
|
|
15
15
|
pixeltable/catalog/table_version_path.py,sha256=_g9knGenpMOlhaK8DZa8iLz5CorsMcbnFqTLnvaUkYM,6653
|
|
16
|
-
pixeltable/catalog/view.py,sha256=
|
|
16
|
+
pixeltable/catalog/view.py,sha256=u9c9YL9dHw21qGYf-QYST7nULhut-ECK-DWR1_MH3ik,13027
|
|
17
17
|
pixeltable/config.py,sha256=gnRI4G9GE7mQJDcMcn8JsEzYk8oKVfHB-BwoLRWnRDo,3971
|
|
18
|
-
pixeltable/dataframe.py,sha256=
|
|
19
|
-
pixeltable/env.py,sha256=
|
|
18
|
+
pixeltable/dataframe.py,sha256=n_ZF_JdCq-DkpOzLhlnCspjDS2I8_7M0nlkTcDQVqyA,51593
|
|
19
|
+
pixeltable/env.py,sha256=46ri1zrun9eJGBiBMnvA9PkBoVVzI3b1aLG9a1RdLuA,36236
|
|
20
20
|
pixeltable/exceptions.py,sha256=eI2f4oXqv678_fDOxeYOTPE_EF1CMX3pwCqtJvN8i7s,926
|
|
21
21
|
pixeltable/exec/__init__.py,sha256=m4AF2kzFtsTRUevupgWs8er0oJQisCR9ROW7ZJlL3dw,509
|
|
22
|
-
pixeltable/exec/aggregation_node.py,sha256=
|
|
23
|
-
pixeltable/exec/cache_prefetch_node.py,sha256=
|
|
22
|
+
pixeltable/exec/aggregation_node.py,sha256=HqzISO1nv7_DFyqjZLRkjtbDJl9fIEto1i6Kh5ru8vA,4498
|
|
23
|
+
pixeltable/exec/cache_prefetch_node.py,sha256=GOa70eJDFY3FQV3VvJOrUVI8LFvro-r-V6sh3w-eJAc,12130
|
|
24
24
|
pixeltable/exec/component_iteration_node.py,sha256=FZszWHrzsjHxCbUTwXtJIlgQqgYtvKZB6QWiDGkfIbs,4757
|
|
25
25
|
pixeltable/exec/data_row_batch.py,sha256=EAB15JRhXbWIe91x1J5N5lFiMXzjB8NGTFjZsBDSbf8,3393
|
|
26
26
|
pixeltable/exec/exec_context.py,sha256=jKeLStfkjwCKKAooC-7a7qZUnZU5O0_JQhanhVerV9c,984
|
|
27
27
|
pixeltable/exec/exec_node.py,sha256=WIN1sBEBNS7TlBk5QpHsDUCZUUdcvs6Os_Bxq2HoWdo,4077
|
|
28
28
|
pixeltable/exec/expr_eval/__init__.py,sha256=sQThSEByK_DLfB-_-18RFhpARx49cSXYEkpCDyi0vQI,61
|
|
29
29
|
pixeltable/exec/expr_eval/evaluators.py,sha256=AJkuleKhEz_8W6F3dcjTbWyKfv4IzpTh3cvQ3--OkRg,16865
|
|
30
|
-
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=
|
|
30
|
+
pixeltable/exec/expr_eval/expr_eval_node.py,sha256=ABkC2yAcMSCtQ7AvNAn6rfj3AMscVzezttKSs1ExNhw,18972
|
|
31
31
|
pixeltable/exec/expr_eval/globals.py,sha256=fFrj2O53TgHDfVF8dgnyn1fPLi4ZHQuylewf5aHMwYk,7752
|
|
32
32
|
pixeltable/exec/expr_eval/row_buffer.py,sha256=YY0thdlMNNReEOTyPp36xKPeMeXSZ0VrI9bJsXgo7sU,2744
|
|
33
33
|
pixeltable/exec/expr_eval/schedulers.py,sha256=tAvCQKa1q0x7y7cdnGcTGbeku8QcoKH1GkgSm8ktOnM,17000
|
|
@@ -38,26 +38,26 @@ pixeltable/exprs/__init__.py,sha256=AxSMjKNavCT9F6vBaNR-nwX2iupAI5hbMb5hEj65Tfk,
|
|
|
38
38
|
pixeltable/exprs/arithmetic_expr.py,sha256=sZPao0qdFWbrDx0eiAVxw1wGHJXZ5ZoCpQaScysBldE,7333
|
|
39
39
|
pixeltable/exprs/array_slice.py,sha256=8Zv0E2RghdJi1Mbk0kKtOz2ccGQuXwLLb6R9v1jk7hA,2180
|
|
40
40
|
pixeltable/exprs/column_property_ref.py,sha256=nwvPxyVveOCSCGgUDTnILFKAolZ2VwMVToDLCAQsH0c,3786
|
|
41
|
-
pixeltable/exprs/column_ref.py,sha256=
|
|
41
|
+
pixeltable/exprs/column_ref.py,sha256=hMkxeJQMbTVDhzCi9Sc4CzFagVmQXu42GU66Frx-gNI,13980
|
|
42
42
|
pixeltable/exprs/comparison.py,sha256=fJ840HORCi4x5ovkkdM_PXqlzttS0K9W0oikWWp1oa8,5139
|
|
43
43
|
pixeltable/exprs/compound_predicate.py,sha256=vJVRVueAmaKnjiHCLWyh8wHgktzzK0DVqbOIQJgTjF8,3801
|
|
44
|
-
pixeltable/exprs/data_row.py,sha256=
|
|
44
|
+
pixeltable/exprs/data_row.py,sha256=y16wVbp_ISNmMUP18PtX5vFrc4zxCiV3f9jCoReKl6I,11396
|
|
45
45
|
pixeltable/exprs/expr.py,sha256=JABPT8dGISMq_ciG67GPdX00nKTrJwQ1DQhxSRqkC4A,35602
|
|
46
46
|
pixeltable/exprs/expr_dict.py,sha256=2ZeZ0eACx3VrRNEOjipuT5WxOIzjXQ_DSip8NTH0KRo,1584
|
|
47
47
|
pixeltable/exprs/expr_set.py,sha256=OlRTbHAAYH2fOEs1HE-8DIu7Z247xVfoT_9Y58GZoOQ,2559
|
|
48
48
|
pixeltable/exprs/function_call.py,sha256=_PxrEACVyiihdQdmTiiSv5WkZfOXSQFcGO18wPueM_Y,21989
|
|
49
|
-
pixeltable/exprs/globals.py,sha256=
|
|
49
|
+
pixeltable/exprs/globals.py,sha256=NIi16GCPYNFNrhDC0_IemHjFZEtbILJNmdxdguSdy00,2315
|
|
50
50
|
pixeltable/exprs/in_predicate.py,sha256=u98JmBX9XsglKe5uCy1NUMnyi3wioBri_tue2vI9_sk,3799
|
|
51
51
|
pixeltable/exprs/inline_expr.py,sha256=XYVKKXZN9BtHN5qlvZna-mgdOlot6WcmPu5usRBYei0,7972
|
|
52
52
|
pixeltable/exprs/is_null.py,sha256=NfA_485hfT69pWyY6u8BhykDUkz5k91AH93azGu6lCg,1087
|
|
53
53
|
pixeltable/exprs/json_mapper.py,sha256=bJSB39sZgpN9KS0RReDnUhTCwg-4Y4cgXXaFNy3o3wU,7035
|
|
54
54
|
pixeltable/exprs/json_path.py,sha256=sFuDjfz8_rlea4TKd68CS4pQTUiLDi68YwsgcQRHffI,7162
|
|
55
|
-
pixeltable/exprs/literal.py,sha256=
|
|
55
|
+
pixeltable/exprs/literal.py,sha256=kLAqc05uRHTN1IGAmRUNRkglo9CYualF7zW_U7c2pwU,4846
|
|
56
56
|
pixeltable/exprs/method_ref.py,sha256=NNhJTGo7luZLh8EJdFIZAax9LiiqqDCEK1AwPmHip0w,2642
|
|
57
57
|
pixeltable/exprs/object_ref.py,sha256=idYFcT27jv0BjtJT3paL37xDrZZc35_3eCJyQOIqdZU,1999
|
|
58
58
|
pixeltable/exprs/row_builder.py,sha256=vZbSEctWYn79zC1CCBqFHZeD3-2oryyQeJKVi2-enH0,21200
|
|
59
|
-
pixeltable/exprs/rowid_ref.py,sha256=
|
|
60
|
-
pixeltable/exprs/similarity_expr.py,sha256=
|
|
59
|
+
pixeltable/exprs/rowid_ref.py,sha256=DbkdnXIxNExrLOOjwyL5n1amKJnaw3QVSkUonTcJErs,4918
|
|
60
|
+
pixeltable/exprs/similarity_expr.py,sha256=ssls1A3gxzY0qJbaqN_1pKkuLriLTCnMqlPG0sp_M6Y,3635
|
|
61
61
|
pixeltable/exprs/sql_element_cache.py,sha256=c7Q6vFK4xnf9vmcRYnXiAcwPBBwmw0dolftM4BwDO8c,1359
|
|
62
62
|
pixeltable/exprs/string_op.py,sha256=8GkqYpZrSJjHX1ghsUMI9Op2NJyBbvmLWJwDYf_vad0,4171
|
|
63
63
|
pixeltable/exprs/type_cast.py,sha256=_nDzTxg5kXVGLewI0FrH2zmwJzgptdxYd5Jvuyig0UI,2322
|
|
@@ -70,38 +70,39 @@ pixeltable/func/__init__.py,sha256=2BtyvXvFrLF0S5Qnmtg9S7dDSEVoBh5GDX6XFC25d7o,5
|
|
|
70
70
|
pixeltable/func/aggregate_function.py,sha256=5_MgqHAlMaacX2sPIHv_auTvYXtqR5MIZy_WqYQSdho,13264
|
|
71
71
|
pixeltable/func/callable_function.py,sha256=g_pA-g631YcFGLix9PpHYfgjOeS2qF0Csm1VxX8fah0,9278
|
|
72
72
|
pixeltable/func/expr_template_function.py,sha256=wEidKrOBTZkA3U1PAtG6-6RlDFiiRJszIG4zNOuPcNY,5940
|
|
73
|
-
pixeltable/func/function.py,sha256=
|
|
73
|
+
pixeltable/func/function.py,sha256=w1U3j8XNeE4ZZ-rKuG13aTa8YGFkWAXjalh4j29_-e4,23136
|
|
74
74
|
pixeltable/func/function_registry.py,sha256=7AQ1bdF2DJbTRn9xx6s5cC_VHtCBXGt_GyJJEjJHcMw,12308
|
|
75
75
|
pixeltable/func/globals.py,sha256=5Wo4GPxYgHRRk5nvV0h_lAthKSalxKvj5n1p-uMPR0U,1501
|
|
76
76
|
pixeltable/func/query_template_function.py,sha256=QN_HGyBErDwdwpsI63caohsjo9usoN6WTEERG6NDtP4,7913
|
|
77
77
|
pixeltable/func/signature.py,sha256=0PI6xdhLgwy9-GMkzkm7GlsBnsNMiS9aoNI9LWXwvN0,13700
|
|
78
78
|
pixeltable/func/tools.py,sha256=DIfkOEj9Bp797Ew014_4YJePoUW40fQ6mvbCeg0FBR0,5721
|
|
79
79
|
pixeltable/func/udf.py,sha256=qQfaX1O3ZhUvSgiNnitW7nRKnZFJ5yu_Fj9ioqQgjqg,13219
|
|
80
|
-
pixeltable/functions/__init__.py,sha256=
|
|
80
|
+
pixeltable/functions/__init__.py,sha256=x_ZodeEtayD2XDjlDZE4L_QTzajF6riftIc5P4ZjEiY,578
|
|
81
81
|
pixeltable/functions/anthropic.py,sha256=oTiXMfy3MupBInGRFEVkp-pHu06gF1ezJjEM2ypyvXw,9323
|
|
82
82
|
pixeltable/functions/audio.py,sha256=7bsm4igQEW7RYSrSevwqaUOqyEnvBbPbJ8c-VknDl1E,657
|
|
83
83
|
pixeltable/functions/bedrock.py,sha256=lTCFHjYunF3minBGWcjXR90yJ8resFjXr4niyKhfxms,4217
|
|
84
|
+
pixeltable/functions/date.py,sha256=WUwqyrOWB8A00cTNEd6Vd7anQZo40_-7EWhpfpI-P6c,5323
|
|
84
85
|
pixeltable/functions/deepseek.py,sha256=KYIa-UJJUTOt9cCfmP6k6nM4MpKm1MBU8F-jWk3CycY,3827
|
|
85
86
|
pixeltable/functions/fireworks.py,sha256=k0vUXxeeNYWfL_tdLgF9c-vOilr0g2tTeLkAL9SJ6ws,4972
|
|
86
|
-
pixeltable/functions/gemini.py,sha256=
|
|
87
|
-
pixeltable/functions/globals.py,sha256=
|
|
87
|
+
pixeltable/functions/gemini.py,sha256=zWPsvtq0mPFBC_-4N7NDuhTYZfAzRMmZa9S4GFjIpLg,8328
|
|
88
|
+
pixeltable/functions/globals.py,sha256=ZXBV2LPXT2-yQYHHE7q8N1WdAr0WxiIO1ax0qwxhmK8,5118
|
|
88
89
|
pixeltable/functions/huggingface.py,sha256=KM1OH0Jt6XWF2jfpHb6rGhi1mV-AQNYAsHAyQfzW4qw,20560
|
|
89
90
|
pixeltable/functions/image.py,sha256=IKXljMma-uU88efptC3F4aywau7DYcD-Nqd3YpmRNRw,13971
|
|
90
|
-
pixeltable/functions/json.py,sha256=
|
|
91
|
+
pixeltable/functions/json.py,sha256=d7-AvwytUQtQYF_JnWJkptT_Yq0NgMpWfVk-m3U6qTY,807
|
|
91
92
|
pixeltable/functions/llama_cpp.py,sha256=uf7WSZIhKDa492snnQv5ojGVLNdBWvuw0Ou3Mch1c_I,3874
|
|
92
|
-
pixeltable/functions/math.py,sha256=
|
|
93
|
+
pixeltable/functions/math.py,sha256=eZEFjXxNHDHjcCsOMhzfNbJthTsmtNxtSFV8AEeRIfM,4979
|
|
93
94
|
pixeltable/functions/mistralai.py,sha256=yZge5T385RoiFGXEZ6OhwWHj0JnsZ8tN8Jb3VkfDmXc,6274
|
|
94
95
|
pixeltable/functions/ollama.py,sha256=AmkP532HwWeTyWkTnHm_hIk0CFjzV5MwCCPnM9Kb7KM,4231
|
|
95
96
|
pixeltable/functions/openai.py,sha256=aDh1L2mBbSlrM8c1Rbh2QsCnmBESItLqzZ-frdgb05k,29259
|
|
96
97
|
pixeltable/functions/replicate.py,sha256=SLMPNi44QMa16TVTImZRkNMXXyRZ0mmpnK6P5uXQE0k,2467
|
|
97
|
-
pixeltable/functions/string.py,sha256=
|
|
98
|
+
pixeltable/functions/string.py,sha256=PjOtpRfQijcL930euR53FmYeQEOjfd5htTGxr_5bRe0,20143
|
|
98
99
|
pixeltable/functions/timestamp.py,sha256=0zp4urJagCcNLfJE0ltTCft-J9qs2C716TmRngKYaa0,9171
|
|
99
100
|
pixeltable/functions/together.py,sha256=ufg0RehEoQEqBy9EHSKY4N3ZNT5O__cwDS0Ll467eLk,10014
|
|
100
101
|
pixeltable/functions/util.py,sha256=lVya13gcao8T34OGX7zy1cglQPNwaBbSBw57bVPyHNs,745
|
|
101
|
-
pixeltable/functions/video.py,sha256=
|
|
102
|
+
pixeltable/functions/video.py,sha256=jS4YhMofD448YhGtI6ZXBAkeGw_AYYQTN0AbgHh_hok,6933
|
|
102
103
|
pixeltable/functions/vision.py,sha256=_a0wY3akkVhWnnxlq__1VzSLylytlNadpNOOPOwSfLk,15393
|
|
103
104
|
pixeltable/functions/whisper.py,sha256=c9E6trhc2UcShVaGaEBCUEpArke1ql3MV5We0qSgmuU,2960
|
|
104
|
-
pixeltable/globals.py,sha256=
|
|
105
|
+
pixeltable/globals.py,sha256=sbbuDMnZK6stceHZqe6ndBtN4WNopeYE_CtCim2qIn4,31882
|
|
105
106
|
pixeltable/index/__init__.py,sha256=97aFuxiP_oz1ldn5iq8IWApkOV8XG6ZIBW5-9rkS0vM,122
|
|
106
107
|
pixeltable/index/base.py,sha256=jrE2Sack14_o_oFWkQf_qdDCSQ85SCZLcJX4GhU_JaY,1527
|
|
107
108
|
pixeltable/index/btree.py,sha256=m4eUk8jVG5h2VW_IcsmWG4GN-FFk0uFHyDF6FSw_gbM,2299
|
|
@@ -111,10 +112,10 @@ pixeltable/io/datarows.py,sha256=p1UGxQOTjqI6kgQNAa3aj8TkylcNDtaGBTorOg_Pk84,608
|
|
|
111
112
|
pixeltable/io/external_store.py,sha256=5gHSHLi-pPWHJ4OtVtY2vxrcbLG899hNMEcLvBfvYqI,16719
|
|
112
113
|
pixeltable/io/fiftyone.py,sha256=v0r28bIk2I0TRP5DfVHtBIUa4DpIJDK5sgExxOmHZ_w,6882
|
|
113
114
|
pixeltable/io/globals.py,sha256=Z8ww-Pcm59ql1tvame8z0Mu1thIy5BPbW-TswGRXt4s,11368
|
|
114
|
-
pixeltable/io/hf_datasets.py,sha256=
|
|
115
|
+
pixeltable/io/hf_datasets.py,sha256=gWyBH_0iFvxcrrxMY9_W399ZRcNDCmWFOAMmb1apnY0,5246
|
|
115
116
|
pixeltable/io/label_studio.py,sha256=uB-LReXf1l2OMuzJEENxJP-0C14r14VEmsIulK8Yr3s,31261
|
|
116
|
-
pixeltable/io/pandas.py,sha256=
|
|
117
|
-
pixeltable/io/parquet.py,sha256=
|
|
117
|
+
pixeltable/io/pandas.py,sha256=AbOeRDlA4MvUvianSKixsU-x-64nasPWw4HCHD6emz4,8981
|
|
118
|
+
pixeltable/io/parquet.py,sha256=Aav5tkqY22gHSWTxsAnlk6MkRLi0OarXgp_N0JYOfHA,7791
|
|
118
119
|
pixeltable/io/table_data_conduit.py,sha256=gdjr82HxJpDfH55xmbIUCX5V-Hkaj6Kmo25NESKChtk,23205
|
|
119
120
|
pixeltable/io/utils.py,sha256=YMfhpqMitWz1PhXJGkCNOgNtEM1AZ55S0zXVhljC5kY,4260
|
|
120
121
|
pixeltable/iterators/__init__.py,sha256=bU4EmbX85J1URmRw6G71f2I77b1ctqngEOwDmRB3T0w,455
|
|
@@ -124,7 +125,7 @@ pixeltable/iterators/document.py,sha256=wJYSnzusJFaxipv5y0uQw-surN9fFz0Aq-s7w_l_
|
|
|
124
125
|
pixeltable/iterators/image.py,sha256=nWm-03CxNvHRdTr8U6PvWEnEiquqIQNG5rB-3Y44Mm4,3440
|
|
125
126
|
pixeltable/iterators/string.py,sha256=URj5edWp-CsorjN_8nnfWGvtIFs_Zh4VPm6htlJbFkU,1257
|
|
126
127
|
pixeltable/iterators/video.py,sha256=L5S1YPmT_zM11vW9fK6d5nQpUvHVewQWmfDmy4BD45E,9134
|
|
127
|
-
pixeltable/metadata/__init__.py,sha256=
|
|
128
|
+
pixeltable/metadata/__init__.py,sha256=Rui2M8f8BcnJGRbYtCYxu-eqkp-3IovQINU8Hs45PHw,2607
|
|
128
129
|
pixeltable/metadata/converters/convert_10.py,sha256=myYIo1DyccnsQUxDKG6mafnU5ge_EhZpHg_pesKBoK4,708
|
|
129
130
|
pixeltable/metadata/converters/convert_12.py,sha256=Ci-qyZW1gqci-8wnjeOB5afdq7KTuN-hVSV9OqSPx8g,162
|
|
130
131
|
pixeltable/metadata/converters/convert_13.py,sha256=yFR6lD3pOrZ46ZQBFKYvxiIYa7rRxh46Bsq7yiCBNak,1356
|
|
@@ -148,18 +149,19 @@ pixeltable/metadata/converters/convert_30.py,sha256=DKCD6ZMgRU2Cu7eonB1kYEnYCKI4
|
|
|
148
149
|
pixeltable/metadata/converters/convert_31.py,sha256=pFjZGpuFlGRPxKYYidiSCIMNaEEXVuLTnELi3y_pSQo,424
|
|
149
150
|
pixeltable/metadata/converters/convert_32.py,sha256=YENfuQ_mqhnZWrvHJffaGEqd1IwS2RjTGPkEvOs5sUs,406
|
|
150
151
|
pixeltable/metadata/converters/convert_33.py,sha256=ZZV3FTyyouBM1eNymXxfHV-Oqmgu2s0KNP6AG3zc5eM,574
|
|
152
|
+
pixeltable/metadata/converters/convert_34.py,sha256=1hi7m49CMzHRD25rrePS-SMCsZ-4opzDhY0JqU8Jzw4,690
|
|
151
153
|
pixeltable/metadata/converters/util.py,sha256=qnhrwUS7nSczCdrMjKG7v3lRxRKh9o19epCtP8HTpsY,7729
|
|
152
|
-
pixeltable/metadata/notes.py,sha256=
|
|
154
|
+
pixeltable/metadata/notes.py,sha256=9WMdfKT_mE96oTgRB92i7wZVw4qbwj-iA7hCYN49VhQ,1313
|
|
153
155
|
pixeltable/metadata/schema.py,sha256=EKmx29vfQo3eGD2uCJW_lPalPialSb2oUSBGTyewduE,11261
|
|
154
|
-
pixeltable/plan.py,sha256=
|
|
156
|
+
pixeltable/plan.py,sha256=VfXTvEYYiiLPBdw0hoTmdXHE5IeQKZc1ej8l9a3XAns,43632
|
|
155
157
|
pixeltable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
|
-
pixeltable/share/__init__.py,sha256=
|
|
157
|
-
pixeltable/share/packager.py,sha256=
|
|
158
|
-
pixeltable/share/publish.py,sha256=
|
|
159
|
-
pixeltable/store.py,sha256=
|
|
160
|
-
pixeltable/type_system.py,sha256=
|
|
158
|
+
pixeltable/share/__init__.py,sha256=AtR4nS6YkfkFRkXA-zZXFTK5pSQjHry8MnxdVLUk5SA,68
|
|
159
|
+
pixeltable/share/packager.py,sha256=hYpss8DKggZcY9-6Tl8oX6IRUq97p1bqduyfMSfjaZ4,26675
|
|
160
|
+
pixeltable/share/publish.py,sha256=MZ_tsCSM9nUnrz8P1gbwatlpbS6EJYjYAd7S06lHw9M,6533
|
|
161
|
+
pixeltable/store.py,sha256=HVe99eQ_fk9CYZHFjYFfFy-sc95R9ADc4clPnHZeNZ0,24233
|
|
162
|
+
pixeltable/type_system.py,sha256=DSrof2NgKhBzvt7pbDNrGlZ3rkkDJ7MQsQ9rqk9N9pA,53988
|
|
161
163
|
pixeltable/utils/__init__.py,sha256=Pwgu-Sg1XkxzdCZ4ZhWP77UgLP3tnQsyCKaUJLF4ajo,1741
|
|
162
|
-
pixeltable/utils/arrow.py,sha256=
|
|
164
|
+
pixeltable/utils/arrow.py,sha256=74wIy58rDYZJBVQ1g85NqzFyiQBvEQhnJ0Gi82iZ0dw,6421
|
|
163
165
|
pixeltable/utils/coco.py,sha256=Y1DWVYguZD4VhKyf7JruYfHWvhkJLq39fzbiSm5cdyY,7304
|
|
164
166
|
pixeltable/utils/code.py,sha256=SbG5OUF_fQAbOgGZHDuENijmbzisVqa4VS9guaZ0KtU,1231
|
|
165
167
|
pixeltable/utils/console_output.py,sha256=x23iDnNwUbsr7Ec20BQ7BLATTsrQZflxc9NucAt_sVU,1150
|
|
@@ -173,12 +175,12 @@ pixeltable/utils/formatter.py,sha256=_pYQOhBh2dZBeCTUKuWaIzm7JRWeMepMZwSd5KTv-tw
|
|
|
173
175
|
pixeltable/utils/http_server.py,sha256=B5iQ1s_VuwsVC7pUm1joGjLZqaluV8_RfFiU8V1FuG8,2453
|
|
174
176
|
pixeltable/utils/iceberg.py,sha256=L_s9G9NMIGMQdRHtNkks6ntTVW4DKKAw97R9gRmtw5s,553
|
|
175
177
|
pixeltable/utils/media_store.py,sha256=Dhsnj1ZPRSX0iyGOu4JU4pC3fvSBd7sQpruVHqzKm7A,3089
|
|
176
|
-
pixeltable/utils/pytorch.py,sha256=
|
|
178
|
+
pixeltable/utils/pytorch.py,sha256=564VHRdDHwD9h0v5lBHEDTJ8c6zx8wuzWYx8ZYjBxlI,3621
|
|
177
179
|
pixeltable/utils/s3.py,sha256=pxip2MlCqd2Qon2dzJXzfxvwtZyc-BAsjAnLL4J_OXY,587
|
|
178
180
|
pixeltable/utils/sql.py,sha256=Sa4Lh-VGe8GToU5W7DRiWf2lMl9B6saPqemiT0ZdHEc,806
|
|
179
181
|
pixeltable/utils/transactional_directory.py,sha256=OFKmu90oP7KwBAljwjnzP_w8euGdAXob3y4Nx9SCNHA,1357
|
|
180
|
-
pixeltable-0.3.
|
|
181
|
-
pixeltable-0.3.
|
|
182
|
-
pixeltable-0.3.
|
|
183
|
-
pixeltable-0.3.
|
|
184
|
-
pixeltable-0.3.
|
|
182
|
+
pixeltable-0.3.15.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
183
|
+
pixeltable-0.3.15.dist-info/METADATA,sha256=YAC_YaXgK70Eo19mvT9rhBj0WKkwYVrMvz4b9YMB8Ag,20540
|
|
184
|
+
pixeltable-0.3.15.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
185
|
+
pixeltable-0.3.15.dist-info/entry_points.txt,sha256=ToOd-pRgG7AitEBgYoBCRRB4-KVDQ0pj_9T4a1LgwA4,97
|
|
186
|
+
pixeltable-0.3.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|