scale-nucleus 0.17.6b4__py3-none-any.whl → 0.17.8__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.
- nucleus/annotation.py +22 -0
- nucleus/annotation_uploader.py +4 -4
- nucleus/constants.py +2 -2
- nucleus/dataset.py +10 -1
- nucleus/slice.py +5 -0
- {scale_nucleus-0.17.6b4.dist-info → scale_nucleus-0.17.8.dist-info}/METADATA +1 -2
- {scale_nucleus-0.17.6b4.dist-info → scale_nucleus-0.17.8.dist-info}/RECORD +10 -10
- {scale_nucleus-0.17.6b4.dist-info → scale_nucleus-0.17.8.dist-info}/WHEEL +1 -1
- {scale_nucleus-0.17.6b4.dist-info → scale_nucleus-0.17.8.dist-info}/LICENSE +0 -0
- {scale_nucleus-0.17.6b4.dist-info → scale_nucleus-0.17.8.dist-info}/entry_points.txt +0 -0
nucleus/annotation.py
CHANGED
@@ -33,6 +33,7 @@ from .constants import (
|
|
33
33
|
POLYGON_TYPE,
|
34
34
|
POSITION_KEY,
|
35
35
|
REFERENCE_ID_KEY,
|
36
|
+
TASK_ID_KEY,
|
36
37
|
TAXONOMY_NAME_KEY,
|
37
38
|
TRACK_REFERENCE_ID_KEY,
|
38
39
|
TYPE_KEY,
|
@@ -158,6 +159,7 @@ class BoxAnnotation(Annotation): # pylint: disable=R0902
|
|
158
159
|
metadata: Optional[Dict] = None
|
159
160
|
embedding_vector: Optional[list] = None
|
160
161
|
track_reference_id: Optional[str] = None
|
162
|
+
task_id: Optional[str] = None
|
161
163
|
|
162
164
|
def __post_init__(self):
|
163
165
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -178,6 +180,7 @@ class BoxAnnotation(Annotation): # pylint: disable=R0902
|
|
178
180
|
metadata=payload.get(METADATA_KEY, {}),
|
179
181
|
embedding_vector=payload.get(EMBEDDING_VECTOR_KEY, None),
|
180
182
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
183
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
181
184
|
)
|
182
185
|
|
183
186
|
def to_payload(self) -> dict:
|
@@ -195,6 +198,7 @@ class BoxAnnotation(Annotation): # pylint: disable=R0902
|
|
195
198
|
METADATA_KEY: self.metadata,
|
196
199
|
EMBEDDING_VECTOR_KEY: self.embedding_vector,
|
197
200
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
201
|
+
TASK_ID_KEY: self.task_id,
|
198
202
|
}
|
199
203
|
|
200
204
|
def __eq__(self, other):
|
@@ -209,6 +213,7 @@ class BoxAnnotation(Annotation): # pylint: disable=R0902
|
|
209
213
|
and sorted(self.metadata.items()) == sorted(other.metadata.items())
|
210
214
|
and self.embedding_vector == other.embedding_vector
|
211
215
|
and self.track_reference_id == other.track_reference_id
|
216
|
+
and self.task_id == other.task_id
|
212
217
|
)
|
213
218
|
|
214
219
|
|
@@ -275,6 +280,7 @@ class LineAnnotation(Annotation):
|
|
275
280
|
annotation_id: Optional[str] = None
|
276
281
|
metadata: Optional[Dict] = None
|
277
282
|
track_reference_id: Optional[str] = None
|
283
|
+
task_id: Optional[str] = None
|
278
284
|
|
279
285
|
def __post_init__(self):
|
280
286
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -304,6 +310,7 @@ class LineAnnotation(Annotation):
|
|
304
310
|
annotation_id=payload.get(ANNOTATION_ID_KEY, None),
|
305
311
|
metadata=payload.get(METADATA_KEY, {}),
|
306
312
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
313
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
307
314
|
)
|
308
315
|
|
309
316
|
def to_payload(self) -> dict:
|
@@ -317,6 +324,7 @@ class LineAnnotation(Annotation):
|
|
317
324
|
ANNOTATION_ID_KEY: self.annotation_id,
|
318
325
|
METADATA_KEY: self.metadata,
|
319
326
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
327
|
+
TASK_ID_KEY: self.task_id,
|
320
328
|
}
|
321
329
|
return payload
|
322
330
|
|
@@ -367,6 +375,7 @@ class PolygonAnnotation(Annotation):
|
|
367
375
|
metadata: Optional[Dict] = None
|
368
376
|
embedding_vector: Optional[list] = None
|
369
377
|
track_reference_id: Optional[str] = None
|
378
|
+
task_id: Optional[str] = None
|
370
379
|
|
371
380
|
def __post_init__(self):
|
372
381
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -397,6 +406,7 @@ class PolygonAnnotation(Annotation):
|
|
397
406
|
metadata=payload.get(METADATA_KEY, {}),
|
398
407
|
embedding_vector=payload.get(EMBEDDING_VECTOR_KEY, None),
|
399
408
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
409
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
400
410
|
)
|
401
411
|
|
402
412
|
def to_payload(self) -> dict:
|
@@ -411,6 +421,7 @@ class PolygonAnnotation(Annotation):
|
|
411
421
|
METADATA_KEY: self.metadata,
|
412
422
|
EMBEDDING_VECTOR_KEY: self.embedding_vector,
|
413
423
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
424
|
+
TASK_ID_KEY: self.task_id,
|
414
425
|
}
|
415
426
|
return payload
|
416
427
|
|
@@ -507,6 +518,7 @@ class KeypointsAnnotation(Annotation):
|
|
507
518
|
annotation_id: Optional[str] = None
|
508
519
|
metadata: Optional[Dict] = None
|
509
520
|
track_reference_id: Optional[str] = None
|
521
|
+
task_id: Optional[str] = None
|
510
522
|
|
511
523
|
def __post_init__(self):
|
512
524
|
self.metadata = self.metadata or {}
|
@@ -559,6 +571,7 @@ class KeypointsAnnotation(Annotation):
|
|
559
571
|
annotation_id=payload.get(ANNOTATION_ID_KEY, None),
|
560
572
|
metadata=payload.get(METADATA_KEY, {}),
|
561
573
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
574
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
562
575
|
)
|
563
576
|
|
564
577
|
def to_payload(self) -> dict:
|
@@ -574,6 +587,7 @@ class KeypointsAnnotation(Annotation):
|
|
574
587
|
ANNOTATION_ID_KEY: self.annotation_id,
|
575
588
|
METADATA_KEY: self.metadata,
|
576
589
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
590
|
+
TASK_ID_KEY: self.task_id,
|
577
591
|
}
|
578
592
|
return payload
|
579
593
|
|
@@ -678,6 +692,7 @@ class CuboidAnnotation(Annotation): # pylint: disable=R0902
|
|
678
692
|
annotation_id: Optional[str] = None
|
679
693
|
metadata: Optional[Dict] = None
|
680
694
|
track_reference_id: Optional[str] = None
|
695
|
+
task_id: Optional[str] = None
|
681
696
|
|
682
697
|
def __post_init__(self):
|
683
698
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -694,6 +709,7 @@ class CuboidAnnotation(Annotation): # pylint: disable=R0902
|
|
694
709
|
annotation_id=payload.get(ANNOTATION_ID_KEY, None),
|
695
710
|
metadata=payload.get(METADATA_KEY, {}),
|
696
711
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
712
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
697
713
|
)
|
698
714
|
|
699
715
|
def to_payload(self) -> dict:
|
@@ -926,6 +942,7 @@ class CategoryAnnotation(Annotation):
|
|
926
942
|
taxonomy_name: Optional[str] = None
|
927
943
|
metadata: Optional[Dict] = None
|
928
944
|
track_reference_id: Optional[str] = None
|
945
|
+
task_id: Optional[str] = None
|
929
946
|
|
930
947
|
def __post_init__(self):
|
931
948
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -938,6 +955,7 @@ class CategoryAnnotation(Annotation):
|
|
938
955
|
taxonomy_name=payload.get(TAXONOMY_NAME_KEY, None),
|
939
956
|
metadata=payload.get(METADATA_KEY, {}),
|
940
957
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
958
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
941
959
|
)
|
942
960
|
|
943
961
|
def to_payload(self) -> dict:
|
@@ -948,6 +966,7 @@ class CategoryAnnotation(Annotation):
|
|
948
966
|
REFERENCE_ID_KEY: self.reference_id,
|
949
967
|
METADATA_KEY: self.metadata,
|
950
968
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
969
|
+
TASK_ID_KEY: self.task_id,
|
951
970
|
}
|
952
971
|
if self.taxonomy_name is not None:
|
953
972
|
payload[TAXONOMY_NAME_KEY] = self.taxonomy_name
|
@@ -963,6 +982,7 @@ class MultiCategoryAnnotation(Annotation):
|
|
963
982
|
taxonomy_name: Optional[str] = None
|
964
983
|
metadata: Optional[Dict] = None
|
965
984
|
track_reference_id: Optional[str] = None
|
985
|
+
task_id: Optional[str] = None
|
966
986
|
|
967
987
|
def __post_init__(self):
|
968
988
|
self.metadata = self.metadata if self.metadata else {}
|
@@ -975,6 +995,7 @@ class MultiCategoryAnnotation(Annotation):
|
|
975
995
|
taxonomy_name=payload.get(TAXONOMY_NAME_KEY, None),
|
976
996
|
metadata=payload.get(METADATA_KEY, {}),
|
977
997
|
track_reference_id=payload.get(TRACK_REFERENCE_ID_KEY, None),
|
998
|
+
task_id=payload.get(TASK_ID_KEY, None),
|
978
999
|
)
|
979
1000
|
|
980
1001
|
def to_payload(self) -> dict:
|
@@ -985,6 +1006,7 @@ class MultiCategoryAnnotation(Annotation):
|
|
985
1006
|
REFERENCE_ID_KEY: self.reference_id,
|
986
1007
|
METADATA_KEY: self.metadata,
|
987
1008
|
TRACK_REFERENCE_ID_KEY: self.track_reference_id,
|
1009
|
+
TASK_ID_KEY: self.task_id,
|
988
1010
|
}
|
989
1011
|
if self.taxonomy_name is not None:
|
990
1012
|
payload[TAXONOMY_NAME_KEY] = self.taxonomy_name
|
nucleus/annotation_uploader.py
CHANGED
@@ -214,19 +214,19 @@ class AnnotationUploader:
|
|
214
214
|
|
215
215
|
@staticmethod
|
216
216
|
def check_for_duplicate_ids(annotations: Iterable[Annotation]):
|
217
|
-
"""Do not allow annotations to have the same (annotation_id, reference_id) tuple"""
|
217
|
+
"""Do not allow annotations to have the same (annotation_id, reference_id, task_id) tuple"""
|
218
218
|
|
219
219
|
# some annotations like CategoryAnnotation do not have annotation_id attribute, and as such, we allow duplicates
|
220
220
|
tuple_ids = [
|
221
|
-
(ann.reference_id, ann.annotation_id) # type: ignore
|
221
|
+
(ann.reference_id, ann.annotation_id, ann.task_id) # type: ignore
|
222
222
|
for ann in annotations
|
223
|
-
if hasattr(ann, "annotation_id")
|
223
|
+
if hasattr(ann, "annotation_id") and hasattr(ann, "task_id")
|
224
224
|
]
|
225
225
|
tuple_count = Counter(tuple_ids)
|
226
226
|
duplicates = {key for key, value in tuple_count.items() if value > 1}
|
227
227
|
if len(duplicates) > 0:
|
228
228
|
raise DuplicateIDError(
|
229
|
-
f"Duplicate annotations with the same (reference_id, annotation_id) properties found.\n"
|
229
|
+
f"Duplicate annotations with the same (reference_id, annotation_id, task_id) properties found.\n"
|
230
230
|
f"Duplicates: {duplicates}\n"
|
231
231
|
f"To fix this, avoid duplicate annotations, or specify a different annotation_id attribute "
|
232
232
|
f"for the failing items."
|
nucleus/constants.py
CHANGED
@@ -114,8 +114,7 @@ MODEL_PREDICTION_ID_KEY = "model_prediction_id"
|
|
114
114
|
MODEL_PREDICTION_LABEL_KEY = "model_prediction_label"
|
115
115
|
NAME_KEY = "name"
|
116
116
|
NEW_ITEMS = "new_items"
|
117
|
-
|
118
|
-
NUCLEUS_ENDPOINT = "http://localhost:3003/nucleus"
|
117
|
+
NUCLEUS_ENDPOINT = "https://api.scale.com/v1/nucleus"
|
119
118
|
NUM_SENSORS_KEY = "num_sensors"
|
120
119
|
ORIGINAL_IMAGE_URL_KEY = "original_image_url"
|
121
120
|
PAGE_SIZE_KEY = "pageSize"
|
@@ -149,6 +148,7 @@ STATUS_KEY = "status"
|
|
149
148
|
SUCCESS_STATUS_CODES = [200, 201, 202]
|
150
149
|
SLICE_TAGS_KEY = "slice_tags"
|
151
150
|
TAXONOMY_NAME_KEY = "taxonomy_name"
|
151
|
+
TASK_ID_KEY = "task_id"
|
152
152
|
TRACK_REFERENCE_ID_KEY = "track_reference_id"
|
153
153
|
TRACK_REFERENCE_IDS_KEY = "track_reference_ids"
|
154
154
|
TRACKS_KEY = "tracks"
|
nucleus/dataset.py
CHANGED
@@ -1449,11 +1449,15 @@ class Dataset:
|
|
1449
1449
|
)
|
1450
1450
|
return convert_export_payload(api_payload[EXPORTED_ROWS])
|
1451
1451
|
|
1452
|
-
def scene_and_annotation_generator(
|
1452
|
+
def scene_and_annotation_generator(
|
1453
|
+
self, slice_id=None, page_size: int = 10, only_most_recent_tasks=True
|
1454
|
+
):
|
1453
1455
|
"""Provides a generator of all Scenes and Annotations in the dataset grouped by scene.
|
1454
1456
|
|
1455
1457
|
Args:
|
1458
|
+
slice_id: Optional slice ID to filter the scenes and annotations.
|
1456
1459
|
page_size: Number of scenes to fetch per page. Default is 10.
|
1460
|
+
only_most_recent_tasks: If True, only the annotations corresponding to the most recent task for each item is returned.
|
1457
1461
|
|
1458
1462
|
Returns:
|
1459
1463
|
Generator where each element is a nested dict containing scene and annotation information of the dataset structured as a JSON.
|
@@ -1505,6 +1509,8 @@ class Dataset:
|
|
1505
1509
|
endpoint=f"dataset/{self.id}/{endpoint_name}",
|
1506
1510
|
result_key=EXPORT_FOR_TRAINING_KEY,
|
1507
1511
|
page_size=page_size,
|
1512
|
+
sliceId=slice_id,
|
1513
|
+
onlyMostRecentTask=only_most_recent_tasks,
|
1508
1514
|
)
|
1509
1515
|
|
1510
1516
|
for data in json_generator:
|
@@ -1514,12 +1520,14 @@ class Dataset:
|
|
1514
1520
|
self,
|
1515
1521
|
query: Optional[str] = None,
|
1516
1522
|
use_mirrored_images: bool = False,
|
1523
|
+
only_most_recent_tasks: bool = True,
|
1517
1524
|
) -> Iterable[Dict[str, Union[DatasetItem, Dict[str, List[Annotation]]]]]:
|
1518
1525
|
"""Provides a generator of all DatasetItems and Annotations in the dataset.
|
1519
1526
|
|
1520
1527
|
Args:
|
1521
1528
|
query: Structured query compatible with the `Nucleus query language <https://nucleus.scale.com/docs/query-language-reference>`_.
|
1522
1529
|
use_mirrored_images: If True, returns the location of the mirrored image hosted in Scale S3. Useful when the original image is no longer available.
|
1530
|
+
only_most_recent_tasks: If True, only the annotations corresponding to the most recent task for each item is returned.
|
1523
1531
|
|
1524
1532
|
Returns:
|
1525
1533
|
Generator where each element is a dict containing the DatasetItem
|
@@ -1546,6 +1554,7 @@ class Dataset:
|
|
1546
1554
|
page_size=10000, # max ES page size
|
1547
1555
|
query=query,
|
1548
1556
|
chip=use_mirrored_images,
|
1557
|
+
onlyMostRecentTask=only_most_recent_tasks,
|
1549
1558
|
)
|
1550
1559
|
for data in json_generator:
|
1551
1560
|
for ia in convert_export_payload([data], has_predictions=False):
|
nucleus/slice.py
CHANGED
@@ -410,9 +410,13 @@ class Slice:
|
|
410
410
|
|
411
411
|
def items_and_annotation_generator(
|
412
412
|
self,
|
413
|
+
use_mirrored_images: bool = False,
|
413
414
|
) -> Iterable[Dict[str, Union[DatasetItem, Dict[str, List[Annotation]]]]]:
|
414
415
|
"""Provides a generator of all DatasetItems and Annotations in the slice.
|
415
416
|
|
417
|
+
Args:
|
418
|
+
use_mirrored_images: If True, returns the location of the mirrored image hosted in Scale S3. Useful when the original image is no longer available.
|
419
|
+
|
416
420
|
Returns:
|
417
421
|
Generator where each element is a dict containing the DatasetItem
|
418
422
|
and all of its associated Annotations, grouped by type (e.g. box).
|
@@ -436,6 +440,7 @@ class Slice:
|
|
436
440
|
endpoint=f"slice/{self.id}/exportForTrainingPage",
|
437
441
|
result_key=EXPORT_FOR_TRAINING_KEY,
|
438
442
|
page_size=10000, # max ES page size
|
443
|
+
chip=use_mirrored_images,
|
439
444
|
)
|
440
445
|
for data in json_generator:
|
441
446
|
for ia in convert_export_payload([data], has_predictions=False):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: scale-nucleus
|
3
|
-
Version: 0.17.
|
3
|
+
Version: 0.17.8
|
4
4
|
Summary: The official Python client library for Nucleus, the Data Platform for AI
|
5
5
|
Home-page: https://scale.com/nucleus
|
6
6
|
License: MIT
|
@@ -14,7 +14,6 @@ Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.9
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
|
-
Classifier: Programming Language :: Python :: 3.12
|
18
17
|
Provides-Extra: launch
|
19
18
|
Provides-Extra: metrics
|
20
19
|
Requires-Dist: Pillow (>=7.1.2)
|
@@ -11,22 +11,22 @@ cli/reference.py,sha256=RuHVhmGTZNe0MfwpL96YjJdaH0OJzg98rz4xeIu4hJU,256
|
|
11
11
|
cli/slices.py,sha256=nxq_Zg1m5oXuhz0ibyHkElvyVWt1AcE9tG-fN4CQxF8,1397
|
12
12
|
cli/tests.py,sha256=NiwEVGuF08_jlCiKEIjKhwq55NvyU4xvPEJW5MJmdZg,4590
|
13
13
|
nucleus/__init__.py,sha256=RSXlW0oL5ThX9LdRb5Eng6W9Fn_H9bqNZhAQrFQWMx8,49712
|
14
|
-
nucleus/annotation.py,sha256=
|
15
|
-
nucleus/annotation_uploader.py,sha256=
|
14
|
+
nucleus/annotation.py,sha256=s79v-BmI3MjJiRoZCEoAeFUKn43Pghl63ZJI3P7mHc4,43803
|
15
|
+
nucleus/annotation_uploader.py,sha256=CXvIjDNuQczGk8poNLimP7s2owRwEG7xxycMjFm0pYI,9639
|
16
16
|
nucleus/async_job.py,sha256=yjPDwyyLIrF0K67anGB40xux1AMhWrq1X_hPvQ_ewzc,6890
|
17
17
|
nucleus/async_utils.py,sha256=ayqajeSonX68fre3u8AoNRYT8GFGPd4_iu6YPQTvpvU,8226
|
18
18
|
nucleus/autocurate.py,sha256=kI0vRqad_An8SN5JX6sSdGP_vNHJI2Pq4NINHuhNf2U,1080
|
19
19
|
nucleus/camera_params.py,sha256=fl17aaSAZDAJIWo6F2HFvM6HKGcQh9fXvo4t3RzGMc4,3726
|
20
20
|
nucleus/chip_utils.py,sha256=1J1NHCh0ZptW8cdeuLWFM_cXuwQVSQFtSF8kXU8s2tI,6743
|
21
21
|
nucleus/connection.py,sha256=q212plDtWoonfXWMVaCqTZBPZTy8dnNSGj0YeAR1Qmk,2990
|
22
|
-
nucleus/constants.py,sha256=
|
22
|
+
nucleus/constants.py,sha256=6Ce2RUb2S9vd4ww6sDG27ueE_HChIPVHC0CwQ60Czig,5490
|
23
23
|
nucleus/data_transfer_object/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
24
24
|
nucleus/data_transfer_object/dataset_details.py,sha256=1YGvfKkPSqDrXK_y5mBXyRThY07tU-nwOCYTkYCSl6k,214
|
25
25
|
nucleus/data_transfer_object/dataset_info.py,sha256=5P_gpvAyaqXxj2ZQuzLkGN2XROaN9Me56OLybCmO3R4,940
|
26
26
|
nucleus/data_transfer_object/dataset_size.py,sha256=oe-dXaMLpsQRDcJQRZ9Ja8JTagYz4dviZuTognEylp0,111
|
27
27
|
nucleus/data_transfer_object/job_status.py,sha256=hxvyNdrdVdj3UpEfwvryKC_QCJQEC9ru6IPjhPFcK44,2038
|
28
28
|
nucleus/data_transfer_object/scenes_list.py,sha256=iTHE6vA47bRB6ciyEU4LArUXEXco4ArnGvZTGTeK8xs,432
|
29
|
-
nucleus/dataset.py,sha256=
|
29
|
+
nucleus/dataset.py,sha256=azWq0ftX2QOx2pxYDqFuwRPo48DK9I_F_AO_g3xPPIs,94663
|
30
30
|
nucleus/dataset_item.py,sha256=y9ia47i31lX2wvw6EkVAxeHburMrrZpuyjEGlstWa2A,10166
|
31
31
|
nucleus/dataset_item_uploader.py,sha256=BD0FTgimEFYmDbnOLIaQZS3OLDfLe5wumADDmgMX598,6684
|
32
32
|
nucleus/deprecation_warning.py,sha256=5C9dVusR5UkUQnW2MrRkIXCfbc8ULc7xOaB134agNKk,976
|
@@ -61,7 +61,7 @@ nucleus/pydantic_base.py,sha256=ZBUVrf948qzaxSuTaiDWxPC_Y8AOBdLKfi52ozGpGWk,1388
|
|
61
61
|
nucleus/quaternion.py,sha256=TAnwj4arQXoTeofFgZMdZsCyxAMnu23N6to0F1WFNwk,1111
|
62
62
|
nucleus/retry_strategy.py,sha256=daKZqjZYCh87WtXoVUuR9BZu2TTE-CtOFEYZ-d6xVMY,312
|
63
63
|
nucleus/scene.py,sha256=qZQD7QdF6Ics8kuszsl278NCowKVnAkVNGHvPr5luRo,26937
|
64
|
-
nucleus/slice.py,sha256=
|
64
|
+
nucleus/slice.py,sha256=DvZQZS9HvQku9Tj7SHLaE7bv5x7Z72_4T_cio-d2hdA,28312
|
65
65
|
nucleus/test_launch_integration.py,sha256=oFKLZWjFGeUvwVV0XAAjP1Y_oKFkaouh_SXVPXtCvcE,10688
|
66
66
|
nucleus/track.py,sha256=ROmOyzYZKrHVTnLBhnk-qEBtklD_EDsSnRcGYE8xG4E,3247
|
67
67
|
nucleus/upload_response.py,sha256=wR_pfZCBju1vGiGqbVgk8zhM6GhD3ebYxyGBm8y0GvY,3287
|
@@ -85,8 +85,8 @@ nucleus/validate/scenario_test.py,sha256=pCmM157dblSciZCDTw-f47Fpy3OUZFgXmokdhIL
|
|
85
85
|
nucleus/validate/scenario_test_evaluation.py,sha256=Q0WzaEE9uUbPVc4EHlCoKjhJcqMNt4QbyiiJx12VOR0,4075
|
86
86
|
nucleus/validate/scenario_test_metric.py,sha256=AhVFOB1ULwBqlZ2X_Au1TXy4iQELljtzR4ZpeLB35So,1209
|
87
87
|
nucleus/validate/utils.py,sha256=VjdIJj9Pii4z4L6xbvClAc7ra_J7cX0vWB_J2X6yrGE,185
|
88
|
-
scale_nucleus-0.17.
|
89
|
-
scale_nucleus-0.17.
|
90
|
-
scale_nucleus-0.17.
|
91
|
-
scale_nucleus-0.17.
|
92
|
-
scale_nucleus-0.17.
|
88
|
+
scale_nucleus-0.17.8.dist-info/LICENSE,sha256=jaTGyQSQIZeWMo5iyYqgbAYHR9Bdy7nOzgE-Up3m_-g,1075
|
89
|
+
scale_nucleus-0.17.8.dist-info/METADATA,sha256=XZWcJybnh0CG0lxxioOUf7KC-s2HNpkduNqvRmxU7k0,7920
|
90
|
+
scale_nucleus-0.17.8.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
|
91
|
+
scale_nucleus-0.17.8.dist-info/entry_points.txt,sha256=fmqEzh6NZQyg9eFMILnWabKT8OWQTMSCdDzMiVq2zYs,32
|
92
|
+
scale_nucleus-0.17.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|