This repository was archived by the owner on Sep 9, 2026. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathfrom_gen.py
More file actions
229 lines (205 loc) · 8.08 KB
/
Copy pathfrom_gen.py
File metadata and controls
229 lines (205 loc) · 8.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
from typing import (
Type,
TYPE_CHECKING,
Optional,
overload,
Union,
List,
TextIO,
Dict,
Iterable,
)
if TYPE_CHECKING:
from ....types import T
import numpy as np
import csv
class FromGeneratorMixin:
"""Provide helper functions filling a :class:`DocumentArray`-like object with a generator."""
@classmethod
def _from_generator(cls: Type['T'], meth: str, *args, **kwargs) -> 'T':
from ....document import generators
from_fn = getattr(generators, meth)
da_like = cls()
da_like.extend(from_fn(*args, **kwargs))
return da_like
@classmethod
@overload
def from_ndarray(
cls: Type['T'],
array: 'np.ndarray',
axis: int = 0,
size: Optional[int] = None,
shuffle: bool = False,
) -> 'T':
"""Build from a numpy array.
:param array: the numpy ndarray data source
:param axis: iterate over that axis
:param size: the maximum number of the sub arrays
:param shuffle: shuffle the numpy data source beforehand
"""
...
@classmethod
def from_ndarray(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_ndarray', *args, **kwargs)
@classmethod
@overload
def from_files(
cls: Type['T'],
patterns: Union[str, List[str]],
recursive: bool = True,
size: Optional[int] = None,
sampling_rate: Optional[float] = None,
read_mode: Optional[str] = None,
to_dataturi: bool = False,
) -> 'T':
"""Build from a list of file path or the content of the files.
:param patterns: The pattern may contain simple shell-style wildcards, e.g. '\*.py', '[\*.zip, \*.gz]'
:param recursive: If recursive is true, the pattern '**' will match any files
and zero or more directories and subdirectories
:param size: the maximum number of the files
:param sampling_rate: the sampling rate between [0, 1]
:param read_mode: specifies the mode in which the file is opened.
'r' for reading in text mode, 'rb' for reading in binary mode.
If `read_mode` is None, will iterate over filenames.
:param to_dataturi: if set, then the Document.uri will be filled with DataURI instead of the plan URI
"""
...
@classmethod
def from_files(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_files', *args, **kwargs)
@classmethod
@overload
def from_csv(
cls: Type['T'],
file: Union[str, TextIO],
field_resolver: Optional[Dict[str, str]] = None,
size: Optional[int] = None,
sampling_rate: Optional[float] = None,
dialect: Union[str, 'csv.Dialect'] = 'excel',
) -> 'T':
"""Build from CSV.
:param file: file paths or file handler
:param field_resolver: a map from field names defined in JSON, dict to the field
names defined in Document.
:param size: the maximum number of the documents
:param sampling_rate: the sampling rate between [0, 1]
:param dialect: define a set of parameters specific to a particular CSV dialect. could be a string that represents
predefined dialects in your system, or could be a :class:`csv.Dialect` class that groups specific formatting
parameters together. If you don't know the dialect and the default one does not work for you,
you can try set it to ``auto``.
"""
...
@classmethod
def from_csv(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_csv', *args, **kwargs)
@classmethod
@overload
def from_huggingface_datasets(
cls: Type['T'],
dataset_path: str,
field_resolver: Optional[Dict[str, str]] = None,
size: Optional[int] = None,
sampling_rate: Optional[float] = None,
filter_fields: bool = False,
**datasets_kwargs,
) -> 'T':
"""Build from Hugging Face Datasets. Yields documents.
This function helps to load datasets from Hugging Face Datasets Hub
(https://huggingface.co/datasets) in Jina. Additional parameters can be
passed to the ``datasets`` library using keyword arguments. The ``load_dataset``
method from ``datasets`` library is used to load the datasets.
:param dataset_path: a valid dataset path for Hugging Face Datasets library.
:param field_resolver: a map from field names defined in ``document`` (JSON, dict) to the field
names defined in Protobuf. This is only used when the given ``document`` is
a JSON string or a Python dict.
:param size: the maximum number of the documents
:param sampling_rate: the sampling rate between [0, 1]
:param filter_fields: specifies whether to filter the dataset with the fields
given in ```field_resolver`` argument.
:param **datasets_kwargs: additional arguments for ``load_dataset`` method
from Datasets library. More details at
https://huggingface.co/docs/datasets/package_reference/loading_methods.html#datasets.load_dataset
"""
...
@classmethod
def from_huggingface_datasets(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_huggingface_datasets', *args, **kwargs)
@classmethod
@overload
def from_ndjson(
cls: Type['T'],
fp: Iterable[str],
field_resolver: Optional[Dict[str, str]] = None,
size: Optional[int] = None,
sampling_rate: Optional[float] = None,
) -> 'T':
"""Build from line separated JSON. Yields documents.
:param fp: file paths
:param field_resolver: a map from field names defined in ``document`` (JSON, dict) to the field
names defined in Protobuf. This is only used when the given ``document`` is
a JSON string or a Python dict.
:param size: the maximum number of the documents
:param sampling_rate: the sampling rate between [0, 1]
"""
...
@classmethod
def from_ndjson(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_ndjson', *args, **kwargs)
@classmethod
@overload
def from_lines(
cls: 'T',
lines: Optional[Iterable[str]] = None,
filepath: Optional[str] = None,
read_mode: str = 'r',
line_format: str = 'json',
field_resolver: Optional[Dict[str, str]] = None,
size: Optional[int] = None,
sampling_rate: Optional[float] = None,
) -> 'T':
"""Build from lines, json and csv. Yields documents or strings.
:param lines: a list of strings, each is considered as a document
:param filepath: a text file that each line contains a document
:param read_mode: specifies the mode in which the file
is opened. 'r' for reading in text mode, 'rb' for reading in binary
:param line_format: the format of each line ``json`` or ``csv``
:param field_resolver: a map from field names defined in ``document`` (JSON, dict) to the field
names defined in Protobuf. This is only used when the given ``document`` is
a JSON string or a Python dict.
:param size: the maximum number of the documents
:param sampling_rate: the sampling rate between [0, 1]
"""
...
@classmethod
def from_lines(cls: Type['T'], *args, **kwargs) -> 'T':
"""
# noqa: DAR101
# noqa: DAR102
# noqa: DAR201
"""
return cls._from_generator('from_lines', *args, **kwargs)