dtlpy 1.117.6__py3-none-any.whl → 1.118.12__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.
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ import copy
2
3
  from .. import exceptions, entities, miscellaneous, _api_reference, repositories
3
4
  from ..services.api_client import ApiClient
4
5
 
@@ -9,18 +10,25 @@ class FeatureSets:
9
10
  """
10
11
  Feature Sets repository
11
12
  """
13
+
12
14
  URL = '/features/sets'
13
15
 
14
- def __init__(self,
15
- client_api: ApiClient,
16
- project_id: str = None,
17
- project: entities.Project = None,
18
- model_id: str = None,
19
- model: entities.Model = None):
16
+ def __init__(
17
+ self,
18
+ client_api: ApiClient,
19
+ project_id: str = None,
20
+ project: entities.Project = None,
21
+ model_id: str = None,
22
+ model: entities.Model = None,
23
+ dataset_id: str = None,
24
+ dataset: entities.Dataset = None,
25
+ ):
20
26
  self._project = project
21
27
  self._project_id = project_id
22
28
  self._model = model
23
29
  self._model_id = model_id
30
+ self._dataset = dataset
31
+ self._dataset_id = dataset_id
24
32
  self._client_api = client_api
25
33
 
26
34
  ############
@@ -28,6 +36,9 @@ class FeatureSets:
28
36
  ############
29
37
  @property
30
38
  def project(self) -> entities.Project:
39
+ if self._project is None and self._project_id is None and self.dataset is not None:
40
+ self._project = self.dataset.project
41
+ self._project_id = self._project.id
31
42
  if self._project is None and self._project_id is not None:
32
43
  # get from id
33
44
  self._project = repositories.Projects(client_api=self._client_api).get(project_id=self._project_id)
@@ -38,9 +49,8 @@ class FeatureSets:
38
49
  self._project = entities.Project.from_json(_json=project, client_api=self._client_api)
39
50
  if self._project is None:
40
51
  raise exceptions.PlatformException(
41
- error='2001',
42
- message='Cannot perform action WITHOUT Project entity in FeatureSets repository.'
43
- ' Please checkout or set a project')
52
+ error='2001', message='Cannot perform action WITHOUT Project entity in FeatureSets repository.' ' Please checkout or set a project'
53
+ )
44
54
  assert isinstance(self._project, entities.Project)
45
55
  return self._project
46
56
 
@@ -50,21 +60,27 @@ class FeatureSets:
50
60
  # get from id
51
61
  self._model = repositories.Models(client_api=self._client_api).get(model_id=self._model_id)
52
62
  if self._model is None:
53
- raise exceptions.PlatformException(
54
- error='2001',
55
- message='Cannot perform action WITHOUT Model entity in FeatureSets repository.')
63
+ raise exceptions.PlatformException(error='2001', message='Cannot perform action WITHOUT Model entity in FeatureSets repository.')
56
64
  assert isinstance(self._model, entities.Model)
57
65
  return self._model
58
66
 
67
+ @property
68
+ def dataset(self) -> entities.Dataset:
69
+ if self._dataset is None and self._dataset_id is not None:
70
+ # get from id
71
+ self._dataset = repositories.Datasets(client_api=self._client_api).get(dataset_id=self._dataset_id)
72
+ if self._dataset is None:
73
+ return None
74
+ assert isinstance(self._dataset, entities.Dataset)
75
+ return self._dataset
76
+
59
77
  ###########
60
78
  # methods #
61
79
  ###########
62
80
 
63
81
  def _list(self, filters: entities.Filters):
64
82
  # request
65
- success, response = self._client_api.gen_request(req_type='POST',
66
- path='/features/sets/query',
67
- json_req=filters.prepare())
83
+ success, response = self._client_api.gen_request(req_type='POST', path='/features/sets/query', json_req=filters.prepare())
68
84
  if not success:
69
85
  raise exceptions.PlatformException(response)
70
86
  return response.json()
@@ -78,29 +94,101 @@ class FeatureSets:
78
94
  :return: Paged entity
79
95
  :rtype: dtlpy.entities.paged_entities.PagedEntities
80
96
  """
81
- # default filters
97
+ # Step 1: Initialize filter (create empty if None)
82
98
  if filters is None:
83
99
  filters = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
84
- if self._project is not None:
85
- filters.context = {'projects': [self._project.id]}
86
-
87
- # assert type filters
88
- if not isinstance(filters, entities.Filters):
89
- raise exceptions.PlatformException(error='400',
90
- message='Unknown filters type: {!r}'.format(type(filters)))
91
100
 
92
101
  if filters.resource != entities.FiltersResource.FEATURE_SET:
93
102
  raise exceptions.PlatformException(
94
103
  error='400',
95
- message='Filters resource must to be FiltersResource.FEATURE_SET. Got: {!r}'.format(filters.resource))
104
+ message='Filters resource must to be FiltersResource.FEATURE_SET. Got: {!r}'.format(filters.resource),
105
+ )
106
+
107
+ # Step 2: Extract IDs inline (no helper functions, no property access)
108
+ # Extract project_id inline
109
+ if self._project_id is not None:
110
+ project_id = self._project_id
111
+ elif self._project is not None:
112
+ project_id = self._project.id
113
+ else:
114
+ raise exceptions.PlatformException(
115
+ error='2001', message='Cannot perform action WITHOUT Project entity in FeatureSets repository.' ' Please checkout or set a project'
116
+ )
117
+
118
+ # Extract dataset_id inline (only when needed for filtering)
119
+ if self._dataset_id is not None:
120
+ dataset_id = self._dataset_id
121
+ elif self._dataset is not None:
122
+ dataset_id = self._dataset.id
123
+ else:
124
+ dataset_id = None # No dataset filtering needed
125
+
126
+ # Set context with project_id
127
+ filters.context = {'projects': [project_id]}
128
+
129
+ # Preserve original page and page size values before any operations that might modify them
130
+ received_filter = copy.deepcopy(filters)
131
+
132
+ # Step 3: Execute received filter - Run filter with appropriate pagination
133
+ # When dataset_id is None: use original pagination (respect user's page request)
134
+ # When dataset_id is not None: start from page 0 to collect all IDs (pagination applied later)
135
+ if dataset_id is not None:
136
+ page_offset = 0
137
+ received_filter_paged = entities.PagedEntities(
138
+ items_repository=self,
139
+ filters=filters,
140
+ page_offset=page_offset,
141
+ page_size=filters.page_size,
142
+ client_api=self._client_api,
143
+ )
144
+ # Step 5: Dataset_id exists and items exist - extract IDs from all pages
145
+ # Extract feature set IDs from all pages (received_filter_paged.all() will fetch all pages starting from page 0)
146
+ filter_fs_ids = [feature_set.id for feature_set in received_filter_paged.all()]
147
+
148
+ # Step 6: Run aggregation API (when dataset_id exists)
149
+ payload = {
150
+ "projectId": project_id,
151
+ "datasetIds": [dataset_id],
152
+ }
153
+ success, response = self._client_api.gen_request(req_type="POST", path="/features/vectors/project-count-aggregation", json_req=payload)
154
+ if not success:
155
+ raise exceptions.PlatformException(response)
156
+ result = response.json()
157
+ # Extract dataset feature set IDs from response, filtering out entries where count == 0
158
+ dataset_fs_ids = [item['featureSetId'] for item in result if item.get('count', 0) > 0]
159
+
160
+ # Step 7: Intersect IDs
161
+ final_fs_ids = list(set(filter_fs_ids).intersection(set(dataset_fs_ids)))
162
+
163
+ # Step 8: Final return path - Create filter with intersected IDs (no join needed)
164
+ intersected_ids_filter = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
165
+ intersected_ids_filter.add(field='id', operator=entities.FiltersOperations.IN, values=final_fs_ids)
166
+ intersected_ids_filter.page = received_filter.page # Preserve original pagination
167
+ intersected_ids_filter.page_size = received_filter.page_size
168
+ intersected_ids_filter.context = {'projects': [project_id]}
169
+
170
+ filter_paged = entities.PagedEntities(
171
+ items_repository=self,
172
+ filters=intersected_ids_filter,
173
+ page_offset=intersected_ids_filter.page,
174
+ page_size=intersected_ids_filter.page_size,
175
+ client_api=self._client_api,
176
+ )
177
+ filter_paged.get_page()
178
+
179
+ else:
180
+ page_offset = filters.page if dataset_id is None else 0
96
181
 
97
- paged = entities.PagedEntities(items_repository=self,
98
- filters=filters,
99
- page_offset=filters.page,
100
- page_size=filters.page_size,
101
- client_api=self._client_api)
102
- paged.get_page()
103
- return paged
182
+ filter_paged = entities.PagedEntities(
183
+ items_repository=self,
184
+ filters=filters,
185
+ page_offset=page_offset,
186
+ page_size=filters.page_size,
187
+ client_api=self._client_api,
188
+ )
189
+ filter_paged.get_page()
190
+
191
+ return filter_paged
104
192
 
105
193
  @_api_reference.add(path='/features/sets/{id}', method='get')
106
194
  def get(self, feature_set_name: str = None, feature_set_id: str = None) -> entities.Feature:
@@ -112,45 +200,31 @@ class FeatureSets:
112
200
  :return: Feature object
113
201
  """
114
202
  if feature_set_id is not None:
115
- success, response = self._client_api.gen_request(req_type="GET",
116
- path="{}/{}".format(self.URL, feature_set_id))
203
+ success, response = self._client_api.gen_request(req_type="GET", path="{}/{}".format(self.URL, feature_set_id))
117
204
  if not success:
118
205
  raise exceptions.PlatformException(response)
119
- feature_set = entities.FeatureSet.from_json(client_api=self._client_api,
120
- _json=response.json())
206
+ feature_set = entities.FeatureSet.from_json(client_api=self._client_api, _json=response.json())
121
207
  elif feature_set_name is not None:
122
208
  if not isinstance(feature_set_name, str):
123
- raise exceptions.PlatformException(
124
- error='400',
125
- message='feature_set_name must be string')
209
+ raise exceptions.PlatformException(error='400', message='feature_set_name must be string')
126
210
  filters = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
127
211
  filters.add(field='name', values=feature_set_name)
128
212
  feature_sets = self.list(filters=filters)
129
213
  if feature_sets.items_count == 0:
130
- raise exceptions.PlatformException(
131
- error='404',
132
- message='Feature set not found. name: {!r}'.format(feature_set_name))
214
+ raise exceptions.PlatformException(error='404', message='Feature set not found. name: {!r}'.format(feature_set_name))
133
215
  elif feature_sets.items_count > 1:
134
216
  # more than one matching project
135
- raise exceptions.PlatformException(
136
- error='404',
137
- message='More than one feature_set with same name. Please "get" by id')
217
+ raise exceptions.PlatformException(error='404', message='More than one feature_set with same name. Please "get" by id')
138
218
  else:
139
219
  feature_set = feature_sets.items[0]
140
220
  else:
141
- raise exceptions.PlatformException(
142
- error='400',
143
- message='Must provide an identifier in inputs, feature_set_name or feature_set_id')
221
+ raise exceptions.PlatformException(error='400', message='Must provide an identifier in inputs, feature_set_name or feature_set_id')
144
222
  return feature_set
145
223
 
146
224
  @_api_reference.add(path='/features/sets', method='post')
147
- def create(self, name: str,
148
- size: int,
149
- set_type: str,
150
- entity_type: entities.FeatureEntityType,
151
- project_id: str = None,
152
- model_id: set = None,
153
- org_id: str = None):
225
+ def create(
226
+ self, name: str, size: int, set_type: str, entity_type: entities.FeatureEntityType, project_id: str = None, model_id: set = None, org_id: str = None
227
+ ):
154
228
  """
155
229
  Create a new Feature Set
156
230
 
@@ -169,25 +243,17 @@ class FeatureSets:
169
243
  else:
170
244
  project_id = self._project.id
171
245
 
172
- payload = {'name': name,
173
- 'size': size,
174
- 'type': set_type,
175
- 'project': project_id,
176
- 'modelId': model_id,
177
- 'entityType': entity_type}
246
+ payload = {'name': name, 'size': size, 'type': set_type, 'project': project_id, 'modelId': model_id, 'entityType': entity_type}
178
247
  if org_id is not None:
179
248
  payload['org'] = org_id
180
- success, response = self._client_api.gen_request(req_type="post",
181
- json_req=payload,
182
- path=self.URL)
249
+ success, response = self._client_api.gen_request(req_type="post", json_req=payload, path=self.URL)
183
250
 
184
251
  # exception handling
185
252
  if not success:
186
253
  raise exceptions.PlatformException(response)
187
254
 
188
255
  # return entity
189
- return entities.FeatureSet.from_json(client_api=self._client_api,
190
- _json=response.json()[0])
256
+ return entities.FeatureSet.from_json(client_api=self._client_api, _json=response.json()[0])
191
257
 
192
258
  @_api_reference.add(path='/features/sets/{id}', method='delete')
193
259
  def delete(self, feature_set_id: str):
@@ -199,8 +265,7 @@ class FeatureSets:
199
265
  :rtype: bool
200
266
  """
201
267
 
202
- success, response = self._client_api.gen_request(req_type="delete",
203
- path=f"{self.URL}/{feature_set_id}")
268
+ success, response = self._client_api.gen_request(req_type="delete", path=f"{self.URL}/{feature_set_id}")
204
269
 
205
270
  # check response
206
271
  if success:
@@ -212,31 +277,27 @@ class FeatureSets:
212
277
  @_api_reference.add(path='/features/set/{id}', method='patch')
213
278
  def update(self, feature_set: entities.FeatureSet) -> entities.FeatureSet:
214
279
  """
215
- Update a Feature Set
280
+ Update a Feature Set
216
281
 
217
- **Prerequisites**: You must be in the role of an *owner* or *developer*.
282
+ **Prerequisites**: You must be in the role of an *owner* or *developer*.
218
283
 
219
- :param dtlpy.entities.FeatureSet feature_set: FeatureSet object
220
- :return: FeatureSet
221
- :rtype: dtlpy.entities.FeatureSet
284
+ :param dtlpy.entities.FeatureSet feature_set: FeatureSet object
285
+ :return: FeatureSet
286
+ :rtype: dtlpy.entities.FeatureSet
222
287
 
223
- **Example**:
288
+ **Example**:
224
289
 
225
- .. code-block:: python
290
+ .. code-block:: python
226
291
 
227
- dl.feature_sets.update(feature_set='feature_set')
228
- """
229
- success, response = self._client_api.gen_request(req_type="patch",
230
- path=f"{self.URL}/{feature_set.id}",
231
- json_req=feature_set.to_json())
292
+ dl.feature_sets.update(feature_set='feature_set')
293
+ """
294
+ success, response = self._client_api.gen_request(req_type="patch", path=f"{self.URL}/{feature_set.id}", json_req=feature_set.to_json())
232
295
  if not success:
233
296
  raise exceptions.PlatformException(response)
234
297
 
235
298
  logger.debug("feature_set updated successfully")
236
299
  # update dataset labels
237
- feature_set = entities.FeatureSet.from_json(_json=response.json(),
238
- client_api=self._client_api,
239
- is_fetched=True)
300
+ feature_set = entities.FeatureSet.from_json(_json=response.json(), client_api=self._client_api, is_fetched=True)
240
301
  return feature_set
241
302
 
242
303
  def _build_entities_from_response(self, response_items) -> miscellaneous.List[entities.Item]:
@@ -244,9 +305,7 @@ class FeatureSets:
244
305
  jobs = [None for _ in range(len(response_items))]
245
306
  # return triggers list
246
307
  for i_item, item in enumerate(response_items):
247
- jobs[i_item] = pool.submit(entities.FeatureSet._protected_from_json,
248
- **{'client_api': self._client_api,
249
- '_json': item})
308
+ jobs[i_item] = pool.submit(entities.FeatureSet._protected_from_json, **{'client_api': self._client_api, '_json': item})
250
309
  # get all results
251
310
  results = [j.result() for j in jobs]
252
311
  # log errors
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dtlpy
3
- Version: 1.117.6
3
+ Version: 1.118.12
4
4
  Summary: SDK and CLI for Dataloop platform
5
5
  Home-page: https://github.com/dataloop-ai/dtlpy
6
6
  Author: Dataloop Team
@@ -9,12 +9,12 @@ License: Apache License 2.0
9
9
  Classifier: Programming Language :: Python
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3 :: Only
12
- Classifier: Programming Language :: Python :: 3.7
13
- Classifier: Programming Language :: Python :: 3.8
14
- Classifier: Programming Language :: Python :: 3.9
15
12
  Classifier: Programming Language :: Python :: 3.10
16
13
  Classifier: Programming Language :: Python :: 3.11
17
- Requires-Python: >=3.7
14
+ Classifier: Programming Language :: Python :: 3.12
15
+ Classifier: Programming Language :: Python :: 3.13
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Requires-Python: >=3.8
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: urllib3>=1.26
@@ -30,7 +30,7 @@ Requires-Dist: tabulate>=0.8.9
30
30
  Requires-Dist: Pillow>=7.2
31
31
  Requires-Dist: PyJWT>=2.4
32
32
  Requires-Dist: jinja2>=2.11.3
33
- Requires-Dist: attrs<=22.2.0
33
+ Requires-Dist: attrs<25.0,>=22.2.0
34
34
  Requires-Dist: prompt_toolkit>=2.0.9
35
35
  Requires-Dist: fuzzyfinder<=2.1.0
36
36
  Requires-Dist: dictdiffer>=0.8.1
@@ -41,8 +41,7 @@ Requires-Dist: diskcache>=5.4
41
41
  Requires-Dist: redis>=3.5
42
42
  Requires-Dist: inquirer
43
43
  Requires-Dist: dtlpymetrics
44
- Requires-Dist: dataclasses
45
- Requires-Dist: bson
44
+ Requires-Dist: pymongo<5.0,>=4.9
46
45
  Dynamic: author
47
46
  Dynamic: author-email
48
47
  Dynamic: classifier
@@ -144,13 +143,13 @@ dlp datasets ls --project-name your-project-name
144
143
 
145
144
  DTLPY supports multiple Python versions as follows:
146
145
 
147
- | Python Version | 3.11 | 3.10 | 3.9 | 3.8 | 3.7 | 3.6 | 3.5 |
148
- |--------------------|------|------|-----|-----|-----|-----|-----|
149
- | **dtlpy >= 1.99** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
150
- | **dtlpy 1.76–1.98**| | | ✅ | ✅ | ✅ | ✅ | |
151
- | **dtlpy >= 1.61** | ❌ | | ✅ | ✅ | ✅ | ✅ | |
152
- | **dtlpy 1.50–1.60**| ❌ | ❌ | | ✅ | ✅ | ✅ | |
153
- | **dtlpy <= 1.49** | ❌ | ❌ | | | ✅ | ✅ | ✅ |
146
+ | Python Version | 3.14 | 3.13 | 3.12 | 3.11 | 3.10 | 3.9 | 3.8 | 3.7 |
147
+ |---------------------|------|------|------|------|------|-----|-----|-----|
148
+ | **dtlpy >= 1.118** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
149
+ | **dtlpy 1.99–1.117**| | | ❌ | | ✅ | ✅ | ✅ | |
150
+ | **dtlpy 1.76–1.98** | ❌ | | ❌ | | ✅ | ✅ | ✅ | |
151
+ | **dtlpy >= 1.61** | ❌ | ❌ | | ❌ | | ✅ | ✅ | |
152
+ | **dtlpy 1.50–1.60** | ❌ | ❌ | | | ❌ | ✅ | ✅ | ✅ |
154
153
 
155
154
  ---
156
155
 
@@ -1,5 +1,5 @@
1
1
  dtlpy/__init__.py,sha256=p9qDLEQ01cTj0Xx8FkxJPHSmP7LMHMv8b5-ZWW1FPrU,20625
2
- dtlpy/__version__.py,sha256=EAXt30NxCM3wPLWcW6lyXBUATt56UfSsHHucdFvuHBo,20
2
+ dtlpy/__version__.py,sha256=zzDq0O015CukNUyAYZIC27rY6zu8_tSZPOwxCHkmfnw,21
3
3
  dtlpy/exceptions.py,sha256=EQCKs3pwhwZhgMByQN3D3LpWpdxwcKPEEt-bIaDwURM,2871
4
4
  dtlpy/new_instance.py,sha256=XegQav2hzPrPAUzuRFvUIGSPidoK-rbb02Q43NPsIpo,9982
5
5
  dtlpy/assets/__init__.py,sha256=D_hAa6NM8Zoy32sF_9b7m0b7I-BQEyBFg8-9Tg2WOeo,976
@@ -45,9 +45,9 @@ dtlpy/dlp/dlp.py,sha256=Zv9yoXwNAx4gkED-JiayN-ZkX2dPn4FB0SDx9qc7muo,4404
45
45
  dtlpy/dlp/parser.py,sha256=p-TFaiAU2c3QkI97TXzL2LDR3Eq0hGDFrTc9J2jWLh4,30551
46
46
  dtlpy/entities/__init__.py,sha256=tHndgUHZOaiXJdOY-NTvGoHcJ29EkGzz389sWQPWyaI,5050
47
47
  dtlpy/entities/analytic.py,sha256=6bMG4FD7VIDr3ca8hJ25yd9IyAuzPdaN1lsV4VD7z2Q,13739
48
- dtlpy/entities/annotation.py,sha256=0bF-N3ApbUaTWa_cIPNHMGxaWGG0q3lQos6fMDX5mCc,66661
48
+ dtlpy/entities/annotation.py,sha256=OPnkYtSC6C87tc8gWPgaPXSJmhsdZsDmg4SEM1hTJpY,66666
49
49
  dtlpy/entities/annotation_collection.py,sha256=CEYSBHhhDkC0VJdHsBSrA6TgdKGMcKeI3tFM40UJwS8,29838
50
- dtlpy/entities/app.py,sha256=vQ7hSMnuRIpoZqZc2NwjGTtWiPTCgi47x_oOgGUB-Pk,6996
50
+ dtlpy/entities/app.py,sha256=zGqJYSpq7r6D4jauSCk5vt2lqlaolFSoDvSISLa0oyA,6997
51
51
  dtlpy/entities/app_module.py,sha256=0UiAbBX1q8iEImi3nY7ySWZZHoRRwu0qUXmyXmgVAc4,3645
52
52
  dtlpy/entities/artifact.py,sha256=wtLtBuidOPbnba0ok40JyunCCIBGbAl4bP_ebK39Kk4,5711
53
53
  dtlpy/entities/assignment.py,sha256=Dc1QcfVf67GGcmDDi4ubESDuPkSgjXqdqjTBQ31faUM,14722
@@ -56,8 +56,8 @@ dtlpy/entities/bot.py,sha256=is3NUCnPg56HSjsHIvFcVkymValMqDV0uHRDC1Ib-ds,3819
56
56
  dtlpy/entities/codebase.py,sha256=7ZxEGhG_52mdZWfjg9ge6vkgLf3NDh1INZMkCHns-6Y,8864
57
57
  dtlpy/entities/collection.py,sha256=FPPPfIxOsBG1ujORPJVq8uXyF8vhIqC6N4EiI9SJzl0,1160
58
58
  dtlpy/entities/command.py,sha256=5RMQYjOGLRF8JZd7QFAPyE8utsp4eZzLApI2dEAbaqo,5301
59
- dtlpy/entities/compute.py,sha256=OpVVzJaSptOd0OzZn_HAGIiE1Z4PRUe4kI6kziU2mz0,15003
60
- dtlpy/entities/dataset.py,sha256=f4fzeOwi9MxVNzG7Bh85Ng-6OpjROEPYpDvz4yYoHqQ,54633
59
+ dtlpy/entities/compute.py,sha256=egdoRQCaJ2e5E3bA72n0nUmUfIjWBhD9sWr8nTWI3G8,15031
60
+ dtlpy/entities/dataset.py,sha256=p0AmaYsX8IlUr8lkJphXG-ke6EcONa8ediwZo2o6PgQ,55425
61
61
  dtlpy/entities/directory_tree.py,sha256=Rni6pLSWytR6yeUPgEdCCRfTg_cqLOdUc9uCqz9KT-Q,1186
62
62
  dtlpy/entities/dpk.py,sha256=XrK8X8p4Ag6LMjDrDpMstY-h_yTll_sMmKTZT6bLbWE,17923
63
63
  dtlpy/entities/driver.py,sha256=usyWqlM8KxQ-L9uCTSAmPXCu2dU4fordAN8uL0I2wRM,7720
@@ -71,7 +71,7 @@ dtlpy/entities/item.py,sha256=JoF3vTlsBUXwsC7b5KCkvDOeGP7Iby--Ww4PJQ5_UF4,35586
71
71
  dtlpy/entities/label.py,sha256=ycDYavIgKhz806plIX-64c07_TeHpDa-V7LnfFVe4Rg,3869
72
72
  dtlpy/entities/links.py,sha256=FAmEwHtsrqKet3c0UHH9u_gHgG6_OwF1-rl4xK7guME,2516
73
73
  dtlpy/entities/message.py,sha256=ApJuaKEqxATpXjNYUjGdYPu3ibQzEMo8-LtJ_4xAcPI,5865
74
- dtlpy/entities/model.py,sha256=gFZ_I6Th4KqkWS5X57aVfEoMAGtAhcPlCOXofo9ARUM,27792
74
+ dtlpy/entities/model.py,sha256=YvkLjH4Gdk9vUcuWJ3KLJe6v9fY82692kzjqCuAAU4Y,27815
75
75
  dtlpy/entities/node.py,sha256=RiCqG659Pb1PZNMewR-F7eNbU5tt713fiZY9xW6-Pes,39199
76
76
  dtlpy/entities/ontology.py,sha256=qA8XOhHPiZ7fUK2QPBola2xA8SGEdzsgCy5oozgARwc,32534
77
77
  dtlpy/entities/organization.py,sha256=Zm-tTHV82PvYyTNetRRXqvmvzBCbXEwS-gAENf7Zny4,9874
@@ -80,7 +80,7 @@ dtlpy/entities/package_defaults.py,sha256=wTD7Z7rGYjVy8AcUxTFEnkOkviiJaLVZYvduiU
80
80
  dtlpy/entities/package_function.py,sha256=M42Kvw9A8b6msAkv-wRNAQg_-UC2bejniCjeKDugudc,6314
81
81
  dtlpy/entities/package_module.py,sha256=cOkIITATkzzCQpE0sdPiBUisAz8ImlPG2YGZ0K7SypA,5151
82
82
  dtlpy/entities/package_slot.py,sha256=XBwCodQe618sQm0bmx46Npo94mEk-zUV7ZX0mDRcsD8,3946
83
- dtlpy/entities/paged_entities.py,sha256=3MKFqohp1z0PSMeCwXq8d6mqd16_s2LXckc1MKyPZeE,10980
83
+ dtlpy/entities/paged_entities.py,sha256=S7QyjUPkQhXIxS0saFU8oOfiybP5BpbNRy772GWkbGs,11175
84
84
  dtlpy/entities/pipeline.py,sha256=nDSAQlYPw7LtpdwkbjeSiORLURmuc2jHlaQ8sAdKLgY,21766
85
85
  dtlpy/entities/pipeline_execution.py,sha256=EQhW4W_G1bIPShYbJSAT--1WNQuvxVQbcQ_MCHIX0KI,9938
86
86
  dtlpy/entities/project.py,sha256=ZUx8zA3mr6N145M62R3UDPCCzO1vxfyWO6vjES-bO-g,14653
@@ -88,7 +88,7 @@ dtlpy/entities/prompt_item.py,sha256=S_cgekiUsAK0OLP_XXbfvpNv7Zr5XT86jCB2w1yyyjQ
88
88
  dtlpy/entities/recipe.py,sha256=SX0T7gw-_9Cs2FZyC_htIxQd7CwDwb2zA3SqB37vymM,11917
89
89
  dtlpy/entities/reflect_dict.py,sha256=2NaSAL-CO0T0FYRYFQlaSpbsoLT2Q18AqdHgQSLX5Y4,3273
90
90
  dtlpy/entities/resource_execution.py,sha256=1HuVV__U4jAUOtOkWlWImnM3Yts8qxMSAkMA9sBhArY,5033
91
- dtlpy/entities/service.py,sha256=sIWKx-b9JbxHGmZmgeBv5eArQrI9HB00C1Zmj7ejTc0,33925
91
+ dtlpy/entities/service.py,sha256=3E4pqn7Zg5pDaaagpyHfHuKK1uSDZ8-UbPrIzJfXuu4,33932
92
92
  dtlpy/entities/service_driver.py,sha256=N3fL_xTPLu75UBFQZO5Plxx2kpED-UIILxTYbD58rzQ,3917
93
93
  dtlpy/entities/setting.py,sha256=uXagJHtcCR3nJYClR_AUGZjz_kx3TejPcUZ8ginHFIA,8561
94
94
  dtlpy/entities/task.py,sha256=ajVIkB-3Aqm9Udn87ITvIsGwduyCTtGeqV-FjSYtZKg,19605
@@ -149,7 +149,7 @@ dtlpy/miscellaneous/list_print.py,sha256=fBGTMXFUwDG8DD4W6HyR8BTGtbTckLf4W09quNR
149
149
  dtlpy/miscellaneous/zipping.py,sha256=JplTc8UDFvO8WaD5vKuumVLN0lU_-GtHoE0doWKtmKg,5383
150
150
  dtlpy/ml/__init__.py,sha256=vPkyXpc9kcWWZ_PxyPEOsjKBJdEbowLkZr8FZIb_OBM,799
151
151
  dtlpy/ml/base_feature_extractor_adapter.py,sha256=iiEGYAx0Rdn4K46H_FlKrAv3ebTXHSxNVAmio0BxhaI,1178
152
- dtlpy/ml/base_model_adapter.py,sha256=DS5J0vdWlk2W46sDIlFq1xDapgoz8riNhcWm0itJ7QY,64077
152
+ dtlpy/ml/base_model_adapter.py,sha256=qXikBauw3jBsy3iO4CRLXku8RFTSQj8jLhgKYSWy7Jg,64136
153
153
  dtlpy/ml/metrics.py,sha256=BG2E-1Mvjv2e2No9mIJKVmvzqBvLqytKcw3hA7wVUNc,20037
154
154
  dtlpy/ml/predictions_utils.py,sha256=He_84U14oS2Ss7T_-Zj5GDiBZwS-GjMPURUh7u7DjF8,12484
155
155
  dtlpy/ml/summary_writer.py,sha256=dehDi8zmGC1sAGyy_3cpSWGXoGQSiQd7bL_Thoo8yIs,2784
@@ -157,7 +157,7 @@ dtlpy/ml/train_utils.py,sha256=t607DfyGBRrUQZ9jPmPe4V9Udzfk0hPWuw4OvKZKAeo,2440
157
157
  dtlpy/repositories/__init__.py,sha256=D2YI3ZLlSx0OlgVr8y_E9rsj-IxCDOj0MB6QTlv2NSA,2061
158
158
  dtlpy/repositories/analytics.py,sha256=dQPCYTPAIuyfVI_ppR49W7_GBj0033feIm9Gd7LW1V0,2966
159
159
  dtlpy/repositories/annotations.py,sha256=idTKzanNt-ncB0eIKE5p6WclrVGNjceI2Y7dAzDFtzY,43595
160
- dtlpy/repositories/apps.py,sha256=OE2UbxE2oGA44-7pso7fm9GErTRFyGEFK2k7ibC_h6U,16002
160
+ dtlpy/repositories/apps.py,sha256=miCYJNqte8TVFkBezE8yzueMsz593jNO9sSUfZRVV7M,15969
161
161
  dtlpy/repositories/artifacts.py,sha256=Ke2ustTNw-1eQ0onLsWY7gL2aChjXPAX5p1uQ_EzMbo,19081
162
162
  dtlpy/repositories/assignments.py,sha256=1VwJZ7ctQe1iaDDDpeYDgoj2G-TCgzolVLUEqUocd2w,25506
163
163
  dtlpy/repositories/bots.py,sha256=q1SqH01JHloljKxknhHU09psV1vQx9lPhu3g8mBBeRg,8104
@@ -171,7 +171,7 @@ dtlpy/repositories/downloader.py,sha256=EkCscU8QHa6H0-t17laFZn49Up-wNHbFd2DxVIqX
171
171
  dtlpy/repositories/dpks.py,sha256=Cu8pqFZr6MlrdidjysQT_X1hyKaL5YNUn81puOM5FX0,18508
172
172
  dtlpy/repositories/drivers.py,sha256=z9qu4I2lwa0aujkKxj0bvn71Zzs8U8byqSx8S9DAIQw,19553
173
173
  dtlpy/repositories/executions.py,sha256=BuFv7J6U2Q7om4OlC0q6tnk-1Vcw5m0adfR9a5Mj98Y,32361
174
- dtlpy/repositories/feature_sets.py,sha256=JIn1tFn8I50OPNRjKvEpgdQNcYKIGYIPjm-j-PR7uaQ,10874
174
+ dtlpy/repositories/feature_sets.py,sha256=ueYIGQIz-XYbbiuQy0YnpqO3dqJKGwtbGK0H5ZgkaBs,13892
175
175
  dtlpy/repositories/features.py,sha256=SNmECqKSfHlNgjjG_RlX-GAU3udYN9_ZYOe8mFNy010,10671
176
176
  dtlpy/repositories/integrations.py,sha256=Y5c37fQCaIkw1p5jPEbAqytgRVXuqe771eHC1hNDE7A,19491
177
177
  dtlpy/repositories/items.py,sha256=u2Vg0jOTZ9EhV1sPJdAeIUyfqBRv63Gl-IXaMlon8PM,40028
@@ -226,14 +226,12 @@ dtlpy/utilities/reports/report.py,sha256=3nEsNnIWmdPEsd21nN8vMMgaZVcPKn9iawKTTeO
226
226
  dtlpy/utilities/videos/__init__.py,sha256=SV3w51vfPuGBxaMeNemx6qEMHw_C4lLpWNGXMvdsKSY,734
227
227
  dtlpy/utilities/videos/video_player.py,sha256=LCxg0EZ_DeuwcT7U_r7MRC6Q19s0xdFb7x5Gk39PRms,24072
228
228
  dtlpy/utilities/videos/videos.py,sha256=Dj916B4TQRIhI7HZVevl3foFrCsPp0eeWwvGbgX3-_A,21875
229
- dtlpy-1.117.6.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
230
- dtlpy-1.117.6.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
231
- dtlpy-1.117.6.data/scripts/dlp.py,sha256=ZpfJvYE1_OTSorEYBphqTOutnHSb5TqOXh0y_mUCTJs,4393
232
- dtlpy-1.117.6.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
233
- tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
- tests/features/environment.py,sha256=FjOLwKvQx44TNvIidvoQaTXxvoEaSFsXQ9xkqkskkdo,18933
235
- dtlpy-1.117.6.dist-info/METADATA,sha256=d7p2fvvyIiNWCqPQP7AYTQEBw78AgqxXGr67f7G5o68,5835
236
- dtlpy-1.117.6.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
237
- dtlpy-1.117.6.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
238
- dtlpy-1.117.6.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
239
- dtlpy-1.117.6.dist-info/RECORD,,
229
+ dtlpy-1.118.12.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
230
+ dtlpy-1.118.12.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
231
+ dtlpy-1.118.12.data/scripts/dlp.py,sha256=ZpfJvYE1_OTSorEYBphqTOutnHSb5TqOXh0y_mUCTJs,4393
232
+ dtlpy-1.118.12.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
233
+ dtlpy-1.118.12.dist-info/METADATA,sha256=-R4pN-l-KYSHK8DgWK-kWCA5eLuISDOrpK-7nIUmd9I,5908
234
+ dtlpy-1.118.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
235
+ dtlpy-1.118.12.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
236
+ dtlpy-1.118.12.dist-info/top_level.txt,sha256=MSr60TGZYlwXCKxlLoZCfILRZ6pU_3L-20d2SZvygyA,6
237
+ dtlpy-1.118.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes