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 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
@@ -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
- # NUCLEUS_ENDPOINT = "https://api.scale.com/v1/nucleus"
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(self, page_size: int = 10):
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.6b4
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=qogOLOmNwv2o13kNEZkIRbI2lkp1owNZ2OnRsFJUZwU,42904
15
- nucleus/annotation_uploader.py,sha256=ipXw7QhJQXqaftHrbJn8oCGcm6aXyoL0GhQA9EcZWD4,9580
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=p7urHHYcp0Kxd-NUjkXs6dkrwnm2lyEj5vRapdQGT6Y,5519
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=pmtUpYKWgSReT-lxA1dODCL3VzY_8Tq7yuyNWL7CkUk,94080
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=VlFRE4NSLDcus86EfSHniWGLKBdjEokrnrmBtUz8pT0,28056
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.6b4.dist-info/LICENSE,sha256=jaTGyQSQIZeWMo5iyYqgbAYHR9Bdy7nOzgE-Up3m_-g,1075
89
- scale_nucleus-0.17.6b4.dist-info/METADATA,sha256=vCvgoP7nRtfkxA9t2Wgz22S4Q76ZUYBVSFm5V-iE6Ws,7973
90
- scale_nucleus-0.17.6b4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
91
- scale_nucleus-0.17.6b4.dist-info/entry_points.txt,sha256=fmqEzh6NZQyg9eFMILnWabKT8OWQTMSCdDzMiVq2zYs,32
92
- scale_nucleus-0.17.6b4.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.0
2
+ Generator: poetry-core 1.6.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any