aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py')
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py
new file mode 100644
index 00000000..a10d4a66
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_job/resource_configuration.py
@@ -0,0 +1,98 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+import json
+import logging
+from typing import Any, Dict, Optional
+
+from azure.ai.ml._restclient.v2023_04_01_preview.models import ResourceConfiguration as RestResourceConfiguration
+from azure.ai.ml.constants._job.job import JobComputePropertyFields
+from azure.ai.ml.entities._mixins import DictMixin, RestTranslatableMixin
+
+module_logger = logging.getLogger(__name__)
+
+
+class ResourceConfiguration(RestTranslatableMixin, DictMixin):
+ """Resource configuration for a job.
+
+ This class should not be instantiated directly. Instead, use its subclasses.
+
+ :keyword instance_count: The number of instances to use for the job.
+ :paramtype instance_count: Optional[int]
+ :keyword instance_type: The type of instance to use for the job.
+ :paramtype instance_type: Optional[str]
+ :keyword properties: The resource's property dictionary.
+ :paramtype properties: Optional[dict[str, Any]]
+ """
+
+ def __init__(
+ self, # pylint: disable=unused-argument
+ *,
+ instance_count: Optional[int] = None,
+ instance_type: Optional[str] = None,
+ properties: Optional[Dict[str, Any]] = None,
+ **kwargs: Any
+ ) -> None:
+ self.instance_count = instance_count
+ self.instance_type = instance_type
+ self.properties = {}
+ if properties is not None:
+ for key, value in properties.items():
+ if key == JobComputePropertyFields.AISUPERCOMPUTER:
+ self.properties[JobComputePropertyFields.SINGULARITY.lower()] = value
+ else:
+ self.properties[key] = value
+
+ def _to_rest_object(self) -> RestResourceConfiguration:
+ serialized_properties = {}
+ if self.properties:
+ for key, value in self.properties.items():
+ try:
+ if (
+ key.lower() == JobComputePropertyFields.SINGULARITY.lower()
+ or key.lower() == JobComputePropertyFields.AISUPERCOMPUTER.lower()
+ ):
+ # Map Singularity -> AISupercomputer in SDK until MFE does mapping
+ key = JobComputePropertyFields.AISUPERCOMPUTER
+ # recursively convert Ordered Dict to dictionary
+ serialized_properties[key] = json.loads(json.dumps(value))
+ except Exception: # pylint: disable=W0718
+ pass
+ return RestResourceConfiguration(
+ instance_count=self.instance_count,
+ instance_type=self.instance_type,
+ properties=serialized_properties,
+ )
+
+ @classmethod
+ def _from_rest_object( # pylint: disable=arguments-renamed
+ cls, rest_obj: Optional[RestResourceConfiguration]
+ ) -> Optional["ResourceConfiguration"]:
+ if rest_obj is None:
+ return None
+ return ResourceConfiguration(
+ instance_count=rest_obj.instance_count,
+ instance_type=rest_obj.instance_type,
+ properties=rest_obj.properties,
+ deserialize_properties=True,
+ )
+
+ def __eq__(self, other: object) -> bool:
+ if not isinstance(other, ResourceConfiguration):
+ return NotImplemented
+ return self.instance_count == other.instance_count and self.instance_type == other.instance_type
+
+ def __ne__(self, other: object) -> bool:
+ if not isinstance(other, ResourceConfiguration):
+ return NotImplemented
+ return not self.__eq__(other)
+
+ def _merge_with(self, other: "ResourceConfiguration") -> None:
+ if other:
+ if other.instance_count:
+ self.instance_count = other.instance_count
+ if other.instance_type:
+ self.instance_type = other.instance_type
+ if other.properties:
+ self.properties = other.properties