aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set')
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/__init__.py5
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/data_availability_status.py15
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/delay_metadata.py17
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature.py54
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_metadata.py39
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_request.py91
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_materialization_metadata.py98
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_specification.py46
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_transformation_code_metadata.py13
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_window.py34
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/featureset_spec_metadata.py101
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_compute_resource.py41
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_settings.py100
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_type.py14
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_metadata.py69
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_process_code_metadata.py13
-rw-r--r--.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/timestamp_column_metadata.py14
17 files changed, 764 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/__init__.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/__init__.py
new file mode 100644
index 00000000..fdf8caba
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/__init__.py
@@ -0,0 +1,5 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+__path__ = __import__("pkgutil").extend_path(__path__, __name__)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/data_availability_status.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/data_availability_status.py
new file mode 100644
index 00000000..aa438f3b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/data_availability_status.py
@@ -0,0 +1,15 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from enum import Enum
+from azure.core import CaseInsensitiveEnumMeta
+
+
+class DataAvailabilityStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta):
+ """DataAvailabilityStatus."""
+
+ NONE = "None"
+ PENDING = "Pending"
+ INCOMPLETE = "Incomplete"
+ COMPLETE = "Complete"
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/delay_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/delay_metadata.py
new file mode 100644
index 00000000..66599605
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/delay_metadata.py
@@ -0,0 +1,17 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=unused-argument
+
+
+from typing import Any, Optional
+
+
+class DelayMetadata(object):
+ def __init__(
+ self, *, days: Optional[int] = None, hours: Optional[int] = None, minutes: Optional[int] = None, **kwargs: Any
+ ):
+ self.days = days
+ self.hours = hours
+ self.minutes = minutes
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature.py
new file mode 100644
index 00000000..2cc54815
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature.py
@@ -0,0 +1,54 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=unused-argument
+
+from typing import Any, Dict, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import Feature as RestFeature
+from azure.ai.ml._restclient.v2023_10_01.models import FeatureProperties
+from azure.ai.ml.entities._feature_store_entity.data_column_type import DataColumnType
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+
+
+class Feature(RestTranslatableMixin):
+ """Feature
+
+ :param name: The name of the feature.
+ :type name: str
+ :param data_type: The data type of the feature.
+ :type data_type: ~azure.ai.ml.entities.DataColumnType
+ :param description: The description of the feature. Defaults to None.
+ :type description: Optional[str]
+ :param tags: Tag dictionary. Tags can be added, removed, and updated. Defaults to None.
+ :type tags: Optional[dict[str, str]]
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+ """
+
+ def __init__(
+ self,
+ *,
+ name: str,
+ data_type: DataColumnType,
+ description: Optional[str] = None,
+ tags: Optional[Dict[str, str]] = None,
+ **kwargs: Any
+ ):
+ self.name = name
+ self.data_type = data_type
+ self.description = description
+ self.tags = tags
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestFeature) -> Optional["Feature"]:
+ if not obj:
+ return None
+ feature_rest_object_details: FeatureProperties = obj.properties
+ return Feature(
+ name=feature_rest_object_details.feature_name,
+ data_type=feature_rest_object_details.data_type,
+ description=feature_rest_object_details.description,
+ tags=feature_rest_object_details.tags,
+ )
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_metadata.py
new file mode 100644
index 00000000..652908e9
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_metadata.py
@@ -0,0 +1,39 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from typing import Any, List, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import (
+ FeaturesetVersionBackfillResponse as RestFeaturesetVersionBackfillResponse,
+)
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+
+
+class FeatureSetBackfillMetadata(RestTranslatableMixin):
+ """Feature Set Backfill Metadata
+
+ :param job_ids: A list of IDs of the backfill jobs. Defaults to None.
+ :type job_ids: Optional[List[str]]
+ :param type: The type of the backfill job. Defaults to None.
+ :type type: Optional[str]
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+ """
+
+ def __init__(
+ self,
+ *,
+ job_ids: Optional[List[str]] = None,
+ type: Optional[str] = None, # pylint: disable=redefined-builtin
+ # pylint: disable=unused-argument
+ **kwargs: Any
+ ) -> None:
+ self.type = type if type else "BackfillMaterialization"
+ self.job_ids = job_ids
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestFeaturesetVersionBackfillResponse) -> Optional["FeatureSetBackfillMetadata"]:
+ if not obj:
+ return None
+ return FeatureSetBackfillMetadata(job_ids=obj.job_ids)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_request.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_request.py
new file mode 100644
index 00000000..0baebf4c
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_backfill_request.py
@@ -0,0 +1,91 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=unused-argument
+
+from os import PathLike
+from pathlib import Path
+from typing import Any, Dict, List, Optional, Tuple, Union
+
+from azure.ai.ml._schema._feature_set.feature_set_backfill_schema import FeatureSetBackfillSchema
+from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY
+from azure.ai.ml.entities._feature_set.feature_window import FeatureWindow
+from azure.ai.ml.entities._feature_set.materialization_compute_resource import MaterializationComputeResource
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+from azure.ai.ml.entities._util import load_from_dict
+
+
+class FeatureSetBackfillRequest(RestTranslatableMixin):
+ """Feature Set Backfill Request
+
+ :param name: The name of the backfill job request
+ :type name: str
+ :param version: The version of the backfill job request.
+ :type version: str
+ :param feature_window: The time window for the feature set backfill request.
+ :type feature_window: ~azure.ai.ml._restclient.v2023_04_01_preview.models.FeatureWindow
+ :param description: The description of the backfill job request. Defaults to None.
+ :type description: Optional[str]
+ :param tags: Tag dictionary. Tags can be added, removed, and updated. Defaults to None.
+ :type tags: Optional[dict[str, str]]
+ :keyword resource: The compute resource settings. Defaults to None.
+ :paramtype resource: Optional[~azure.ai.ml.entities.MaterializationComputeResource]
+ :param spark_configuration: Specifies the spark configuration. Defaults to None.
+ :type spark_configuration: Optional[dict[str, str]]
+ """
+
+ def __init__(
+ self,
+ *,
+ name: str,
+ version: str,
+ feature_window: Optional[FeatureWindow] = None,
+ description: Optional[str] = None,
+ tags: Optional[Dict[str, str]] = None,
+ resource: Optional[MaterializationComputeResource] = None,
+ spark_configuration: Optional[Dict[str, str]] = None,
+ data_status: Optional[List[str]] = None,
+ job_id: Optional[str] = None,
+ **kwargs: Any,
+ ):
+ self.name = name
+ self.version = version
+ self.feature_window = feature_window
+ self.description = description
+ self.resource = resource
+ self.tags = tags
+ self.spark_configuration = spark_configuration
+ self.data_status = data_status
+ self.job_id = job_id
+
+ @classmethod
+ # pylint: disable=unused-argument
+ def _resolve_cls_and_type(cls, data: Dict, params_override: Tuple) -> Tuple:
+ """Resolve the class to use for deserializing the data. Return current class if no override is provided.
+
+ :param data: Data to deserialize.
+ :type data: dict
+ :param params_override: Parameters to override, defaults to None
+ :type params_override: typing.Optional[list]
+ :return: Class to use for deserializing the data & its "type". Type will be None if no override is provided.
+ :rtype: tuple[class, typing.Optional[str]]
+ """
+ return cls, None
+
+ @classmethod
+ def _load(
+ cls,
+ data: Optional[Dict] = None,
+ yaml_path: Optional[Union[PathLike, str]] = None,
+ params_override: Optional[list] = None,
+ **kwargs: Any,
+ ) -> "FeatureSetBackfillRequest":
+ data = data or {}
+ params_override = params_override or []
+ context = {
+ BASE_PATH_CONTEXT_KEY: Path(yaml_path).parent if yaml_path else Path("./"),
+ PARAMS_OVERRIDE_KEY: params_override,
+ }
+ loaded_schema = load_from_dict(FeatureSetBackfillSchema, data, context, **kwargs)
+ return FeatureSetBackfillRequest(**loaded_schema)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_materialization_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_materialization_metadata.py
new file mode 100644
index 00000000..afcf3fd1
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_materialization_metadata.py
@@ -0,0 +1,98 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from datetime import datetime, timedelta
+from typing import Any, Dict, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import JobBase as RestJobBase
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+from azure.ai.ml.entities._system_data import SystemData
+
+from .materialization_type import MaterializationType
+
+FeaturestoreJobTypeMap: Dict[str, MaterializationType] = {
+ "BackfillMaterialization": MaterializationType.BACKFILL_MATERIALIZATION,
+ "RecurrentMaterialization": MaterializationType.RECURRENT_MATERIALIZATION,
+}
+
+
+class FeatureSetMaterializationMetadata(RestTranslatableMixin):
+ """Feature Set Materialization Metadata
+
+ :param type: The type of the materialization job.
+ :type type: MaterializationType
+ :param feature_window_start_time: The feature window start time for the feature set materialization job.
+ :type feature_window_start_time: Optional[datetime]
+ :param feature_window_end_time: The feature window end time for the feature set materialization job.
+ :type feature_window_end_time: Optional[datetime]
+ :param name: The name of the feature set materialization job.
+ :type name: Optional[str]
+ :param display_name: The display name for the feature set materialization job.
+ :type display_name: Optional[str]
+ :param creation_context: The creation context of the feature set materialization job.
+ :type creation_context: Optional[~azure.ai.ml.entities.SystemData]
+ :param duration: current time elapsed for feature set materialization job.
+ :type duration: Optional[~datetime.timedelta]
+ :param status: The status of the feature set materialization job.
+ :type status: Optional[str]
+ :param tags: Tag dictionary. Tags can be added, removed, and updated.
+ :type tags: Optional[dict[str, str]]
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+ """
+
+ def __init__(
+ self,
+ *,
+ # pylint: disable=redefined-builtin
+ type: Optional[MaterializationType],
+ feature_window_start_time: Optional[datetime],
+ feature_window_end_time: Optional[datetime],
+ name: Optional[str],
+ display_name: Optional[str],
+ creation_context: Optional[SystemData],
+ duration: Optional[timedelta],
+ status: Optional[str],
+ tags: Optional[Dict[str, str]],
+ # pylint: disable=unused-argument
+ **kwargs: Any,
+ ):
+ self.type = type
+ self.feature_window_start_time = feature_window_start_time
+ self.feature_window_end_time = feature_window_end_time
+ self.name = name
+ self.display_name = display_name
+ self.creation_context = creation_context
+ self.duration = duration
+ self.status = status
+ self.tags = tags
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestJobBase) -> Optional["FeatureSetMaterializationMetadata"]:
+ if not obj:
+ return None
+ job_properties = obj.properties
+ job_type = job_properties.properties.get("azureml.FeatureStoreJobType", None)
+ feature_window_start_time = job_properties.properties.get("azureml.FeatureWindowStart", None)
+ feature_window_end_time = job_properties.properties.get("azureml.FeatureWindowEnd", None)
+
+ time_format = "%Y-%m-%dT%H:%M:%SZ"
+ feature_window_start_time = (
+ datetime.strptime(feature_window_start_time, time_format) if feature_window_start_time else None
+ )
+ feature_window_end_time = (
+ datetime.strptime(feature_window_end_time, time_format) if feature_window_end_time else None
+ )
+
+ return FeatureSetMaterializationMetadata(
+ type=FeaturestoreJobTypeMap.get(job_type),
+ feature_window_start_time=feature_window_start_time,
+ feature_window_end_time=feature_window_end_time,
+ name=obj.name,
+ display_name=job_properties.display_name,
+ creation_context=SystemData(created_at=obj.system_data.created_at),
+ status=job_properties.status,
+ tags=job_properties.tags,
+ duration=None,
+ )
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_specification.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_specification.py
new file mode 100644
index 00000000..88ed093f
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_set_specification.py
@@ -0,0 +1,46 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from os import PathLike
+from typing import Any, Optional, Union
+
+from azure.ai.ml._restclient.v2023_10_01.models import FeaturesetSpecification as RestFeaturesetSpecification
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+
+
+class FeatureSetSpecification(RestTranslatableMixin):
+ """Feature Set Specification
+
+ :param path: Specifies the feature set spec path to file. Defaults to None.
+ :type path: Optional[str]
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+
+ .. admonition:: Example:
+
+ .. literalinclude:: ../samples/ml_samples_featurestore.py
+ :start-after: [START configure_feature_set]
+ :end-before: [END configure_feature_set]
+ :language: python
+ :dedent: 8
+ :caption: Using Feature Set Spec to create Feature Set
+ """
+
+ def __init__(
+ self, *, path: Optional[Union[PathLike, str]] = None, **kwargs: Any
+ ): # pylint: disable=unused-argument
+ """
+ :param path: Specifies the spec path.
+ :type path: str
+ """
+ self.path = path
+
+ def _to_rest_object(self) -> RestFeaturesetSpecification:
+ return RestFeaturesetSpecification(path=self.path)
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestFeaturesetSpecification) -> Optional["FeatureSetSpecification"]:
+ if not obj:
+ return None
+ return FeatureSetSpecification(path=obj.path)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_transformation_code_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_transformation_code_metadata.py
new file mode 100644
index 00000000..5fd8544e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_transformation_code_metadata.py
@@ -0,0 +1,13 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=unused-argument
+
+from typing import Any, Optional
+
+
+class FeatureTransformationCodeMetadata(object):
+ def __init__(self, *, path: str, transformer_class: Optional[str] = None, **kwargs: Any):
+ self.path = path
+ self.transformer_class = transformer_class
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_window.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_window.py
new file mode 100644
index 00000000..758d1ecf
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/feature_window.py
@@ -0,0 +1,34 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from datetime import datetime
+from typing import Any, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import FeatureWindow as RestFeatureWindow
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+
+
+class FeatureWindow(RestTranslatableMixin):
+ """Feature window
+ :keyword feature_window_end: Specifies the feature window end time.
+ :paramtype feature_window_end: ~datetime.datetime
+ :keyword feature_window_start: Specifies the feature window start time.
+ :paramtype feature_window_start: ~datetime.datetime
+ """
+
+ # pylint: disable=unused-argument
+ def __init__(self, *, feature_window_start: datetime, feature_window_end: datetime, **kwargs: Any) -> None:
+ self.feature_window_start = feature_window_start
+ self.feature_window_end = feature_window_end
+
+ def _to_rest_object(self) -> RestFeatureWindow:
+ return RestFeatureWindow(
+ feature_window_start=self.feature_window_start, feature_window_end=self.feature_window_end
+ )
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestFeatureWindow) -> Optional["FeatureWindow"]:
+ if not obj:
+ return None
+ return FeatureWindow(feature_window_start=obj.feature_window_start, feature_window_end=obj.feature_window_end)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/featureset_spec_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/featureset_spec_metadata.py
new file mode 100644
index 00000000..4178b074
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/featureset_spec_metadata.py
@@ -0,0 +1,101 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+
+from os import PathLike
+from pathlib import Path
+from typing import Any, Dict, List, Optional, Union
+
+from marshmallow import INCLUDE
+
+from azure.ai.ml._schema._feature_set.featureset_spec_metadata_schema import FeaturesetSpecMetadataSchema
+from azure.ai.ml._schema._feature_set.featureset_spec_properties_schema import FeaturesetSpecPropertiesSchema
+from azure.ai.ml._utils.utils import load_yaml
+from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY
+from azure.ai.ml.entities._feature_store_entity.data_column import DataColumn
+from azure.ai.ml.entities._util import load_from_dict
+from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationErrorType, ValidationException
+
+from .delay_metadata import DelayMetadata
+from .feature import Feature
+from .feature_transformation_code_metadata import FeatureTransformationCodeMetadata
+from .source_metadata import SourceMetadata
+
+
+class FeaturesetSpecMetadata(object):
+ """FeaturesetSpecMetadata for feature-set."""
+
+ def __init__(
+ self,
+ *,
+ source: SourceMetadata,
+ feature_transformation_code: Optional[FeatureTransformationCodeMetadata] = None,
+ features: List[Feature],
+ index_columns: Optional[List[DataColumn]] = None,
+ source_lookback: Optional[DelayMetadata] = None,
+ temporal_join_lookback: Optional[DelayMetadata] = None,
+ **_kwargs: Any,
+ ):
+ if source.type == "featureset" and index_columns:
+ msg = f"You cannot provide index_columns for {source.type} feature source."
+ raise ValidationException(
+ message=msg,
+ no_personal_data_message=msg,
+ error_type=ValidationErrorType.INVALID_VALUE,
+ target=ErrorTarget.FEATURE_SET,
+ error_category=ErrorCategory.USER_ERROR,
+ )
+ if not index_columns and source.type != "featureset":
+ msg = f"You need to provide index_columns for {source.type} feature source."
+ raise ValidationException(
+ message=msg,
+ no_personal_data_message=msg,
+ error_type=ValidationErrorType.INVALID_VALUE,
+ target=ErrorTarget.FEATURE_SET,
+ error_category=ErrorCategory.USER_ERROR,
+ )
+ self.source = source
+ self.feature_transformation_code = feature_transformation_code
+ self.features = features
+ self.index_columns = index_columns
+ self.source_lookback = source_lookback
+ self.temporal_join_lookback = temporal_join_lookback
+
+ @classmethod
+ def load(
+ cls,
+ yaml_path: Union[PathLike, str],
+ **kwargs: Any,
+ ) -> "FeaturesetSpecMetadata":
+ """Construct an FeaturesetSpecMetadata object from yaml file.
+
+ :param yaml_path: Path to a local file as the source.
+ :type yaml_path: PathLike | str
+
+ :return: Constructed FeaturesetSpecMetadata object.
+ :rtype: FeaturesetSpecMetadata
+ """
+ yaml_dict = load_yaml(yaml_path)
+ return cls._load(yaml_data=yaml_dict, yaml_path=yaml_path, **kwargs)
+
+ @classmethod
+ def _load(
+ cls,
+ yaml_data: Optional[Dict],
+ yaml_path: Optional[Union[PathLike, str]],
+ **kwargs: Any,
+ ) -> "FeaturesetSpecMetadata":
+ yaml_data = yaml_data or {}
+ context = {
+ BASE_PATH_CONTEXT_KEY: Path(yaml_path).parent if yaml_path else Path("./"),
+ }
+ res: FeaturesetSpecMetadata = load_from_dict(
+ FeaturesetSpecMetadataSchema, yaml_data, context, "", unknown=INCLUDE, **kwargs
+ )
+
+ return res
+
+ def _to_dict(self) -> Dict:
+ res: dict = FeaturesetSpecPropertiesSchema(context={BASE_PATH_CONTEXT_KEY: "./"}, unknown=INCLUDE).dump(self)
+ return res
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_compute_resource.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_compute_resource.py
new file mode 100644
index 00000000..5bcff24b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_compute_resource.py
@@ -0,0 +1,41 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from typing import Any, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import (
+ MaterializationComputeResource as RestMaterializationComputeResource,
+)
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+
+
+class MaterializationComputeResource(RestTranslatableMixin):
+ """Materialization Compute resource
+
+ :keyword instance_type: The compute instance type.
+ :paramtype instance_type: str
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+
+ .. admonition:: Example:
+
+ .. literalinclude:: ../samples/ml_samples_compute.py
+ :start-after: [START materialization_compute_resource]
+ :end-before: [END materialization_compute_resource]
+ :language: python
+ :dedent: 8
+ :caption: Creating a MaterializationComputeResource object.
+ """
+
+ def __init__(self, *, instance_type: str, **kwargs: Any): # pylint: disable=unused-argument
+ self.instance_type = instance_type
+
+ def _to_rest_object(self) -> RestMaterializationComputeResource:
+ return RestMaterializationComputeResource(instance_type=self.instance_type)
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestMaterializationComputeResource) -> Optional["MaterializationComputeResource"]:
+ if not obj:
+ return None
+ return MaterializationComputeResource(instance_type=obj.instance_type)
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_settings.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_settings.py
new file mode 100644
index 00000000..cf6f12e0
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_settings.py
@@ -0,0 +1,100 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from typing import Any, Dict, Optional
+
+from azure.ai.ml._restclient.v2023_10_01.models import MaterializationSettings as RestMaterializationSettings
+from azure.ai.ml._restclient.v2023_10_01.models import MaterializationStoreType
+from azure.ai.ml.entities._feature_set.materialization_compute_resource import MaterializationComputeResource
+from azure.ai.ml.entities._mixins import RestTranslatableMixin
+from azure.ai.ml.entities._notification.notification import Notification
+from azure.ai.ml.entities._schedule.trigger import RecurrenceTrigger
+
+
+class MaterializationSettings(RestTranslatableMixin):
+ """Defines materialization settings.
+
+ :keyword schedule: The schedule details. Defaults to None.
+ :paramtype schedule: Optional[~azure.ai.ml.entities.RecurrenceTrigger]
+ :keyword offline_enabled: Boolean that specifies if offline store is enabled. Defaults to None.
+ :paramtype offline_enabled: Optional[bool]
+ :keyword online_enabled: Boolean that specifies if online store is enabled. Defaults to None.
+ :paramtype online_enabled: Optional[bool]
+ :keyword notification: The notification details. Defaults to None.
+ :paramtype notification: Optional[~azure.ai.ml.entities.Notification]
+ :keyword resource: The compute resource settings. Defaults to None.
+ :paramtype resource: Optional[~azure.ai.ml.entities.MaterializationComputeResource]
+ :keyword spark_configuration: The spark compute settings. Defaults to None.
+ :paramtype spark_configuration: Optional[dict[str, str]]
+ :param kwargs: A dictionary of additional configuration parameters.
+ :type kwargs: dict
+
+ .. admonition:: Example:
+
+ .. literalinclude:: ../samples/ml_samples_spark_configurations.py
+ :start-after: [START materialization_setting_configuration]
+ :end-before: [END materialization_setting_configuration]
+ :language: python
+ :dedent: 8
+ :caption: Configuring MaterializationSettings.
+ """
+
+ def __init__(
+ self,
+ *,
+ schedule: Optional[RecurrenceTrigger] = None,
+ offline_enabled: Optional[bool] = None,
+ online_enabled: Optional[bool] = None,
+ notification: Optional[Notification] = None,
+ resource: Optional[MaterializationComputeResource] = None,
+ spark_configuration: Optional[Dict[str, str]] = None,
+ # pylint: disable=unused-argument
+ **kwargs: Any,
+ ) -> None:
+ self.schedule = schedule
+ self.offline_enabled = offline_enabled
+ self.online_enabled = online_enabled
+ self.notification = notification
+ self.resource = resource
+ self.spark_configuration = spark_configuration
+
+ def _to_rest_object(self) -> RestMaterializationSettings:
+ store_type = None
+ if self.offline_enabled and self.online_enabled:
+ store_type = MaterializationStoreType.ONLINE_AND_OFFLINE
+ elif self.offline_enabled:
+ store_type = MaterializationStoreType.OFFLINE
+ elif self.online_enabled:
+ store_type = MaterializationStoreType.ONLINE
+ else:
+ store_type = MaterializationStoreType.NONE
+
+ return RestMaterializationSettings(
+ schedule=self.schedule._to_rest_object() if self.schedule else None, # pylint: disable=protected-access
+ notification=(
+ self.notification._to_rest_object() if self.notification else None # pylint: disable=protected-access
+ ),
+ resource=self.resource._to_rest_object() if self.resource else None, # pylint: disable=protected-access
+ spark_configuration=self.spark_configuration,
+ store_type=store_type,
+ )
+
+ @classmethod
+ def _from_rest_object(cls, obj: RestMaterializationSettings) -> Optional["MaterializationSettings"]:
+ if not obj:
+ return None
+ return MaterializationSettings(
+ schedule=(
+ RecurrenceTrigger._from_rest_object(obj.schedule) # pylint: disable=protected-access
+ if obj.schedule
+ else None
+ ),
+ notification=Notification._from_rest_object(obj.notification), # pylint: disable=protected-access
+ resource=MaterializationComputeResource._from_rest_object(obj.resource), # pylint: disable=protected-access
+ spark_configuration=obj.spark_configuration,
+ offline_enabled=obj.store_type
+ in {MaterializationStoreType.OFFLINE, MaterializationStoreType.ONLINE_AND_OFFLINE},
+ online_enabled=obj.store_type
+ in {MaterializationStoreType.ONLINE, MaterializationStoreType.ONLINE_AND_OFFLINE},
+ )
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_type.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_type.py
new file mode 100644
index 00000000..912d69fc
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/materialization_type.py
@@ -0,0 +1,14 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+from enum import Enum
+
+from azure.core import CaseInsensitiveEnumMeta
+
+
+class MaterializationType(str, Enum, metaclass=CaseInsensitiveEnumMeta):
+ """Materialization Type Enum"""
+
+ RECURRENT_MATERIALIZATION = 1
+ BACKFILL_MATERIALIZATION = 2
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_metadata.py
new file mode 100644
index 00000000..1c9e55fe
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_metadata.py
@@ -0,0 +1,69 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=redefined-builtin,disable=unused-argument
+
+from typing import Any, Dict, Optional
+
+from azure.ai.ml.entities._feature_set.source_process_code_metadata import SourceProcessCodeMetadata
+from azure.ai.ml.exceptions import ErrorCategory, ErrorTarget, ValidationErrorType, ValidationException
+
+from .delay_metadata import DelayMetadata
+from .timestamp_column_metadata import TimestampColumnMetadata
+
+
+class SourceMetadata(object):
+ def __init__(
+ self,
+ *,
+ type: str,
+ timestamp_column: Optional[TimestampColumnMetadata] = None,
+ path: Optional[str] = None,
+ source_delay: Optional[DelayMetadata] = None,
+ source_process_code: Optional[SourceProcessCodeMetadata] = None,
+ dict: Optional[Dict] = None,
+ **kwargs: Any,
+ ):
+ if type == "custom":
+ # For custom feature source
+ # Required: timestamp_column, dict and source_process_code.
+ # Not support: path.
+ if path:
+ self.throw_exception("path", type, should_provide=False)
+ if not (timestamp_column and dict and source_process_code):
+ self.throw_exception("timestamp_column/dict/source_process_code", type, should_provide=True)
+ elif type == "featureset":
+ # For featureset feature source
+ # Required: path.
+ # Not support: timestamp_column, source_delay and source_process_code.
+ if timestamp_column or source_delay or source_process_code:
+ self.throw_exception("timestamp_column/source_delay/source_process_code", type, should_provide=False)
+ if not path:
+ self.throw_exception("path", type, should_provide=True)
+ else:
+ # For other type feature source
+ # Required: timestamp_column, path.
+ # Not support: source_process_code, dict
+ if dict or source_process_code:
+ self.throw_exception("dict/source_process_code", type, should_provide=False)
+ if not (timestamp_column and path):
+ self.throw_exception("timestamp_column/path", type, should_provide=True)
+ self.type = type
+ self.path = path
+ self.timestamp_column = timestamp_column
+ self.source_delay = source_delay
+ self.source_process_code = source_process_code
+ self.kwargs = dict
+
+ @staticmethod
+ def throw_exception(property_names: str, type: str, should_provide: bool):
+ should_or_not = "need to" if should_provide else "cannot"
+ msg = f"You {should_or_not} provide {property_names} for {type} feature source."
+ raise ValidationException(
+ message=msg,
+ no_personal_data_message=msg,
+ error_type=ValidationErrorType.INVALID_VALUE,
+ target=ErrorTarget.FEATURE_SET,
+ error_category=ErrorCategory.USER_ERROR,
+ )
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_process_code_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_process_code_metadata.py
new file mode 100644
index 00000000..415785da
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/source_process_code_metadata.py
@@ -0,0 +1,13 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=unused-argument
+
+from typing import Any, Optional
+
+
+class SourceProcessCodeMetadata(object):
+ def __init__(self, *, path: str, process_class: Optional[str] = None, **kwargs: Any):
+ self.path = path
+ self.process_class = process_class
diff --git a/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/timestamp_column_metadata.py b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/timestamp_column_metadata.py
new file mode 100644
index 00000000..833088af
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/azure/ai/ml/entities/_feature_set/timestamp_column_metadata.py
@@ -0,0 +1,14 @@
+# ---------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# ---------------------------------------------------------
+
+# pylint: disable=redefined-builtin,disable=unused-argument
+
+
+from typing import Any, Optional
+
+
+class TimestampColumnMetadata(object):
+ def __init__(self, *, name: str, format: Optional[str] = None, **kwargs: Any):
+ self.name = name
+ self.format = format