pixeltable 0.2.3__py3-none-any.whl → 0.2.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pixeltable might be problematic. Click here for more details.
- pixeltable/catalog/column.py +26 -49
- pixeltable/catalog/insertable_table.py +7 -4
- pixeltable/catalog/table.py +163 -57
- pixeltable/catalog/table_version.py +416 -140
- pixeltable/catalog/table_version_path.py +2 -2
- pixeltable/client.py +72 -6
- pixeltable/dataframe.py +65 -21
- pixeltable/env.py +52 -53
- pixeltable/exec/cache_prefetch_node.py +1 -1
- pixeltable/exec/in_memory_data_node.py +11 -7
- pixeltable/exprs/comparison.py +3 -3
- pixeltable/exprs/data_row.py +5 -1
- pixeltable/exprs/literal.py +16 -4
- pixeltable/exprs/row_builder.py +8 -40
- pixeltable/ext/__init__.py +5 -0
- pixeltable/ext/functions/yolox.py +92 -0
- pixeltable/func/aggregate_function.py +15 -15
- pixeltable/func/expr_template_function.py +9 -1
- pixeltable/func/globals.py +24 -14
- pixeltable/func/signature.py +18 -12
- pixeltable/func/udf.py +7 -2
- pixeltable/functions/__init__.py +9 -9
- pixeltable/functions/eval.py +7 -8
- pixeltable/functions/fireworks.py +10 -37
- pixeltable/functions/huggingface.py +47 -19
- pixeltable/functions/openai.py +192 -24
- pixeltable/functions/together.py +104 -9
- pixeltable/functions/util.py +11 -0
- pixeltable/index/__init__.py +2 -0
- pixeltable/index/base.py +49 -0
- pixeltable/index/embedding_index.py +95 -0
- pixeltable/metadata/schema.py +45 -22
- pixeltable/plan.py +15 -34
- pixeltable/store.py +38 -41
- pixeltable/tests/conftest.py +8 -14
- pixeltable/tests/ext/test_yolox.py +21 -0
- pixeltable/tests/functions/test_fireworks.py +43 -0
- pixeltable/tests/functions/test_functions.py +60 -0
- pixeltable/tests/{test_functions.py → functions/test_huggingface.py} +7 -143
- pixeltable/tests/functions/test_openai.py +162 -0
- pixeltable/tests/functions/test_together.py +112 -0
- pixeltable/tests/test_component_view.py +14 -5
- pixeltable/tests/test_dataframe.py +23 -22
- pixeltable/tests/test_exprs.py +99 -102
- pixeltable/tests/test_function.py +51 -43
- pixeltable/tests/test_index.py +138 -0
- pixeltable/tests/test_migration.py +2 -1
- pixeltable/tests/test_snapshot.py +24 -1
- pixeltable/tests/test_table.py +205 -26
- pixeltable/tests/test_types.py +30 -0
- pixeltable/tests/test_video.py +16 -16
- pixeltable/tests/test_view.py +5 -0
- pixeltable/tests/utils.py +171 -14
- pixeltable/tool/create_test_db_dump.py +16 -0
- pixeltable/type_system.py +77 -128
- pixeltable/utils/arrow.py +98 -0
- pixeltable/utils/hf_datasets.py +157 -0
- pixeltable/utils/parquet.py +68 -27
- pixeltable/utils/pytorch.py +16 -97
- {pixeltable-0.2.3.dist-info → pixeltable-0.2.5.dist-info}/METADATA +35 -28
- {pixeltable-0.2.3.dist-info → pixeltable-0.2.5.dist-info}/RECORD +63 -50
- {pixeltable-0.2.3.dist-info → pixeltable-0.2.5.dist-info}/LICENSE +0 -0
- {pixeltable-0.2.3.dist-info → pixeltable-0.2.5.dist-info}/WHEEL +0 -0
pixeltable/utils/parquet.py
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
|
+
import io
|
|
1
2
|
import json
|
|
3
|
+
import logging
|
|
4
|
+
from collections import deque
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Dict, List, Optional, Union
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
2
9
|
import PIL.Image
|
|
3
|
-
import io
|
|
4
|
-
import pyarrow.parquet as pq
|
|
5
10
|
import pyarrow as pa
|
|
6
|
-
import
|
|
7
|
-
from pathlib import Path
|
|
8
|
-
from collections import deque
|
|
11
|
+
import pyarrow.parquet
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
import pixeltable.type_system as ts
|
|
14
|
+
from pixeltable.utils.arrow import iter_tuples, to_arrow_schema, to_pixeltable_schema
|
|
11
15
|
from pixeltable.utils.transactional_directory import transactional_directory
|
|
16
|
+
import pixeltable.exceptions as exc
|
|
17
|
+
|
|
18
|
+
import random
|
|
19
|
+
|
|
20
|
+
_logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
12
22
|
|
|
13
23
|
def _write_batch(value_batch : Dict[str, deque], schema : pa.Schema, output_path : Path) -> None:
|
|
14
24
|
pydict = {}
|
|
@@ -20,18 +30,18 @@ def _write_batch(value_batch : Dict[str, deque], schema : pa.Schema, output_path
|
|
|
20
30
|
pydict[field.name] = value_batch[field.name]
|
|
21
31
|
|
|
22
32
|
tab = pa.Table.from_pydict(pydict, schema=schema)
|
|
23
|
-
|
|
33
|
+
pa.parquet.write_table(tab, output_path)
|
|
24
34
|
|
|
25
35
|
def save_parquet(df: 'pixeltable.DataFrame', dest_path: Path, partition_size_bytes: int = 100_000_000) -> None:
|
|
26
36
|
"""
|
|
27
37
|
Internal method to stream dataframe data to parquet format.
|
|
28
38
|
Does not materialize the dataset to memory.
|
|
29
39
|
|
|
30
|
-
It preserves pixeltable type metadata in a json file, which would otherwise
|
|
40
|
+
It preserves pixeltable type metadata in a json file, which would otherwise
|
|
31
41
|
not be available in the parquet format.
|
|
32
42
|
|
|
33
43
|
Images are stored inline in a compressed format in their parquet file.
|
|
34
|
-
|
|
44
|
+
|
|
35
45
|
Args:
|
|
36
46
|
df : dataframe to save.
|
|
37
47
|
dest_path : path to directory to save the parquet files to.
|
|
@@ -39,10 +49,9 @@ def save_parquet(df: 'pixeltable.DataFrame', dest_path: Path, partition_size_byt
|
|
|
39
49
|
"""
|
|
40
50
|
column_names = df.get_column_names()
|
|
41
51
|
column_types = df.get_column_types()
|
|
42
|
-
|
|
43
52
|
type_dict = {k: v.as_dict() for k, v in zip(column_names, column_types)}
|
|
53
|
+
arrow_schema = to_arrow_schema(dict(zip(column_names, column_types)))
|
|
44
54
|
|
|
45
|
-
arrow_schema = pa.schema([pa.field(name, column_types[i].to_arrow_type()) for i, name in enumerate(column_names)])
|
|
46
55
|
# store the changes atomically
|
|
47
56
|
with transactional_directory(dest_path) as temp_path:
|
|
48
57
|
# dump metadata json file so we can inspect what was the source of the parquet file later on.
|
|
@@ -65,8 +74,9 @@ def save_parquet(df: 'pixeltable.DataFrame', dest_path: Path, partition_size_byt
|
|
|
65
74
|
# images get inlined into the parquet file
|
|
66
75
|
if data_row.file_paths is not None and data_row.file_paths[e.slot_idx] is not None:
|
|
67
76
|
# if there is a file, read directly to preserve information
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
with open(data_row.file_paths[e.slot_idx], 'rb') as f:
|
|
78
|
+
val = f.read()
|
|
79
|
+
elif isinstance(val, PIL.Image.Image):
|
|
70
80
|
# if no file available, eg. bc it is computed, convert to png
|
|
71
81
|
buf = io.BytesIO()
|
|
72
82
|
val.save(buf, format='PNG')
|
|
@@ -109,18 +119,49 @@ def save_parquet(df: 'pixeltable.DataFrame', dest_path: Path, partition_size_byt
|
|
|
109
119
|
|
|
110
120
|
_write_batch(current_value_batch, arrow_schema, temp_path / f'part-{batch_num:05d}.parquet')
|
|
111
121
|
|
|
112
|
-
def get_part_metadata(path : Path) -> List[Tuple[str, int]]:
|
|
113
|
-
"""
|
|
114
|
-
Args:
|
|
115
|
-
path: path to directory containing parquet files.
|
|
116
|
-
Returns:
|
|
117
|
-
A list of (file_name, num_rows) tuples for the parquet files in file name order.
|
|
118
|
-
"""
|
|
119
|
-
parts = sorted([f for f in path.iterdir() if f.suffix == '.parquet'])
|
|
120
|
-
rows_per_file = {}
|
|
121
|
-
|
|
122
|
-
for part in parts:
|
|
123
|
-
parquet_file = pq.ParquetFile(str(part))
|
|
124
|
-
rows_per_file[part] = parquet_file.metadata.num_rows
|
|
125
122
|
|
|
126
|
-
|
|
123
|
+
def parquet_schema_to_pixeltable_schema(parquet_path: str) -> Dict[str, Optional[ts.ColumnType]]:
|
|
124
|
+
"""Generate a default pixeltable schema for the given parquet file. Returns None for unknown types."""
|
|
125
|
+
|
|
126
|
+
input_path = Path(parquet_path).expanduser()
|
|
127
|
+
parquet_dataset = pa.parquet.ParquetDataset(input_path)
|
|
128
|
+
return to_pixeltable_schema(parquet_dataset.schema)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def import_parquet(
|
|
132
|
+
cl: 'pixeltable.Client',
|
|
133
|
+
table_path: str,
|
|
134
|
+
*,
|
|
135
|
+
parquet_path: str,
|
|
136
|
+
schema_override: Optional[Dict[str, ts.ColumnType]],
|
|
137
|
+
**kwargs,
|
|
138
|
+
) -> 'catalog.InsertableTable':
|
|
139
|
+
"""See `pixeltable.Client.import_parquet` for documentation"""
|
|
140
|
+
input_path = Path(parquet_path).expanduser()
|
|
141
|
+
parquet_dataset = pa.parquet.ParquetDataset(input_path)
|
|
142
|
+
|
|
143
|
+
schema = parquet_schema_to_pixeltable_schema(parquet_path)
|
|
144
|
+
if schema_override is None:
|
|
145
|
+
schema_override = {}
|
|
146
|
+
|
|
147
|
+
schema.update(schema_override)
|
|
148
|
+
for k, v in schema.items():
|
|
149
|
+
if v is None:
|
|
150
|
+
raise exc.Error(f'Could not infer pixeltable type for column {k} from parquet file')
|
|
151
|
+
|
|
152
|
+
if table_path in cl.list_tables():
|
|
153
|
+
raise exc.Error(f'Table {table_path} already exists')
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
tmp_name = f'{table_path}_tmp_{random.randint(0, 100000000)}'
|
|
157
|
+
tab = cl.create_table(tmp_name, schema, **kwargs)
|
|
158
|
+
for fragment in parquet_dataset.fragments:
|
|
159
|
+
for batch in fragment.to_batches():
|
|
160
|
+
dict_batch = list(iter_tuples(batch))
|
|
161
|
+
tab.insert(dict_batch)
|
|
162
|
+
except Exception as e:
|
|
163
|
+
_logger.error(f'Error while inserting Parquet file into table: {e}')
|
|
164
|
+
raise e
|
|
165
|
+
|
|
166
|
+
cl.move(tmp_name, table_path)
|
|
167
|
+
return cl.get_table(table_path)
|
pixeltable/utils/pytorch.py
CHANGED
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
import io
|
|
2
2
|
import pyarrow as pa
|
|
3
|
-
import pyarrow.parquet
|
|
3
|
+
import pyarrow.parquet
|
|
4
4
|
import torch
|
|
5
5
|
import torch.utils.data
|
|
6
|
-
import math
|
|
7
6
|
from pathlib import Path
|
|
8
7
|
import PIL.Image
|
|
9
8
|
import json
|
|
10
|
-
from typing import Dict,
|
|
9
|
+
from typing import Dict, Iterator, Any
|
|
11
10
|
import datetime
|
|
12
11
|
|
|
13
12
|
from pixeltable.type_system import ColumnType
|
|
14
|
-
from pixeltable.utils.parquet import get_part_metadata
|
|
15
13
|
import numpy as np
|
|
16
14
|
|
|
17
|
-
def _cumsum(lst):
|
|
18
|
-
acc = [0]
|
|
19
|
-
for x in lst:
|
|
20
|
-
acc.append(acc[-1] + x)
|
|
21
|
-
return acc
|
|
22
|
-
|
|
23
15
|
class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
24
16
|
"""
|
|
25
17
|
PyTorch dataset interface for pixeltable data.
|
|
@@ -47,24 +39,7 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
47
39
|
with column_type_path.open() as f:
|
|
48
40
|
column_types = json.load(f)
|
|
49
41
|
self.column_types = {k: ColumnType.from_dict(v) for k, v in column_types.items()}
|
|
50
|
-
self.part_metadata =
|
|
51
|
-
self._totals = _cumsum([x[1] for x in self.part_metadata])
|
|
52
|
-
|
|
53
|
-
def _get_start_position(self, row_start: int) -> Tuple[int, int]:
|
|
54
|
-
"""
|
|
55
|
-
Returns the starting parquet file and row within that file for a given 'global' row number.
|
|
56
|
-
based on the individual sizes of each part
|
|
57
|
-
"""
|
|
58
|
-
assert row_start >= self._totals[0]
|
|
59
|
-
assert row_start < self._totals[-1]
|
|
60
|
-
|
|
61
|
-
prev_acc = 0
|
|
62
|
-
for i, acc in enumerate(self._totals[1:], start=1):
|
|
63
|
-
if acc > row_start:
|
|
64
|
-
return (i - 1, row_start - prev_acc)
|
|
65
|
-
prev_acc = acc
|
|
66
|
-
|
|
67
|
-
assert False, "unreachable"
|
|
42
|
+
self.part_metadata = pa.parquet.ParquetDataset(path).files
|
|
68
43
|
|
|
69
44
|
def _unmarshall(self, k: str, v: Any) -> Any:
|
|
70
45
|
if self.column_types[k].is_image_type():
|
|
@@ -88,13 +63,10 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
88
63
|
return json.loads(v)
|
|
89
64
|
elif self.column_types[k].is_array_type():
|
|
90
65
|
assert isinstance(v, np.ndarray)
|
|
91
|
-
# WRITEABLE is required for torch collate function, or undefined behavior
|
|
92
66
|
if not v.flags["WRITEABLE"]:
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
else:
|
|
97
|
-
return v
|
|
67
|
+
v = v.copy()
|
|
68
|
+
assert v.flags["WRITEABLE"]
|
|
69
|
+
return v
|
|
98
70
|
elif self.column_types[k].is_timestamp_type():
|
|
99
71
|
# pytorch default collation only supports numeric types
|
|
100
72
|
assert isinstance(v, datetime.datetime)
|
|
@@ -103,70 +75,17 @@ class PixeltablePytorchDataset(torch.utils.data.IterableDataset):
|
|
|
103
75
|
assert not isinstance(v, np.ndarray) # all array outputs should be handled above
|
|
104
76
|
return v
|
|
105
77
|
|
|
106
|
-
def __iter__(self) ->
|
|
78
|
+
def __iter__(self) -> Iterator[Dict[str, Any]]:
|
|
79
|
+
import pixeltable.utils.arrow as arrow
|
|
107
80
|
worker_info = torch.utils.data.get_worker_info()
|
|
108
|
-
if worker_info is None: # single-process data loading, return the full iterator
|
|
109
|
-
start_row = 0
|
|
110
|
-
end_row = self._totals[-1]
|
|
111
|
-
else: # in a worker process
|
|
112
|
-
num_workers = [
|
|
113
|
-
math.floor(self._totals[-1] / float(worker_info.num_workers))
|
|
114
|
-
for _ in range(worker_info.num_workers)
|
|
115
|
-
]
|
|
116
|
-
assert self._totals[-1] - sum(num_workers) < worker_info.num_workers
|
|
117
|
-
for i in range(self._totals[-1] - sum(num_workers)):
|
|
118
|
-
num_workers[i] += 1
|
|
119
|
-
|
|
120
|
-
assert sum(num_workers) == self._totals[-1]
|
|
121
|
-
start_rows = _cumsum(num_workers)
|
|
122
|
-
start_row = start_rows[worker_info.id]
|
|
123
|
-
end_row = start_rows[worker_info.id + 1]
|
|
124
81
|
|
|
125
|
-
if
|
|
126
|
-
|
|
82
|
+
if worker_info is None:
|
|
83
|
+
part_list = range(len(self.part_metadata))
|
|
127
84
|
else:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
def _iter_range(self, start_row : int, end_row : int) -> Generator[Dict[str, Any], None, None]:
|
|
131
|
-
(part_no, iter_start) = self._get_start_position(start_row)
|
|
132
|
-
total = end_row - start_row
|
|
133
|
-
|
|
134
|
-
acc = 0
|
|
135
|
-
part_pos = part_no
|
|
136
|
-
iter_pos = iter_start
|
|
137
|
-
|
|
138
|
-
def _to_column_dict(tab : pa.Table) -> Dict[str, Any]:
|
|
139
|
-
column_dict = {}
|
|
140
|
-
for k in tab.column_names:
|
|
141
|
-
if self.column_types[k].is_array_type():
|
|
142
|
-
# treat array columns as numpy arrays to easily preserve numpy type
|
|
143
|
-
column_dict[k] = tab.column(k).to_numpy()
|
|
144
|
-
else:
|
|
145
|
-
# for the rest, use pydict to preserve python types
|
|
146
|
-
column_dict[k] = tab.column(k).to_pylist()
|
|
147
|
-
return column_dict
|
|
148
|
-
|
|
149
|
-
tab: pa.Table = pq.read_table(self.path / self.part_metadata[part_no][0])
|
|
150
|
-
column_dict = _to_column_dict(tab)
|
|
151
|
-
assert tab.num_rows == self.part_metadata[part_no][1]
|
|
152
|
-
|
|
153
|
-
while True:
|
|
154
|
-
while iter_pos < tab.num_rows and acc < total:
|
|
155
|
-
next_tup = {}
|
|
156
|
-
for col_name, col_vals in column_dict.items():
|
|
157
|
-
raw_val = col_vals[iter_pos]
|
|
158
|
-
next_tup[col_name] = self._unmarshall(col_name, raw_val)
|
|
159
|
-
|
|
160
|
-
yield next_tup
|
|
161
|
-
acc += 1
|
|
162
|
-
iter_pos += 1
|
|
163
|
-
|
|
164
|
-
if acc == total:
|
|
165
|
-
break
|
|
85
|
+
part_list = [ i for i in part_list if (i % worker_info.num_workers) == worker_info.id ]
|
|
166
86
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
column_dict = _to_column_dict(tab)
|
|
87
|
+
for part_no in part_list:
|
|
88
|
+
pqf = pa.parquet.ParquetFile(self.part_metadata[part_no])
|
|
89
|
+
for batch in pqf.iter_batches():
|
|
90
|
+
for tup in arrow.iter_tuples(batch):
|
|
91
|
+
yield {k: self._unmarshall(k, v) for k, v in tup.items()}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pixeltable
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Pixeltable: The Multimodal AI Data Plane
|
|
5
5
|
Author: Marcel Kornacker
|
|
6
6
|
Author-email: marcelk@gmail.com
|
|
@@ -15,12 +15,12 @@ Requires-Dist: beautifulsoup4 (>=4.0.0,<5.0.0)
|
|
|
15
15
|
Requires-Dist: cloudpickle (>=2.2.1,<3.0.0)
|
|
16
16
|
Requires-Dist: jinja2 (>=3.1.3,<4.0.0)
|
|
17
17
|
Requires-Dist: jmespath (>=1.0.1,<2.0.0)
|
|
18
|
-
Requires-Dist: numpy (>=1.26
|
|
18
|
+
Requires-Dist: numpy (>=1.26)
|
|
19
19
|
Requires-Dist: opencv-python-headless (>=4.7.0.68,<5.0.0.0)
|
|
20
20
|
Requires-Dist: pandas (>=2.0,<3.0)
|
|
21
|
-
Requires-Dist: pgserver (==0.
|
|
21
|
+
Requires-Dist: pgserver (==0.1.2)
|
|
22
22
|
Requires-Dist: pgvector (>=0.2.1,<0.3.0)
|
|
23
|
-
Requires-Dist: pillow (>=
|
|
23
|
+
Requires-Dist: pillow (>=10.0)
|
|
24
24
|
Requires-Dist: psutil (>=5.9.5,<6.0.0)
|
|
25
25
|
Requires-Dist: psycopg2-binary (>=2.9.5,<3.0.0)
|
|
26
26
|
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
|
@@ -28,38 +28,44 @@ Requires-Dist: regex (>=2022.10.31,<2023.0.0)
|
|
|
28
28
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
29
29
|
Requires-Dist: sqlalchemy-utils (>=0.41.1,<0.42.0)
|
|
30
30
|
Requires-Dist: sqlalchemy[mypy] (>=2.0.23,<3.0.0)
|
|
31
|
+
Requires-Dist: tenacity (>=8.2,<9.0)
|
|
31
32
|
Requires-Dist: tqdm (>=4.64.1,<5.0.0)
|
|
32
33
|
Description-Content-Type: text/markdown
|
|
33
34
|
|
|
35
|
+
<div align="center">
|
|
34
36
|
<img src="docs/pixeltable-banner.png" width="45%"/>
|
|
35
37
|
|
|
36
|
-
#
|
|
38
|
+
# Unifying Data, Models, and Orchestration for AI Products
|
|
37
39
|
|
|
38
40
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
39
41
|
|
|
40
42
|

|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
data plumbing.
|
|
44
|
+
[Installation](https://pixeltable.github.io/pixeltable/getting-started/) | [Documentation](https://pixeltable.github.io/pixeltable/)
|
|
45
|
+
</div>
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
It brings together data storage, versioning, and indexing with orchestration and model
|
|
48
|
-
versioning under a declarative table interface, with transformations, model inference,
|
|
49
|
-
and custom logic represented as computed columns.
|
|
47
|
+
Pixeltable is a Python library that lets AI engineers and data scientists focus on exploration, modeling, and app development without dealing with the customary data plumbing.
|
|
50
48
|
|
|
51
|
-
##
|
|
49
|
+
## What problems does Pixeltable solve?
|
|
50
|
+
|
|
51
|
+
Today’s solutions for AI app development require extensive custom coding and infrastructure
|
|
52
|
+
plumbing. Tracking lineage and versions between and across data transformations, models, and
|
|
53
|
+
deployment is cumbersome. Pixeltable is a replacement for traditional data plumbing, providing
|
|
54
|
+
a unified plane for data, models, and orchestration. It removes the data plumbing overhead in
|
|
55
|
+
building and productionizing AI applications.
|
|
56
|
+
|
|
57
|
+
## ⚡Quick Start
|
|
58
|
+
Learn the basics of Pixeltable through interactive examples. View the notebooks on Google Colab or Kaggle, for free.
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
### Pixeltable Basics
|
|
61
|
+
In this tutorial, we'll survey how to create tables, populate them with data, and enhance them with built-in and user-defined transformations and AI operations.
|
|
55
62
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
</a>
|
|
63
|
+
[](https://kaggle.com/kernels/welcome?src=https://github.com/pixeltable/pixeltable/blob/master/docs/tutorials/pixeltable-basics.ipynb)
|
|
64
|
+
<a target="_blank" href="https://colab.research.google.com/github/pixeltable/pixeltable/blob/master/docs/tutorials/pixeltable-basics.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/> </a>
|
|
59
65
|
|
|
60
|
-
## Installation
|
|
61
66
|
|
|
62
|
-
|
|
67
|
+
## 💾 Installation
|
|
68
|
+
Pixeltable works with Python 3.9, 3.10, 3.11, or 3.12 running on Linux, MacOS, or Windows.
|
|
63
69
|
|
|
64
70
|
```
|
|
65
71
|
pip install pixeltable
|
|
@@ -78,14 +84,6 @@ guide. Then, check out the
|
|
|
78
84
|
[Pixeltable Basics](https://pixeltable.github.io/pixeltable/tutorials/pixeltable-basics/)
|
|
79
85
|
tutorial for a tour of its most important features.
|
|
80
86
|
|
|
81
|
-
## What problems does Pixeltable solve?
|
|
82
|
-
|
|
83
|
-
Today’s solutions for AI app development require extensive custom coding and infrastructure
|
|
84
|
-
plumbing. Tracking lineage and versions between and across data transformations, models, and
|
|
85
|
-
deployment is cumbersome. Pixeltable is a replacement for traditional data plumbing, providing
|
|
86
|
-
a unified plane for data, models, and orchestration. It removes the data plumbing overhead in
|
|
87
|
-
building and productionizing AI applications.
|
|
88
|
-
|
|
89
87
|
## Why should you use Pixeltable?
|
|
90
88
|
|
|
91
89
|
- It gives you transparency and reproducibility
|
|
@@ -119,3 +117,12 @@ get cost projections before adding new data and new augmentations.
|
|
|
119
117
|
* Rely on Pixeltable's automatic versioning and snapshot functionality to protect against regressions
|
|
120
118
|
and to ensure reproducibility.
|
|
121
119
|
|
|
120
|
+
## Contributions & Feedback
|
|
121
|
+
|
|
122
|
+
Are you experiencing issues or bugs with Pixeltable? File an [Issue](https://github.com/pixeltable/pixeltable/issues).
|
|
123
|
+
</br>Do you want to contribute? Feel free to open a [PR](https://github.com/pixeltable/pixeltable/pulls).
|
|
124
|
+
|
|
125
|
+
## :classical_building: License
|
|
126
|
+
|
|
127
|
+
This library is licensed under the Apache 2.0 License.
|
|
128
|
+
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
pixeltable/__init__.py,sha256=enh38lhZ_38Ys3rCy_XC_BlPNPK9H2CKV4KePaqnV4E,959
|
|
2
2
|
pixeltable/catalog/__init__.py,sha256=E41bxaPeQIcgRYzTWc2vkDOboQhRymrJf4IcHQO7o_8,453
|
|
3
3
|
pixeltable/catalog/catalog.py,sha256=0TYWB1R6YBp9qCkWF7kCcX2Yw70UuburKKIemv5L1Js,7908
|
|
4
|
-
pixeltable/catalog/column.py,sha256=
|
|
4
|
+
pixeltable/catalog/column.py,sha256=2K3rUrcfdF-eXiRB9WhIrFVj1XmjrK51lQA616OYfLQ,7887
|
|
5
5
|
pixeltable/catalog/dir.py,sha256=pG1nMpG123POo6WMSHhAmnwXOQ26uUJfUcbzL-Jb4ws,919
|
|
6
6
|
pixeltable/catalog/globals.py,sha256=yLEGNbsSnLzjWNHVJacfjA9hbw13Q6QXLOSCRmdTlq0,943
|
|
7
|
-
pixeltable/catalog/insertable_table.py,sha256=
|
|
7
|
+
pixeltable/catalog/insertable_table.py,sha256=B9QLN2eoCTjwqH5KLBRy3YQ7_l1nd8hqJd83eIdE1Qc,8303
|
|
8
8
|
pixeltable/catalog/named_function.py,sha256=a96gnKtx-nz5_MzDIiD4t4Hxqdjkg9ZtijRQxvWA5WQ,1147
|
|
9
9
|
pixeltable/catalog/path.py,sha256=QgccEi_QOfaKt8YsR2zLtd_z7z7QQkU_1kprJFi2SPQ,1677
|
|
10
10
|
pixeltable/catalog/path_dict.py,sha256=xfvxg1Ze5jZCARUGASF2DRbQPh7pRVTYhuJ_u82gYUo,5941
|
|
11
11
|
pixeltable/catalog/schema_object.py,sha256=-UxmPLbuEBqJiJi_GGRbFdr7arAFxTqs4bt6TFmSt3M,1059
|
|
12
|
-
pixeltable/catalog/table.py,sha256=
|
|
13
|
-
pixeltable/catalog/table_version.py,sha256=
|
|
14
|
-
pixeltable/catalog/table_version_path.py,sha256=
|
|
12
|
+
pixeltable/catalog/table.py,sha256=6OKvbrFFVu_xoKs68QC7mt-N99rKrBPwos4Bozs9rvg,30675
|
|
13
|
+
pixeltable/catalog/table_version.py,sha256=1KBk1A_iqXtQbUs3P-5bxedOccj2kcryMLmlwxZcLF4,48818
|
|
14
|
+
pixeltable/catalog/table_version_path.py,sha256=2Ofzd0n36flcNm86KWwIWDBAfgnV5Z-FxAHdMSPgMLc,5482
|
|
15
15
|
pixeltable/catalog/view.py,sha256=BIL3s4DV3tWbOcqtqnhn46B2UvLaBhppfJUlNEt5nec,9734
|
|
16
|
-
pixeltable/client.py,sha256=
|
|
17
|
-
pixeltable/dataframe.py,sha256=
|
|
18
|
-
pixeltable/env.py,sha256=
|
|
16
|
+
pixeltable/client.py,sha256=Ypah43hdEByGZ7WGS5-2LWKnsWAuhofq84TMRZD90uQ,23442
|
|
17
|
+
pixeltable/dataframe.py,sha256=GyeutsjdKSAzRorzIsSZ_hElGJM7bRSRv28ynB4qFGY,30014
|
|
18
|
+
pixeltable/env.py,sha256=Qk_Br2gJKDykvz0AoWJ45nDZTjhl-MStxVWWFI4pU3A,16303
|
|
19
19
|
pixeltable/exceptions.py,sha256=MSP9zeL0AmXT93XqjdvgGN4rzno1_KRrGriq6hpemnw,376
|
|
20
20
|
pixeltable/exec/__init__.py,sha256=FOQBSMQ3buGg5kRzymkfDCk5fnVfICn3LrsJtbyNC6E,412
|
|
21
21
|
pixeltable/exec/aggregation_node.py,sha256=cf6rVAgrGh_uaMrCIgXJIwQTmbcboJlnrH_MmPIQSd0,3321
|
|
22
|
-
pixeltable/exec/cache_prefetch_node.py,sha256=
|
|
22
|
+
pixeltable/exec/cache_prefetch_node.py,sha256=d5pEuR6AtJQkEVy9X3XeYFI_q0szMtoNAH96vYdtBE0,5241
|
|
23
23
|
pixeltable/exec/component_iteration_node.py,sha256=Uz6zEeaJMcbvF3S0W0qmLI_uWsZsaSspHKNzuAMrasg,4069
|
|
24
24
|
pixeltable/exec/data_row_batch.py,sha256=ZaS_ciyYhoP50Aoszhgtnh_yDRR6z9H43crnaJdP-xA,3505
|
|
25
25
|
pixeltable/exec/exec_context.py,sha256=E82Q2bJMJ1ulud5L5D9dh2Z8vEUQ659SgT614YKDO34,924
|
|
26
26
|
pixeltable/exec/exec_node.py,sha256=Hji5NCPHfa50IWyjladXrBm4I0zseV7AV4cVdx0Q8Ew,2170
|
|
27
27
|
pixeltable/exec/expr_eval_node.py,sha256=mqACyEy48fsiWkbHSkkMc8gG2nL-WT6eJSG3nltM85c,10810
|
|
28
|
-
pixeltable/exec/in_memory_data_node.py,sha256=
|
|
28
|
+
pixeltable/exec/in_memory_data_node.py,sha256=SNM2AbMQSjmGDWMNJUf_5MmlXWE3P80lsuUjNfzQckA,3171
|
|
29
29
|
pixeltable/exec/media_validation_node.py,sha256=OKfRyKpcn7AZdACy_HD4NsDC87ZfNFs1tdrQz2NiIVw,1514
|
|
30
30
|
pixeltable/exec/sql_scan_node.py,sha256=zKJ2_iM0ah748Vz8jD0Lkm7TRyUChIejnGUPNmYPgbs,10318
|
|
31
31
|
pixeltable/exprs/__init__.py,sha256=EkpjeEW-8rriE9hVb9PdiknHQ3-Y8jPp37yJ-NC_oWA,935
|
|
@@ -33,9 +33,9 @@ pixeltable/exprs/arithmetic_expr.py,sha256=sWBYCBKI6IHj9ASwDcm2BlkQ5gleVtKtmpiPv
|
|
|
33
33
|
pixeltable/exprs/array_slice.py,sha256=VmWc6iFusrM85MjyEBBCfXG1Jnt8-Gr6-J88BXxNoOE,2131
|
|
34
34
|
pixeltable/exprs/column_property_ref.py,sha256=0PHiBys0fxe2LgjaMId5UHob4E-ZggyPLnnW41RgA0E,2706
|
|
35
35
|
pixeltable/exprs/column_ref.py,sha256=5-mbWV8-cWWu0ynxPSQ0L8oLewDrLp17xh8DOCmQ36s,4794
|
|
36
|
-
pixeltable/exprs/comparison.py,sha256=
|
|
36
|
+
pixeltable/exprs/comparison.py,sha256=rAlGUF0AuzkYGspewJPu-6aaQZa4dVMJYGbMwqKyBIc,2964
|
|
37
37
|
pixeltable/exprs/compound_predicate.py,sha256=Gh22MKi625m5A_RunVRd-a1XFi-fitikqBVz2VNXKrs,3830
|
|
38
|
-
pixeltable/exprs/data_row.py,sha256=
|
|
38
|
+
pixeltable/exprs/data_row.py,sha256=2kGnZhDna4bkgzb2y9iDnkLFe8lXSk59QAf9zW2Z-Y0,8278
|
|
39
39
|
pixeltable/exprs/expr.py,sha256=JyEmP8F9LXmxOrVswih1Aq0SrpGcboSRinOYIMWYfKM,23748
|
|
40
40
|
pixeltable/exprs/expr_set.py,sha256=Q64Q2yI0CTq2Ma_E-BUYlMotSstVuMm4OFZnBCedHRk,1222
|
|
41
41
|
pixeltable/exprs/function_call.py,sha256=QFzkb2gKjeALGTgCet-o0HETwTXoFBzsncbghgScmOE,16961
|
|
@@ -47,80 +47,93 @@ pixeltable/exprs/inline_dict.py,sha256=Lb3VS3Mkxb72mWL4qipOQjUgY8AMxk1POj225Xqjt
|
|
|
47
47
|
pixeltable/exprs/is_null.py,sha256=nvpOXtQj1UeYJpkCWzbaGuQElzrA2HSG3XNQugOv-pw,1041
|
|
48
48
|
pixeltable/exprs/json_mapper.py,sha256=I60VNgus64ai80gnFCIsRn0VRWYXMkqH5VNvnATsN9s,4559
|
|
49
49
|
pixeltable/exprs/json_path.py,sha256=Wz_5zFsyc9TPhsSbsDjDmQ3Nb0uVIwMCx5nh-cQYBiE,6526
|
|
50
|
-
pixeltable/exprs/literal.py,sha256=
|
|
50
|
+
pixeltable/exprs/literal.py,sha256=5NNza-WL1dd3hNznwwkr_yAcTGXSIRYUszGfy30lruI,2396
|
|
51
51
|
pixeltable/exprs/object_ref.py,sha256=eTcx84aWRI59fIiGvbdv3_cfL0XW4xEFQ4lwpLpJkM8,1250
|
|
52
52
|
pixeltable/exprs/predicate.py,sha256=OSDgjfSqiK7J_5GZMUXMvjfyomKEGi0JNxeB073SGXw,1859
|
|
53
|
-
pixeltable/exprs/row_builder.py,sha256=
|
|
53
|
+
pixeltable/exprs/row_builder.py,sha256=72bbPPynmzFrWuZoqsCCBmtWAgf3XFyKqUQaoMusmeo,15321
|
|
54
54
|
pixeltable/exprs/rowid_ref.py,sha256=74w4rEy21YysTVbyKNc3op-pYFqDAx8VJdtl7ZPpxHs,4268
|
|
55
55
|
pixeltable/exprs/type_cast.py,sha256=JMg8p1qYoFfiAXfJPSbTEnfrK7lRO_JMaqlPHOrhNQU,1793
|
|
56
56
|
pixeltable/exprs/variable.py,sha256=Kg_O4ytcHYZFijIyMHYBJn063cTKU1-YE583FAz8Qaw,1361
|
|
57
|
+
pixeltable/ext/__init__.py,sha256=0uugfuME1FybVo-MdxaVNGagRjhcvNTnv5MZUem6Cyo,269
|
|
58
|
+
pixeltable/ext/functions/yolox.py,sha256=LwrOtXMT57AP6-IkmRZ_12yN5-EiFRpTuh4Sexm8x24,3131
|
|
57
59
|
pixeltable/func/__init__.py,sha256=4qvDnK_S5yljwtIrxCkeQlz6vuTVfwSU4zl-MBT2TMU,457
|
|
58
|
-
pixeltable/func/aggregate_function.py,sha256=
|
|
60
|
+
pixeltable/func/aggregate_function.py,sha256=OC5dmWKOjNHcgH5KrsxZpISoP5RFXfHFkzHQk8PnOUQ,9267
|
|
59
61
|
pixeltable/func/batched_function.py,sha256=nrfmykJps4QkgzeC4ZroGy8mJ-BACNKbRJABHHG6-Ac,2350
|
|
60
62
|
pixeltable/func/callable_function.py,sha256=WGUwjNEzXGDJ1jzdZ-mrn2cnfEHmFZIh_DRl_Yk89D0,2357
|
|
61
|
-
pixeltable/func/expr_template_function.py,sha256=
|
|
63
|
+
pixeltable/func/expr_template_function.py,sha256=aBIjO5ibd2t56lNKKEmv-YFVcxUW_jqHIiYaslG1u2A,3807
|
|
62
64
|
pixeltable/func/function.py,sha256=NcGyKp7ds6bMzg1qzuaK8pBQH_DhknmSiZzsfXi-z2k,4023
|
|
63
65
|
pixeltable/func/function_registry.py,sha256=1ibSQxEPm3Zd3r497vSlckQiDG9sfCnyJx3zcSm9t7c,11456
|
|
64
|
-
pixeltable/func/globals.py,sha256=
|
|
66
|
+
pixeltable/func/globals.py,sha256=sEwn6lGgHMp6VQORb_P5qRd_-Q2_bUSqvqM9-XPN_ec,1483
|
|
65
67
|
pixeltable/func/nos_function.py,sha256=HzIKK4XjTo1E6pML-EbhuX3u_LYibFWUuTkIxoIih7c,9650
|
|
66
|
-
pixeltable/func/signature.py,sha256=
|
|
67
|
-
pixeltable/func/udf.py,sha256=
|
|
68
|
-
pixeltable/functions/__init__.py,sha256=
|
|
69
|
-
pixeltable/functions/eval.py,sha256=
|
|
70
|
-
pixeltable/functions/fireworks.py,sha256=
|
|
71
|
-
pixeltable/functions/huggingface.py,sha256=
|
|
68
|
+
pixeltable/func/signature.py,sha256=aQRb-znfblRlMlUN7YmbFHF6-PRAGbYRpqDNd7nawII,7343
|
|
69
|
+
pixeltable/func/udf.py,sha256=DEaXgKrx-Nrszf9cSC_ql9GF016DRbKI5JXAHODUU0I,6711
|
|
70
|
+
pixeltable/functions/__init__.py,sha256=uO-XB4QUbx3Jjs9GoaTXoJY2jn0AuXTL32YLkL_3_CI,3297
|
|
71
|
+
pixeltable/functions/eval.py,sha256=_2FANDJqwtIDzTxtcKc0Yacf7b4LTAjyy2fPDw1FG_s,8404
|
|
72
|
+
pixeltable/functions/fireworks.py,sha256=e_rCITg18yNndNI8TJPXRSN6DR0hYWT-_dUavoPuyfc,908
|
|
73
|
+
pixeltable/functions/huggingface.py,sha256=_Z-MqqMRVDw1GOS5KonaeEmh5qsU-dfam9EODddiHw4,5693
|
|
72
74
|
pixeltable/functions/image.py,sha256=xR_S_0BuX6Ycc5E366GpOfP0JptD7beQwHE_fLl8ZVM,431
|
|
73
|
-
pixeltable/functions/openai.py,sha256=
|
|
75
|
+
pixeltable/functions/openai.py,sha256=o5-qh_T4JgIyMR8Ky1Y6HbK9yg88fJSkkQCIaLAf9Qg,6870
|
|
74
76
|
pixeltable/functions/pil/image.py,sha256=8gItSXXuJaCkq9FHEJE9qFpRM3WAoa59x89Xa0DgksQ,6217
|
|
75
77
|
pixeltable/functions/string.py,sha256=RYOgZwifjC943YloEMi3PdflnjFqOYB2FddrUvzgtXs,516
|
|
76
|
-
pixeltable/functions/together.py,sha256=
|
|
77
|
-
pixeltable/functions/util.py,sha256=
|
|
78
|
+
pixeltable/functions/together.py,sha256=sG23nLMScmp4wRA4K1EIJDY9peqE1IPgxlK3fhNrbgw,3423
|
|
79
|
+
pixeltable/functions/util.py,sha256=djVqro_W5M_jUgYWzZZaXXH3lWaAWj6q-hrpzFl_Ko8,1860
|
|
78
80
|
pixeltable/functions/video.py,sha256=WZF4G3tV-_LfRQHUinXe_rnu1-4N68Ht60JCR_s7Bew,2403
|
|
81
|
+
pixeltable/index/__init__.py,sha256=tlJENOzEq6p_8xu-nX1mN4Zt9asw4481Znl5ZXYIKwc,72
|
|
82
|
+
pixeltable/index/base.py,sha256=LwBXLOBWkQhAOSOo2gtgtgSJglnRUrf0RtG5JmcwwEQ,1362
|
|
83
|
+
pixeltable/index/embedding_index.py,sha256=THFue7f4fKCUXYlxqqRGNcoc1o22GqYcYg6s5vvQFFg,4372
|
|
79
84
|
pixeltable/iterators/__init__.py,sha256=sfsasCypAq5rNOTMlr4j2ROXxzdl4M8L2KvQIEbd0cQ,70
|
|
80
85
|
pixeltable/iterators/base.py,sha256=sugU9mG19xf9I4c_lEQDI_xrXPLuyuIYlKc-9OiS1HQ,1545
|
|
81
86
|
pixeltable/iterators/document.py,sha256=bWK-3oRD9Sbc5vIcxccMyFh8zTP40233NK3ch6uyLI0,13105
|
|
82
87
|
pixeltable/iterators/video.py,sha256=mUdHev0f_XJIfHTB-mejjToURh10Ud7l096eZm2aPjM,3444
|
|
83
88
|
pixeltable/metadata/__init__.py,sha256=6rLGFpWzQMCk0EcSKLp4Bnbk8tLK1cxuONBPqwDCMzU,2083
|
|
84
89
|
pixeltable/metadata/converters/convert_10.py,sha256=0mSGCn7vqtef63riPi9msUaaUvsSQIj-NFj9QFDYPdA,733
|
|
85
|
-
pixeltable/metadata/schema.py,sha256=
|
|
86
|
-
pixeltable/plan.py,sha256=
|
|
87
|
-
pixeltable/store.py,sha256=
|
|
88
|
-
pixeltable/tests/conftest.py,sha256=
|
|
90
|
+
pixeltable/metadata/schema.py,sha256=uuk3rzCpYr99PzEO1pIXe8nMaOoTJtwRfhnqgQ_MdDs,8335
|
|
91
|
+
pixeltable/plan.py,sha256=sZe_K_5VUGISPIiRoogXhfYMSx6tU58YPGcx1HCKACo,33549
|
|
92
|
+
pixeltable/store.py,sha256=IAurcG5vyryl4GMIl6nH0vM-R-IXTj5ZaczgtMKsEx0,19426
|
|
93
|
+
pixeltable/tests/conftest.py,sha256=mVZmWdQWNRJPmeyYTkdE2AcOx861A-JsfaZkRmZ5_wE,6339
|
|
94
|
+
pixeltable/tests/ext/test_yolox.py,sha256=hZRCq1bue3PO86zdBdfUa-3I8_pZ4i91J25cLPcmRX0,1085
|
|
95
|
+
pixeltable/tests/functions/test_fireworks.py,sha256=d6-bgB4PUByJ_9pfn7_jcI8weMpUgYM1Bln0ohBu49I,1690
|
|
96
|
+
pixeltable/tests/functions/test_functions.py,sha256=SRE4zRwfJ1Hetu8uMp5X-Iqg-pawn87q07JHa7w_8l0,2884
|
|
97
|
+
pixeltable/tests/functions/test_huggingface.py,sha256=hmxM-2skPe1xu0uniI2N_IL8djDpBis86wdEh4Oc_84,7657
|
|
98
|
+
pixeltable/tests/functions/test_openai.py,sha256=YT34H6knG-pSypGFxGGjqebjjcYF1Z7BDm1Vo9Ar970,8659
|
|
99
|
+
pixeltable/tests/functions/test_together.py,sha256=sNySFn0tgWAVz99htLA3UvrKFoHevyKOfBQ6uJb4AFM,4812
|
|
89
100
|
pixeltable/tests/test_audio.py,sha256=92PMPrMtYzLoaLiW92MupEfWPEcfoLlYlZKlxmWQXdI,3186
|
|
90
101
|
pixeltable/tests/test_catalog.py,sha256=Npxt72g5aZkfg1fqE-19L8rGilzicAiTC0ithIy3woI,1189
|
|
91
102
|
pixeltable/tests/test_client.py,sha256=9acrjElh1YVX8WXWO04VQ-S6mNx9ZtqAHoh4uBc81y4,531
|
|
92
|
-
pixeltable/tests/test_component_view.py,sha256=
|
|
93
|
-
pixeltable/tests/test_dataframe.py,sha256=
|
|
103
|
+
pixeltable/tests/test_component_view.py,sha256=j0Ri9li_gqEgu_X_MDlHq3SrglwSb-TFt-VgAPiXk1M,18221
|
|
104
|
+
pixeltable/tests/test_dataframe.py,sha256=7MNVGKg7gD__K_EH5PRx2wSDkykpQF2Uoahr_JvQwD4,17906
|
|
94
105
|
pixeltable/tests/test_dirs.py,sha256=WuWGOcpUFPCl1PGZgOMcU5bpzv1ClUqZ5AxavrDeCic,3611
|
|
95
106
|
pixeltable/tests/test_document.py,sha256=5G52cMbkkX2lk5SwyYQ1KYjQjgUfVhjcsjPtL9xjGXU,5810
|
|
96
|
-
pixeltable/tests/test_exprs.py,sha256=
|
|
97
|
-
pixeltable/tests/test_function.py,sha256=
|
|
98
|
-
pixeltable/tests/
|
|
99
|
-
pixeltable/tests/test_migration.py,sha256=
|
|
107
|
+
pixeltable/tests/test_exprs.py,sha256=3F2btTIdT6TymaQLtiDIo3sAntW1WLY5oU-ud267VhY,32181
|
|
108
|
+
pixeltable/tests/test_function.py,sha256=zzW7IYTipe23ao5_dNMmGEv2xJOsDUe0DoHI8pfuPDI,12987
|
|
109
|
+
pixeltable/tests/test_index.py,sha256=6ONEKsxHdUJuLTYoeIVqEJzbp_sANzr43D1xre2b-6o,5410
|
|
110
|
+
pixeltable/tests/test_migration.py,sha256=RGpQOjkkjhT4oO9U5X6dG2q8YHTeJPDq_dRlQZY7YQM,1599
|
|
100
111
|
pixeltable/tests/test_nos.py,sha256=ITE7FNEaNreJ_XTz4wYLWuidFSUQMFp3ShuHTz05OrE,2649
|
|
101
|
-
pixeltable/tests/test_snapshot.py,sha256=
|
|
102
|
-
pixeltable/tests/test_table.py,sha256=
|
|
112
|
+
pixeltable/tests/test_snapshot.py,sha256=uTTxnBNZODhhbH2pAxtzKdGrNmbiozKmya-LvK8OQ6g,10331
|
|
113
|
+
pixeltable/tests/test_table.py,sha256=a7BCBsSzlLmIEXtmrLiIFP6B4KoG4B9MuHm_JIwFEic,56557
|
|
103
114
|
pixeltable/tests/test_transactional_directory.py,sha256=Jx55PZgrkHTI0Eli09puwMckvwfCM9arPTQUT9g6Tbg,1308
|
|
104
|
-
pixeltable/tests/test_types.py,sha256=
|
|
105
|
-
pixeltable/tests/test_video.py,sha256=
|
|
106
|
-
pixeltable/tests/test_view.py,sha256=
|
|
107
|
-
pixeltable/tests/utils.py,sha256=
|
|
108
|
-
pixeltable/tool/create_test_db_dump.py,sha256=
|
|
115
|
+
pixeltable/tests/test_types.py,sha256=psRqCDInUPH99W6-FlZhqUoN5FTlfZaUUS7YR3UzvIw,2045
|
|
116
|
+
pixeltable/tests/test_video.py,sha256=zN9h9KM2V8U-Rf3tFxYimp_QoT4hLbbguyEu2o9_PLU,7740
|
|
117
|
+
pixeltable/tests/test_view.py,sha256=EWo_Z-UEbilayXK8iEziPg5fedGtT6o4745S04Z4Lb4,22108
|
|
118
|
+
pixeltable/tests/utils.py,sha256=LNHP9O0vqtKV4_WngD6V3e6iI7dKxLkII2UInR4xKHQ,15106
|
|
119
|
+
pixeltable/tool/create_test_db_dump.py,sha256=mKX42BHgx1JggmG2vupT0kzDM0N2HG-z8ObKcgBRMls,5842
|
|
109
120
|
pixeltable/tool/create_test_video.py,sha256=OLfccymYReIpzE8osZn4rQvLXxxiPC_l0vc06U74hVM,2899
|
|
110
|
-
pixeltable/type_system.py,sha256=
|
|
121
|
+
pixeltable/type_system.py,sha256=VXVxgclkW3_wX818qZ6NnST29M8R4fgQ9_LiEfVOo8k,29929
|
|
111
122
|
pixeltable/utils/__init__.py,sha256=UYlrf6TIWJT0g-Hac0b34-dEk478B5Qx8dGco34YlIk,439
|
|
123
|
+
pixeltable/utils/arrow.py,sha256=83_7aG5UR2qtTktw_otLkQs-RQbLk0VVM0JLJkbweNU,3692
|
|
112
124
|
pixeltable/utils/clip.py,sha256=HXXWFBJXW9XysdMk9_3hP1V1S-3B8Hwd5rNMbJFjjnI,720
|
|
113
125
|
pixeltable/utils/coco.py,sha256=mk1cxjKYQC0ABm2ZQ9SNu9MvBPECmmKvnASpxnFXdL0,5604
|
|
114
126
|
pixeltable/utils/documents.py,sha256=MGtWZs93Bt_pdExxT9yjH7VWbawSd5A2O5_YdxEZlMk,1094
|
|
115
127
|
pixeltable/utils/filecache.py,sha256=UoNONG2VaAc2IBB0e3sQdsvyOPOes2XSDc5_CsA4qek,7839
|
|
116
128
|
pixeltable/utils/help.py,sha256=cCnxJ4VP9MJ57iDqExmnDcM-JG3a1lw_q7g-D7bpSVI,252
|
|
129
|
+
pixeltable/utils/hf_datasets.py,sha256=TxN0H9d25VfXiWwT1XAziNFJMKLSK9Y7x1oPejbuFok,7005
|
|
117
130
|
pixeltable/utils/media_store.py,sha256=x71wnJDZDHcdd13VCfL4AkHQ6IJB41gNA-zBvXJwFos,3116
|
|
118
|
-
pixeltable/utils/parquet.py,sha256=
|
|
119
|
-
pixeltable/utils/pytorch.py,sha256=
|
|
131
|
+
pixeltable/utils/parquet.py,sha256=DmiF74UYNvnGOOgHUHk_108QZALsQY7HnZoJw6-H3xc,7120
|
|
132
|
+
pixeltable/utils/pytorch.py,sha256=BR4tgfUWw-2rwWTOgzXj5qdMBpe1Arpp5SK4ax6jjpk,3483
|
|
120
133
|
pixeltable/utils/s3.py,sha256=rkanuhk9DWvSfmbOLQW1j1Iov4sl2KhxGGKN-AJ8LSE,432
|
|
121
134
|
pixeltable/utils/sql.py,sha256=5n5_OmXAGtqFdL6z5XvgnU-vlx6Ba6f1WJrO1ZwUle8,765
|
|
122
135
|
pixeltable/utils/transactional_directory.py,sha256=UGzCrGtLR3hEEf8sYGuWBzLVFAEQml3vdIavigWeTBM,1349
|
|
123
|
-
pixeltable-0.2.
|
|
124
|
-
pixeltable-0.2.
|
|
125
|
-
pixeltable-0.2.
|
|
126
|
-
pixeltable-0.2.
|
|
136
|
+
pixeltable-0.2.5.dist-info/LICENSE,sha256=0UNMmwuqWPC0xDY1NWMm4uNJ2_MyA1pnTNRgQTvuBiQ,746
|
|
137
|
+
pixeltable-0.2.5.dist-info/METADATA,sha256=Fl2vtfThiLTgAhZMSioMssMmq7DvnSe-7V42AfBrT7g,6081
|
|
138
|
+
pixeltable-0.2.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
139
|
+
pixeltable-0.2.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|