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.

Files changed (44) hide show
  1. datachain/catalog/catalog.py +39 -7
  2. datachain/catalog/loader.py +19 -13
  3. datachain/cli/__init__.py +2 -1
  4. datachain/cli/commands/ls.py +8 -6
  5. datachain/cli/commands/show.py +7 -0
  6. datachain/cli/parser/studio.py +13 -1
  7. datachain/client/fsspec.py +12 -16
  8. datachain/client/gcs.py +1 -1
  9. datachain/client/hf.py +36 -14
  10. datachain/client/local.py +1 -4
  11. datachain/client/s3.py +1 -1
  12. datachain/data_storage/metastore.py +6 -0
  13. datachain/data_storage/warehouse.py +3 -8
  14. datachain/dataset.py +8 -0
  15. datachain/error.py +0 -12
  16. datachain/fs/utils.py +30 -0
  17. datachain/func/__init__.py +5 -0
  18. datachain/func/func.py +2 -1
  19. datachain/lib/dc.py +59 -15
  20. datachain/lib/file.py +63 -18
  21. datachain/lib/image.py +30 -6
  22. datachain/lib/listing.py +21 -39
  23. datachain/lib/meta_formats.py +2 -2
  24. datachain/lib/signal_schema.py +65 -18
  25. datachain/lib/udf.py +3 -0
  26. datachain/lib/udf_signature.py +17 -9
  27. datachain/lib/video.py +7 -5
  28. datachain/model/bbox.py +209 -58
  29. datachain/model/pose.py +49 -37
  30. datachain/model/segment.py +22 -18
  31. datachain/model/ultralytics/bbox.py +9 -9
  32. datachain/model/ultralytics/pose.py +7 -7
  33. datachain/model/ultralytics/segment.py +7 -7
  34. datachain/model/utils.py +191 -0
  35. datachain/query/dataset.py +8 -2
  36. datachain/sql/sqlite/base.py +2 -2
  37. datachain/studio.py +8 -6
  38. datachain/utils.py +0 -16
  39. {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/METADATA +4 -2
  40. {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/RECORD +44 -42
  41. {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/WHEEL +1 -1
  42. {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/LICENSE +0 -0
  43. {datachain-0.11.11.dist-info → datachain-0.13.0.dist-info}/entry_points.txt +0 -0
  44. {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":
@@ -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}")
@@ -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
@@ -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
- config_path = save_config(hostname, access_token)
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
- with Config(ConfigLevel.GLOBAL).edit() as conf:
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(ConfigLevel.GLOBAL)
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.11.11
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==8.3.82; extra == "examples"
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=e-iU2cOEYpmETN1Tu0d5-Mubad5dOWmgVhi4rmuOr6k,19067
7
- datachain/error.py,sha256=P1VI-etraA08ZrXHUEg1-xnOa2MkONd7vV0qA5uxBig,1314
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=Coo_6murSjh-RypiHDWNsVXGmfsopyMPCpPS1sA6uUc,9844
16
+ datachain/studio.py,sha256=9MEpFPLKI3gG4isKklcfD5BMLeNsSXhtOUboOjW4Fdc,10017
17
17
  datachain/telemetry.py,sha256=0A4IOPPp9VlP5pyW9eBfaTK3YhHGzHl7dQudQjUAx9A,994
18
- datachain/utils.py,sha256=-vhV9LMUcUxDSBmyeJH4WJcfLTO416usD6igXS8c49k,14563
18
+ datachain/utils.py,sha256=CLAYkI7iPbLYw3Pjh5EkWuc2UOs8wEbuXQnqIs4UyV8,14173
19
19
  datachain/catalog/__init__.py,sha256=cMZzSz3VoUi-6qXSVaHYN-agxQuAcz2XSqnEPZ55crE,353
20
- datachain/catalog/catalog.py,sha256=xZC6drw4opoYcxTTiAFv6nbhNOzBb-UZZ_VqY9dqdIs,59458
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=HA_mBC7q_My8j2WnSvIjUGuJpl6SIdg5vvy_lagxJlA,5733
23
- datachain/cli/__init__.py,sha256=OLoDOYm7M23bLdMJhw3_GsJDGPl8pWYzcjpwgxEdFDs,8326
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=Wb8hXyBwyhb62Zk6ZhNFPFrj2lJhdbRcnBQQkgL_qyw,5174
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=d-DDw4hA3TWA2vqIS-FkEXrzqvttcTdh2QPaahtLdy0,1445
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=4HEE1K93WDJxMLfgqAA4mHdigpSzC7SLUx-qPF0NgYQ,3254
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=N_n3_DtZuKsLst8-XVda2xYCUHreUU3ld0MNTl8L9f4,14008
41
- datachain/client/gcs.py,sha256=TY5K5INORKknTnoWDYv0EUztVLmuY1hHmdf2wUB_9uE,5114
42
- datachain/client/hf.py,sha256=XeVJVbiNViZCpn3sfb90Fr8SYO3BdLmfE3hOWMoqInE,951
43
- datachain/client/local.py,sha256=Pv67SYdkNkkNExBoKJF9AnNu0FSrt4JqLRkSVsUnveU,4672
44
- datachain/client/s3.py,sha256=l2A4J086ZROKKHNVXnoBky0OgYYKB0EAr8Y3lObo8GY,7284
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=hfTITcesE9XlUTxcCcdDyWGGep-QSjJL9DUxko5QCeI,37524
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=ovdH9LmOWLfCrvf0UvXnrNC-CrdAjns3EmXEgFdz4KM,30824
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/func/__init__.py,sha256=vpd61Q0AmNHEhUTEtzmmmZMLngr7xkgy-SazX7Pzf4w,1159
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=PnwTRAiEJUus3e4NYdQ-hldqLzKS9hY0FjiyBMZhsSo,16183
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=XU4VmRjm7CR37YuEKMhtU_DGxb1a7agXoNVU5WsaLRc,97772
73
- datachain/lib/file.py,sha256=LwpRWsDvO3ZvUBAtS29mFotp_arfEy-HhPQ0jaL_2Rc,29006
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=AMXYwQsmarZjRbPCZY3M1jDsM2WAB_b3cTY4uOIuXNU,2675
76
- datachain/lib/listing.py,sha256=auodM0HitYZsL0DybdgQUYhne_LgkVW-LKGYYOACP90,7272
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=hDPfEkcmiLZOjhBBXuareMdnq65Wj8vZvxjmum6cROM,6377
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=WyVTXUsa4DVTIZRAX2-MdjOe4deat_Fufsd9n8ycrXQ,33629
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=TlvikKTFvkIKaqqSkSriOyXhQ0rwRHV2ZRs1LHZOCmo,16107
86
- datachain/lib/udf_signature.py,sha256=GXw24A-Olna6DWCdgy2bC-gZh_gLGPQ-KvjuI6pUjC0,7281
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=rqFockGMoWmLuGMN044BGZVogoCePv056BYi36u3nNo,6522
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=jCuOdcdY__4WMsVfZp5ZNxnmcHva0KUm9MfbL0AMMy4,3158
99
- datachain/model/pose.py,sha256=NpxyDTcgPoB5LcoRVLwVXTKIHRxqZcdCX5c9soBIPb0,3078
100
- datachain/model/segment.py,sha256=LEZ88H9mb7tXq3OAcOYiYF8Di7NWmkSe3x9WSewpKQk,1595
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=OZ9XBdyMOYc401P-RhfSN9QaYvMpnx2Phu9ptaJgZBY,4316
103
- datachain/model/ultralytics/pose.py,sha256=71KBTcoST2wcEtsyGXqLVpvUtqbp9gwZGA15pEPtX5A,2959
104
- datachain/model/ultralytics/segment.py,sha256=Z1ab0tZRJubSYNH4KkFlzhYeGNTfAyC71KmkQcToHDQ,2760
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=wK_etZkH558pzLKAMBArlj1TQD9n96YK-kpVYBCSR38,57083
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=Rfemu8pj7V0aWhWwryDghhnbiMFfQS5X9FCihGuplb8,19593
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.11.11.dist-info/LICENSE,sha256=8DnqK5yoPI_E50bEg_zsHKZHY2HqPy4rYN338BHQaRA,11344
140
- datachain-0.11.11.dist-info/METADATA,sha256=iF194pmsP-vh7ITTJG62w-VbTQbWGDckY-GJfempDBg,11267
141
- datachain-0.11.11.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
142
- datachain-0.11.11.dist-info/entry_points.txt,sha256=0GMJS6B_KWq0m3VT98vQI2YZodAMkn4uReZ_okga9R4,49
143
- datachain-0.11.11.dist-info/top_level.txt,sha256=lZPpdU_2jJABLNIg2kvEOBi8PtsYikbN1OdMLHk8bTg,10
144
- datachain-0.11.11.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (76.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5