scale-nucleus 0.17.2__tar.gz → 0.17.5__tar.gz

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.
Files changed (91) hide show
  1. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/PKG-INFO +1 -1
  2. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/dataset.py +39 -1
  3. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/model.py +12 -3
  4. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/utils.py +7 -1
  5. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/pyproject.toml +1 -1
  6. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/LICENSE +0 -0
  7. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/README.md +0 -0
  8. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/client.py +0 -0
  9. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/datasets.py +0 -0
  10. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/helpers/__init__.py +0 -0
  11. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/helpers/nucleus_url.py +0 -0
  12. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/helpers/web_helper.py +0 -0
  13. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/install_completion.py +0 -0
  14. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/jobs.py +0 -0
  15. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/models.py +0 -0
  16. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/nu.py +0 -0
  17. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/reference.py +0 -0
  18. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/slices.py +0 -0
  19. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/cli/tests.py +0 -0
  20. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/__init__.py +0 -0
  21. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/annotation.py +0 -0
  22. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/annotation_uploader.py +0 -0
  23. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/async_job.py +0 -0
  24. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/async_utils.py +0 -0
  25. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/autocurate.py +0 -0
  26. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/camera_params.py +0 -0
  27. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/chip_utils.py +0 -0
  28. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/connection.py +0 -0
  29. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/constants.py +0 -0
  30. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/__init__.py +0 -0
  31. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/dataset_details.py +0 -0
  32. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/dataset_info.py +0 -0
  33. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/dataset_size.py +0 -0
  34. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/job_status.py +0 -0
  35. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/data_transfer_object/scenes_list.py +0 -0
  36. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/dataset_item.py +0 -0
  37. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/dataset_item_uploader.py +0 -0
  38. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/deprecation_warning.py +0 -0
  39. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/embedding_index.py +0 -0
  40. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/errors.py +0 -0
  41. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/evaluation_match.py +0 -0
  42. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/job.py +0 -0
  43. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/logger.py +0 -0
  44. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metadata_manager.py +0 -0
  45. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/__init__.py +0 -0
  46. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/base.py +0 -0
  47. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/categorization_metrics.py +0 -0
  48. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/cuboid_metrics.py +0 -0
  49. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/cuboid_utils.py +0 -0
  50. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/custom_types.py +0 -0
  51. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/errors.py +0 -0
  52. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/filtering.py +0 -0
  53. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/filters.py +0 -0
  54. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/metric_utils.py +0 -0
  55. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/polygon_metrics.py +0 -0
  56. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/polygon_utils.py +0 -0
  57. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/segmentation_loader.py +0 -0
  58. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/segmentation_metrics.py +0 -0
  59. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/segmentation_to_poly_metrics.py +0 -0
  60. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/metrics/segmentation_utils.py +0 -0
  61. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/model_run.py +0 -0
  62. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/package_not_installed.py +0 -0
  63. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/payload_constructor.py +0 -0
  64. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/prediction.py +0 -0
  65. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/pydantic_base.py +0 -0
  66. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/quaternion.py +0 -0
  67. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/retry_strategy.py +0 -0
  68. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/scene.py +0 -0
  69. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/slice.py +0 -0
  70. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/test_launch_integration.py +0 -0
  71. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/track.py +0 -0
  72. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/upload_response.py +0 -0
  73. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/url_utils.py +0 -0
  74. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/__init__.py +0 -0
  75. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/client.py +0 -0
  76. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/constants.py +0 -0
  77. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/data_transfer_objects/__init__.py +0 -0
  78. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/data_transfer_objects/eval_function.py +0 -0
  79. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/data_transfer_objects/scenario_test.py +0 -0
  80. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/data_transfer_objects/scenario_test_evaluations.py +0 -0
  81. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/data_transfer_objects/scenario_test_metric.py +0 -0
  82. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/errors.py +0 -0
  83. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/eval_functions/__init__.py +0 -0
  84. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/eval_functions/available_eval_functions.py +0 -0
  85. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/eval_functions/base_eval_function.py +0 -0
  86. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/eval_functions/config_classes/__init__.py +0 -0
  87. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/eval_functions/config_classes/segmentation.py +0 -0
  88. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/scenario_test.py +0 -0
  89. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/scenario_test_evaluation.py +0 -0
  90. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/scenario_test_metric.py +0 -0
  91. {scale_nucleus-0.17.2 → scale_nucleus-0.17.5}/nucleus/validate/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scale-nucleus
3
- Version: 0.17.2
3
+ Version: 0.17.5
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
@@ -104,7 +104,7 @@ from .slice import (
104
104
  from .upload_response import UploadResponse
105
105
 
106
106
  if TYPE_CHECKING:
107
- from . import NucleusClient
107
+ from . import Model, NucleusClient
108
108
 
109
109
  # TODO: refactor to reduce this file to under 1000 lines.
110
110
  # pylint: disable=C0302
@@ -2303,3 +2303,41 @@ class Dataset:
2303
2303
 
2304
2304
  else:
2305
2305
  print(f"Did not find any items in {dirname}.")
2306
+
2307
+ def upload_lidar_semseg_predictions(
2308
+ self,
2309
+ model: "Model",
2310
+ pointcloud_ref_id: str,
2311
+ predictions_s3_path: str,
2312
+ ):
2313
+ """Upload Lidar Semantic Segmentation predictions for a given pointcloud.
2314
+
2315
+ Assuming a pointcloud with only 4 points (three labeled as Car, one labeled as Person),
2316
+ the contents of the predictions s3 object should be formatted as such:
2317
+
2318
+ .. code-block:: json
2319
+
2320
+ {
2321
+ "objects": [
2322
+ { "label": "Car", "index": 1},
2323
+ { "label": "Person", "index": 2}
2324
+ ],
2325
+ "point_objects": [1, 1, 1, 2],
2326
+ "point_confidence": [0.5, 0.9, 0.9, 0.3]
2327
+ }
2328
+
2329
+ The order of the points in the `"point_objects"` should be in the same order as the points that
2330
+ were originally uploaded to Scale.
2331
+
2332
+ Parameters:
2333
+ model (:class:`Model`): Nucleus model used to store these predictions
2334
+ pointcloud_ref_id (str): The reference ID of the pointcloud for which these predictions belong to
2335
+ predictions_s3_path (str): S3 path to where the predictions are stored
2336
+
2337
+ """
2338
+
2339
+ return self._client.make_request(
2340
+ payload={"pointsSegmentationUrl": predictions_s3_path},
2341
+ route=f"dataset/{self.id}/model/{model.id}/pointcloud/{pointcloud_ref_id}/uploadLSSPrediction",
2342
+ requests_command=requests.post,
2343
+ )
@@ -211,7 +211,9 @@ class Model:
211
211
  )
212
212
  return AsyncJob.from_json(response, self._client)
213
213
 
214
- def run(self, dataset_id: str, slice_id: Optional[str]) -> str:
214
+ def run(
215
+ self, dataset_id: str, model_run_name: str, slice_id: Optional[str]
216
+ ) -> str:
215
217
  """Runs inference on the bundle associated with the model on the dataset. ::
216
218
 
217
219
  import nucleus
@@ -222,11 +224,18 @@ class Model:
222
224
 
223
225
  Args:
224
226
  dataset_id: The ID of the dataset to run inference on.
225
- job_id: The ID of the :class:`AsyncJob` used to track job progress.
227
+ model_run_name: The name of the model run.
226
228
  slice_id: The ID of the slice of the dataset to run inference on.
229
+
230
+ Returns:
231
+ job_id: The ID of the :class:`AsyncJob` used to track job progress.
227
232
  """
228
233
  response = self._client.make_request(
229
- {"dataset_id": dataset_id, "slice_id": slice_id},
234
+ {
235
+ "dataset_id": dataset_id,
236
+ "slice_id": slice_id,
237
+ "model_run_name": model_run_name,
238
+ },
230
239
  f"model/run/{self.id}/",
231
240
  requests_command=requests.post,
232
241
  )
@@ -3,6 +3,7 @@ import glob
3
3
  import io
4
4
  import json
5
5
  import os
6
+ import urllib.request
6
7
  import uuid
7
8
  from collections import defaultdict
8
9
  from typing import IO, TYPE_CHECKING, Dict, List, Sequence, Tuple, Type, Union
@@ -381,9 +382,14 @@ def serialize_and_write_to_presigned_url(
381
382
  ):
382
383
  """This helper function can be used to serialize a list of API objects to NDJSON."""
383
384
  request_id = uuid.uuid4().hex
385
+ route = f"dataset/{dataset_id}/signedUrl/{request_id}"
386
+ if os.environ.get("S3_ENDPOINT") is not None:
387
+ route += "?s3Endpoint=" + urllib.request.pathname2url(
388
+ os.environ["S3_ENDPOINT"]
389
+ )
384
390
  response = client.make_request(
385
391
  payload={},
386
- route=f"dataset/{dataset_id}/signedUrl/{request_id}",
392
+ route=route,
387
393
  requests_command=requests.get,
388
394
  )
389
395
 
@@ -25,7 +25,7 @@ ignore = ["E501", "E741", "E731", "F401"] # Easy ignore for getting it running
25
25
 
26
26
  [tool.poetry]
27
27
  name = "scale-nucleus"
28
- version = "0.17.2"
28
+ version = "0.17.5"
29
29
  description = "The official Python client library for Nucleus, the Data Platform for AI"
30
30
  license = "MIT"
31
31
  authors = ["Scale AI Nucleus Team <nucleusapi@scaleapi.com>"]
File without changes
File without changes
File without changes