datachain 0.11.11__py3-none-any.whl → 0.13.0__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 datachain might be problematic. Click here for more details.
- datachain/catalog/catalog.py +39 -7
- datachain/catalog/loader.py +19 -13
- datachain/cli/__init__.py +2 -1
- datachain/cli/commands/ls.py +8 -6
- datachain/cli/commands/show.py +7 -0
- datachain/cli/parser/studio.py +13 -1
- datachain/client/fsspec.py +12 -16
- datachain/client/gcs.py +1 -1
- datachain/client/hf.py +36 -14
- datachain/client/local.py +1 -4
- datachain/client/s3.py +1 -1
- datachain/data_storage/metastore.py +6 -0
- datachain/data_storage/warehouse.py +3 -8
- datachain/dataset.py +8 -0
- datachain/error.py +0 -12
- datachain/fs/utils.py +30 -0
- datachain/func/__init__.py +5 -0
- datachain/func/func.py +2 -1
- datachain/lib/dc.py +59 -15
- datachain/lib/file.py +63 -18
- datachain/lib/image.py +30 -6
- datachain/lib/listing.py +21 -39
- datachain/lib/meta_formats.py +2 -2
- datachain/lib/signal_schema.py +65 -18
- datachain/lib/udf.py +3 -0
- datachain/lib/udf_signature.py +17 -9
- datachain/lib/video.py +7 -5
- datachain/model/bbox.py +209 -58
- datachain/model/pose.py +49 -37
- datachain/model/segment.py +22 -18
- datachain/model/ultralytics/bbox.py +9 -9
- datachain/model/ultralytics/pose.py +7 -7
- datachain/model/ultralytics/segment.py +7 -7
- datachain/model/utils.py +191 -0
- datachain/query/dataset.py +8 -2
- datachain/sql/sqlite/base.py +2 -2
- datachain/studio.py +8 -6
- datachain/utils.py +0 -16
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/METADATA +4 -2
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/RECORD +44 -42
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/WHEEL +1 -1
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/LICENSE +0 -0
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/entry_points.txt +0 -0
- {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/top_level.txt +0 -0
|
@@ -25,8 +25,8 @@ class YoloSegment(DataModel):
|
|
|
25
25
|
cls: int = Field(default=-1)
|
|
26
26
|
name: str = Field(default="")
|
|
27
27
|
confidence: float = Field(default=0)
|
|
28
|
-
box: BBox
|
|
29
|
-
segment: Segment
|
|
28
|
+
box: BBox = Field(default=BBox())
|
|
29
|
+
segment: Segment = Field(default=Segment())
|
|
30
30
|
|
|
31
31
|
@staticmethod
|
|
32
32
|
def from_result(result: "Results") -> "YoloSegment":
|
|
@@ -65,11 +65,11 @@ class YoloSegments(DataModel):
|
|
|
65
65
|
segment (list[Segments]): The segments of the segments.
|
|
66
66
|
"""
|
|
67
67
|
|
|
68
|
-
cls: list[int]
|
|
69
|
-
name: list[str]
|
|
70
|
-
confidence: list[float]
|
|
71
|
-
box: list[BBox]
|
|
72
|
-
segment: list[Segment]
|
|
68
|
+
cls: list[int] = Field(default=[])
|
|
69
|
+
name: list[str] = Field(default=[])
|
|
70
|
+
confidence: list[float] = Field(default=[])
|
|
71
|
+
box: list[BBox] = Field(default=[])
|
|
72
|
+
segment: list[Segment] = Field(default=[])
|
|
73
73
|
|
|
74
74
|
@staticmethod
|
|
75
75
|
def from_results(results: list["Results"]) -> "YoloSegments":
|
datachain/model/utils.py
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
from collections.abc import Sequence
|
|
2
|
+
from typing import Literal
|
|
3
|
+
|
|
4
|
+
BBoxType = Literal["albumentations", "coco", "voc", "yolo"]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def validate_bbox(coords: Sequence[float], *types: type) -> None:
|
|
8
|
+
"""Validate the bounding box coordinates."""
|
|
9
|
+
if not isinstance(coords, (list, tuple)):
|
|
10
|
+
raise TypeError(
|
|
11
|
+
f"Invalid bounding box coordinates: {coords}, should be a list or tuple"
|
|
12
|
+
)
|
|
13
|
+
if len(coords) != 4:
|
|
14
|
+
raise ValueError(
|
|
15
|
+
f"Invalid bounding box coordinates: {coords}, should have 4 values"
|
|
16
|
+
)
|
|
17
|
+
if any(not isinstance(c, types) for c in coords):
|
|
18
|
+
raise ValueError(
|
|
19
|
+
f"Invalid bounding box coordinates: {coords}, should be {types}"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def convert_bbox(
|
|
24
|
+
coords: Sequence[float],
|
|
25
|
+
img_size: Sequence[int],
|
|
26
|
+
source: BBoxType,
|
|
27
|
+
target: BBoxType,
|
|
28
|
+
) -> list[float]:
|
|
29
|
+
"""
|
|
30
|
+
Convert the bounding box coordinates between different formats.
|
|
31
|
+
|
|
32
|
+
Supported formats: "albumentations", "coco", "voc", "yolo".
|
|
33
|
+
|
|
34
|
+
Albumentations format represents bounding boxes as [x_min, y_min, x_max, y_max],
|
|
35
|
+
where:
|
|
36
|
+
- (x_min, y_min) are the normalized coordinates of the top-left corner.
|
|
37
|
+
- (x_max, y_max) are the normalized coordinates of the bottom-right corner.
|
|
38
|
+
|
|
39
|
+
COCO format represents bounding boxes as [x_min, y_min, width, height], where:
|
|
40
|
+
- (x_min, y_min) are the pixel coordinates of the top-left corner.
|
|
41
|
+
- width and height define the size of the bounding box in pixels.
|
|
42
|
+
|
|
43
|
+
PASCAL VOC format represents bounding boxes as [x_min, y_min, x_max, y_max], where:
|
|
44
|
+
- (x_min, y_min) are the pixel coordinates of the top-left corner.
|
|
45
|
+
- (x_max, y_max) are the pixel coordinates of the bottom-right corner.
|
|
46
|
+
|
|
47
|
+
YOLO format represents bounding boxes as [x_center, y_center, width, height], where:
|
|
48
|
+
- (x_center, y_center) are the normalized coordinates of the box center.
|
|
49
|
+
- width and height normalized values define the size of the bounding box.
|
|
50
|
+
|
|
51
|
+
Normalized coordinates are floats between 0 and 1, representing the
|
|
52
|
+
relative position of the pixels in the image.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
coords (Sequence[float]): The bounding box coordinates to convert.
|
|
56
|
+
img_size (Sequence[int]): The reference image size (width, height).
|
|
57
|
+
source (str): The source bounding box format.
|
|
58
|
+
target (str): The target bounding box format.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
list[float]: The bounding box coordinates in the target format.
|
|
62
|
+
"""
|
|
63
|
+
if source == "albumentations":
|
|
64
|
+
return [
|
|
65
|
+
round(c, 4) for c in convert_albumentations_bbox(coords, img_size, target)
|
|
66
|
+
]
|
|
67
|
+
if source == "coco":
|
|
68
|
+
return [round(c, 4) for c in convert_coco_bbox(coords, img_size, target)]
|
|
69
|
+
if source == "voc":
|
|
70
|
+
return [round(c, 4) for c in convert_voc_bbox(coords, img_size, target)]
|
|
71
|
+
if source == "yolo":
|
|
72
|
+
return [round(c, 4) for c in convert_yolo_bbox(coords, img_size, target)]
|
|
73
|
+
raise ValueError(f"Unsupported source format: {source}")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def convert_albumentations_bbox(
|
|
77
|
+
coords: Sequence[float],
|
|
78
|
+
img_size: Sequence[int],
|
|
79
|
+
target: BBoxType,
|
|
80
|
+
) -> list[float]:
|
|
81
|
+
"""Convert the Albumentations bounding box coordinates to other formats."""
|
|
82
|
+
if target == "albumentations":
|
|
83
|
+
return list(coords)
|
|
84
|
+
if target == "coco":
|
|
85
|
+
return [
|
|
86
|
+
coords[0] * img_size[0],
|
|
87
|
+
coords[1] * img_size[1],
|
|
88
|
+
(coords[2] - coords[0]) * img_size[0],
|
|
89
|
+
(coords[3] - coords[1]) * img_size[1],
|
|
90
|
+
]
|
|
91
|
+
if target == "voc":
|
|
92
|
+
return [coords[i] * img_size[i % 2] for i in range(4)]
|
|
93
|
+
if target == "yolo":
|
|
94
|
+
return [
|
|
95
|
+
(coords[0] + coords[2]) / 2,
|
|
96
|
+
(coords[1] + coords[3]) / 2,
|
|
97
|
+
coords[2] - coords[0],
|
|
98
|
+
coords[3] - coords[1],
|
|
99
|
+
]
|
|
100
|
+
raise ValueError(f"Unsupported target format: {target}")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def convert_coco_bbox(
|
|
104
|
+
coords: Sequence[float],
|
|
105
|
+
img_size: Sequence[int],
|
|
106
|
+
target: BBoxType,
|
|
107
|
+
) -> list[float]:
|
|
108
|
+
"""Convert the COCO bounding box coordinates to other formats."""
|
|
109
|
+
if target == "albumentations":
|
|
110
|
+
return [
|
|
111
|
+
coords[0] / img_size[0],
|
|
112
|
+
coords[1] / img_size[1],
|
|
113
|
+
(coords[0] + coords[2]) / img_size[0],
|
|
114
|
+
(coords[1] + coords[3]) / img_size[1],
|
|
115
|
+
]
|
|
116
|
+
if target == "coco":
|
|
117
|
+
return list(coords)
|
|
118
|
+
if target == "voc":
|
|
119
|
+
return [coords[0], coords[1], coords[0] + coords[2], coords[1] + coords[3]]
|
|
120
|
+
if target == "yolo":
|
|
121
|
+
return [
|
|
122
|
+
(coords[0] + coords[2] / 2) / img_size[0],
|
|
123
|
+
(coords[1] + coords[3] / 2) / img_size[1],
|
|
124
|
+
coords[2] / img_size[0],
|
|
125
|
+
coords[3] / img_size[1],
|
|
126
|
+
]
|
|
127
|
+
raise ValueError(f"Unsupported target format: {target}")
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def convert_voc_bbox(
|
|
131
|
+
coords: Sequence[float],
|
|
132
|
+
img_size: Sequence[int],
|
|
133
|
+
target: BBoxType,
|
|
134
|
+
) -> list[float]:
|
|
135
|
+
"""Convert the PASCAL VOC bounding box coordinates to other formats."""
|
|
136
|
+
if target == "albumentations":
|
|
137
|
+
return [
|
|
138
|
+
coords[0] / img_size[0],
|
|
139
|
+
coords[1] / img_size[1],
|
|
140
|
+
coords[2] / img_size[0],
|
|
141
|
+
coords[3] / img_size[1],
|
|
142
|
+
]
|
|
143
|
+
if target == "coco":
|
|
144
|
+
return [
|
|
145
|
+
coords[0],
|
|
146
|
+
coords[1],
|
|
147
|
+
coords[2] - coords[0],
|
|
148
|
+
coords[3] - coords[1],
|
|
149
|
+
]
|
|
150
|
+
if target == "voc":
|
|
151
|
+
return list(coords)
|
|
152
|
+
if target == "yolo":
|
|
153
|
+
return [
|
|
154
|
+
(coords[0] + coords[2]) / 2 / img_size[0],
|
|
155
|
+
(coords[1] + coords[3]) / 2 / img_size[1],
|
|
156
|
+
(coords[2] - coords[0]) / img_size[0],
|
|
157
|
+
(coords[3] - coords[1]) / img_size[1],
|
|
158
|
+
]
|
|
159
|
+
raise ValueError(f"Unsupported target format: {target}")
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def convert_yolo_bbox(
|
|
163
|
+
coords: Sequence[float],
|
|
164
|
+
img_size: Sequence[int],
|
|
165
|
+
target: BBoxType,
|
|
166
|
+
) -> list[float]:
|
|
167
|
+
"""Convert the YOLO bounding box coordinates to other formats."""
|
|
168
|
+
if target == "albumentations":
|
|
169
|
+
return [
|
|
170
|
+
coords[0] - coords[2] / 2,
|
|
171
|
+
coords[1] - coords[3] / 2,
|
|
172
|
+
coords[0] + coords[2] / 2,
|
|
173
|
+
coords[1] + coords[3] / 2,
|
|
174
|
+
]
|
|
175
|
+
if target == "coco":
|
|
176
|
+
return [
|
|
177
|
+
(coords[0] - coords[2] / 2) * img_size[0],
|
|
178
|
+
(coords[1] - coords[3] / 2) * img_size[1],
|
|
179
|
+
coords[2] * img_size[0],
|
|
180
|
+
coords[3] * img_size[1],
|
|
181
|
+
]
|
|
182
|
+
if target == "voc":
|
|
183
|
+
return [
|
|
184
|
+
(coords[0] - coords[2] / 2) * img_size[0],
|
|
185
|
+
(coords[1] - coords[3] / 2) * img_size[1],
|
|
186
|
+
(coords[0] + coords[2] / 2) * img_size[0],
|
|
187
|
+
(coords[1] + coords[3] / 2) * img_size[1],
|
|
188
|
+
]
|
|
189
|
+
if target == "yolo":
|
|
190
|
+
return list(coords)
|
|
191
|
+
raise ValueError(f"Unsupported target format: {target}")
|
datachain/query/dataset.py
CHANGED
|
@@ -22,7 +22,6 @@ from typing import (
|
|
|
22
22
|
)
|
|
23
23
|
|
|
24
24
|
import attrs
|
|
25
|
-
import psutil
|
|
26
25
|
import sqlalchemy
|
|
27
26
|
import sqlalchemy as sa
|
|
28
27
|
from attrs import frozen
|
|
@@ -52,7 +51,6 @@ from datachain.lib.udf import UDFAdapter, _get_cache
|
|
|
52
51
|
from datachain.progress import CombinedDownloadCallback, TqdmCombinedDownloadCallback
|
|
53
52
|
from datachain.query.schema import C, UDFParamSpec, normalize_param
|
|
54
53
|
from datachain.query.session import Session
|
|
55
|
-
from datachain.remote.studio import is_token_set
|
|
56
54
|
from datachain.sql.functions.random import rand
|
|
57
55
|
from datachain.utils import (
|
|
58
56
|
batched,
|
|
@@ -333,6 +331,8 @@ def process_udf_outputs(
|
|
|
333
331
|
batch_size: int = INSERT_BATCH_SIZE,
|
|
334
332
|
cb: Callback = DEFAULT_CALLBACK,
|
|
335
333
|
) -> None:
|
|
334
|
+
import psutil
|
|
335
|
+
|
|
336
336
|
rows: list[UDFResult] = []
|
|
337
337
|
# Optimization: Compute row types once, rather than for every row.
|
|
338
338
|
udf_col_types = get_udf_col_types(warehouse, udf)
|
|
@@ -1087,6 +1087,8 @@ class DatasetQuery:
|
|
|
1087
1087
|
in_memory: bool = False,
|
|
1088
1088
|
fallback_to_studio: bool = True,
|
|
1089
1089
|
) -> None:
|
|
1090
|
+
from datachain.remote.studio import is_token_set
|
|
1091
|
+
|
|
1090
1092
|
self.session = Session.get(session, catalog=catalog, in_memory=in_memory)
|
|
1091
1093
|
self.catalog = catalog or self.session.catalog
|
|
1092
1094
|
self.steps: list[Step] = []
|
|
@@ -1644,6 +1646,8 @@ class DatasetQuery:
|
|
|
1644
1646
|
name: Optional[str] = None,
|
|
1645
1647
|
version: Optional[int] = None,
|
|
1646
1648
|
feature_schema: Optional[dict] = None,
|
|
1649
|
+
description: Optional[str] = None,
|
|
1650
|
+
labels: Optional[list[str]] = None,
|
|
1647
1651
|
**kwargs,
|
|
1648
1652
|
) -> "Self":
|
|
1649
1653
|
"""Save the query as a dataset."""
|
|
@@ -1676,6 +1680,8 @@ class DatasetQuery:
|
|
|
1676
1680
|
version=version,
|
|
1677
1681
|
feature_schema=feature_schema,
|
|
1678
1682
|
columns=columns,
|
|
1683
|
+
description=description,
|
|
1684
|
+
labels=labels,
|
|
1679
1685
|
**kwargs,
|
|
1680
1686
|
)
|
|
1681
1687
|
version = version or dataset.latest_version
|
datachain/sql/sqlite/base.py
CHANGED
|
@@ -290,9 +290,9 @@ def adapt_datetime(val: datetime) -> str:
|
|
|
290
290
|
val = val.astimezone(timezone.utc)
|
|
291
291
|
except (OverflowError, ValueError, OSError):
|
|
292
292
|
if val.year == MAXYEAR:
|
|
293
|
-
val = datetime.max
|
|
293
|
+
val = datetime.max.replace(tzinfo=timezone.utc)
|
|
294
294
|
elif val.year == MINYEAR:
|
|
295
|
-
val = datetime.min
|
|
295
|
+
val = datetime.min.replace(tzinfo=timezone.utc)
|
|
296
296
|
else:
|
|
297
297
|
raise
|
|
298
298
|
return val.replace(tzinfo=None).isoformat(" ")
|
datachain/studio.py
CHANGED
|
@@ -57,7 +57,7 @@ def process_auth_cli_args(args: "Namespace"):
|
|
|
57
57
|
if args.cmd == "login":
|
|
58
58
|
return login(args)
|
|
59
59
|
if args.cmd == "logout":
|
|
60
|
-
return logout()
|
|
60
|
+
return logout(args.local)
|
|
61
61
|
if args.cmd == "token":
|
|
62
62
|
return token()
|
|
63
63
|
|
|
@@ -110,13 +110,15 @@ def login(args: "Namespace"):
|
|
|
110
110
|
except StudioAuthError as exc:
|
|
111
111
|
raise DataChainError(f"Failed to authenticate with Studio: {exc}") from exc
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
level = ConfigLevel.LOCAL if args.local else ConfigLevel.GLOBAL
|
|
114
|
+
config_path = save_config(hostname, access_token, level=level)
|
|
114
115
|
print(f"Authentication complete. Saved token to {config_path}.")
|
|
115
116
|
return 0
|
|
116
117
|
|
|
117
118
|
|
|
118
|
-
def logout():
|
|
119
|
-
|
|
119
|
+
def logout(local: bool = False):
|
|
120
|
+
level = ConfigLevel.LOCAL if local else ConfigLevel.GLOBAL
|
|
121
|
+
with Config(level).edit() as conf:
|
|
120
122
|
token = conf.get("studio", {}).get("token")
|
|
121
123
|
if not token:
|
|
122
124
|
raise DataChainError(
|
|
@@ -209,8 +211,8 @@ def remove_studio_dataset(
|
|
|
209
211
|
print(f"Dataset '{name}' removed from Studio")
|
|
210
212
|
|
|
211
213
|
|
|
212
|
-
def save_config(hostname, token):
|
|
213
|
-
config = Config(
|
|
214
|
+
def save_config(hostname, token, level=ConfigLevel.GLOBAL):
|
|
215
|
+
config = Config(level)
|
|
214
216
|
with config.edit() as conf:
|
|
215
217
|
studio_conf = conf.get("studio", {})
|
|
216
218
|
studio_conf["url"] = hostname
|
datachain/utils.py
CHANGED
|
@@ -6,7 +6,6 @@ import os
|
|
|
6
6
|
import os.path as osp
|
|
7
7
|
import random
|
|
8
8
|
import re
|
|
9
|
-
import stat
|
|
10
9
|
import sys
|
|
11
10
|
import time
|
|
12
11
|
from collections.abc import Iterable, Iterator, Sequence
|
|
@@ -193,14 +192,6 @@ def suffix_to_number(num_str: str) -> int:
|
|
|
193
192
|
raise ValueError(f"Invalid number/suffix for: {num_str}") from None
|
|
194
193
|
|
|
195
194
|
|
|
196
|
-
def force_create_dir(name):
|
|
197
|
-
if not os.path.exists(name):
|
|
198
|
-
os.mkdir(name)
|
|
199
|
-
elif not os.path.isdir(name):
|
|
200
|
-
os.remove(name)
|
|
201
|
-
os.mkdir(name)
|
|
202
|
-
|
|
203
|
-
|
|
204
195
|
def datachain_paths_join(source_path: str, file_paths: Iterable[str]) -> Iterable[str]:
|
|
205
196
|
source_parts = source_path.rstrip("/").split("/")
|
|
206
197
|
if glob.has_magic(source_parts[-1]):
|
|
@@ -210,13 +201,6 @@ def datachain_paths_join(source_path: str, file_paths: Iterable[str]) -> Iterabl
|
|
|
210
201
|
return (f"{source_stripped}/{path.lstrip('/')}" for path in file_paths)
|
|
211
202
|
|
|
212
203
|
|
|
213
|
-
# From: https://docs.python.org/3/library/shutil.html#rmtree-example
|
|
214
|
-
def remove_readonly(func, path, _):
|
|
215
|
-
"Clear the readonly bit and reattempt the removal"
|
|
216
|
-
os.chmod(path, stat.S_IWRITE)
|
|
217
|
-
func(path)
|
|
218
|
-
|
|
219
|
-
|
|
220
204
|
def sql_escape_like(search: str, escape: str = "\\") -> str:
|
|
221
205
|
return (
|
|
222
206
|
search.replace(escape, escape * 2)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: datachain
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: Wrangle unstructured AI data at scale
|
|
5
5
|
Author-email: Dmitry Petrov <support@dvc.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -71,6 +71,7 @@ Requires-Dist: usearch; extra == "vector"
|
|
|
71
71
|
Provides-Extra: hf
|
|
72
72
|
Requires-Dist: numba>=0.60.0; extra == "hf"
|
|
73
73
|
Requires-Dist: datasets[audio,vision]>=2.21.0; extra == "hf"
|
|
74
|
+
Requires-Dist: fsspec>=2024.12.0; extra == "hf"
|
|
74
75
|
Provides-Extra: video
|
|
75
76
|
Requires-Dist: ffmpeg-python; extra == "video"
|
|
76
77
|
Requires-Dist: imageio[ffmpeg,pyav]>=2.37.0; extra == "video"
|
|
@@ -90,6 +91,7 @@ Requires-Dist: hypothesis; extra == "tests"
|
|
|
90
91
|
Requires-Dist: aiotools>=1.7.0; extra == "tests"
|
|
91
92
|
Requires-Dist: requests-mock; extra == "tests"
|
|
92
93
|
Requires-Dist: scipy; extra == "tests"
|
|
94
|
+
Requires-Dist: ultralytics; extra == "tests"
|
|
93
95
|
Provides-Extra: dev
|
|
94
96
|
Requires-Dist: datachain[docs,tests]; extra == "dev"
|
|
95
97
|
Requires-Dist: mypy==1.15.0; extra == "dev"
|
|
@@ -103,7 +105,7 @@ Requires-Dist: datachain[tests]; extra == "examples"
|
|
|
103
105
|
Requires-Dist: defusedxml; extra == "examples"
|
|
104
106
|
Requires-Dist: accelerate; extra == "examples"
|
|
105
107
|
Requires-Dist: huggingface_hub[hf_transfer]; extra == "examples"
|
|
106
|
-
Requires-Dist: ultralytics
|
|
108
|
+
Requires-Dist: ultralytics; extra == "examples"
|
|
107
109
|
Requires-Dist: open_clip_torch; extra == "examples"
|
|
108
110
|
|
|
109
111
|
================
|
|
@@ -3,8 +3,8 @@ datachain/__main__.py,sha256=hG3Y4ARGEqe1AWwNMd259rBlqtphx1Wk39YbueQ0yV8,91
|
|
|
3
3
|
datachain/asyn.py,sha256=RH_jFwJcTXxhEFomaI9yL6S3Onau6NZ6FSKfKFGtrJE,9689
|
|
4
4
|
datachain/cache.py,sha256=yQblPhOh_Mq74Ma7xT1CL1idLJ0HgrQxpGVYvRy_9Eg,3623
|
|
5
5
|
datachain/config.py,sha256=g8qbNV0vW2VEKpX-dGZ9pAn0DAz6G2ZFcr7SAV3PoSM,4272
|
|
6
|
-
datachain/dataset.py,sha256=
|
|
7
|
-
datachain/error.py,sha256=
|
|
6
|
+
datachain/dataset.py,sha256=ZfgsGlddTXsSqCohNSRSChdH6Jjw7wrkso1Am166k-M,19391
|
|
7
|
+
datachain/error.py,sha256=bxAAL32lSeMgzsQDEHbGTGORj-mPzzpCRvWDPueJNN4,1092
|
|
8
8
|
datachain/job.py,sha256=x5PB6d5sqx00hePNNkirESlOVAvnmkEM5ygUgQmAhsk,1262
|
|
9
9
|
datachain/listing.py,sha256=HNB-xeKA6aUA-HTWr--H22S6jVOxP2OVQ-3d07ISqAk,7109
|
|
10
10
|
datachain/node.py,sha256=KWDT0ClYXB7FYI-QOvzAa-UDkLJErUI2eWm5FBteYuU,5577
|
|
@@ -13,52 +13,53 @@ datachain/nodes_thread_pool.py,sha256=mdo0s-VybuSZkRUARcUO4Tjh8KFfZr9foHqmupx2Sm
|
|
|
13
13
|
datachain/progress.py,sha256=lRzxoYP4Qv2XBwD78sOkmYRzHFpZ2ExVNJF8wAeICtY,770
|
|
14
14
|
datachain/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
datachain/script_meta.py,sha256=V-LaFOZG84pD0Zc0NvejYdzwDgzITv6yHvAHggDCnuY,4978
|
|
16
|
-
datachain/studio.py,sha256=
|
|
16
|
+
datachain/studio.py,sha256=9MEpFPLKI3gG4isKklcfD5BMLeNsSXhtOUboOjW4Fdc,10017
|
|
17
17
|
datachain/telemetry.py,sha256=0A4IOPPp9VlP5pyW9eBfaTK3YhHGzHl7dQudQjUAx9A,994
|
|
18
|
-
datachain/utils.py,sha256
|
|
18
|
+
datachain/utils.py,sha256=CLAYkI7iPbLYw3Pjh5EkWuc2UOs8wEbuXQnqIs4UyV8,14173
|
|
19
19
|
datachain/catalog/__init__.py,sha256=cMZzSz3VoUi-6qXSVaHYN-agxQuAcz2XSqnEPZ55crE,353
|
|
20
|
-
datachain/catalog/catalog.py,sha256=
|
|
20
|
+
datachain/catalog/catalog.py,sha256=IJSTXHFf2jqkHq2zXLvKzSUwJE9-Tu5YpY_SvcGymgI,60401
|
|
21
21
|
datachain/catalog/datasource.py,sha256=IkGMh0Ttg6Q-9DWfU_H05WUnZepbGa28HYleECi6K7I,1353
|
|
22
|
-
datachain/catalog/loader.py,sha256=
|
|
23
|
-
datachain/cli/__init__.py,sha256=
|
|
22
|
+
datachain/catalog/loader.py,sha256=AhSQR_-S-9lY3DcXn3PVZv9UtarHOMlDy2x75iDwUjo,6035
|
|
23
|
+
datachain/cli/__init__.py,sha256=YPVkuQ7IezNhtzo5xrfca1hEIiZtFxOlJCOzAOEuxmA,8335
|
|
24
24
|
datachain/cli/utils.py,sha256=wrLnAh7Wx8O_ojZE8AE4Lxn5WoxHbOj7as8NWlLAA74,3036
|
|
25
25
|
datachain/cli/commands/__init__.py,sha256=zp3bYIioO60x_X04A4-IpZqSYVnpwOa1AdERQaRlIhI,493
|
|
26
26
|
datachain/cli/commands/datasets.py,sha256=865ui6q4UVPbL_-jk18C-lYi_bGMlh7XhfRaHbbNyhk,5796
|
|
27
27
|
datachain/cli/commands/du.py,sha256=9edEzDEs98K2VYk8Wf-ZMpUzALcgm9uD6YtoqbvtUGU,391
|
|
28
28
|
datachain/cli/commands/index.py,sha256=eglNaIe1yyIadUHHumjtNbgIjht6kme7SS7xE3YHR88,198
|
|
29
|
-
datachain/cli/commands/ls.py,sha256=
|
|
29
|
+
datachain/cli/commands/ls.py,sha256=7yVSRzhmocnnaAXgim4NzrzEymwpLTJjhXq5EATFwsU,5286
|
|
30
30
|
datachain/cli/commands/misc.py,sha256=c0DmkOLwcDI2YhA8ArOuLJk6aGzSMZCiKL_E2JGibVE,600
|
|
31
31
|
datachain/cli/commands/query.py,sha256=2S7hQxialt1fkbocxi6JXZI6jS5QnFrD1aOjKgZkzfI,1471
|
|
32
|
-
datachain/cli/commands/show.py,sha256=
|
|
32
|
+
datachain/cli/commands/show.py,sha256=0ITkA7wvBPfEKM1K6uE0aage38WVsy1QXi6NS8VeSJw,1643
|
|
33
33
|
datachain/cli/parser/__init__.py,sha256=rtjlqSsDd4LZH9WdgvluO27M4sID1wD7YkQ4cKhNXzw,15721
|
|
34
34
|
datachain/cli/parser/job.py,sha256=kvQkSfieyUmvJpOK8p78UgS8sygHhQXztRlOtVcgtaU,3449
|
|
35
|
-
datachain/cli/parser/studio.py,sha256=
|
|
35
|
+
datachain/cli/parser/studio.py,sha256=Y-1OlQGecLVi9QofvWUfSlPd2ISyaESf7QFGZqGsrdw,3609
|
|
36
36
|
datachain/cli/parser/utils.py,sha256=rETdD-9Hq9A4OolgfT7jQw4aoawtbfmkdtH6E7nkhpI,2888
|
|
37
37
|
datachain/client/__init__.py,sha256=1kDpCPoibMXi1gExR4lTLc5pi-k6M5TANiwtXkPoLhU,49
|
|
38
38
|
datachain/client/azure.py,sha256=ma6fJcnveG8wpNy1PSrN5hgvmRdCj8Sf3RKjfd3qCyM,3221
|
|
39
39
|
datachain/client/fileslice.py,sha256=bT7TYco1Qe3bqoc8aUkUZcPdPofJDHlryL5BsTn9xsY,3021
|
|
40
|
-
datachain/client/fsspec.py,sha256=
|
|
41
|
-
datachain/client/gcs.py,sha256=
|
|
42
|
-
datachain/client/hf.py,sha256=
|
|
43
|
-
datachain/client/local.py,sha256=
|
|
44
|
-
datachain/client/s3.py,sha256=
|
|
40
|
+
datachain/client/fsspec.py,sha256=VutCpF8MDisDwdnJvJpiTuDU9BRRAa0Km3ZkD0sKaI0,13834
|
|
41
|
+
datachain/client/gcs.py,sha256=tepsstv-6WkkJ16SVXIPKPlWdNyFlTqrUlDwulWlWGQ,5116
|
|
42
|
+
datachain/client/hf.py,sha256=posnI5WOKOMG1yY_ZiV9Orcd24QsUPKZlOXgJVLxxrM,1558
|
|
43
|
+
datachain/client/local.py,sha256=cGoCYflribzexiOe-Y1qbaE2fJRh-_EgQrfCSa0yK_E,4568
|
|
44
|
+
datachain/client/s3.py,sha256=YCtDhKVO_jGsMPeyqe3xk5QsF5lqMabqkt0tPFWUHOM,7286
|
|
45
45
|
datachain/data_storage/__init__.py,sha256=9Wit-oe5P46V7CJQTD0BJ5MhOa2Y9h3ddJ4VWTe-Lec,273
|
|
46
46
|
datachain/data_storage/db_engine.py,sha256=n8ojCbvVMPY2e3SG8fUaaD0b9GkVfpl_Naa_6EiHfWg,3788
|
|
47
47
|
datachain/data_storage/job.py,sha256=w-7spowjkOa1P5fUVtJou3OltT0L48P0RYWZ9rSJ9-s,383
|
|
48
|
-
datachain/data_storage/metastore.py,sha256=
|
|
48
|
+
datachain/data_storage/metastore.py,sha256=19LP15xT2Fmz0aIZ1sIajq8i1-KnFgCBEZeU2Ka9-mc,37780
|
|
49
49
|
datachain/data_storage/schema.py,sha256=qSukry2kINhVw8aj5lQrpe7N90DFeatKIKmDh6jAzR8,9515
|
|
50
50
|
datachain/data_storage/serializer.py,sha256=6G2YtOFqqDzJf1KbvZraKGXl2XHZyVml2krunWUum5o,927
|
|
51
51
|
datachain/data_storage/sqlite.py,sha256=KJ8hI0Hrwv9eAA-nLUlw2AYCQxiAAZ12a-ftUBtroNQ,24545
|
|
52
|
-
datachain/data_storage/warehouse.py,sha256=
|
|
52
|
+
datachain/data_storage/warehouse.py,sha256=GGtgHcOKjnvHN6CFkGGB8m4CFgPPJBo3f-KHEFEJmDc,30730
|
|
53
53
|
datachain/diff/__init__.py,sha256=xSbJtmj-oawXQ2qfdGtfnVsfXV7KhdkQKC9bG_5lA2k,9256
|
|
54
54
|
datachain/fs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
55
|
datachain/fs/reference.py,sha256=A8McpXF0CqbXPqanXuvpKu50YLB3a2ZXA3YAPxtBXSM,914
|
|
56
|
-
datachain/
|
|
56
|
+
datachain/fs/utils.py,sha256=s-FkTOCGBk-b6TT3toQH51s9608pofoFjUSTc1yy7oE,825
|
|
57
|
+
datachain/func/__init__.py,sha256=CjNLHfJkepdXdRZ6HjJBjNSIjOeFMuMkwPDaPUrM75g,1270
|
|
57
58
|
datachain/func/aggregate.py,sha256=7_IPrIwb2XSs3zG4iOr1eTvzn6kNVe2mkzvNzjusDHk,10942
|
|
58
59
|
datachain/func/array.py,sha256=O784_uwmaP5CjZX4VSF4RmS8cmpaForQc8zASxHJB6A,6717
|
|
59
60
|
datachain/func/base.py,sha256=wA0sBQAVyN9LPxoo7Ox83peS0zUVnyuKxukwAcjGLfY,534
|
|
60
61
|
datachain/func/conditional.py,sha256=HkNamQr9dLyIMDEbIeO6CZR0emQoDqeaWrZ1fECod4M,8062
|
|
61
|
-
datachain/func/func.py,sha256=
|
|
62
|
+
datachain/func/func.py,sha256=k8z5tIiabEOPymYWGfz4O7z1qS6zBZnVYRPp_58iU7c,16192
|
|
62
63
|
datachain/func/numeric.py,sha256=gMe1Ks0dqQKHkjcpvj7I5S-neECzQ_gltPQLNoaWOyo,5632
|
|
63
64
|
datachain/func/path.py,sha256=mqN_mfkwv44z2II7DMTp_fGGw95hmTCNls_TOFNpr4k,3155
|
|
64
65
|
datachain/func/random.py,sha256=pENOLj9rSmWfGCnOsUIaCsVC5486zQb66qfQvXaz9Z4,452
|
|
@@ -69,23 +70,23 @@ datachain/lib/arrow.py,sha256=9UBCF-lftQaz0yxdsjbLKbyzVSmrF_QSWdhp2oBDPqs,9486
|
|
|
69
70
|
datachain/lib/clip.py,sha256=lm5CzVi4Cj1jVLEKvERKArb-egb9j1Ls-fwTItT6vlI,6150
|
|
70
71
|
datachain/lib/data_model.py,sha256=ZwBXELtqROEdLL4DmxTipnwUZmhQvMz_UVDzyf7nQ9Y,2899
|
|
71
72
|
datachain/lib/dataset_info.py,sha256=IjdF1E0TQNOq9YyynfWiCFTeZpbyGfyJvxgJY4YN810,2493
|
|
72
|
-
datachain/lib/dc.py,sha256=
|
|
73
|
-
datachain/lib/file.py,sha256=
|
|
73
|
+
datachain/lib/dc.py,sha256=fNIVsAU5_uPbjQhIjoXfEDEF7eImh0cqtIl39CI5sKs,99457
|
|
74
|
+
datachain/lib/file.py,sha256=HLQXS_WULm7Y-fkHMy0WpibVAcrkLPRS6CrZy6rwFe0,30450
|
|
74
75
|
datachain/lib/hf.py,sha256=gjxuStZBlKtNk3-4yYSlWZDv9zBGblOdvEy_Lwap5hA,5882
|
|
75
|
-
datachain/lib/image.py,sha256=
|
|
76
|
-
datachain/lib/listing.py,sha256=
|
|
76
|
+
datachain/lib/image.py,sha256=butvUY_33PVEYPKX2nVCPeJjJVcBaptZwsE9REQsTS8,3247
|
|
77
|
+
datachain/lib/listing.py,sha256=xrgsd1_YLLiA69LnwK56oZwe0RXTBCDicGzhavF_2AQ,6665
|
|
77
78
|
datachain/lib/listing_info.py,sha256=9ua40Hw0aiQByUw3oAEeNzMavJYfW0Uhe8YdCTK-m_g,1110
|
|
78
|
-
datachain/lib/meta_formats.py,sha256=
|
|
79
|
+
datachain/lib/meta_formats.py,sha256=xEYlfN6XgiOgrqhY2kVlvK3xlo5nT3nuVrH111XMOrg,6385
|
|
79
80
|
datachain/lib/model_store.py,sha256=DNIv8Y6Jtk1_idNLzIpsThOsdW2BMAudyUCbPUcgcxk,2515
|
|
80
81
|
datachain/lib/pytorch.py,sha256=QxXBhrn2-D0RiFA2rdxZ7wKMxyuQ0WWHKfiFEWAA760,7710
|
|
81
82
|
datachain/lib/settings.py,sha256=ZELRCTLbi5vzRPiDX6cQ9LLg9TefJ_A05gIGni0lll8,2535
|
|
82
|
-
datachain/lib/signal_schema.py,sha256=
|
|
83
|
+
datachain/lib/signal_schema.py,sha256=DRatqSG7OVtCUCWyZvMXe4m7r7XFO6NCfzsJRDErMtg,35185
|
|
83
84
|
datachain/lib/tar.py,sha256=3WIzao6yD5fbLqXLTt9GhPGNonbFIs_fDRu-9vgLgsA,1038
|
|
84
85
|
datachain/lib/text.py,sha256=UNHm8fhidk7wdrWqacEWaA6I9ykfYqarQ2URby7jc7M,1261
|
|
85
|
-
datachain/lib/udf.py,sha256=
|
|
86
|
-
datachain/lib/udf_signature.py,sha256=
|
|
86
|
+
datachain/lib/udf.py,sha256=4_mdcWNkyukbDjqBNszlIrZLQyl_dPVQxhKwb_iDtQQ,16192
|
|
87
|
+
datachain/lib/udf_signature.py,sha256=2EtsOPDNSPqcOlYwqbCdy6RF5MldI-7smii8aLy8p7Y,7543
|
|
87
88
|
datachain/lib/utils.py,sha256=QrjVs_oLRXEotOPUYurBJypBFi_ReTJmxcnJeH4j2Uk,1596
|
|
88
|
-
datachain/lib/video.py,sha256=
|
|
89
|
+
datachain/lib/video.py,sha256=suH_8Mi8VYk4-IVb1vjSduF_njs64ji1WGKHxDLnGYw,6629
|
|
89
90
|
datachain/lib/webdataset.py,sha256=o7SHk5HOUWsZ5Ln04xOM04eQqiBHiJNO7xLgyVBrwo8,6924
|
|
90
91
|
datachain/lib/webdataset_laion.py,sha256=xvT6m_r5y0KbOx14BUe7UC5mOgrktJq53Mh-H0EVlUE,2525
|
|
91
92
|
datachain/lib/convert/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -95,16 +96,17 @@ datachain/lib/convert/sql_to_python.py,sha256=XXCBYDQFUXJIBNWkjEP944cnCfJ8GF2Tji
|
|
|
95
96
|
datachain/lib/convert/unflatten.py,sha256=ysMkstwJzPMWUlnxn-Z-tXJR3wmhjHeSN_P-sDcLS6s,2010
|
|
96
97
|
datachain/lib/convert/values_to_tuples.py,sha256=EFfIGBiVVltJQG8blzsQ1dGXneh4D3wdLfSUeoK10OI,3931
|
|
97
98
|
datachain/model/__init__.py,sha256=R9faX5OHV1xh2EW-g2MPedwbtEqt3LodJRyluB-QylI,189
|
|
98
|
-
datachain/model/bbox.py,sha256=
|
|
99
|
-
datachain/model/pose.py,sha256=
|
|
100
|
-
datachain/model/segment.py,sha256=
|
|
99
|
+
datachain/model/bbox.py,sha256=cQNHuQuVsh6bW3n3Hj40F2Cc20cExQ9Lg_q7R2jxUMI,9324
|
|
100
|
+
datachain/model/pose.py,sha256=rjquA6M-I-Y30Xm6YSkGv1OY52hJZmR2AuxbIpE5uD0,3865
|
|
101
|
+
datachain/model/segment.py,sha256=NhcEYB_KVa0aLQYiZ4jEwkylH9QBLd8fZhmg6PVnx1Y,1967
|
|
102
|
+
datachain/model/utils.py,sha256=5elwCKleOO6CZM0IuWjFykPekrhc5m7V4jSIOcgGMms,6733
|
|
101
103
|
datachain/model/ultralytics/__init__.py,sha256=EvcNX9qUyxKXXlKCPpsXeRrabyXk5E9EkN-tyiYkfS4,750
|
|
102
|
-
datachain/model/ultralytics/bbox.py,sha256=
|
|
103
|
-
datachain/model/ultralytics/pose.py,sha256=
|
|
104
|
-
datachain/model/ultralytics/segment.py,sha256=
|
|
104
|
+
datachain/model/ultralytics/bbox.py,sha256=1wnu3tXQn3i-047pncfHyCdKxHdP7MJDI1DXqzVc9ms,4500
|
|
105
|
+
datachain/model/ultralytics/pose.py,sha256=gXAWfAk4OWZl93hKcQPKZvqJa3nIrECB4RM8K8w8Og0,3109
|
|
106
|
+
datachain/model/ultralytics/segment.py,sha256=koq1HASo29isf0in6oSlzmU4IzsmOXe87F1ajQQVfh4,2911
|
|
105
107
|
datachain/query/__init__.py,sha256=7DhEIjAA8uZJfejruAVMZVcGFmvUpffuZJwgRqNwe-c,263
|
|
106
108
|
datachain/query/batch.py,sha256=6w8gzLTmLeylststu-gT5jIqEfi4-djS7_yTYyeo-fw,4190
|
|
107
|
-
datachain/query/dataset.py,sha256=
|
|
109
|
+
datachain/query/dataset.py,sha256=J3NgcrzSP2dFg8JVqDodyBh1QEia_B-alcyfI3xKlZE,57256
|
|
108
110
|
datachain/query/dispatch.py,sha256=_1vjeQ1wjUoxlik55k0JkWqQCUfMjgVWmEOyWRkx0dU,12437
|
|
109
111
|
datachain/query/metrics.py,sha256=r5b0ygYhokbXp8Mg3kCH8iFSRw0jxzyeBe-C-J_bKFc,938
|
|
110
112
|
datachain/query/params.py,sha256=O_j89mjYRLOwWNhYZl-z7mi-rkdP7WyFmaDufsdTryE,863
|
|
@@ -130,15 +132,15 @@ datachain/sql/functions/path.py,sha256=zixpERotTFP6LZ7I4TiGtyRA8kXOoZmH1yzH9oRW0
|
|
|
130
132
|
datachain/sql/functions/random.py,sha256=vBwEEj98VH4LjWixUCygQ5Bz1mv1nohsCG0-ZTELlVg,271
|
|
131
133
|
datachain/sql/functions/string.py,sha256=E-T9OIzUR-GKaLgjZsEtg5CJrY_sLf1lt1awTvY7w2w,1426
|
|
132
134
|
datachain/sql/sqlite/__init__.py,sha256=TAdJX0Bg28XdqPO-QwUVKy8rg78cgMileHvMNot7d04,166
|
|
133
|
-
datachain/sql/sqlite/base.py,sha256=
|
|
135
|
+
datachain/sql/sqlite/base.py,sha256=N-cQT0Hpu9ROWe4OiKlkkn_YP1NKCRZZ3xSfTzpyaDA,19651
|
|
134
136
|
datachain/sql/sqlite/types.py,sha256=cH6oge2E_YWFy22wY-txPJH8gxoQFSpCthtZR8PZjpo,1849
|
|
135
137
|
datachain/sql/sqlite/vector.py,sha256=ncW4eu2FlJhrP_CIpsvtkUabZlQdl2D5Lgwy_cbfqR0,469
|
|
136
138
|
datachain/toolkit/__init__.py,sha256=eQ58Q5Yf_Fgv1ZG0IO5dpB4jmP90rk8YxUWmPc1M2Bo,68
|
|
137
139
|
datachain/toolkit/split.py,sha256=z3zRJNzjWrpPuRw-zgFbCOBKInyYxJew8ygrYQRQLNc,2930
|
|
138
140
|
datachain/torch/__init__.py,sha256=gIS74PoEPy4TB3X6vx9nLO0Y3sLJzsA8ckn8pRWihJM,579
|
|
139
|
-
datachain-0.
|
|
140
|
-
datachain-0.
|
|
141
|
-
datachain-0.
|
|
142
|
-
datachain-0.
|
|
143
|
-
datachain-0.
|
|
144
|
-
datachain-0.
|
|
141
|
+
datachain-0.13.0.dist-info/LICENSE,sha256=8DnqK5yoPI_E50bEg_zsHKZHY2HqPy4rYN338BHQaRA,11344
|
|
142
|
+
datachain-0.13.0.dist-info/METADATA,sha256=4pdyj_HTlLLYZXfamUuBrMipFviwUfZ3vjzAvEOI-10,11351
|
|
143
|
+
datachain-0.13.0.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
|
|
144
|
+
datachain-0.13.0.dist-info/entry_points.txt,sha256=0GMJS6B_KWq0m3VT98vQI2YZodAMkn4uReZ_okga9R4,49
|
|
145
|
+
datachain-0.13.0.dist-info/top_level.txt,sha256=lZPpdU_2jJABLNIg2kvEOBi8PtsYikbN1OdMLHk8bTg,10
|
|
146
|
+
datachain-0.13.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|