scale-nucleus 0.16.13__tar.gz → 0.16.14__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.16.13 → scale_nucleus-0.16.14}/PKG-INFO +2 -2
  2. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/__init__.py +16 -8
  3. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/job_status.py +12 -6
  4. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/pydantic_base.py +12 -6
  5. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/test_launch_integration.py +12 -8
  6. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/utils.py +1 -1
  7. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/data_transfer_objects/eval_function.py +10 -6
  8. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/data_transfer_objects/scenario_test.py +10 -6
  9. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/data_transfer_objects/scenario_test_evaluations.py +11 -7
  10. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/pyproject.toml +2 -2
  11. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/LICENSE +0 -0
  12. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/README.md +0 -0
  13. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/client.py +0 -0
  14. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/datasets.py +0 -0
  15. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/helpers/__init__.py +0 -0
  16. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/helpers/nucleus_url.py +0 -0
  17. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/helpers/web_helper.py +0 -0
  18. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/install_completion.py +0 -0
  19. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/jobs.py +0 -0
  20. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/models.py +0 -0
  21. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/nu.py +0 -0
  22. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/reference.py +0 -0
  23. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/slices.py +0 -0
  24. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/cli/tests.py +0 -0
  25. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/annotation.py +0 -0
  26. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/annotation_uploader.py +0 -0
  27. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/async_job.py +0 -0
  28. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/async_utils.py +0 -0
  29. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/autocurate.py +0 -0
  30. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/camera_params.py +0 -0
  31. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/chip_utils.py +0 -0
  32. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/connection.py +0 -0
  33. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/constants.py +0 -0
  34. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/__init__.py +0 -0
  35. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/dataset_details.py +0 -0
  36. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/dataset_info.py +0 -0
  37. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/dataset_size.py +0 -0
  38. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/data_transfer_object/scenes_list.py +0 -0
  39. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/dataset.py +0 -0
  40. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/dataset_item.py +0 -0
  41. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/dataset_item_uploader.py +0 -0
  42. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/deprecation_warning.py +0 -0
  43. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/embedding_index.py +0 -0
  44. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/errors.py +0 -0
  45. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/evaluation_match.py +0 -0
  46. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/job.py +0 -0
  47. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/logger.py +0 -0
  48. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metadata_manager.py +0 -0
  49. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/__init__.py +0 -0
  50. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/base.py +0 -0
  51. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/categorization_metrics.py +0 -0
  52. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/cuboid_metrics.py +0 -0
  53. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/cuboid_utils.py +0 -0
  54. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/custom_types.py +0 -0
  55. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/errors.py +0 -0
  56. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/filtering.py +0 -0
  57. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/filters.py +0 -0
  58. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/metric_utils.py +0 -0
  59. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/polygon_metrics.py +0 -0
  60. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/polygon_utils.py +0 -0
  61. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/segmentation_loader.py +0 -0
  62. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/segmentation_metrics.py +0 -0
  63. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/segmentation_to_poly_metrics.py +0 -0
  64. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/metrics/segmentation_utils.py +0 -0
  65. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/model.py +0 -0
  66. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/model_run.py +0 -0
  67. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/package_not_installed.py +0 -0
  68. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/payload_constructor.py +0 -0
  69. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/prediction.py +0 -0
  70. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/quaternion.py +0 -0
  71. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/retry_strategy.py +0 -0
  72. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/scene.py +0 -0
  73. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/slice.py +0 -0
  74. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/track.py +0 -0
  75. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/upload_response.py +0 -0
  76. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/url_utils.py +0 -0
  77. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/__init__.py +0 -0
  78. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/client.py +0 -0
  79. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/constants.py +0 -0
  80. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/data_transfer_objects/__init__.py +0 -0
  81. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/data_transfer_objects/scenario_test_metric.py +0 -0
  82. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/errors.py +0 -0
  83. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/eval_functions/__init__.py +0 -0
  84. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/eval_functions/available_eval_functions.py +0 -0
  85. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/eval_functions/base_eval_function.py +0 -0
  86. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/eval_functions/config_classes/__init__.py +0 -0
  87. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/eval_functions/config_classes/segmentation.py +0 -0
  88. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/scenario_test.py +0 -0
  89. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/scenario_test_evaluation.py +0 -0
  90. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/scenario_test_metric.py +0 -0
  91. {scale_nucleus-0.16.13 → scale_nucleus-0.16.14}/nucleus/validate/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scale-nucleus
3
- Version: 0.16.13
3
+ Version: 0.16.14
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
@@ -24,7 +24,7 @@ Requires-Dist: click (>=7.1.2,<9.0)
24
24
  Requires-Dist: nest-asyncio (>=1.5.1,<2.0.0)
25
25
  Requires-Dist: numpy (>=1.19.5) ; python_version >= "3.7" and python_version < "3.10"
26
26
  Requires-Dist: numpy (>=1.22.0) ; python_version >= "3.10"
27
- Requires-Dist: pydantic (>=1.8.2,<2.0.0)
27
+ Requires-Dist: pydantic (>=1.8.2)
28
28
  Requires-Dist: python-dateutil (>=2.8.2,<3.0.0)
29
29
  Requires-Dist: questionary (>=1.10.0,<2.0.0)
30
30
  Requires-Dist: rasterio (>=1.2.0) ; extra == "metrics"
@@ -45,13 +45,17 @@ __all__ = [
45
45
  import datetime
46
46
  import os
47
47
  import warnings
48
- from typing import Any, Dict, List, Optional, Tuple, Union
49
-
50
- try:
51
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
52
- import pydantic.v1 as pydantic
53
- except ImportError:
54
- import pydantic
48
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
49
+
50
+ if TYPE_CHECKING:
51
+ # Backwards compatibility is even uglier with mypy
52
+ from pydantic.v1 import parse_obj_as
53
+ else:
54
+ try:
55
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
56
+ from pydantic.v1 import parse_obj_as
57
+ except ImportError:
58
+ from pydantic import parse_obj_as
55
59
 
56
60
  import requests
57
61
  import tqdm
@@ -216,7 +220,11 @@ class NucleusClient:
216
220
  List of all datasets accessible to user
217
221
  """
218
222
  response = self.make_request({}, "dataset/details", requests.get)
219
- dataset_details = pydantic.parse_obj_as(List[DatasetDetails], response)
223
+ dataset_details = (
224
+ parse_obj_as( # pylint: disable=used-before-assignment
225
+ List[DatasetDetails], response
226
+ )
227
+ )
220
228
  return [
221
229
  Dataset(d.id, client=self, name=d.name) for d in dataset_details
222
230
  ]
@@ -1,15 +1,19 @@
1
1
  # pylint: disable=E0213
2
2
 
3
3
  from datetime import datetime
4
- from typing import List, Optional, Union
4
+ from typing import TYPE_CHECKING, List, Optional, Union
5
5
 
6
6
  from dateutil.parser import ParserError, parse
7
7
 
8
- try:
9
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
8
+ if TYPE_CHECKING:
9
+ # Backwards compatibility is even uglier with mypy
10
10
  from pydantic.v1 import validator
11
- except ImportError:
12
- from pydantic import validator
11
+ else:
12
+ try:
13
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
14
+ from pydantic.v1 import validator
15
+ except ImportError:
16
+ from pydantic import validator
13
17
 
14
18
  from nucleus.constants import JOB_REQ_LIMIT
15
19
  from nucleus.job import CustomerJobTypes
@@ -24,7 +28,9 @@ class JobInfoRequestPayload(ImmutableModel):
24
28
  limit: Optional[int]
25
29
  show_completed: bool
26
30
 
27
- @validator("from_date", "to_date")
31
+ @validator( # pylint: disable=used-before-assignment
32
+ "from_date", "to_date"
33
+ )
28
34
  def ensure_date_format(cls, date):
29
35
  if date is None:
30
36
  return None
@@ -4,14 +4,20 @@ We started using pydantic during v1 and are kind of stuck with it now unless we
4
4
  As a library we want to support v1 and v2 such that we're not causing downstream problems for our users.
5
5
  This means we have to do some import shenanigans to support both v1 and v2.
6
6
  """
7
- try:
8
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
9
- from pydantic.v1 import BaseModel # pylint: disable=no-name-in-module
10
- except ImportError:
11
- from pydantic import BaseModel
7
+ from typing import TYPE_CHECKING
12
8
 
9
+ if TYPE_CHECKING:
10
+ # Backwards compatibility is even uglier with mypy
11
+ from pydantic.v1 import BaseModel, Extra, ValidationError
12
+ else:
13
+ try:
14
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
15
+ from pydantic.v1 import BaseModel # pylint: disable=no-name-in-module
16
+ except ImportError:
17
+ from pydantic import BaseModel
13
18
 
14
- class ImmutableModel(BaseModel):
19
+
20
+ class ImmutableModel(BaseModel): # pylint: disable=used-before-assignment
15
21
  class Config:
16
22
  allow_mutation = False
17
23
 
@@ -1,24 +1,28 @@
1
1
  import io
2
- from typing import Any, Callable, Dict, List, Optional, Type
2
+ from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Type
3
3
 
4
4
  from PIL import Image, ImageDraw
5
5
 
6
- try:
7
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
6
+ if TYPE_CHECKING:
7
+ # Backwards compatibility is even uglier with mypy
8
8
  from pydantic.v1 import BaseModel, Extra, ValidationError
9
- except ImportError:
10
- from pydantic import BaseModel, Extra, ValidationError
9
+ else:
10
+ try:
11
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
12
+ from pydantic.v1 import BaseModel, Extra, ValidationError
13
+ except ImportError:
14
+ from pydantic import BaseModel, Extra, ValidationError
11
15
 
12
16
  # From scaleapi/server/src/lib/select/api/types.ts
13
17
  # These classes specify how user models must pass output to Launch + Nucleus.
14
18
 
15
19
 
16
- class PointModel(BaseModel):
20
+ class PointModel(BaseModel): # pylint: disable=used-before-assignment
17
21
  x: float
18
22
  y: float
19
23
 
20
24
  class Config:
21
- extra = Extra.forbid
25
+ extra = Extra.forbid # pylint: disable=used-before-assignment
22
26
 
23
27
 
24
28
  class BoxGeometryModel(BaseModel):
@@ -106,7 +110,7 @@ def verify_output(
106
110
  for annotation in annotation_list:
107
111
  try:
108
112
  model.parse_obj(annotation)
109
- except ValidationError as e:
113
+ except ValidationError as e: # pylint: disable=used-before-assignment
110
114
  raise ValueError("Failed validation") from e
111
115
  if annotation["type"] != annotation_type:
112
116
  raise ValueError(
@@ -363,7 +363,7 @@ def upload_to_presigned_url(presigned_url: str, file_pointer: IO):
363
363
  # TODO optimize this further to deal with truly huge files and flaky internet connection.
364
364
  upload_response = requests.put(presigned_url, file_pointer)
365
365
  if not upload_response.ok:
366
- raise HTTPError(
366
+ raise HTTPError( # type: ignore
367
367
  f"Tried to put a file to url, but failed with status {upload_response.status_code}. The detailed error was: {upload_response.text}"
368
368
  )
369
369
 
@@ -1,10 +1,14 @@
1
- from typing import Any, Dict, List, Optional
1
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional
2
2
 
3
- try:
4
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
3
+ if TYPE_CHECKING:
4
+ # Backwards compatibility is even uglier with mypy
5
5
  from pydantic.v1 import validator
6
- except ImportError:
7
- from pydantic import validator
6
+ else:
7
+ try:
8
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
9
+ from pydantic.v1 import validator
10
+ except ImportError:
11
+ from pydantic import validator
8
12
 
9
13
  from ...pydantic_base import ImmutableModel
10
14
  from ..constants import ThresholdComparison
@@ -63,7 +67,7 @@ class EvaluationCriterion(ImmutableModel):
63
67
  threshold: float
64
68
  eval_func_arguments: Dict[str, Any]
65
69
 
66
- @validator("eval_function_id")
70
+ @validator("eval_function_id") # pylint: disable=used-before-assignment
67
71
  def valid_eval_function_id(cls, v): # pylint: disable=no-self-argument
68
72
  if not v.startswith("ef_"):
69
73
  raise ValueError(f"Expected field to start with 'ef_', got '{v}'")
@@ -1,10 +1,14 @@
1
- from typing import List
1
+ from typing import TYPE_CHECKING, List
2
2
 
3
- try:
4
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
3
+ if TYPE_CHECKING:
4
+ # Backwards compatibility is even uglier with mypy
5
5
  from pydantic.v1 import validator
6
- except ImportError:
7
- from pydantic import validator
6
+ else:
7
+ try:
8
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
9
+ from pydantic.v1 import validator
10
+ except ImportError:
11
+ from pydantic import validator
8
12
 
9
13
  from nucleus.pydantic_base import ImmutableModel
10
14
 
@@ -19,7 +23,7 @@ class CreateScenarioTestRequest(ImmutableModel):
19
23
  slice_id: str
20
24
  evaluation_functions: List[EvalFunctionListEntry]
21
25
 
22
- @validator("slice_id")
26
+ @validator("slice_id") # pylint: disable=used-before-assignment
23
27
  def startswith_slice_indicator(cls, v): # pylint: disable=no-self-argument
24
28
  if not v.startswith("slc_"):
25
29
  raise ValueError(f"Expected field to start with 'slc_', got '{v}'")
@@ -1,10 +1,14 @@
1
- from typing import Optional
1
+ from typing import TYPE_CHECKING, Optional
2
2
 
3
- try:
4
- # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
3
+ if TYPE_CHECKING:
4
+ # Backwards compatibility is even uglier with mypy
5
5
  from pydantic.v1 import root_validator, validator
6
- except ImportError:
7
- from pydantic import root_validator, validator
6
+ else:
7
+ try:
8
+ # NOTE: we always use pydantic v1 but have to do these shenanigans to support both v1 and v2
9
+ from pydantic.v1 import root_validator, validator
10
+ except ImportError:
11
+ from pydantic import root_validator, validator
8
12
 
9
13
  from nucleus.pydantic_base import ImmutableModel
10
14
 
@@ -16,7 +20,7 @@ class EvaluationResult(ImmutableModel):
16
20
  score: float = 0
17
21
  weight: float = 1
18
22
 
19
- @root_validator()
23
+ @root_validator() # pylint: disable=used-before-assignment
20
24
  def is_item_or_scene_provided(
21
25
  cls, values
22
26
  ): # pylint: disable=no-self-argument
@@ -31,7 +35,7 @@ class EvaluationResult(ImmutableModel):
31
35
  )
32
36
  return values
33
37
 
34
- @validator("weight")
38
+ @validator("weight") # pylint: disable=used-before-assignment
35
39
  def is_normalized(cls, v): # pylint: disable=no-self-argument
36
40
  if 0 <= v <= 1:
37
41
  return v
@@ -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.16.13"
28
+ version = "0.16.14"
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>"]
@@ -41,7 +41,7 @@ requests = "^2.23.0"
41
41
  tqdm = "^4.41.0"
42
42
  aiohttp = "^3.7.4"
43
43
  nest-asyncio = "^1.5.1"
44
- pydantic = "^1.8.2"
44
+ pydantic = ">=1.8.2"
45
45
  numpy = [{ version = ">=1.19.5", python = ">=3.7,<3.10" }, { version = ">=1.22.0", python = ">=3.10"}]
46
46
  scipy = { version=">=1.4.1", optional = true } # NOTE: COLAB has 1.4.1 and has problems updating
47
47
  click = ">=7.1.2,<9.0" # NOTE: COLAB has 7.1.2 and has problems updating
File without changes