datachain 0.6.11__py3-none-any.whl → 0.7.1__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/__init__.py +1 -2
- datachain/asyn.py +36 -4
- datachain/data_storage/warehouse.py +4 -1
- datachain/lib/dc.py +6 -1
- datachain/lib/file.py +5 -0
- datachain/lib/settings.py +11 -1
- datachain/lib/udf.py +45 -18
- datachain/model/__init__.py +6 -0
- datachain/model/bbox.py +102 -0
- datachain/model/pose.py +88 -0
- datachain/model/segment.py +47 -0
- datachain/model/ultralytics/__init__.py +27 -0
- datachain/model/ultralytics/bbox.py +147 -0
- datachain/model/ultralytics/pose.py +113 -0
- datachain/model/ultralytics/segment.py +91 -0
- datachain/node.py +1 -1
- datachain/query/dataset.py +25 -27
- datachain/toolkit/split.py +6 -2
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/METADATA +72 -71
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/RECORD +24 -20
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/WHEEL +1 -1
- datachain/lib/models/__init__.py +0 -5
- datachain/lib/models/bbox.py +0 -45
- datachain/lib/models/pose.py +0 -37
- datachain/lib/models/yolo.py +0 -39
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/LICENSE +0 -0
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/entry_points.txt +0 -0
- {datachain-0.6.11.dist-info → datachain-0.7.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
|
|
5
|
+
from datachain.lib.data_model import DataModel
|
|
6
|
+
from datachain.model.bbox import BBox, OBBox
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from ultralytics.engine.results import Results
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class YoloBBox(DataModel):
|
|
13
|
+
"""
|
|
14
|
+
A class representing a bounding box detected by a YOLO model.
|
|
15
|
+
|
|
16
|
+
Attributes:
|
|
17
|
+
cls: The class of the detected object.
|
|
18
|
+
name: The name of the detected object.
|
|
19
|
+
confidence: The confidence score of the detection.
|
|
20
|
+
box: The bounding box of the detected object
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
cls: int = Field(default=-1)
|
|
24
|
+
name: str = Field(default="")
|
|
25
|
+
confidence: float = Field(default=0)
|
|
26
|
+
box: BBox
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def from_result(result: "Results") -> "YoloBBox":
|
|
30
|
+
summary = result.summary()
|
|
31
|
+
if not summary:
|
|
32
|
+
return YoloBBox(box=BBox())
|
|
33
|
+
name = summary[0].get("name", "")
|
|
34
|
+
box = (
|
|
35
|
+
BBox.from_dict(summary[0]["box"], title=name)
|
|
36
|
+
if "box" in summary[0]
|
|
37
|
+
else BBox()
|
|
38
|
+
)
|
|
39
|
+
return YoloBBox(
|
|
40
|
+
cls=summary[0]["class"],
|
|
41
|
+
name=name,
|
|
42
|
+
confidence=summary[0]["confidence"],
|
|
43
|
+
box=box,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class YoloBBoxes(DataModel):
|
|
48
|
+
"""
|
|
49
|
+
A class representing a list of bounding boxes detected by a YOLO model.
|
|
50
|
+
|
|
51
|
+
Attributes:
|
|
52
|
+
cls: A list of classes of the detected objects.
|
|
53
|
+
name: A list of names of the detected objects.
|
|
54
|
+
confidence: A list of confidence scores of the detections.
|
|
55
|
+
box: A list of bounding boxes of the detected objects
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
cls: list[int]
|
|
59
|
+
name: list[str]
|
|
60
|
+
confidence: list[float]
|
|
61
|
+
box: list[BBox]
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def from_results(results: list["Results"]) -> "YoloBBoxes":
|
|
65
|
+
cls, names, confidence, box = [], [], [], []
|
|
66
|
+
for r in results:
|
|
67
|
+
for s in r.summary():
|
|
68
|
+
name = s.get("name", "")
|
|
69
|
+
cls.append(s["class"])
|
|
70
|
+
names.append(name)
|
|
71
|
+
confidence.append(s["confidence"])
|
|
72
|
+
box.append(BBox.from_dict(s.get("box", {}), title=name))
|
|
73
|
+
return YoloBBoxes(
|
|
74
|
+
cls=cls,
|
|
75
|
+
name=names,
|
|
76
|
+
confidence=confidence,
|
|
77
|
+
box=box,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class YoloOBBox(DataModel):
|
|
82
|
+
"""
|
|
83
|
+
A class representing an oriented bounding box detected by a YOLO model.
|
|
84
|
+
|
|
85
|
+
Attributes:
|
|
86
|
+
cls: The class of the detected object.
|
|
87
|
+
name: The name of the detected object.
|
|
88
|
+
confidence: The confidence score of the detection.
|
|
89
|
+
box: The oriented bounding box of the detected object.
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
cls: int = Field(default=-1)
|
|
93
|
+
name: str = Field(default="")
|
|
94
|
+
confidence: float = Field(default=0)
|
|
95
|
+
box: OBBox
|
|
96
|
+
|
|
97
|
+
@staticmethod
|
|
98
|
+
def from_result(result: "Results") -> "YoloOBBox":
|
|
99
|
+
summary = result.summary()
|
|
100
|
+
if not summary:
|
|
101
|
+
return YoloOBBox(box=OBBox())
|
|
102
|
+
name = summary[0].get("name", "")
|
|
103
|
+
box = (
|
|
104
|
+
OBBox.from_dict(summary[0]["box"], title=name)
|
|
105
|
+
if "box" in summary[0]
|
|
106
|
+
else OBBox()
|
|
107
|
+
)
|
|
108
|
+
return YoloOBBox(
|
|
109
|
+
cls=summary[0]["class"],
|
|
110
|
+
name=name,
|
|
111
|
+
confidence=summary[0]["confidence"],
|
|
112
|
+
box=box,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class YoloOBBoxes(DataModel):
|
|
117
|
+
"""
|
|
118
|
+
A class representing a list of oriented bounding boxes detected by a YOLO model.
|
|
119
|
+
|
|
120
|
+
Attributes:
|
|
121
|
+
cls: A list of classes of the detected objects.
|
|
122
|
+
name: A list of names of the detected objects.
|
|
123
|
+
confidence: A list of confidence scores of the detections.
|
|
124
|
+
box: A list of oriented bounding boxes of the detected objects.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
cls: list[int]
|
|
128
|
+
name: list[str]
|
|
129
|
+
confidence: list[float]
|
|
130
|
+
box: list[OBBox]
|
|
131
|
+
|
|
132
|
+
@staticmethod
|
|
133
|
+
def from_results(results: list["Results"]) -> "YoloOBBoxes":
|
|
134
|
+
cls, names, confidence, box = [], [], [], []
|
|
135
|
+
for r in results:
|
|
136
|
+
for s in r.summary():
|
|
137
|
+
name = s.get("name", "")
|
|
138
|
+
cls.append(s["class"])
|
|
139
|
+
names.append(name)
|
|
140
|
+
confidence.append(s["confidence"])
|
|
141
|
+
box.append(OBBox.from_dict(s.get("box", {}), title=name))
|
|
142
|
+
return YoloOBBoxes(
|
|
143
|
+
cls=cls,
|
|
144
|
+
name=names,
|
|
145
|
+
confidence=confidence,
|
|
146
|
+
box=box,
|
|
147
|
+
)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
|
|
5
|
+
from datachain.lib.data_model import DataModel
|
|
6
|
+
from datachain.model.bbox import BBox
|
|
7
|
+
from datachain.model.pose import Pose3D
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from ultralytics.engine.results import Results
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class YoloPoseBodyPart:
|
|
14
|
+
"""An enumeration of body parts for YOLO pose keypoints."""
|
|
15
|
+
|
|
16
|
+
nose = 0
|
|
17
|
+
left_eye = 1
|
|
18
|
+
right_eye = 2
|
|
19
|
+
left_ear = 3
|
|
20
|
+
right_ear = 4
|
|
21
|
+
left_shoulder = 5
|
|
22
|
+
right_shoulder = 6
|
|
23
|
+
left_elbow = 7
|
|
24
|
+
right_elbow = 8
|
|
25
|
+
left_wrist = 9
|
|
26
|
+
right_wrist = 10
|
|
27
|
+
left_hip = 11
|
|
28
|
+
right_hip = 12
|
|
29
|
+
left_knee = 13
|
|
30
|
+
right_knee = 14
|
|
31
|
+
left_ankle = 15
|
|
32
|
+
right_ankle = 16
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class YoloPose(DataModel):
|
|
36
|
+
"""
|
|
37
|
+
A data model for YOLO pose keypoints.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
cls: The class of the pose.
|
|
41
|
+
name: The name of the pose.
|
|
42
|
+
confidence: The confidence score of the pose.
|
|
43
|
+
box: The bounding box of the pose.
|
|
44
|
+
pose: The 3D pose keypoints.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
cls: int = Field(default=-1)
|
|
48
|
+
name: str = Field(default="")
|
|
49
|
+
confidence: float = Field(default=0)
|
|
50
|
+
box: BBox
|
|
51
|
+
pose: Pose3D
|
|
52
|
+
|
|
53
|
+
@staticmethod
|
|
54
|
+
def from_result(result: "Results") -> "YoloPose":
|
|
55
|
+
summary = result.summary()
|
|
56
|
+
if not summary:
|
|
57
|
+
return YoloPose(box=BBox(), pose=Pose3D())
|
|
58
|
+
name = summary[0].get("name", "")
|
|
59
|
+
box = (
|
|
60
|
+
BBox.from_dict(summary[0]["box"], title=name)
|
|
61
|
+
if "box" in summary[0]
|
|
62
|
+
else BBox()
|
|
63
|
+
)
|
|
64
|
+
pose = (
|
|
65
|
+
Pose3D.from_dict(summary[0]["keypoints"])
|
|
66
|
+
if "keypoints" in summary[0]
|
|
67
|
+
else Pose3D()
|
|
68
|
+
)
|
|
69
|
+
return YoloPose(
|
|
70
|
+
cls=summary[0]["class"],
|
|
71
|
+
name=name,
|
|
72
|
+
confidence=summary[0]["confidence"],
|
|
73
|
+
box=box,
|
|
74
|
+
pose=pose,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class YoloPoses(DataModel):
|
|
79
|
+
"""
|
|
80
|
+
A data model for a list of YOLO pose keypoints.
|
|
81
|
+
|
|
82
|
+
Attributes:
|
|
83
|
+
cls: The classes of the poses.
|
|
84
|
+
name: The names of the poses.
|
|
85
|
+
confidence: The confidence scores of the poses.
|
|
86
|
+
box: The bounding boxes of the poses.
|
|
87
|
+
pose: The 3D pose keypoints of the poses.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
cls: list[int]
|
|
91
|
+
name: list[str]
|
|
92
|
+
confidence: list[float]
|
|
93
|
+
box: list[BBox]
|
|
94
|
+
pose: list[Pose3D]
|
|
95
|
+
|
|
96
|
+
@staticmethod
|
|
97
|
+
def from_results(results: list["Results"]) -> "YoloPoses":
|
|
98
|
+
cls, names, confidence, box, pose = [], [], [], [], []
|
|
99
|
+
for r in results:
|
|
100
|
+
for s in r.summary():
|
|
101
|
+
name = s.get("name", "")
|
|
102
|
+
cls.append(s["class"])
|
|
103
|
+
names.append(name)
|
|
104
|
+
confidence.append(s["confidence"])
|
|
105
|
+
box.append(BBox.from_dict(s.get("box", {}), title=name))
|
|
106
|
+
pose.append(Pose3D.from_dict(s.get("keypoints", {})))
|
|
107
|
+
return YoloPoses(
|
|
108
|
+
cls=cls,
|
|
109
|
+
name=names,
|
|
110
|
+
confidence=confidence,
|
|
111
|
+
box=box,
|
|
112
|
+
pose=pose,
|
|
113
|
+
)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from pydantic import Field
|
|
4
|
+
|
|
5
|
+
from datachain.lib.data_model import DataModel
|
|
6
|
+
from datachain.model.bbox import BBox
|
|
7
|
+
from datachain.model.segment import Segment
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from ultralytics.engine.results import Results
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class YoloSegment(DataModel):
|
|
14
|
+
"""
|
|
15
|
+
A data model for a single YOLO segment.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
cls (int): The class of the segment.
|
|
19
|
+
name (str): The name of the segment.
|
|
20
|
+
confidence (float): The confidence of the segment.
|
|
21
|
+
box (BBox): The bounding box of the segment.
|
|
22
|
+
segment (Segments): The segments of the segment.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
cls: int = Field(default=-1)
|
|
26
|
+
name: str = Field(default="")
|
|
27
|
+
confidence: float = Field(default=0)
|
|
28
|
+
box: BBox
|
|
29
|
+
segment: Segment
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
def from_result(result: "Results") -> "YoloSegment":
|
|
33
|
+
summary = result.summary()
|
|
34
|
+
if not summary:
|
|
35
|
+
return YoloSegment(box=BBox(), segment=Segment())
|
|
36
|
+
name = summary[0].get("name", "")
|
|
37
|
+
box = (
|
|
38
|
+
BBox.from_dict(summary[0]["box"], title=name)
|
|
39
|
+
if "box" in summary[0]
|
|
40
|
+
else BBox()
|
|
41
|
+
)
|
|
42
|
+
segment = (
|
|
43
|
+
Segment.from_dict(summary[0]["segments"], title=name)
|
|
44
|
+
if "segments" in summary[0]
|
|
45
|
+
else Segment()
|
|
46
|
+
)
|
|
47
|
+
return YoloSegment(
|
|
48
|
+
cls=summary[0]["class"],
|
|
49
|
+
name=summary[0]["name"],
|
|
50
|
+
confidence=summary[0]["confidence"],
|
|
51
|
+
box=box,
|
|
52
|
+
segment=segment,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class YoloSegments(DataModel):
|
|
57
|
+
"""
|
|
58
|
+
A data model for a list of YOLO segments.
|
|
59
|
+
|
|
60
|
+
Attributes:
|
|
61
|
+
cls (list[int]): The classes of the segments.
|
|
62
|
+
name (list[str]): The names of the segments.
|
|
63
|
+
confidence (list[float]): The confidences of the segments.
|
|
64
|
+
box (list[BBox]): The bounding boxes of the segments.
|
|
65
|
+
segment (list[Segments]): The segments of the segments.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
cls: list[int]
|
|
69
|
+
name: list[str]
|
|
70
|
+
confidence: list[float]
|
|
71
|
+
box: list[BBox]
|
|
72
|
+
segment: list[Segment]
|
|
73
|
+
|
|
74
|
+
@staticmethod
|
|
75
|
+
def from_results(results: list["Results"]) -> "YoloSegments":
|
|
76
|
+
cls, names, confidence, box, segment = [], [], [], [], []
|
|
77
|
+
for r in results:
|
|
78
|
+
for s in r.summary():
|
|
79
|
+
name = s.get("name", "")
|
|
80
|
+
cls.append(s["class"])
|
|
81
|
+
names.append(name)
|
|
82
|
+
confidence.append(s["confidence"])
|
|
83
|
+
box.append(BBox.from_dict(s.get("box", {}), title=name))
|
|
84
|
+
segment.append(Segment.from_dict(s.get("segments", {}), title=name))
|
|
85
|
+
return YoloSegments(
|
|
86
|
+
cls=cls,
|
|
87
|
+
name=names,
|
|
88
|
+
confidence=confidence,
|
|
89
|
+
box=box,
|
|
90
|
+
segment=segment,
|
|
91
|
+
)
|
datachain/node.py
CHANGED
datachain/query/dataset.py
CHANGED
|
@@ -473,33 +473,31 @@ class UDFStep(Step, ABC):
|
|
|
473
473
|
# Otherwise process single-threaded (faster for smaller UDFs)
|
|
474
474
|
warehouse = self.catalog.warehouse
|
|
475
475
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
processed_cb.close()
|
|
502
|
-
generated_cb.close()
|
|
476
|
+
udf_inputs = batching(warehouse.dataset_select_paginated, query)
|
|
477
|
+
download_cb = get_download_callback()
|
|
478
|
+
processed_cb = get_processed_callback()
|
|
479
|
+
generated_cb = get_generated_callback(self.is_generator)
|
|
480
|
+
try:
|
|
481
|
+
udf_results = self.udf.run(
|
|
482
|
+
udf_fields,
|
|
483
|
+
udf_inputs,
|
|
484
|
+
self.catalog,
|
|
485
|
+
self.is_generator,
|
|
486
|
+
self.cache,
|
|
487
|
+
download_cb,
|
|
488
|
+
processed_cb,
|
|
489
|
+
)
|
|
490
|
+
process_udf_outputs(
|
|
491
|
+
warehouse,
|
|
492
|
+
udf_table,
|
|
493
|
+
udf_results,
|
|
494
|
+
self.udf,
|
|
495
|
+
cb=generated_cb,
|
|
496
|
+
)
|
|
497
|
+
finally:
|
|
498
|
+
download_cb.close()
|
|
499
|
+
processed_cb.close()
|
|
500
|
+
generated_cb.close()
|
|
503
501
|
|
|
504
502
|
warehouse.insert_rows_done(udf_table)
|
|
505
503
|
|
datachain/toolkit/split.py
CHANGED
|
@@ -58,10 +58,14 @@ def train_test_split(dc: DataChain, weights: list[float]) -> list[DataChain]:
|
|
|
58
58
|
|
|
59
59
|
weights_normalized = [weight / sum(weights) for weight in weights]
|
|
60
60
|
|
|
61
|
+
resolution = 2**31 - 1 # Maximum positive value for a 32-bit signed integer.
|
|
62
|
+
|
|
61
63
|
return [
|
|
62
64
|
dc.filter(
|
|
63
|
-
C("sys__rand") %
|
|
64
|
-
|
|
65
|
+
C("sys__rand") % resolution
|
|
66
|
+
>= round(sum(weights_normalized[:index]) * resolution),
|
|
67
|
+
C("sys__rand") % resolution
|
|
68
|
+
< round(sum(weights_normalized[: index + 1]) * resolution),
|
|
65
69
|
)
|
|
66
70
|
for index, _ in enumerate(weights_normalized)
|
|
67
71
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: datachain
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Wrangle unstructured AI data at scale
|
|
5
5
|
Author-email: Dmitry Petrov <support@dvc.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -19,85 +19,86 @@ License-File: LICENSE
|
|
|
19
19
|
Requires-Dist: pyyaml
|
|
20
20
|
Requires-Dist: tomlkit
|
|
21
21
|
Requires-Dist: tqdm
|
|
22
|
-
Requires-Dist: numpy
|
|
23
|
-
Requires-Dist: pandas
|
|
22
|
+
Requires-Dist: numpy<3,>=1
|
|
23
|
+
Requires-Dist: pandas>=2.0.0
|
|
24
24
|
Requires-Dist: pyarrow
|
|
25
25
|
Requires-Dist: typing-extensions
|
|
26
|
-
Requires-Dist: python-dateutil
|
|
27
|
-
Requires-Dist: attrs
|
|
28
|
-
Requires-Dist: s3fs
|
|
29
|
-
Requires-Dist: gcsfs
|
|
30
|
-
Requires-Dist: adlfs
|
|
31
|
-
Requires-Dist: dvc-data
|
|
32
|
-
Requires-Dist: dvc-objects
|
|
33
|
-
Requires-Dist: shtab
|
|
34
|
-
Requires-Dist: sqlalchemy
|
|
35
|
-
Requires-Dist: multiprocess
|
|
26
|
+
Requires-Dist: python-dateutil>=2
|
|
27
|
+
Requires-Dist: attrs>=21.3.0
|
|
28
|
+
Requires-Dist: s3fs>=2024.2.0
|
|
29
|
+
Requires-Dist: gcsfs>=2024.2.0
|
|
30
|
+
Requires-Dist: adlfs>=2024.2.0
|
|
31
|
+
Requires-Dist: dvc-data<4,>=3.10
|
|
32
|
+
Requires-Dist: dvc-objects<6,>=4
|
|
33
|
+
Requires-Dist: shtab<2,>=1.3.4
|
|
34
|
+
Requires-Dist: sqlalchemy>=2
|
|
35
|
+
Requires-Dist: multiprocess==0.70.16
|
|
36
36
|
Requires-Dist: cloudpickle
|
|
37
|
-
Requires-Dist: orjson
|
|
38
|
-
Requires-Dist: pydantic
|
|
39
|
-
Requires-Dist: jmespath
|
|
40
|
-
Requires-Dist: datamodel-code-generator
|
|
41
|
-
Requires-Dist: Pillow
|
|
42
|
-
Requires-Dist: msgpack
|
|
37
|
+
Requires-Dist: orjson>=3.10.5
|
|
38
|
+
Requires-Dist: pydantic<3,>=2
|
|
39
|
+
Requires-Dist: jmespath>=1.0
|
|
40
|
+
Requires-Dist: datamodel-code-generator>=0.25
|
|
41
|
+
Requires-Dist: Pillow<12,>=10.0.0
|
|
42
|
+
Requires-Dist: msgpack<2,>=1.0.4
|
|
43
43
|
Requires-Dist: psutil
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist: iterative-telemetry
|
|
44
|
+
Requires-Dist: huggingface_hub
|
|
45
|
+
Requires-Dist: iterative-telemetry>=0.0.9
|
|
46
46
|
Requires-Dist: platformdirs
|
|
47
|
-
Requires-Dist: dvc-studio-client
|
|
47
|
+
Requires-Dist: dvc-studio-client<1,>=0.21
|
|
48
48
|
Requires-Dist: tabulate
|
|
49
|
-
Provides-Extra: dev
|
|
50
|
-
Requires-Dist: datachain[docs,tests] ; extra == 'dev'
|
|
51
|
-
Requires-Dist: mypy ==1.13.0 ; extra == 'dev'
|
|
52
|
-
Requires-Dist: types-python-dateutil ; extra == 'dev'
|
|
53
|
-
Requires-Dist: types-pytz ; extra == 'dev'
|
|
54
|
-
Requires-Dist: types-PyYAML ; extra == 'dev'
|
|
55
|
-
Requires-Dist: types-requests ; extra == 'dev'
|
|
56
|
-
Requires-Dist: types-tabulate ; extra == 'dev'
|
|
57
49
|
Provides-Extra: docs
|
|
58
|
-
Requires-Dist: mkdocs
|
|
59
|
-
Requires-Dist: mkdocs-gen-files
|
|
60
|
-
Requires-Dist: mkdocs-material
|
|
61
|
-
Requires-Dist: mkdocs-section-index
|
|
62
|
-
Requires-Dist: mkdocstrings-python
|
|
63
|
-
Requires-Dist: mkdocs-literate-nav
|
|
64
|
-
Provides-Extra: examples
|
|
65
|
-
Requires-Dist: datachain[tests] ; extra == 'examples'
|
|
66
|
-
Requires-Dist: numpy <2,>=1 ; extra == 'examples'
|
|
67
|
-
Requires-Dist: defusedxml ; extra == 'examples'
|
|
68
|
-
Requires-Dist: accelerate ; extra == 'examples'
|
|
69
|
-
Requires-Dist: unstructured[embed-huggingface,pdf] <0.16.0 ; extra == 'examples'
|
|
70
|
-
Requires-Dist: pdfplumber ==0.11.4 ; extra == 'examples'
|
|
71
|
-
Requires-Dist: huggingface-hub[hf_transfer] ; extra == 'examples'
|
|
72
|
-
Requires-Dist: onnx ==1.16.1 ; extra == 'examples'
|
|
73
|
-
Provides-Extra: hf
|
|
74
|
-
Requires-Dist: numba >=0.60.0 ; extra == 'hf'
|
|
75
|
-
Requires-Dist: datasets[audio,vision] >=2.21.0 ; extra == 'hf'
|
|
76
|
-
Provides-Extra: remote
|
|
77
|
-
Requires-Dist: lz4 ; extra == 'remote'
|
|
78
|
-
Requires-Dist: requests >=2.22.0 ; extra == 'remote'
|
|
79
|
-
Provides-Extra: tests
|
|
80
|
-
Requires-Dist: datachain[hf,remote,torch,vector] ; extra == 'tests'
|
|
81
|
-
Requires-Dist: pytest <9,>=8 ; extra == 'tests'
|
|
82
|
-
Requires-Dist: pytest-sugar >=0.9.6 ; extra == 'tests'
|
|
83
|
-
Requires-Dist: pytest-cov >=4.1.0 ; extra == 'tests'
|
|
84
|
-
Requires-Dist: pytest-mock >=3.12.0 ; extra == 'tests'
|
|
85
|
-
Requires-Dist: pytest-servers[all] >=0.5.8 ; extra == 'tests'
|
|
86
|
-
Requires-Dist: pytest-benchmark[histogram] ; extra == 'tests'
|
|
87
|
-
Requires-Dist: pytest-xdist >=3.3.1 ; extra == 'tests'
|
|
88
|
-
Requires-Dist: virtualenv ; extra == 'tests'
|
|
89
|
-
Requires-Dist: dulwich ; extra == 'tests'
|
|
90
|
-
Requires-Dist: hypothesis ; extra == 'tests'
|
|
91
|
-
Requires-Dist: open-clip-torch ; extra == 'tests'
|
|
92
|
-
Requires-Dist: aiotools >=1.7.0 ; extra == 'tests'
|
|
93
|
-
Requires-Dist: requests-mock ; extra == 'tests'
|
|
94
|
-
Requires-Dist: scipy ; extra == 'tests'
|
|
50
|
+
Requires-Dist: mkdocs>=1.5.2; extra == "docs"
|
|
51
|
+
Requires-Dist: mkdocs-gen-files>=0.5.0; extra == "docs"
|
|
52
|
+
Requires-Dist: mkdocs-material>=9.3.1; extra == "docs"
|
|
53
|
+
Requires-Dist: mkdocs-section-index>=0.3.6; extra == "docs"
|
|
54
|
+
Requires-Dist: mkdocstrings-python>=1.6.3; extra == "docs"
|
|
55
|
+
Requires-Dist: mkdocs-literate-nav>=0.6.1; extra == "docs"
|
|
95
56
|
Provides-Extra: torch
|
|
96
|
-
Requires-Dist: torch
|
|
97
|
-
Requires-Dist: torchvision
|
|
98
|
-
Requires-Dist: transformers
|
|
57
|
+
Requires-Dist: torch>=2.1.0; extra == "torch"
|
|
58
|
+
Requires-Dist: torchvision; extra == "torch"
|
|
59
|
+
Requires-Dist: transformers>=4.36.0; extra == "torch"
|
|
60
|
+
Provides-Extra: remote
|
|
61
|
+
Requires-Dist: lz4; extra == "remote"
|
|
62
|
+
Requires-Dist: requests>=2.22.0; extra == "remote"
|
|
99
63
|
Provides-Extra: vector
|
|
100
|
-
Requires-Dist: usearch
|
|
64
|
+
Requires-Dist: usearch; extra == "vector"
|
|
65
|
+
Provides-Extra: hf
|
|
66
|
+
Requires-Dist: numba>=0.60.0; extra == "hf"
|
|
67
|
+
Requires-Dist: datasets[audio,vision]>=2.21.0; extra == "hf"
|
|
68
|
+
Provides-Extra: tests
|
|
69
|
+
Requires-Dist: datachain[hf,remote,torch,vector]; extra == "tests"
|
|
70
|
+
Requires-Dist: pytest<9,>=8; extra == "tests"
|
|
71
|
+
Requires-Dist: pytest-sugar>=0.9.6; extra == "tests"
|
|
72
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "tests"
|
|
73
|
+
Requires-Dist: pytest-mock>=3.12.0; extra == "tests"
|
|
74
|
+
Requires-Dist: pytest-servers[all]>=0.5.8; extra == "tests"
|
|
75
|
+
Requires-Dist: pytest-benchmark[histogram]; extra == "tests"
|
|
76
|
+
Requires-Dist: pytest-xdist>=3.3.1; extra == "tests"
|
|
77
|
+
Requires-Dist: virtualenv; extra == "tests"
|
|
78
|
+
Requires-Dist: dulwich; extra == "tests"
|
|
79
|
+
Requires-Dist: hypothesis; extra == "tests"
|
|
80
|
+
Requires-Dist: open_clip_torch; extra == "tests"
|
|
81
|
+
Requires-Dist: aiotools>=1.7.0; extra == "tests"
|
|
82
|
+
Requires-Dist: requests-mock; extra == "tests"
|
|
83
|
+
Requires-Dist: scipy; extra == "tests"
|
|
84
|
+
Provides-Extra: dev
|
|
85
|
+
Requires-Dist: datachain[docs,tests]; extra == "dev"
|
|
86
|
+
Requires-Dist: mypy==1.13.0; extra == "dev"
|
|
87
|
+
Requires-Dist: types-python-dateutil; extra == "dev"
|
|
88
|
+
Requires-Dist: types-pytz; extra == "dev"
|
|
89
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
|
90
|
+
Requires-Dist: types-requests; extra == "dev"
|
|
91
|
+
Requires-Dist: types-tabulate; extra == "dev"
|
|
92
|
+
Provides-Extra: examples
|
|
93
|
+
Requires-Dist: datachain[tests]; extra == "examples"
|
|
94
|
+
Requires-Dist: numpy<2,>=1; extra == "examples"
|
|
95
|
+
Requires-Dist: defusedxml; extra == "examples"
|
|
96
|
+
Requires-Dist: accelerate; extra == "examples"
|
|
97
|
+
Requires-Dist: unstructured[embed-huggingface,pdf]<0.16.0; extra == "examples"
|
|
98
|
+
Requires-Dist: pdfplumber==0.11.4; extra == "examples"
|
|
99
|
+
Requires-Dist: huggingface_hub[hf_transfer]; extra == "examples"
|
|
100
|
+
Requires-Dist: onnx==1.16.1; extra == "examples"
|
|
101
|
+
Requires-Dist: ultralytics==8.3.29; extra == "examples"
|
|
101
102
|
|
|
102
103
|
================
|
|
103
104
|
|logo| DataChain
|