'''
# Amazon SageMaker Construct Library

This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.

```python
import aws_cdk.aws_sagemaker as sagemaker
```

<!--BEGIN CFNONLY DISCLAIMER-->

There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed:

* Search [Construct Hub for SageMaker construct libraries](https://constructs.dev/search?q=sagemaker)
* Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::SageMaker resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html) directly.

> An experimental construct library for this service is available in preview. Since it is not stable yet, it is distributed
> as a separate package so that you can pin its version independently of the rest of the CDK. See the package:
>
> <span class="package-reference">@aws-cdk/aws-sagemaker-alpha</span>

<!--BEGIN CFNONLY DISCLAIMER-->

There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet.
However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly.

For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::SageMaker](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html).

(Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.)

<!--END CFNONLY DISCLAIMER-->
'''
import abc
import builtins
import datetime
import enum
import typing

import jsii
import publication
import typing_extensions

from typeguard import check_type

from .._jsii import *

import constructs as _constructs_77d1e7e8
from .. import (
    CfnResource as _CfnResource_9df397a6,
    CfnTag as _CfnTag_f6864754,
    IInspectable as _IInspectable_c2943556,
    IResolvable as _IResolvable_da3f097b,
    IResource as _IResource_c80c4260,
    ITaggable as _ITaggable_36806126,
    TagManager as _TagManager_0a598cb3,
    TreeInspector as _TreeInspector_488e0dd5,
)
from ..aws_iam import Grant as _Grant_a7ae64f8, IGrantable as _IGrantable_71c4f5de


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnApp(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnApp",
):
    '''Creates a running app for the specified UserProfile.

    This operation is automatically invoked by Amazon SageMaker upon access to the associated Domain, and when new kernel configurations are selected by the user. A user may have multiple Apps active simultaneously.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html
    :cloudformationResource: AWS::SageMaker::App
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_app = sagemaker.CfnApp(self, "MyCfnApp",
            app_name="appName",
            app_type="appType",
            domain_id="domainId",
            user_profile_name="userProfileName",
        
            # the properties below are optional
            resource_spec=sagemaker.CfnApp.ResourceSpecProperty(
                instance_type="instanceType",
                sage_maker_image_arn="sageMakerImageArn",
                sage_maker_image_version_arn="sageMakerImageVersionArn"
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        app_name: builtins.str,
        app_type: builtins.str,
        domain_id: builtins.str,
        user_profile_name: builtins.str,
        resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnApp.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param app_name: The name of the app.
        :param app_type: The type of app.
        :param domain_id: The domain ID.
        :param user_profile_name: The user profile name.
        :param resource_spec: Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__da207547ea530dc451bd8f33c6174b52ddcb5c9c348d4df84894bf6a2e2ada4a)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnAppProps(
            app_name=app_name,
            app_type=app_type,
            domain_id=domain_id,
            user_profile_name=user_profile_name,
            resource_spec=resource_spec,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__76b99b25d5846497c07368fb764a277782458a65eed58ef9398494227f100421)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ed187eab5bee18dd53b1c928d2ccb0e90ab23f4cc25f17ae924a522946f79c87)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrAppArn")
    def attr_app_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the app, such as ``arn:aws:sagemaker:us-west-2:account-id:app/my-app-name`` .

        :cloudformationAttribute: AppArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrAppArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="appName")
    def app_name(self) -> builtins.str:
        '''The name of the app.'''
        return typing.cast(builtins.str, jsii.get(self, "appName"))

    @app_name.setter
    def app_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__60338cb684c35adee2166006d8a5799b8774a901f8ecf9c2ac63ee250f468884)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "appName", value)

    @builtins.property
    @jsii.member(jsii_name="appType")
    def app_type(self) -> builtins.str:
        '''The type of app.'''
        return typing.cast(builtins.str, jsii.get(self, "appType"))

    @app_type.setter
    def app_type(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8050a2337833fa41f2f81b9f4cdfdb20ac505027fde6b3acfde898ba8800a4a3)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "appType", value)

    @builtins.property
    @jsii.member(jsii_name="domainId")
    def domain_id(self) -> builtins.str:
        '''The domain ID.'''
        return typing.cast(builtins.str, jsii.get(self, "domainId"))

    @domain_id.setter
    def domain_id(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__563ef9985abcabcd774803749869a87550a085a0ba09908e86c235da523c4d6c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domainId", value)

    @builtins.property
    @jsii.member(jsii_name="userProfileName")
    def user_profile_name(self) -> builtins.str:
        '''The user profile name.'''
        return typing.cast(builtins.str, jsii.get(self, "userProfileName"))

    @user_profile_name.setter
    def user_profile_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9231045eaa19a04e645ac4427861d86fb43ed510b73c35bda73d525ca58769ab)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "userProfileName", value)

    @builtins.property
    @jsii.member(jsii_name="resourceSpec")
    def resource_spec(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnApp.ResourceSpecProperty"]]:
        '''Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnApp.ResourceSpecProperty"]], jsii.get(self, "resourceSpec"))

    @resource_spec.setter
    def resource_spec(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnApp.ResourceSpecProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__41e96c1fc82b070303e88c71e535d7b01017c13f06d3c4baf96523a46c257f09)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "resourceSpec", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e1e0fea60c9fcc98ad12e3c7e8c3b6ab7da4954ca4f3501ea10f407018e1d017)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnApp.ResourceSpecProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_type": "instanceType",
            "sage_maker_image_arn": "sageMakerImageArn",
            "sage_maker_image_version_arn": "sageMakerImageVersionArn",
        },
    )
    class ResourceSpecProperty:
        def __init__(
            self,
            *,
            instance_type: typing.Optional[builtins.str] = None,
            sage_maker_image_arn: typing.Optional[builtins.str] = None,
            sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the ARN's of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :param instance_type: The instance type that the image version runs on. .. epigraph:: *JupyterServer apps* only support the ``system`` value. For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.
            :param sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
            :param sage_maker_image_version_arn: The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-app-resourcespec.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                resource_spec_property = sagemaker.CfnApp.ResourceSpecProperty(
                    instance_type="instanceType",
                    sage_maker_image_arn="sageMakerImageArn",
                    sage_maker_image_version_arn="sageMakerImageVersionArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__59e5b32b2186d51d00289fe7e4950d7333bbf83c68ebe92d0bdb2eceb03ed406)
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument sage_maker_image_arn", value=sage_maker_image_arn, expected_type=type_hints["sage_maker_image_arn"])
                check_type(argname="argument sage_maker_image_version_arn", value=sage_maker_image_version_arn, expected_type=type_hints["sage_maker_image_version_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if instance_type is not None:
                self._values["instance_type"] = instance_type
            if sage_maker_image_arn is not None:
                self._values["sage_maker_image_arn"] = sage_maker_image_arn
            if sage_maker_image_version_arn is not None:
                self._values["sage_maker_image_version_arn"] = sage_maker_image_version_arn

        @builtins.property
        def instance_type(self) -> typing.Optional[builtins.str]:
            '''The instance type that the image version runs on.

            .. epigraph::

               *JupyterServer apps* only support the ``system`` value.

               For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-app-resourcespec.html#cfn-sagemaker-app-resourcespec-instancetype
            '''
            result = self._values.get("instance_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the SageMaker image that the image version belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-app-resourcespec.html#cfn-sagemaker-app-resourcespec-sagemakerimagearn
            '''
            result = self._values.get("sage_maker_image_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_version_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-app-resourcespec.html#cfn-sagemaker-app-resourcespec-sagemakerimageversionarn
            '''
            result = self._values.get("sage_maker_image_version_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ResourceSpecProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnAppImageConfig(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppImageConfig",
):
    '''Creates a configuration for running a SageMaker image as a KernelGateway app.

    The configuration specifies the Amazon Elastic File System (EFS) storage volume on the image, and a list of the kernels in the image.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html
    :cloudformationResource: AWS::SageMaker::AppImageConfig
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_app_image_config = sagemaker.CfnAppImageConfig(self, "MyCfnAppImageConfig",
            app_image_config_name="appImageConfigName",
        
            # the properties below are optional
            kernel_gateway_image_config=sagemaker.CfnAppImageConfig.KernelGatewayImageConfigProperty(
                kernel_specs=[sagemaker.CfnAppImageConfig.KernelSpecProperty(
                    name="name",
        
                    # the properties below are optional
                    display_name="displayName"
                )],
        
                # the properties below are optional
                file_system_config=sagemaker.CfnAppImageConfig.FileSystemConfigProperty(
                    default_gid=123,
                    default_uid=123,
                    mount_path="mountPath"
                )
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        app_image_config_name: builtins.str,
        kernel_gateway_image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnAppImageConfig.KernelGatewayImageConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param app_image_config_name: The name of the AppImageConfig. Must be unique to your account.
        :param kernel_gateway_image_config: The configuration for the file system and kernels in the SageMaker image.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a5bddad57cf4d60d052f199fa18e6d92660d1097d0ea8d783dbde99f9c0a028d)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnAppImageConfigProps(
            app_image_config_name=app_image_config_name,
            kernel_gateway_image_config=kernel_gateway_image_config,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5bb94facbcc3b4d7b1de5aa9b83ce79e3da77d42eacbb7c16e3363a42398869b)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e215d4a475fe72e90d5dd156e3b19de51b712660dded95424cb42e06752b5395)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrAppImageConfigArn")
    def attr_app_image_config_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the AppImageConfig, such as ``arn:aws:sagemaker:us-west-2:account-id:app-image-config/my-app-image-config-name`` .

        :cloudformationAttribute: AppImageConfigArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrAppImageConfigArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="appImageConfigName")
    def app_image_config_name(self) -> builtins.str:
        '''The name of the AppImageConfig.'''
        return typing.cast(builtins.str, jsii.get(self, "appImageConfigName"))

    @app_image_config_name.setter
    def app_image_config_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__01fc550542699aeed5dd2d9ae695d23b69d475612dabef44e560292d011f07e0)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "appImageConfigName", value)

    @builtins.property
    @jsii.member(jsii_name="kernelGatewayImageConfig")
    def kernel_gateway_image_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.KernelGatewayImageConfigProperty"]]:
        '''The configuration for the file system and kernels in the SageMaker image.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.KernelGatewayImageConfigProperty"]], jsii.get(self, "kernelGatewayImageConfig"))

    @kernel_gateway_image_config.setter
    def kernel_gateway_image_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.KernelGatewayImageConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5129d030fcca687bbeeb2006415186516bbfe40d0eb84e4e1b19bda9233d80f0)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "kernelGatewayImageConfig", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4462443074ff405184cbe7f0da1ea76390388cd02ffca07d1fbaf2ef6b2935b2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppImageConfig.FileSystemConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "default_gid": "defaultGid",
            "default_uid": "defaultUid",
            "mount_path": "mountPath",
        },
    )
    class FileSystemConfigProperty:
        def __init__(
            self,
            *,
            default_gid: typing.Optional[jsii.Number] = None,
            default_uid: typing.Optional[jsii.Number] = None,
            mount_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.

            :param default_gid: The default POSIX group ID (GID). If not specified, defaults to ``100`` .
            :param default_uid: The default POSIX user ID (UID). If not specified, defaults to ``1000`` .
            :param mount_path: The path within the image to mount the user's EFS home directory. The directory should be empty. If not specified, defaults to * /home/sagemaker-user* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-filesystemconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                file_system_config_property = sagemaker.CfnAppImageConfig.FileSystemConfigProperty(
                    default_gid=123,
                    default_uid=123,
                    mount_path="mountPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1bf5a54cea483597930e2acc9a52917d8d76e77acdbacf9c4d89c223259b37b0)
                check_type(argname="argument default_gid", value=default_gid, expected_type=type_hints["default_gid"])
                check_type(argname="argument default_uid", value=default_uid, expected_type=type_hints["default_uid"])
                check_type(argname="argument mount_path", value=mount_path, expected_type=type_hints["mount_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_gid is not None:
                self._values["default_gid"] = default_gid
            if default_uid is not None:
                self._values["default_uid"] = default_uid
            if mount_path is not None:
                self._values["mount_path"] = mount_path

        @builtins.property
        def default_gid(self) -> typing.Optional[jsii.Number]:
            '''The default POSIX group ID (GID).

            If not specified, defaults to ``100`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-filesystemconfig.html#cfn-sagemaker-appimageconfig-filesystemconfig-defaultgid
            '''
            result = self._values.get("default_gid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def default_uid(self) -> typing.Optional[jsii.Number]:
            '''The default POSIX user ID (UID).

            If not specified, defaults to ``1000`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-filesystemconfig.html#cfn-sagemaker-appimageconfig-filesystemconfig-defaultuid
            '''
            result = self._values.get("default_uid")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def mount_path(self) -> typing.Optional[builtins.str]:
            '''The path within the image to mount the user's EFS home directory.

            The directory should be empty. If not specified, defaults to * /home/sagemaker-user* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-filesystemconfig.html#cfn-sagemaker-appimageconfig-filesystemconfig-mountpath
            '''
            result = self._values.get("mount_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FileSystemConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppImageConfig.KernelGatewayImageConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "kernel_specs": "kernelSpecs",
            "file_system_config": "fileSystemConfig",
        },
    )
    class KernelGatewayImageConfigProperty:
        def __init__(
            self,
            *,
            kernel_specs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnAppImageConfig.KernelSpecProperty", typing.Dict[builtins.str, typing.Any]]]]],
            file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnAppImageConfig.FileSystemConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration for the file system and kernels in a SageMaker image running as a KernelGateway app.

            :param kernel_specs: The specification of the Jupyter kernels in the image.
            :param file_system_config: The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelgatewayimageconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                kernel_gateway_image_config_property = sagemaker.CfnAppImageConfig.KernelGatewayImageConfigProperty(
                    kernel_specs=[sagemaker.CfnAppImageConfig.KernelSpecProperty(
                        name="name",
                
                        # the properties below are optional
                        display_name="displayName"
                    )],
                
                    # the properties below are optional
                    file_system_config=sagemaker.CfnAppImageConfig.FileSystemConfigProperty(
                        default_gid=123,
                        default_uid=123,
                        mount_path="mountPath"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c86ddd58dc2d271d40ac6b9fe05c0ef722eda13bfa91f644e01a4fc42586ef1e)
                check_type(argname="argument kernel_specs", value=kernel_specs, expected_type=type_hints["kernel_specs"])
                check_type(argname="argument file_system_config", value=file_system_config, expected_type=type_hints["file_system_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "kernel_specs": kernel_specs,
            }
            if file_system_config is not None:
                self._values["file_system_config"] = file_system_config

        @builtins.property
        def kernel_specs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.KernelSpecProperty"]]]:
            '''The specification of the Jupyter kernels in the image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelgatewayimageconfig.html#cfn-sagemaker-appimageconfig-kernelgatewayimageconfig-kernelspecs
            '''
            result = self._values.get("kernel_specs")
            assert result is not None, "Required property 'kernel_specs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.KernelSpecProperty"]]], result)

        @builtins.property
        def file_system_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.FileSystemConfigProperty"]]:
            '''The Amazon Elastic File System (EFS) storage configuration for a SageMaker image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelgatewayimageconfig.html#cfn-sagemaker-appimageconfig-kernelgatewayimageconfig-filesystemconfig
            '''
            result = self._values.get("file_system_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnAppImageConfig.FileSystemConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KernelGatewayImageConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppImageConfig.KernelSpecProperty",
        jsii_struct_bases=[],
        name_mapping={"name": "name", "display_name": "displayName"},
    )
    class KernelSpecProperty:
        def __init__(
            self,
            *,
            name: builtins.str,
            display_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The specification of a Jupyter kernel.

            :param name: The name of the Jupyter kernel in the image. This value is case sensitive.
            :param display_name: The display name of the kernel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelspec.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                kernel_spec_property = sagemaker.CfnAppImageConfig.KernelSpecProperty(
                    name="name",
                
                    # the properties below are optional
                    display_name="displayName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ca51ca3546507d1ce51158d74b8fb17c6958c2747cd16f3b75aceb61d2159329)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument display_name", value=display_name, expected_type=type_hints["display_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
            }
            if display_name is not None:
                self._values["display_name"] = display_name

        @builtins.property
        def name(self) -> builtins.str:
            '''The name of the Jupyter kernel in the image.

            This value is case sensitive.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelspec.html#cfn-sagemaker-appimageconfig-kernelspec-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def display_name(self) -> typing.Optional[builtins.str]:
            '''The display name of the kernel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-appimageconfig-kernelspec.html#cfn-sagemaker-appimageconfig-kernelspec-displayname
            '''
            result = self._values.get("display_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KernelSpecProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppImageConfigProps",
    jsii_struct_bases=[],
    name_mapping={
        "app_image_config_name": "appImageConfigName",
        "kernel_gateway_image_config": "kernelGatewayImageConfig",
        "tags": "tags",
    },
)
class CfnAppImageConfigProps:
    def __init__(
        self,
        *,
        app_image_config_name: builtins.str,
        kernel_gateway_image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnAppImageConfig.KernelGatewayImageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnAppImageConfig``.

        :param app_image_config_name: The name of the AppImageConfig. Must be unique to your account.
        :param kernel_gateway_image_config: The configuration for the file system and kernels in the SageMaker image.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_app_image_config_props = sagemaker.CfnAppImageConfigProps(
                app_image_config_name="appImageConfigName",
            
                # the properties below are optional
                kernel_gateway_image_config=sagemaker.CfnAppImageConfig.KernelGatewayImageConfigProperty(
                    kernel_specs=[sagemaker.CfnAppImageConfig.KernelSpecProperty(
                        name="name",
            
                        # the properties below are optional
                        display_name="displayName"
                    )],
            
                    # the properties below are optional
                    file_system_config=sagemaker.CfnAppImageConfig.FileSystemConfigProperty(
                        default_gid=123,
                        default_uid=123,
                        mount_path="mountPath"
                    )
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ff2672f4d222b0d6bb376871aa42ac2f1c78c70d0a1aa2fd3f19e08fcbb07857)
            check_type(argname="argument app_image_config_name", value=app_image_config_name, expected_type=type_hints["app_image_config_name"])
            check_type(argname="argument kernel_gateway_image_config", value=kernel_gateway_image_config, expected_type=type_hints["kernel_gateway_image_config"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "app_image_config_name": app_image_config_name,
        }
        if kernel_gateway_image_config is not None:
            self._values["kernel_gateway_image_config"] = kernel_gateway_image_config
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def app_image_config_name(self) -> builtins.str:
        '''The name of the AppImageConfig.

        Must be unique to your account.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html#cfn-sagemaker-appimageconfig-appimageconfigname
        '''
        result = self._values.get("app_image_config_name")
        assert result is not None, "Required property 'app_image_config_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def kernel_gateway_image_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnAppImageConfig.KernelGatewayImageConfigProperty]]:
        '''The configuration for the file system and kernels in the SageMaker image.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html#cfn-sagemaker-appimageconfig-kernelgatewayimageconfig
        '''
        result = self._values.get("kernel_gateway_image_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnAppImageConfig.KernelGatewayImageConfigProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-appimageconfig.html#cfn-sagemaker-appimageconfig-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnAppImageConfigProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnAppProps",
    jsii_struct_bases=[],
    name_mapping={
        "app_name": "appName",
        "app_type": "appType",
        "domain_id": "domainId",
        "user_profile_name": "userProfileName",
        "resource_spec": "resourceSpec",
        "tags": "tags",
    },
)
class CfnAppProps:
    def __init__(
        self,
        *,
        app_name: builtins.str,
        app_type: builtins.str,
        domain_id: builtins.str,
        user_profile_name: builtins.str,
        resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnApp.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnApp``.

        :param app_name: The name of the app.
        :param app_type: The type of app.
        :param domain_id: The domain ID.
        :param user_profile_name: The user profile name.
        :param resource_spec: Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_app_props = sagemaker.CfnAppProps(
                app_name="appName",
                app_type="appType",
                domain_id="domainId",
                user_profile_name="userProfileName",
            
                # the properties below are optional
                resource_spec=sagemaker.CfnApp.ResourceSpecProperty(
                    instance_type="instanceType",
                    sage_maker_image_arn="sageMakerImageArn",
                    sage_maker_image_version_arn="sageMakerImageVersionArn"
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2f03f5ccb1b2c4633c9ef3bee30e7429d047ef909520efe2cbcf88d12287682b)
            check_type(argname="argument app_name", value=app_name, expected_type=type_hints["app_name"])
            check_type(argname="argument app_type", value=app_type, expected_type=type_hints["app_type"])
            check_type(argname="argument domain_id", value=domain_id, expected_type=type_hints["domain_id"])
            check_type(argname="argument user_profile_name", value=user_profile_name, expected_type=type_hints["user_profile_name"])
            check_type(argname="argument resource_spec", value=resource_spec, expected_type=type_hints["resource_spec"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "app_name": app_name,
            "app_type": app_type,
            "domain_id": domain_id,
            "user_profile_name": user_profile_name,
        }
        if resource_spec is not None:
            self._values["resource_spec"] = resource_spec
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def app_name(self) -> builtins.str:
        '''The name of the app.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-appname
        '''
        result = self._values.get("app_name")
        assert result is not None, "Required property 'app_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def app_type(self) -> builtins.str:
        '''The type of app.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-apptype
        '''
        result = self._values.get("app_type")
        assert result is not None, "Required property 'app_type' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def domain_id(self) -> builtins.str:
        '''The domain ID.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-domainid
        '''
        result = self._values.get("domain_id")
        assert result is not None, "Required property 'domain_id' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def user_profile_name(self) -> builtins.str:
        '''The user profile name.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-userprofilename
        '''
        result = self._values.get("user_profile_name")
        assert result is not None, "Required property 'user_profile_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def resource_spec(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnApp.ResourceSpecProperty]]:
        '''Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-resourcespec
        '''
        result = self._values.get("resource_spec")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnApp.ResourceSpecProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-app.html#cfn-sagemaker-app-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnAppProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnCodeRepository(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnCodeRepository",
):
    '''Creates a Git repository as a resource in your SageMaker account.

    You can associate the repository with notebook instances so that you can use Git source control for the notebooks you create. The Git repository is a resource in your SageMaker account, so it can be associated with more than one notebook instance, and it persists independently from the lifecycle of any notebook instances it is associated with.

    The repository can be hosted either in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-coderepository.html
    :cloudformationResource: AWS::SageMaker::CodeRepository
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_code_repository = sagemaker.CfnCodeRepository(self, "MyCfnCodeRepository",
            git_config=sagemaker.CfnCodeRepository.GitConfigProperty(
                repository_url="repositoryUrl",
        
                # the properties below are optional
                branch="branch",
                secret_arn="secretArn"
            ),
        
            # the properties below are optional
            code_repository_name="codeRepositoryName",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        git_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnCodeRepository.GitConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        code_repository_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param git_config: Configuration details for the Git repository, including the URL where it is located and the ARN of the AWS Secrets Manager secret that contains the credentials used to access the repository.
        :param code_repository_name: The name of the Git repository.
        :param tags: List of tags for Code Repository.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5d17e8e1fa9515a89c3b89e14e1cbaa1aa86352b6f00eb195b7e040e28d143bb)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnCodeRepositoryProps(
            git_config=git_config, code_repository_name=code_repository_name, tags=tags
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bff270252b12354536e07e0adbb6a99f9803ad93f114f8583a39db978a69fa3f)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__53e09fd075ed3c77659648b585bc9171f99083a9e3158fb4475a8f9ca5cf3e0a)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCodeRepositoryName")
    def attr_code_repository_name(self) -> builtins.str:
        '''The name of the code repository, such as ``myCodeRepo`` .

        :cloudformationAttribute: CodeRepositoryName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCodeRepositoryName"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="gitConfig")
    def git_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnCodeRepository.GitConfigProperty"]:
        '''Configuration details for the Git repository, including the URL where it is located and the ARN of the AWS Secrets Manager secret that contains the credentials used to access the repository.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnCodeRepository.GitConfigProperty"], jsii.get(self, "gitConfig"))

    @git_config.setter
    def git_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnCodeRepository.GitConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c94bc452a10c6b523d42959d6fd417ef8250361ea0998ca3fe23777c0086fc7d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "gitConfig", value)

    @builtins.property
    @jsii.member(jsii_name="codeRepositoryName")
    def code_repository_name(self) -> typing.Optional[builtins.str]:
        '''The name of the Git repository.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "codeRepositoryName"))

    @code_repository_name.setter
    def code_repository_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4a0e39e1c2d26d01398986983ecd1ad412f11a1b0fcc8519842102d63b6f8dff)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "codeRepositoryName", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''List of tags for Code Repository.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0edc76fab76c0d705b0f03c8ebebadb42dab5a5dba0c022834796e6bd93720f2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnCodeRepository.GitConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "repository_url": "repositoryUrl",
            "branch": "branch",
            "secret_arn": "secretArn",
        },
    )
    class GitConfigProperty:
        def __init__(
            self,
            *,
            repository_url: builtins.str,
            branch: typing.Optional[builtins.str] = None,
            secret_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies configuration details for a Git repository in your AWS account.

            :param repository_url: The URL where the Git repository is located.
            :param branch: The default branch for the Git repository.
            :param secret_arn: The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that contains the credentials used to access the git repository. The secret must have a staging label of ``AWSCURRENT`` and must be in the following format: ``{"username": *UserName* , "password": *Password* }``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                git_config_property = sagemaker.CfnCodeRepository.GitConfigProperty(
                    repository_url="repositoryUrl",
                
                    # the properties below are optional
                    branch="branch",
                    secret_arn="secretArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7219bf58b36a2496c01c604d8614f6ea1469c9ff3b2619516c61e8e994b4dbe1)
                check_type(argname="argument repository_url", value=repository_url, expected_type=type_hints["repository_url"])
                check_type(argname="argument branch", value=branch, expected_type=type_hints["branch"])
                check_type(argname="argument secret_arn", value=secret_arn, expected_type=type_hints["secret_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "repository_url": repository_url,
            }
            if branch is not None:
                self._values["branch"] = branch
            if secret_arn is not None:
                self._values["secret_arn"] = secret_arn

        @builtins.property
        def repository_url(self) -> builtins.str:
            '''The URL where the Git repository is located.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html#cfn-sagemaker-coderepository-gitconfig-repositoryurl
            '''
            result = self._values.get("repository_url")
            assert result is not None, "Required property 'repository_url' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def branch(self) -> typing.Optional[builtins.str]:
            '''The default branch for the Git repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html#cfn-sagemaker-coderepository-gitconfig-branch
            '''
            result = self._values.get("branch")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def secret_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the AWS Secrets Manager secret that contains the credentials used to access the git repository.

            The secret must have a staging label of ``AWSCURRENT`` and must be in the following format:

            ``{"username": *UserName* , "password": *Password* }``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-coderepository-gitconfig.html#cfn-sagemaker-coderepository-gitconfig-secretarn
            '''
            result = self._values.get("secret_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "GitConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnCodeRepositoryProps",
    jsii_struct_bases=[],
    name_mapping={
        "git_config": "gitConfig",
        "code_repository_name": "codeRepositoryName",
        "tags": "tags",
    },
)
class CfnCodeRepositoryProps:
    def __init__(
        self,
        *,
        git_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnCodeRepository.GitConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        code_repository_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnCodeRepository``.

        :param git_config: Configuration details for the Git repository, including the URL where it is located and the ARN of the AWS Secrets Manager secret that contains the credentials used to access the repository.
        :param code_repository_name: The name of the Git repository.
        :param tags: List of tags for Code Repository.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-coderepository.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_code_repository_props = sagemaker.CfnCodeRepositoryProps(
                git_config=sagemaker.CfnCodeRepository.GitConfigProperty(
                    repository_url="repositoryUrl",
            
                    # the properties below are optional
                    branch="branch",
                    secret_arn="secretArn"
                ),
            
                # the properties below are optional
                code_repository_name="codeRepositoryName",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c42ae1f0efe0811d1d204114356c2e0129a8f96e7aa17a0078217570e2903e4a)
            check_type(argname="argument git_config", value=git_config, expected_type=type_hints["git_config"])
            check_type(argname="argument code_repository_name", value=code_repository_name, expected_type=type_hints["code_repository_name"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "git_config": git_config,
        }
        if code_repository_name is not None:
            self._values["code_repository_name"] = code_repository_name
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def git_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnCodeRepository.GitConfigProperty]:
        '''Configuration details for the Git repository, including the URL where it is located and the ARN of the AWS Secrets Manager secret that contains the credentials used to access the repository.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-coderepository.html#cfn-sagemaker-coderepository-gitconfig
        '''
        result = self._values.get("git_config")
        assert result is not None, "Required property 'git_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnCodeRepository.GitConfigProperty], result)

    @builtins.property
    def code_repository_name(self) -> typing.Optional[builtins.str]:
        '''The name of the Git repository.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-coderepository.html#cfn-sagemaker-coderepository-coderepositoryname
        '''
        result = self._values.get("code_repository_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''List of tags for Code Repository.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-coderepository.html#cfn-sagemaker-coderepository-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnCodeRepositoryProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnDataQualityJobDefinition(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition",
):
    '''Creates a definition for a job that monitors data quality and drift.

    For information about model monitor, see `Amazon SageMaker Model Monitor <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html
    :cloudformationResource: AWS::SageMaker::DataQualityJobDefinition
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_data_quality_job_definition = sagemaker.CfnDataQualityJobDefinition(self, "MyCfnDataQualityJobDefinition",
            data_quality_app_specification=sagemaker.CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty(
                image_uri="imageUri",
        
                # the properties below are optional
                container_arguments=["containerArguments"],
                container_entrypoint=["containerEntrypoint"],
                environment={
                    "environment_key": "environment"
                },
                post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                record_preprocessor_source_uri="recordPreprocessorSourceUri"
            ),
            data_quality_job_input=sagemaker.CfnDataQualityJobDefinition.DataQualityJobInputProperty(
                batch_transform_input=sagemaker.CfnDataQualityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
        
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                ),
                endpoint_input=sagemaker.CfnDataQualityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
        
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            ),
            data_quality_job_output_config=sagemaker.CfnDataQualityJobDefinition.MonitoringOutputConfigProperty(
                monitoring_outputs=[sagemaker.CfnDataQualityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnDataQualityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )],
        
                # the properties below are optional
                kms_key_id="kmsKeyId"
            ),
            job_resources=sagemaker.CfnDataQualityJobDefinition.MonitoringResourcesProperty(
                cluster_config=sagemaker.CfnDataQualityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
        
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            ),
            role_arn="roleArn",
        
            # the properties below are optional
            data_quality_baseline_config=sagemaker.CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty(
                baselining_job_name="baseliningJobName",
                constraints_resource=sagemaker.CfnDataQualityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                ),
                statistics_resource=sagemaker.CfnDataQualityJobDefinition.StatisticsResourceProperty(
                    s3_uri="s3Uri"
                )
            ),
            endpoint_name="endpointName",
            job_definition_name="jobDefinitionName",
            network_config=sagemaker.CfnDataQualityJobDefinition.NetworkConfigProperty(
                enable_inter_container_traffic_encryption=False,
                enable_network_isolation=False,
                vpc_config=sagemaker.CfnDataQualityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            ),
            stopping_condition=sagemaker.CfnDataQualityJobDefinition.StoppingConditionProperty(
                max_runtime_in_seconds=123
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        data_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
        data_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.DataQualityJobInputProperty", typing.Dict[builtins.str, typing.Any]]],
        data_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.MonitoringOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.MonitoringResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        data_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.NetworkConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.StoppingConditionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param data_quality_app_specification: Specifies the container that runs the monitoring job.
        :param data_quality_job_input: A list of inputs for the monitoring job. Currently endpoints are supported as monitoring inputs.
        :param data_quality_job_output_config: The output configuration for monitoring jobs.
        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param data_quality_baseline_config: Configures the constraints and baselines for the monitoring job.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name for the monitoring job definition.
        :param network_config: Specifies networking configuration for the monitoring job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__738872af4917cc4a9c82bf05685c5bae3f1ac28542f97be97fe1f36cb1ba9f22)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnDataQualityJobDefinitionProps(
            data_quality_app_specification=data_quality_app_specification,
            data_quality_job_input=data_quality_job_input,
            data_quality_job_output_config=data_quality_job_output_config,
            job_resources=job_resources,
            role_arn=role_arn,
            data_quality_baseline_config=data_quality_baseline_config,
            endpoint_name=endpoint_name,
            job_definition_name=job_definition_name,
            network_config=network_config,
            stopping_condition=stopping_condition,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f462bdc067fd44e78f92476e1454a553345a32c03985c226bd6553e4c637284a)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f21a6d8efc59d5475d29ea3eb6cb20caf535aef455944b20e340244406959398)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the job definition was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrJobDefinitionArn")
    def attr_job_definition_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the job definition.

        :cloudformationAttribute: JobDefinitionArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrJobDefinitionArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="dataQualityAppSpecification")
    def data_quality_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty"]:
        '''Specifies the container that runs the monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty"], jsii.get(self, "dataQualityAppSpecification"))

    @data_quality_app_specification.setter
    def data_quality_app_specification(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9d33a45fcf08092c0e108f025d8d4a4fc5872cb335e89ddc1f1c94f4d59bb502)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataQualityAppSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="dataQualityJobInput")
    def data_quality_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityJobInputProperty"]:
        '''A list of inputs for the monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityJobInputProperty"], jsii.get(self, "dataQualityJobInput"))

    @data_quality_job_input.setter
    def data_quality_job_input(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityJobInputProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__22c7862ad92959194cfe02be5360375cb1cd67676ced8e0d0b87e7822af6ebde)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataQualityJobInput", value)

    @builtins.property
    @jsii.member(jsii_name="dataQualityJobOutputConfig")
    def data_quality_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringOutputConfigProperty"]:
        '''The output configuration for monitoring jobs.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringOutputConfigProperty"], jsii.get(self, "dataQualityJobOutputConfig"))

    @data_quality_job_output_config.setter
    def data_quality_job_output_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringOutputConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6d029ecdfc6dcdfc0f1c62dff2897f3cb8d337d35dfcd0f36aa375a458bfcae9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataQualityJobOutputConfig", value)

    @builtins.property
    @jsii.member(jsii_name="jobResources")
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringResourcesProperty"]:
        '''Identifies the resources to deploy for a monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringResourcesProperty"], jsii.get(self, "jobResources"))

    @job_resources.setter
    def job_resources(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringResourcesProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__29ff9c2764c492630d1c5cc10ba5a43a5f0e949dfc7672232a6858b4fc679c55)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobResources", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c9f4267c53b0d493df8356e7f07d5aa41c917ddcfb48583b5137a53da86f4c13)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="dataQualityBaselineConfig")
    def data_quality_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty"]]:
        '''Configures the constraints and baselines for the monitoring job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty"]], jsii.get(self, "dataQualityBaselineConfig"))

    @data_quality_baseline_config.setter
    def data_quality_baseline_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fc8e3f65489594e046239891fcc106cf785fdad2448a7b413159063d4ec2baad)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataQualityBaselineConfig", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2370e87925965d970102cac6226c13f49a0241b622030c01b2780bcb34a8ec19)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="jobDefinitionName")
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name for the monitoring job definition.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "jobDefinitionName"))

    @job_definition_name.setter
    def job_definition_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e482152aafd0979a35f29bc7cd47814ad3977ddb15a34b7c02c4b274ed8aea23)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobDefinitionName", value)

    @builtins.property
    @jsii.member(jsii_name="networkConfig")
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.NetworkConfigProperty"]]:
        '''Specifies networking configuration for the monitoring job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.NetworkConfigProperty"]], jsii.get(self, "networkConfig"))

    @network_config.setter
    def network_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.NetworkConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5982fc49bfb59c2f83b476c77c84ae4a4e929f10dd2181018054a285dee2e87d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "networkConfig", value)

    @builtins.property
    @jsii.member(jsii_name="stoppingCondition")
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.StoppingConditionProperty"]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.StoppingConditionProperty"]], jsii.get(self, "stoppingCondition"))

    @stopping_condition.setter
    def stopping_condition(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.StoppingConditionProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cf7fbe101220056322d4ff1986d7e71874aee8887d658ccaa569c5000edefac0)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "stoppingCondition", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bee59ab0f88a182cfa91a2b70a5d9d409b799e89e1e3e7f2ae811159215b0c10)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.BatchTransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_captured_destination_s3_uri": "dataCapturedDestinationS3Uri",
            "dataset_format": "datasetFormat",
            "local_path": "localPath",
            "exclude_features_attribute": "excludeFeaturesAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class BatchTransformInputProperty:
        def __init__(
            self,
            *,
            data_captured_destination_s3_uri: builtins.str,
            dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.DatasetFormatProperty", typing.Dict[builtins.str, typing.Any]]],
            local_path: builtins.str,
            exclude_features_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the batch transform job.

            :param data_captured_destination_s3_uri: The Amazon S3 location being used to capture the data.
            :param dataset_format: The dataset format for your batch transform job.
            :param local_path: Path to the filesystem where the batch transform data is available to the container.
            :param exclude_features_attribute: The attributes of the input data to exclude from the analysis.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                batch_transform_input_property = sagemaker.CfnDataQualityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
                
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1b75b7b728f069893458a7695ee7ac0853bd8e23efc061ecf9829ddbd3a6dbdd)
                check_type(argname="argument data_captured_destination_s3_uri", value=data_captured_destination_s3_uri, expected_type=type_hints["data_captured_destination_s3_uri"])
                check_type(argname="argument dataset_format", value=dataset_format, expected_type=type_hints["dataset_format"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument exclude_features_attribute", value=exclude_features_attribute, expected_type=type_hints["exclude_features_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_captured_destination_s3_uri": data_captured_destination_s3_uri,
                "dataset_format": dataset_format,
                "local_path": local_path,
            }
            if exclude_features_attribute is not None:
                self._values["exclude_features_attribute"] = exclude_features_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def data_captured_destination_s3_uri(self) -> builtins.str:
            '''The Amazon S3 location being used to capture the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-datacaptureddestinations3uri
            '''
            result = self._values.get("data_captured_destination_s3_uri")
            assert result is not None, "Required property 'data_captured_destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def dataset_format(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DatasetFormatProperty"]:
            '''The dataset format for your batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-datasetformat
            '''
            result = self._values.get("dataset_format")
            assert result is not None, "Required property 'dataset_format' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.DatasetFormatProperty"], result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the batch transform data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def exclude_features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data to exclude from the analysis.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-excludefeaturesattribute
            '''
            result = self._values.get("exclude_features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-dataqualityjobdefinition-batchtransforminput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BatchTransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.ClusterConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_size_in_gb": "volumeSizeInGb",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class ClusterConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_size_in_gb: jsii.Number,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration for the cluster of resources used to run the processing job.

            :param instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
            :param instance_type: The ML compute instance type for the processing job.
            :param volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-clusterconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cluster_config_property = sagemaker.CfnDataQualityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__441576a0f27acb41558fd46f071ce526510ec72480da00f75773b2a12013485c)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
                "volume_size_in_gb": volume_size_in_gb,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the model monitoring job.

            For distributed processing jobs, specify a value greater than 1. The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-clusterconfig.html#cfn-sagemaker-dataqualityjobdefinition-clusterconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-clusterconfig.html#cfn-sagemaker-dataqualityjobdefinition-clusterconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_size_in_gb(self) -> jsii.Number:
            '''The size of the ML storage volume, in gigabytes, that you want to provision.

            You must specify sufficient ML storage for your scenario.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-clusterconfig.html#cfn-sagemaker-dataqualityjobdefinition-clusterconfig-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            assert result is not None, "Required property 'volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-clusterconfig.html#cfn-sagemaker-dataqualityjobdefinition-clusterconfig-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClusterConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.ConstraintsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class ConstraintsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The constraints resource for a monitoring job.

            :param s3_uri: The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-constraintsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                constraints_resource_property = sagemaker.CfnDataQualityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8248581daf5496221148b44514fed0064c1ab304d2086bed4146fdcb2aad1058)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-constraintsresource.html#cfn-sagemaker-dataqualityjobdefinition-constraintsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ConstraintsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.CsvProperty",
        jsii_struct_bases=[],
        name_mapping={"header": "header"},
    )
    class CsvProperty:
        def __init__(
            self,
            *,
            header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The CSV format.

            :param header: A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-csv.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                csv_property = sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                    header=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6ee6b0eb617419663b4b8b32dff8e00b1f826734909bcd7b71edd3ae47218cec)
                check_type(argname="argument header", value=header, expected_type=type_hints["header"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if header is not None:
                self._values["header"] = header

        @builtins.property
        def header(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-csv.html#cfn-sagemaker-dataqualityjobdefinition-csv-header
            '''
            result = self._values.get("header")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CsvProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "image_uri": "imageUri",
            "container_arguments": "containerArguments",
            "container_entrypoint": "containerEntrypoint",
            "environment": "environment",
            "post_analytics_processor_source_uri": "postAnalyticsProcessorSourceUri",
            "record_preprocessor_source_uri": "recordPreprocessorSourceUri",
        },
    )
    class DataQualityAppSpecificationProperty:
        def __init__(
            self,
            *,
            image_uri: builtins.str,
            container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
            container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
            record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about the container that a data quality monitoring job runs.

            :param image_uri: The container image that the data quality monitoring job runs.
            :param container_arguments: The arguments to send to the container that the monitoring job runs.
            :param container_entrypoint: The entrypoint for a container used to run a monitoring job.
            :param environment: Sets the environment variables in the container that the monitoring job runs.
            :param post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
            :param record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_quality_app_specification_property = sagemaker.CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty(
                    image_uri="imageUri",
                
                    # the properties below are optional
                    container_arguments=["containerArguments"],
                    container_entrypoint=["containerEntrypoint"],
                    environment={
                        "environment_key": "environment"
                    },
                    post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                    record_preprocessor_source_uri="recordPreprocessorSourceUri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__11ad7b07799b19e9d0c959ac5d51f2235fe7a36d54964df0e345ae8688d19922)
                check_type(argname="argument image_uri", value=image_uri, expected_type=type_hints["image_uri"])
                check_type(argname="argument container_arguments", value=container_arguments, expected_type=type_hints["container_arguments"])
                check_type(argname="argument container_entrypoint", value=container_entrypoint, expected_type=type_hints["container_entrypoint"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument post_analytics_processor_source_uri", value=post_analytics_processor_source_uri, expected_type=type_hints["post_analytics_processor_source_uri"])
                check_type(argname="argument record_preprocessor_source_uri", value=record_preprocessor_source_uri, expected_type=type_hints["record_preprocessor_source_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "image_uri": image_uri,
            }
            if container_arguments is not None:
                self._values["container_arguments"] = container_arguments
            if container_entrypoint is not None:
                self._values["container_entrypoint"] = container_entrypoint
            if environment is not None:
                self._values["environment"] = environment
            if post_analytics_processor_source_uri is not None:
                self._values["post_analytics_processor_source_uri"] = post_analytics_processor_source_uri
            if record_preprocessor_source_uri is not None:
                self._values["record_preprocessor_source_uri"] = record_preprocessor_source_uri

        @builtins.property
        def image_uri(self) -> builtins.str:
            '''The container image that the data quality monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-imageuri
            '''
            result = self._values.get("image_uri")
            assert result is not None, "Required property 'image_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def container_arguments(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The arguments to send to the container that the monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-containerarguments
            '''
            result = self._values.get("container_arguments")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def container_entrypoint(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The entrypoint for a container used to run a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-containerentrypoint
            '''
            result = self._values.get("container_entrypoint")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Sets the environment variables in the container that the monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def post_analytics_processor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called after analysis has been performed.

            Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-postanalyticsprocessorsourceuri
            '''
            result = self._values.get("post_analytics_processor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def record_preprocessor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called per row prior to running analysis.

            It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityappspecification.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification-recordpreprocessorsourceuri
            '''
            result = self._values.get("record_preprocessor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataQualityAppSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "baselining_job_name": "baseliningJobName",
            "constraints_resource": "constraintsResource",
            "statistics_resource": "statisticsResource",
        },
    )
    class DataQualityBaselineConfigProperty:
        def __init__(
            self,
            *,
            baselining_job_name: typing.Optional[builtins.str] = None,
            constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.ConstraintsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.StatisticsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Configuration for monitoring constraints and monitoring statistics.

            These baseline resources are compared against the results of the current job from the series of jobs scheduled to collect data periodically.

            :param baselining_job_name: The name of the job that performs baselining for the data quality monitoring job.
            :param constraints_resource: The constraints resource for a monitoring job.
            :param statistics_resource: Configuration for monitoring constraints and monitoring statistics. These baseline resources are compared against the results of the current job from the series of jobs scheduled to collect data periodically.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_quality_baseline_config_property = sagemaker.CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnDataQualityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    ),
                    statistics_resource=sagemaker.CfnDataQualityJobDefinition.StatisticsResourceProperty(
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b3e1d4034764e8a8282c558559d3c93f2a5f23a1c1e5af323dec1e81a3e53562)
                check_type(argname="argument baselining_job_name", value=baselining_job_name, expected_type=type_hints["baselining_job_name"])
                check_type(argname="argument constraints_resource", value=constraints_resource, expected_type=type_hints["constraints_resource"])
                check_type(argname="argument statistics_resource", value=statistics_resource, expected_type=type_hints["statistics_resource"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if baselining_job_name is not None:
                self._values["baselining_job_name"] = baselining_job_name
            if constraints_resource is not None:
                self._values["constraints_resource"] = constraints_resource
            if statistics_resource is not None:
                self._values["statistics_resource"] = statistics_resource

        @builtins.property
        def baselining_job_name(self) -> typing.Optional[builtins.str]:
            '''The name of the job that performs baselining for the data quality monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig.html#cfn-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig-baseliningjobname
            '''
            result = self._values.get("baselining_job_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def constraints_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.ConstraintsResourceProperty"]]:
            '''The constraints resource for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig.html#cfn-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig-constraintsresource
            '''
            result = self._values.get("constraints_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.ConstraintsResourceProperty"]], result)

        @builtins.property
        def statistics_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.StatisticsResourceProperty"]]:
            '''Configuration for monitoring constraints and monitoring statistics.

            These baseline resources are compared against the results of the current job from the series of jobs scheduled to collect data periodically.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig.html#cfn-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig-statisticsresource
            '''
            result = self._values.get("statistics_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.StatisticsResourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataQualityBaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.DataQualityJobInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "batch_transform_input": "batchTransformInput",
            "endpoint_input": "endpointInput",
        },
    )
    class DataQualityJobInputProperty:
        def __init__(
            self,
            *,
            batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.BatchTransformInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.EndpointInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The input for the data quality monitoring job.

            Currently endpoints are supported for input.

            :param batch_transform_input: Input object for the batch transform job.
            :param endpoint_input: Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityjobinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_quality_job_input_property = sagemaker.CfnDataQualityJobDefinition.DataQualityJobInputProperty(
                    batch_transform_input=sagemaker.CfnDataQualityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
                
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    ),
                    endpoint_input=sagemaker.CfnDataQualityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
                
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__544455777165b176b920249188ba86b340ed4f77e4675683ab1522af2f4badf1)
                check_type(argname="argument batch_transform_input", value=batch_transform_input, expected_type=type_hints["batch_transform_input"])
                check_type(argname="argument endpoint_input", value=endpoint_input, expected_type=type_hints["endpoint_input"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if batch_transform_input is not None:
                self._values["batch_transform_input"] = batch_transform_input
            if endpoint_input is not None:
                self._values["endpoint_input"] = endpoint_input

        @builtins.property
        def batch_transform_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.BatchTransformInputProperty"]]:
            '''Input object for the batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityjobinput.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityjobinput-batchtransforminput
            '''
            result = self._values.get("batch_transform_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.BatchTransformInputProperty"]], result)

        @builtins.property
        def endpoint_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.EndpointInputProperty"]]:
            '''Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-dataqualityjobinput.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityjobinput-endpointinput
            '''
            result = self._values.get("endpoint_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.EndpointInputProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataQualityJobInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty",
        jsii_struct_bases=[],
        name_mapping={"csv": "csv", "json": "json", "parquet": "parquet"},
    )
    class DatasetFormatProperty:
        def __init__(
            self,
            *,
            csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.CsvProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.JsonProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The dataset format of the data to monitor.

            :param csv: The CSV format.
            :param json: The Json format.
            :param parquet: A flag indicate if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-datasetformat.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                dataset_format_property = sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty(
                    csv=sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                        header=False
                    ),
                    json=sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                        line=False
                    ),
                    parquet=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__72b55db1656fb2bcc5633e486da62737a3f6d508f0d82b1ddd27a348b79b925b)
                check_type(argname="argument csv", value=csv, expected_type=type_hints["csv"])
                check_type(argname="argument json", value=json, expected_type=type_hints["json"])
                check_type(argname="argument parquet", value=parquet, expected_type=type_hints["parquet"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv is not None:
                self._values["csv"] = csv
            if json is not None:
                self._values["json"] = json
            if parquet is not None:
                self._values["parquet"] = parquet

        @builtins.property
        def csv(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.CsvProperty"]]:
            '''The CSV format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-datasetformat.html#cfn-sagemaker-dataqualityjobdefinition-datasetformat-csv
            '''
            result = self._values.get("csv")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.CsvProperty"]], result)

        @builtins.property
        def json(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.JsonProperty"]]:
            '''The Json format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-datasetformat.html#cfn-sagemaker-dataqualityjobdefinition-datasetformat-json
            '''
            result = self._values.get("json")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.JsonProperty"]], result)

        @builtins.property
        def parquet(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A flag indicate if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-datasetformat.html#cfn-sagemaker-dataqualityjobdefinition-datasetformat-parquet
            '''
            result = self._values.get("parquet")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DatasetFormatProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.EndpointInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "local_path": "localPath",
            "exclude_features_attribute": "excludeFeaturesAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class EndpointInputProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            local_path: builtins.str,
            exclude_features_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the endpoint.

            :param endpoint_name: An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.
            :param local_path: Path to the filesystem where the endpoint data is available to the container.
            :param exclude_features_attribute: The attributes of the input data to exclude from the analysis.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_input_property = sagemaker.CfnDataQualityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
                
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__601305c78964ecde31263e255b74c778af52df31d8ef7cb4dd0eb2d3a6c28583)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument exclude_features_attribute", value=exclude_features_attribute, expected_type=type_hints["exclude_features_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
                "local_path": local_path,
            }
            if exclude_features_attribute is not None:
                self._values["exclude_features_attribute"] = exclude_features_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html#cfn-sagemaker-dataqualityjobdefinition-endpointinput-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the endpoint data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html#cfn-sagemaker-dataqualityjobdefinition-endpointinput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def exclude_features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data to exclude from the analysis.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html#cfn-sagemaker-dataqualityjobdefinition-endpointinput-excludefeaturesattribute
            '''
            result = self._values.get("exclude_features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html#cfn-sagemaker-dataqualityjobdefinition-endpointinput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-endpointinput.html#cfn-sagemaker-dataqualityjobdefinition-endpointinput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.JsonProperty",
        jsii_struct_bases=[],
        name_mapping={"line": "line"},
    )
    class JsonProperty:
        def __init__(
            self,
            *,
            line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The Json format.

            :param line: A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-json.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                json_property = sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                    line=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bbb228f2cc450802d77014c5761cf088476cfb96cca3c0ba2a6970015dab083b)
                check_type(argname="argument line", value=line, expected_type=type_hints["line"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if line is not None:
                self._values["line"] = line

        @builtins.property
        def line(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-json.html#cfn-sagemaker-dataqualityjobdefinition-json-line
            '''
            result = self._values.get("line")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JsonProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.MonitoringOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_outputs": "monitoringOutputs",
            "kms_key_id": "kmsKeyId",
        },
    )
    class MonitoringOutputConfigProperty:
        def __init__(
            self,
            *,
            monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.MonitoringOutputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for monitoring jobs.

            :param monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_config_property = sagemaker.CfnDataQualityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnDataQualityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnDataQualityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__27ce8c4b0ff4f56b1642e027e445fa857c7e78618882f3465132c214aa3cefcd)
                check_type(argname="argument monitoring_outputs", value=monitoring_outputs, expected_type=type_hints["monitoring_outputs"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_outputs": monitoring_outputs,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def monitoring_outputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringOutputProperty"]]]:
            '''Monitoring outputs for monitoring jobs.

            This is where the output of the periodic monitoring jobs is uploaded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-dataqualityjobdefinition-monitoringoutputconfig-monitoringoutputs
            '''
            result = self._values.get("monitoring_outputs")
            assert result is not None, "Required property 'monitoring_outputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.MonitoringOutputProperty"]]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-dataqualityjobdefinition-monitoringoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.MonitoringOutputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_output": "s3Output"},
    )
    class MonitoringOutputProperty:
        def __init__(
            self,
            *,
            s3_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.S3OutputProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The output object for a monitoring job.

            :param s3_output: The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_property = sagemaker.CfnDataQualityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnDataQualityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__69c3b9716a30dd2e2aa8080d1792409d731b5674fbcbefd12fc5bc52de21eb03)
                check_type(argname="argument s3_output", value=s3_output, expected_type=type_hints["s3_output"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output": s3_output,
            }

        @builtins.property
        def s3_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.S3OutputProperty"]:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringoutput.html#cfn-sagemaker-dataqualityjobdefinition-monitoringoutput-s3output
            '''
            result = self._values.get("s3_output")
            assert result is not None, "Required property 's3_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.S3OutputProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.MonitoringResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={"cluster_config": "clusterConfig"},
    )
    class MonitoringResourcesProperty:
        def __init__(
            self,
            *,
            cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.ClusterConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Identifies the resources to deploy for a monitoring job.

            :param cluster_config: The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_resources_property = sagemaker.CfnDataQualityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnDataQualityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__11b009463e27499e4088d4a4ff3eb32ac79a74cb796077eccef622663c7e78e1)
                check_type(argname="argument cluster_config", value=cluster_config, expected_type=type_hints["cluster_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cluster_config": cluster_config,
            }

        @builtins.property
        def cluster_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.ClusterConfigProperty"]:
            '''The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-monitoringresources.html#cfn-sagemaker-dataqualityjobdefinition-monitoringresources-clusterconfig
            '''
            result = self._values.get("cluster_config")
            assert result is not None, "Required property 'cluster_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.ClusterConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.NetworkConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_inter_container_traffic_encryption": "enableInterContainerTrafficEncryption",
            "enable_network_isolation": "enableNetworkIsolation",
            "vpc_config": "vpcConfig",
        },
    )
    class NetworkConfigProperty:
        def __init__(
            self,
            *,
            enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDataQualityJobDefinition.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.

            :param enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
            :param enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
            :param vpc_config: Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-networkconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                network_config_property = sagemaker.CfnDataQualityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnDataQualityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__80502177a4e5c8957484568926e21dfce6f3cab0e6313a34ee6bafac1ac94de4)
                check_type(argname="argument enable_inter_container_traffic_encryption", value=enable_inter_container_traffic_encryption, expected_type=type_hints["enable_inter_container_traffic_encryption"])
                check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
                check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_inter_container_traffic_encryption is not None:
                self._values["enable_inter_container_traffic_encryption"] = enable_inter_container_traffic_encryption
            if enable_network_isolation is not None:
                self._values["enable_network_isolation"] = enable_network_isolation
            if vpc_config is not None:
                self._values["vpc_config"] = vpc_config

        @builtins.property
        def enable_inter_container_traffic_encryption(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to encrypt all communications between distributed processing jobs.

            Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-networkconfig.html#cfn-sagemaker-dataqualityjobdefinition-networkconfig-enableintercontainertrafficencryption
            '''
            result = self._values.get("enable_inter_container_traffic_encryption")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def enable_network_isolation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to allow inbound and outbound network calls to and from the containers used for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-networkconfig.html#cfn-sagemaker-dataqualityjobdefinition-networkconfig-enablenetworkisolation
            '''
            result = self._values.get("enable_network_isolation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def vpc_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.VpcConfigProperty"]]:
            '''Specifies a VPC that your training jobs and hosted models have access to.

            Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-networkconfig.html#cfn-sagemaker-dataqualityjobdefinition-networkconfig-vpcconfig
            '''
            result = self._values.get("vpc_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDataQualityJobDefinition.VpcConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.S3OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "local_path": "localPath",
            "s3_uri": "s3Uri",
            "s3_upload_mode": "s3UploadMode",
        },
    )
    class S3OutputProperty:
        def __init__(
            self,
            *,
            local_path: builtins.str,
            s3_uri: builtins.str,
            s3_upload_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :param local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
            :param s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
            :param s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-s3output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_output_property = sagemaker.CfnDataQualityJobDefinition.S3OutputProperty(
                    local_path="localPath",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    s3_upload_mode="s3UploadMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c76b13f2c22215a02261c3002c67bac19ddd708df4133a02db04cf014d82159e)
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument s3_upload_mode", value=s3_upload_mode, expected_type=type_hints["s3_upload_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "local_path": local_path,
                "s3_uri": s3_uri,
            }
            if s3_upload_mode is not None:
                self._values["s3_upload_mode"] = s3_upload_mode

        @builtins.property
        def local_path(self) -> builtins.str:
            '''The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            LocalPath is an absolute path for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-s3output.html#cfn-sagemaker-dataqualityjobdefinition-s3output-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-s3output.html#cfn-sagemaker-dataqualityjobdefinition-s3output-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_upload_mode(self) -> typing.Optional[builtins.str]:
            '''Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-s3output.html#cfn-sagemaker-dataqualityjobdefinition-s3output-s3uploadmode
            '''
            result = self._values.get("s3_upload_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.StatisticsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class StatisticsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The statistics resource for a monitoring job.

            :param s3_uri: The Amazon S3 URI for the statistics resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-statisticsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                statistics_resource_property = sagemaker.CfnDataQualityJobDefinition.StatisticsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e66a7ef5687cec2b47261b154bc007b591d204014d7afbc2b5d0700f91efa565)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the statistics resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-statisticsresource.html#cfn-sagemaker-dataqualityjobdefinition-statisticsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StatisticsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.StoppingConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"max_runtime_in_seconds": "maxRuntimeInSeconds"},
    )
    class StoppingConditionProperty:
        def __init__(self, *, max_runtime_in_seconds: jsii.Number) -> None:
            '''Specifies a limit to how long a model training job or model compilation job can run.

            It also specifies how long a managed spot training job has to complete. When the job reaches the time limit, SageMaker ends the training or compilation job. Use this API to cap model training costs.

            To stop a training job, SageMaker sends the algorithm the ``SIGTERM`` signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost.

            The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with ``CreateModel`` .
            .. epigraph::

               The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.

            :param max_runtime_in_seconds: The maximum length of time, in seconds, that a training or compilation job can run before it is stopped. For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model. For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days. The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-stoppingcondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                stopping_condition_property = sagemaker.CfnDataQualityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__080294505eaa0cfd3e651708dd9939428c82dd4a6df3e6ba24e70b042595bfc5)
                check_type(argname="argument max_runtime_in_seconds", value=max_runtime_in_seconds, expected_type=type_hints["max_runtime_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_runtime_in_seconds": max_runtime_in_seconds,
            }

        @builtins.property
        def max_runtime_in_seconds(self) -> jsii.Number:
            '''The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.

            For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.

            For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.

            The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-stoppingcondition.html#cfn-sagemaker-dataqualityjobdefinition-stoppingcondition-maxruntimeinseconds
            '''
            result = self._values.get("max_runtime_in_seconds")
            assert result is not None, "Required property 'max_runtime_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StoppingConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinition.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnDataQualityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9271b40223b97a4908066b16c9660259e46e7b1d4d693d3a2df71e4d8c31a21f)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-vpcconfig.html#cfn-sagemaker-dataqualityjobdefinition-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-dataqualityjobdefinition-vpcconfig.html#cfn-sagemaker-dataqualityjobdefinition-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDataQualityJobDefinitionProps",
    jsii_struct_bases=[],
    name_mapping={
        "data_quality_app_specification": "dataQualityAppSpecification",
        "data_quality_job_input": "dataQualityJobInput",
        "data_quality_job_output_config": "dataQualityJobOutputConfig",
        "job_resources": "jobResources",
        "role_arn": "roleArn",
        "data_quality_baseline_config": "dataQualityBaselineConfig",
        "endpoint_name": "endpointName",
        "job_definition_name": "jobDefinitionName",
        "network_config": "networkConfig",
        "stopping_condition": "stoppingCondition",
        "tags": "tags",
    },
)
class CfnDataQualityJobDefinitionProps:
    def __init__(
        self,
        *,
        data_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
        data_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
        data_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        data_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnDataQualityJobDefinition``.

        :param data_quality_app_specification: Specifies the container that runs the monitoring job.
        :param data_quality_job_input: A list of inputs for the monitoring job. Currently endpoints are supported as monitoring inputs.
        :param data_quality_job_output_config: The output configuration for monitoring jobs.
        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param data_quality_baseline_config: Configures the constraints and baselines for the monitoring job.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name for the monitoring job definition.
        :param network_config: Specifies networking configuration for the monitoring job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_data_quality_job_definition_props = sagemaker.CfnDataQualityJobDefinitionProps(
                data_quality_app_specification=sagemaker.CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty(
                    image_uri="imageUri",
            
                    # the properties below are optional
                    container_arguments=["containerArguments"],
                    container_entrypoint=["containerEntrypoint"],
                    environment={
                        "environment_key": "environment"
                    },
                    post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                    record_preprocessor_source_uri="recordPreprocessorSourceUri"
                ),
                data_quality_job_input=sagemaker.CfnDataQualityJobDefinition.DataQualityJobInputProperty(
                    batch_transform_input=sagemaker.CfnDataQualityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnDataQualityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnDataQualityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnDataQualityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
            
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    ),
                    endpoint_input=sagemaker.CfnDataQualityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
            
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    )
                ),
                data_quality_job_output_config=sagemaker.CfnDataQualityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnDataQualityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnDataQualityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
            
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                ),
                job_resources=sagemaker.CfnDataQualityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnDataQualityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
            
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                ),
                role_arn="roleArn",
            
                # the properties below are optional
                data_quality_baseline_config=sagemaker.CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnDataQualityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    ),
                    statistics_resource=sagemaker.CfnDataQualityJobDefinition.StatisticsResourceProperty(
                        s3_uri="s3Uri"
                    )
                ),
                endpoint_name="endpointName",
                job_definition_name="jobDefinitionName",
                network_config=sagemaker.CfnDataQualityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnDataQualityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                ),
                stopping_condition=sagemaker.CfnDataQualityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9c5a27da69d6cdc76cfa83b348321ea97cb5023c0191ac16e8ba03f2ab76dac6)
            check_type(argname="argument data_quality_app_specification", value=data_quality_app_specification, expected_type=type_hints["data_quality_app_specification"])
            check_type(argname="argument data_quality_job_input", value=data_quality_job_input, expected_type=type_hints["data_quality_job_input"])
            check_type(argname="argument data_quality_job_output_config", value=data_quality_job_output_config, expected_type=type_hints["data_quality_job_output_config"])
            check_type(argname="argument job_resources", value=job_resources, expected_type=type_hints["job_resources"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument data_quality_baseline_config", value=data_quality_baseline_config, expected_type=type_hints["data_quality_baseline_config"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument job_definition_name", value=job_definition_name, expected_type=type_hints["job_definition_name"])
            check_type(argname="argument network_config", value=network_config, expected_type=type_hints["network_config"])
            check_type(argname="argument stopping_condition", value=stopping_condition, expected_type=type_hints["stopping_condition"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "data_quality_app_specification": data_quality_app_specification,
            "data_quality_job_input": data_quality_job_input,
            "data_quality_job_output_config": data_quality_job_output_config,
            "job_resources": job_resources,
            "role_arn": role_arn,
        }
        if data_quality_baseline_config is not None:
            self._values["data_quality_baseline_config"] = data_quality_baseline_config
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if job_definition_name is not None:
            self._values["job_definition_name"] = job_definition_name
        if network_config is not None:
            self._values["network_config"] = network_config
        if stopping_condition is not None:
            self._values["stopping_condition"] = stopping_condition
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def data_quality_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty]:
        '''Specifies the container that runs the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityappspecification
        '''
        result = self._values.get("data_quality_app_specification")
        assert result is not None, "Required property 'data_quality_app_specification' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty], result)

    @builtins.property
    def data_quality_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityJobInputProperty]:
        '''A list of inputs for the monitoring job.

        Currently endpoints are supported as monitoring inputs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityjobinput
        '''
        result = self._values.get("data_quality_job_input")
        assert result is not None, "Required property 'data_quality_job_input' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityJobInputProperty], result)

    @builtins.property
    def data_quality_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringOutputConfigProperty]:
        '''The output configuration for monitoring jobs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-dataqualityjoboutputconfig
        '''
        result = self._values.get("data_quality_job_output_config")
        assert result is not None, "Required property 'data_quality_job_output_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringOutputConfigProperty], result)

    @builtins.property
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringResourcesProperty]:
        '''Identifies the resources to deploy for a monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-jobresources
        '''
        result = self._values.get("job_resources")
        assert result is not None, "Required property 'job_resources' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringResourcesProperty], result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def data_quality_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty]]:
        '''Configures the constraints and baselines for the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-dataqualitybaselineconfig
        '''
        result = self._values.get("data_quality_baseline_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty]], result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name for the monitoring job definition.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-jobdefinitionname
        '''
        result = self._values.get("job_definition_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.NetworkConfigProperty]]:
        '''Specifies networking configuration for the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-networkconfig
        '''
        result = self._values.get("network_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.NetworkConfigProperty]], result)

    @builtins.property
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.StoppingConditionProperty]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-stoppingcondition
        '''
        result = self._values.get("stopping_condition")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.StoppingConditionProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-dataqualityjobdefinition.html#cfn-sagemaker-dataqualityjobdefinition-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnDataQualityJobDefinitionProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnDevice(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDevice",
):
    '''The ``AWS::SageMaker::Device`` resource is an Amazon SageMaker resource type that allows you to register your Devices against an existing SageMaker Edge Manager DeviceFleet.

    Each device must be listed individually in the CFN specification.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html
    :cloudformationResource: AWS::SageMaker::Device
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_device = sagemaker.CfnDevice(self, "MyCfnDevice",
            device_fleet_name="deviceFleetName",
        
            # the properties below are optional
            device=sagemaker.CfnDevice.DeviceProperty(
                device_name="deviceName",
        
                # the properties below are optional
                description="description",
                iot_thing_name="iotThingName"
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        device_fleet_name: builtins.str,
        device: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDevice.DeviceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param device_fleet_name: The name of the fleet the device belongs to.
        :param device: Edge device you want to create.
        :param tags: An array of key-value pairs that contain metadata to help you categorize and organize your devices. Each tag consists of a key and a value, both of which you define.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c3abcdef1d2ea64456171c0cbf08b0c16eae8b8d28f4815c6515aabe2e523270)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnDeviceProps(
            device_fleet_name=device_fleet_name, device=device, tags=tags
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6a8d3dc37aebc873d0aeea906ad87c927cdf82cf7e9a80e28d7b2195c636a2b4)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0506dad1f49196fefcbd13d570aff49c31dda0672510b37b43320d943cf268b7)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="deviceFleetName")
    def device_fleet_name(self) -> builtins.str:
        '''The name of the fleet the device belongs to.'''
        return typing.cast(builtins.str, jsii.get(self, "deviceFleetName"))

    @device_fleet_name.setter
    def device_fleet_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__946425d0a7da6f130191f8a0815402b1bda48bcc0627c7ed770b3d4f07198f79)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "deviceFleetName", value)

    @builtins.property
    @jsii.member(jsii_name="device")
    def device(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDevice.DeviceProperty"]]:
        '''Edge device you want to create.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDevice.DeviceProperty"]], jsii.get(self, "device"))

    @device.setter
    def device(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDevice.DeviceProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__76314385f9853a3bfe385c949d5b6a43dee2c54b479381ea9765bd304cba6476)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "device", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs that contain metadata to help you categorize and organize your devices.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2d6f7f7a38eb4816071db5d533c111cb8649922632e188b4325a82dd00675042)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDevice.DeviceProperty",
        jsii_struct_bases=[],
        name_mapping={
            "device_name": "deviceName",
            "description": "description",
            "iot_thing_name": "iotThingName",
        },
    )
    class DeviceProperty:
        def __init__(
            self,
            *,
            device_name: builtins.str,
            description: typing.Optional[builtins.str] = None,
            iot_thing_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information of a particular device.

            :param device_name: The name of the device.
            :param description: Description of the device.
            :param iot_thing_name: AWS Internet of Things (IoT) object name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-device-device.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                device_property = sagemaker.CfnDevice.DeviceProperty(
                    device_name="deviceName",
                
                    # the properties below are optional
                    description="description",
                    iot_thing_name="iotThingName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__43b40b55245978699774f9b5e56191c22e81a73552561f7190f32a80a2311431)
                check_type(argname="argument device_name", value=device_name, expected_type=type_hints["device_name"])
                check_type(argname="argument description", value=description, expected_type=type_hints["description"])
                check_type(argname="argument iot_thing_name", value=iot_thing_name, expected_type=type_hints["iot_thing_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "device_name": device_name,
            }
            if description is not None:
                self._values["description"] = description
            if iot_thing_name is not None:
                self._values["iot_thing_name"] = iot_thing_name

        @builtins.property
        def device_name(self) -> builtins.str:
            '''The name of the device.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-device-device.html#cfn-sagemaker-device-device-devicename
            '''
            result = self._values.get("device_name")
            assert result is not None, "Required property 'device_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def description(self) -> typing.Optional[builtins.str]:
            '''Description of the device.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-device-device.html#cfn-sagemaker-device-device-description
            '''
            result = self._values.get("description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def iot_thing_name(self) -> typing.Optional[builtins.str]:
            '''AWS Internet of Things (IoT) object name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-device-device.html#cfn-sagemaker-device-device-iotthingname
            '''
            result = self._values.get("iot_thing_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DeviceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnDeviceFleet(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDeviceFleet",
):
    '''The ``AWS::SageMaker::DeviceFleet`` resource is an Amazon SageMaker resource type that allows you to create a DeviceFleet that manages your SageMaker Edge Manager Devices.

    You must register your devices against the ``DeviceFleet`` separately.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html
    :cloudformationResource: AWS::SageMaker::DeviceFleet
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_device_fleet = sagemaker.CfnDeviceFleet(self, "MyCfnDeviceFleet",
            device_fleet_name="deviceFleetName",
            output_config=sagemaker.CfnDeviceFleet.EdgeOutputConfigProperty(
                s3_output_location="s3OutputLocation",
        
                # the properties below are optional
                kms_key_id="kmsKeyId"
            ),
            role_arn="roleArn",
        
            # the properties below are optional
            description="description",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        device_fleet_name: builtins.str,
        output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDeviceFleet.EdgeOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        description: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param device_fleet_name: Name of the device fleet.
        :param output_config: The output configuration for storing sample data collected by the fleet.
        :param role_arn: The Amazon Resource Name (ARN) that has access to AWS Internet of Things (IoT).
        :param description: A description of the fleet.
        :param tags: An array of key-value pairs that contain metadata to help you categorize and organize your device fleets. Each tag consists of a key and a value, both of which you define.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e5c11192822cf6a7274bcacd8c8147149a9111d09d2701f9547a16c89d2d2c06)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnDeviceFleetProps(
            device_fleet_name=device_fleet_name,
            output_config=output_config,
            role_arn=role_arn,
            description=description,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3cb330fe6c6b70769b12318fb10174ed458f16ae84753429881454642514e4e9)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3d262d2dfa0a766b9ef88b7d0180a9a007a4589ca64179969667e5c835a27524)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="deviceFleetName")
    def device_fleet_name(self) -> builtins.str:
        '''Name of the device fleet.'''
        return typing.cast(builtins.str, jsii.get(self, "deviceFleetName"))

    @device_fleet_name.setter
    def device_fleet_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dc1ebf19bb8d12d33f46194921833987903a772f1f8219286b1e902fb541b0a3)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "deviceFleetName", value)

    @builtins.property
    @jsii.member(jsii_name="outputConfig")
    def output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDeviceFleet.EdgeOutputConfigProperty"]:
        '''The output configuration for storing sample data collected by the fleet.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDeviceFleet.EdgeOutputConfigProperty"], jsii.get(self, "outputConfig"))

    @output_config.setter
    def output_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDeviceFleet.EdgeOutputConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7fc98ed95422b4cc9f6b42674ea7654ba952161c116c8516d593f0414b33cb81)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "outputConfig", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) that has access to AWS Internet of Things (IoT).'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2032a1e19b80658a94b8bed07221ad9072ce3559dc064b8ec7b727b4080ed28a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="description")
    def description(self) -> typing.Optional[builtins.str]:
        '''A description of the fleet.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "description"))

    @description.setter
    def description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__eeedc707895aa3002c706479748ee7820bd530fd99db1b35f3953bbe5c0681d5)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "description", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs that contain metadata to help you categorize and organize your device fleets.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4f53f02381a9dd5e349f8db9586bd32761b8f0f1adab26fa442b152d97868e36)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDeviceFleet.EdgeOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "s3_output_location": "s3OutputLocation",
            "kms_key_id": "kmsKeyId",
        },
    )
    class EdgeOutputConfigProperty:
        def __init__(
            self,
            *,
            s3_output_location: builtins.str,
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for storing sample data collected by the fleet.

            :param s3_output_location: The Amazon Simple Storage (S3) bucket URI.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume after compilation job. If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-devicefleet-edgeoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                edge_output_config_property = sagemaker.CfnDeviceFleet.EdgeOutputConfigProperty(
                    s3_output_location="s3OutputLocation",
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1eb8f35c611515659c53b813c3fef2016ed31d467e5dfe3e9720e7ec96acc382)
                check_type(argname="argument s3_output_location", value=s3_output_location, expected_type=type_hints["s3_output_location"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output_location": s3_output_location,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def s3_output_location(self) -> builtins.str:
            '''The Amazon Simple Storage (S3) bucket URI.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-devicefleet-edgeoutputconfig.html#cfn-sagemaker-devicefleet-edgeoutputconfig-s3outputlocation
            '''
            result = self._values.get("s3_output_location")
            assert result is not None, "Required property 's3_output_location' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume after compilation job.

            If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-devicefleet-edgeoutputconfig.html#cfn-sagemaker-devicefleet-edgeoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EdgeOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDeviceFleetProps",
    jsii_struct_bases=[],
    name_mapping={
        "device_fleet_name": "deviceFleetName",
        "output_config": "outputConfig",
        "role_arn": "roleArn",
        "description": "description",
        "tags": "tags",
    },
)
class CfnDeviceFleetProps:
    def __init__(
        self,
        *,
        device_fleet_name: builtins.str,
        output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDeviceFleet.EdgeOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        description: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnDeviceFleet``.

        :param device_fleet_name: Name of the device fleet.
        :param output_config: The output configuration for storing sample data collected by the fleet.
        :param role_arn: The Amazon Resource Name (ARN) that has access to AWS Internet of Things (IoT).
        :param description: A description of the fleet.
        :param tags: An array of key-value pairs that contain metadata to help you categorize and organize your device fleets. Each tag consists of a key and a value, both of which you define.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_device_fleet_props = sagemaker.CfnDeviceFleetProps(
                device_fleet_name="deviceFleetName",
                output_config=sagemaker.CfnDeviceFleet.EdgeOutputConfigProperty(
                    s3_output_location="s3OutputLocation",
            
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                ),
                role_arn="roleArn",
            
                # the properties below are optional
                description="description",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d2dc3d0951ad79f71353b3ad32783516a322539ca7717d79ffa74bab3f2b0300)
            check_type(argname="argument device_fleet_name", value=device_fleet_name, expected_type=type_hints["device_fleet_name"])
            check_type(argname="argument output_config", value=output_config, expected_type=type_hints["output_config"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument description", value=description, expected_type=type_hints["description"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "device_fleet_name": device_fleet_name,
            "output_config": output_config,
            "role_arn": role_arn,
        }
        if description is not None:
            self._values["description"] = description
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def device_fleet_name(self) -> builtins.str:
        '''Name of the device fleet.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-devicefleetname
        '''
        result = self._values.get("device_fleet_name")
        assert result is not None, "Required property 'device_fleet_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDeviceFleet.EdgeOutputConfigProperty]:
        '''The output configuration for storing sample data collected by the fleet.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-outputconfig
        '''
        result = self._values.get("output_config")
        assert result is not None, "Required property 'output_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDeviceFleet.EdgeOutputConfigProperty], result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) that has access to AWS Internet of Things (IoT).

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def description(self) -> typing.Optional[builtins.str]:
        '''A description of the fleet.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-description
        '''
        result = self._values.get("description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs that contain metadata to help you categorize and organize your device fleets.

        Each tag consists of a key and a value, both of which you define.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-devicefleet.html#cfn-sagemaker-devicefleet-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnDeviceFleetProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDeviceProps",
    jsii_struct_bases=[],
    name_mapping={
        "device_fleet_name": "deviceFleetName",
        "device": "device",
        "tags": "tags",
    },
)
class CfnDeviceProps:
    def __init__(
        self,
        *,
        device_fleet_name: builtins.str,
        device: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDevice.DeviceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnDevice``.

        :param device_fleet_name: The name of the fleet the device belongs to.
        :param device: Edge device you want to create.
        :param tags: An array of key-value pairs that contain metadata to help you categorize and organize your devices. Each tag consists of a key and a value, both of which you define.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_device_props = sagemaker.CfnDeviceProps(
                device_fleet_name="deviceFleetName",
            
                # the properties below are optional
                device=sagemaker.CfnDevice.DeviceProperty(
                    device_name="deviceName",
            
                    # the properties below are optional
                    description="description",
                    iot_thing_name="iotThingName"
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__73e7f76537702c6066451ab74616be8106d0374344002438b8bafb5d35f7440e)
            check_type(argname="argument device_fleet_name", value=device_fleet_name, expected_type=type_hints["device_fleet_name"])
            check_type(argname="argument device", value=device, expected_type=type_hints["device"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "device_fleet_name": device_fleet_name,
        }
        if device is not None:
            self._values["device"] = device
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def device_fleet_name(self) -> builtins.str:
        '''The name of the fleet the device belongs to.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-devicefleetname
        '''
        result = self._values.get("device_fleet_name")
        assert result is not None, "Required property 'device_fleet_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def device(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDevice.DeviceProperty]]:
        '''Edge device you want to create.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-device
        '''
        result = self._values.get("device")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDevice.DeviceProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs that contain metadata to help you categorize and organize your devices.

        Each tag consists of a key and a value, both of which you define.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnDeviceProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnDomain(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain",
):
    '''Creates a ``Domain`` .

    A domain consists of an associated Amazon Elastic File System (EFS) volume, a list of authorized users, and a variety of security, application, policy, and Amazon Virtual Private Cloud (VPC) configurations. Users within a domain can share notebook files and other artifacts with each other.

    *EFS storage*

    When a domain is created, an EFS volume is created for use by all of the users within the domain. Each user receives a private home directory within the EFS volume for notebooks, Git repositories, and data files.

    SageMaker uses the AWS Key Management Service ( AWS KMS) to encrypt the EFS volume attached to the domain with an AWS managed key by default. For more control, you can specify a customer managed key. For more information, see `Protect Data at Rest Using Encryption <https://docs.aws.amazon.com/sagemaker/latest/dg/encryption-at-rest.html>`_ .

    *VPC configuration*

    All traffic between the domain and the EFS volume is through the specified VPC and subnets. For other traffic, you can specify the ``AppNetworkAccessType`` parameter. ``AppNetworkAccessType`` corresponds to the network access type that you choose when you onboard to the domain. The following options are available:

    - ``PublicInternetOnly`` - Non-EFS traffic goes through a VPC managed by Amazon SageMaker, which allows internet access. This is the default value.
    - ``VpcOnly`` - All traffic is through the specified VPC and subnets. Internet access is disabled by default. To allow internet access, you must specify a NAT gateway.

    When internet access is disabled, you won't be able to run a Amazon SageMaker Studio notebook or to train or host models unless your VPC has an interface endpoint to the SageMaker API and runtime or a NAT gateway and your security groups allow outbound connections.
    .. epigraph::

       NFS traffic over TCP on port 2049 needs to be allowed in both inbound and outbound rules in order to launch a Amazon SageMaker Studio app successfully.

    For more information, see `Connect Amazon SageMaker Studio Notebooks to Resources in a VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html
    :cloudformationResource: AWS::SageMaker::Domain
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_domain = sagemaker.CfnDomain(self, "MyCfnDomain",
            auth_mode="authMode",
            default_user_settings=sagemaker.CfnDomain.UserSettingsProperty(
                execution_role="executionRole",
        
                # the properties below are optional
                code_editor_app_settings=sagemaker.CfnDomain.CodeEditorAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                ),
                custom_file_system_configs=[sagemaker.CfnDomain.CustomFileSystemConfigProperty(
                    efs_file_system_config=sagemaker.CfnDomain.EFSFileSystemConfigProperty(
                        file_system_id="fileSystemId",
        
                        # the properties below are optional
                        file_system_path="fileSystemPath"
                    )
                )],
                custom_posix_user_config=sagemaker.CfnDomain.CustomPosixUserConfigProperty(
                    gid=123,
                    uid=123
                ),
                default_landing_uri="defaultLandingUri",
                jupyter_lab_app_settings=sagemaker.CfnDomain.JupyterLabAppSettingsProperty(
                    code_repositories=[sagemaker.CfnDomain.CodeRepositoryProperty(
                        repository_url="repositoryUrl"
                    )],
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                ),
                jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                r_session_app_settings=sagemaker.CfnDomain.RSessionAppSettingsProperty(
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                r_studio_server_pro_app_settings=sagemaker.CfnDomain.RStudioServerProAppSettingsProperty(
                    access_status="accessStatus",
                    user_group="userGroup"
                ),
                security_groups=["securityGroups"],
                sharing_settings=sagemaker.CfnDomain.SharingSettingsProperty(
                    notebook_output_option="notebookOutputOption",
                    s3_kms_key_id="s3KmsKeyId",
                    s3_output_path="s3OutputPath"
                ),
                space_storage_settings=sagemaker.CfnDomain.DefaultSpaceStorageSettingsProperty(
                    default_ebs_storage_settings=sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty(
                        default_ebs_volume_size_in_gb=123,
                        maximum_ebs_volume_size_in_gb=123
                    )
                ),
                studio_web_portal="studioWebPortal"
            ),
            domain_name="domainName",
            subnet_ids=["subnetIds"],
            vpc_id="vpcId",
        
            # the properties below are optional
            app_network_access_type="appNetworkAccessType",
            app_security_group_management="appSecurityGroupManagement",
            default_space_settings=sagemaker.CfnDomain.DefaultSpaceSettingsProperty(
                execution_role="executionRole",
        
                # the properties below are optional
                jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                security_groups=["securityGroups"]
            ),
            domain_settings=sagemaker.CfnDomain.DomainSettingsProperty(
                r_studio_server_pro_domain_settings=sagemaker.CfnDomain.RStudioServerProDomainSettingsProperty(
                    domain_execution_role_arn="domainExecutionRoleArn",
        
                    # the properties below are optional
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    r_studio_connect_url="rStudioConnectUrl",
                    r_studio_package_manager_url="rStudioPackageManagerUrl"
                ),
                security_group_ids=["securityGroupIds"]
            ),
            kms_key_id="kmsKeyId",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        auth_mode: builtins.str,
        default_user_settings: typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.UserSettingsProperty", typing.Dict[builtins.str, typing.Any]]],
        domain_name: builtins.str,
        subnet_ids: typing.Sequence[builtins.str],
        vpc_id: builtins.str,
        app_network_access_type: typing.Optional[builtins.str] = None,
        app_security_group_management: typing.Optional[builtins.str] = None,
        default_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.DefaultSpaceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.DomainSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param auth_mode: The mode of authentication that members use to access the Domain. *Valid Values* : ``SSO | IAM``
        :param default_user_settings: The default user settings.
        :param domain_name: The domain name.
        :param subnet_ids: The VPC subnets that Studio uses for communication. *Length Constraints* : Maximum length of 32. *Array members* : Minimum number of 1 item. Maximum number of 16 items. *Pattern* : ``[-0-9a-zA-Z]+``
        :param vpc_id: The ID of the Amazon Virtual Private Cloud (Amazon VPC) that Studio uses for communication. *Length Constraints* : Maximum length of 32. *Pattern* : ``[-0-9a-zA-Z]+``
        :param app_network_access_type: Specifies the VPC used for non-EFS traffic. The default value is ``PublicInternetOnly`` . - ``PublicInternetOnly`` - Non-EFS traffic is through a VPC managed by Amazon SageMaker , which allows direct internet access - ``VpcOnly`` - All Studio traffic is through the specified VPC and subnets *Valid Values* : ``PublicInternetOnly | VpcOnly``
        :param app_security_group_management: The entity that creates and manages the required security groups for inter-app communication in ``VpcOnly`` mode. Required when ``CreateDomain.AppNetworkAccessType`` is ``VpcOnly`` and ``DomainSettings.RStudioServerProDomainSettings.DomainExecutionRoleArn`` is provided. If setting up the domain for use with RStudio, this value must be set to ``Service`` . *Allowed Values* : ``Service`` | ``Customer``
        :param default_space_settings: A collection of settings that apply to spaces created in the Domain.
        :param domain_settings: A collection of settings that apply to the ``SageMaker Domain`` . These settings are specified through the ``CreateDomain`` API call.
        :param kms_key_id: SageMaker uses AWS KMS to encrypt the EFS volume attached to the Domain with an AWS managed customer master key (CMK) by default. For more control, specify a customer managed CMK. *Length Constraints* : Maximum length of 2048. *Pattern* : ``.*``
        :param tags: Tags to associated with the Domain. Each tag consists of a key and an optional value. Tag keys must be unique per resource. Tags are searchable using the Search API. Tags that you specify for the Domain are also added to all apps that are launched in the Domain. *Array members* : Minimum number of 0 items. Maximum number of 50 items.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6a98e719c58aab3299db52c4086bfb65ee6438882423af805478e9ea3fda998f)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnDomainProps(
            auth_mode=auth_mode,
            default_user_settings=default_user_settings,
            domain_name=domain_name,
            subnet_ids=subnet_ids,
            vpc_id=vpc_id,
            app_network_access_type=app_network_access_type,
            app_security_group_management=app_security_group_management,
            default_space_settings=default_space_settings,
            domain_settings=domain_settings,
            kms_key_id=kms_key_id,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__054b92073504f806c8065046fb755c4424b063db14ea01d662bf1a3799b913a9)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__27b8551bfeb2abb4c1faf2dad1939e476fbe0902c5876e849b3a2a2526fef410)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrDomainArn")
    def attr_domain_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the Domain, such as ``arn:aws:sagemaker:us-west-2:account-id:domain/my-domain-name`` .

        :cloudformationAttribute: DomainArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrDomainArn"))

    @builtins.property
    @jsii.member(jsii_name="attrDomainId")
    def attr_domain_id(self) -> builtins.str:
        '''The Domain ID.

        :cloudformationAttribute: DomainId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrDomainId"))

    @builtins.property
    @jsii.member(jsii_name="attrHomeEfsFileSystemId")
    def attr_home_efs_file_system_id(self) -> builtins.str:
        '''The ID of the Amazon Elastic File System (EFS) managed by this Domain.

        :cloudformationAttribute: HomeEfsFileSystemId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrHomeEfsFileSystemId"))

    @builtins.property
    @jsii.member(jsii_name="attrSecurityGroupIdForDomainBoundary")
    def attr_security_group_id_for_domain_boundary(self) -> builtins.str:
        '''The ID of the security group that authorizes traffic between the ``RSessionGateway`` apps and the ``RStudioServerPro`` app.

        :cloudformationAttribute: SecurityGroupIdForDomainBoundary
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrSecurityGroupIdForDomainBoundary"))

    @builtins.property
    @jsii.member(jsii_name="attrSingleSignOnApplicationArn")
    def attr_single_sign_on_application_arn(self) -> builtins.str:
        '''The ARN of the application managed by SageMaker in IAM Identity Center.

        This value is only returned for domains created after October 1, 2023.

        :cloudformationAttribute: SingleSignOnApplicationArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrSingleSignOnApplicationArn"))

    @builtins.property
    @jsii.member(jsii_name="attrSingleSignOnManagedApplicationInstanceId")
    def attr_single_sign_on_managed_application_instance_id(self) -> builtins.str:
        '''The IAM Identity Center managed application instance ID.

        :cloudformationAttribute: SingleSignOnManagedApplicationInstanceId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrSingleSignOnManagedApplicationInstanceId"))

    @builtins.property
    @jsii.member(jsii_name="attrUrl")
    def attr_url(self) -> builtins.str:
        '''The URL for the Domain.

        :cloudformationAttribute: Url
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrUrl"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="authMode")
    def auth_mode(self) -> builtins.str:
        '''The mode of authentication that members use to access the Domain.'''
        return typing.cast(builtins.str, jsii.get(self, "authMode"))

    @auth_mode.setter
    def auth_mode(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a67fdecfd1f892afa5b5efc44318f01b5d8286aec268d01fb468966f5a4710fb)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "authMode", value)

    @builtins.property
    @jsii.member(jsii_name="defaultUserSettings")
    def default_user_settings(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnDomain.UserSettingsProperty"]:
        '''The default user settings.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnDomain.UserSettingsProperty"], jsii.get(self, "defaultUserSettings"))

    @default_user_settings.setter
    def default_user_settings(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnDomain.UserSettingsProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__14263bf0f3dae6b010cee5a9a7de240a41a79f8f655ed36f1444e579a936fc5d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "defaultUserSettings", value)

    @builtins.property
    @jsii.member(jsii_name="domainName")
    def domain_name(self) -> builtins.str:
        '''The domain name.'''
        return typing.cast(builtins.str, jsii.get(self, "domainName"))

    @domain_name.setter
    def domain_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__76d0ed31020f4eadd792cd5d7897939d99ef06ed557509d040b88b5f6e9cca9c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domainName", value)

    @builtins.property
    @jsii.member(jsii_name="subnetIds")
    def subnet_ids(self) -> typing.List[builtins.str]:
        '''The VPC subnets that Studio uses for communication.'''
        return typing.cast(typing.List[builtins.str], jsii.get(self, "subnetIds"))

    @subnet_ids.setter
    def subnet_ids(self, value: typing.List[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6556642f81d027deb80da8cf42e945b715e6966790a8ab41e68da4acaaf3a9eb)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "subnetIds", value)

    @builtins.property
    @jsii.member(jsii_name="vpcId")
    def vpc_id(self) -> builtins.str:
        '''The ID of the Amazon Virtual Private Cloud (Amazon VPC) that Studio uses for communication.'''
        return typing.cast(builtins.str, jsii.get(self, "vpcId"))

    @vpc_id.setter
    def vpc_id(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e0aca1d756799cd6468a535127ee441605b164991ff11c6effe6c40c519ff5c0)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vpcId", value)

    @builtins.property
    @jsii.member(jsii_name="appNetworkAccessType")
    def app_network_access_type(self) -> typing.Optional[builtins.str]:
        '''Specifies the VPC used for non-EFS traffic.

        The default value is ``PublicInternetOnly`` .
        '''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "appNetworkAccessType"))

    @app_network_access_type.setter
    def app_network_access_type(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__66770e15c78955514aa53519369aa0389610ff7cbd94793f5ee385fb2c96a0cb)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "appNetworkAccessType", value)

    @builtins.property
    @jsii.member(jsii_name="appSecurityGroupManagement")
    def app_security_group_management(self) -> typing.Optional[builtins.str]:
        '''The entity that creates and manages the required security groups for inter-app communication in ``VpcOnly`` mode.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "appSecurityGroupManagement"))

    @app_security_group_management.setter
    def app_security_group_management(
        self,
        value: typing.Optional[builtins.str],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dfaaa586058b1b8f2197fde6ee73bb9b0d7df2f79e82996c1d47c48d7c51b1c5)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "appSecurityGroupManagement", value)

    @builtins.property
    @jsii.member(jsii_name="defaultSpaceSettings")
    def default_space_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultSpaceSettingsProperty"]]:
        '''A collection of settings that apply to spaces created in the Domain.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultSpaceSettingsProperty"]], jsii.get(self, "defaultSpaceSettings"))

    @default_space_settings.setter
    def default_space_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultSpaceSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f5d0e056a481e730ebed277f032ef13b3337668137169bd966cc3fc66b40464e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "defaultSpaceSettings", value)

    @builtins.property
    @jsii.member(jsii_name="domainSettings")
    def domain_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DomainSettingsProperty"]]:
        '''A collection of settings that apply to the ``SageMaker Domain`` .'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DomainSettingsProperty"]], jsii.get(self, "domainSettings"))

    @domain_settings.setter
    def domain_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DomainSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a80dc18546bde6c82a5e78a8e60c044ce75c01a498f10fd5d6422d2fecfbbd61)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domainSettings", value)

    @builtins.property
    @jsii.member(jsii_name="kmsKeyId")
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''SageMaker uses AWS KMS to encrypt the EFS volume attached to the Domain with an AWS managed customer master key (CMK) by default.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "kmsKeyId"))

    @kms_key_id.setter
    def kms_key_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__705995dde312c66454de0b9e9f6a8d7e895beb5c34f61395d1dab1369dd40850)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "kmsKeyId", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Tags to associated with the Domain.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6d1a70c209913231f1eb30dba814eb3a3bc58f6f4341ea1392c5061d8dbc8d51)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.CodeEditorAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "default_resource_spec": "defaultResourceSpec",
            "lifecycle_config_arns": "lifecycleConfigArns",
        },
    )
    class CodeEditorAppSettingsProperty:
        def __init__(
            self,
            *,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''The Code Editor application settings.

            For more information about Code Editor, see `Get started with Code Editor in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/code-editor.html>`_ .

            :param default_resource_spec: 
            :param lifecycle_config_arns: The Amazon Resource Name (ARN) of the Code Editor application lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-codeeditorappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                code_editor_app_settings_property = sagemaker.CfnDomain.CodeEditorAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fc744bb58e49877db429fbdcea73e31d9e5326375463940bb48321473f97dfaa)
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
                check_type(argname="argument lifecycle_config_arns", value=lifecycle_config_arns, expected_type=type_hints["lifecycle_config_arns"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec
            if lifecycle_config_arns is not None:
                self._values["lifecycle_config_arns"] = lifecycle_config_arns

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-codeeditorappsettings.html#cfn-sagemaker-domain-codeeditorappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        @builtins.property
        def lifecycle_config_arns(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The Amazon Resource Name (ARN) of the Code Editor application lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-codeeditorappsettings.html#cfn-sagemaker-domain-codeeditorappsettings-lifecycleconfigarns
            '''
            result = self._values.get("lifecycle_config_arns")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CodeEditorAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.CodeRepositoryProperty",
        jsii_struct_bases=[],
        name_mapping={"repository_url": "repositoryUrl"},
    )
    class CodeRepositoryProperty:
        def __init__(self, *, repository_url: builtins.str) -> None:
            '''A Git repository that SageMaker automatically displays to users for cloning in the JupyterServer application.

            :param repository_url: The URL of the Git repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-coderepository.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                code_repository_property = sagemaker.CfnDomain.CodeRepositoryProperty(
                    repository_url="repositoryUrl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1ca7d1d6cdc42171e1cf7375238fa986babdf04453e194f3a1f0615c62b65fa1)
                check_type(argname="argument repository_url", value=repository_url, expected_type=type_hints["repository_url"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "repository_url": repository_url,
            }

        @builtins.property
        def repository_url(self) -> builtins.str:
            '''The URL of the Git repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-coderepository.html#cfn-sagemaker-domain-coderepository-repositoryurl
            '''
            result = self._values.get("repository_url")
            assert result is not None, "Required property 'repository_url' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CodeRepositoryProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.CustomFileSystemConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"efs_file_system_config": "efsFileSystemConfig"},
    )
    class CustomFileSystemConfigProperty:
        def __init__(
            self,
            *,
            efs_file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.EFSFileSystemConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for assigning a custom file system to a user profile or space for an Amazon SageMaker Domain.

            Permitted users can access this file system in Amazon SageMaker Studio.

            :param efs_file_system_config: The settings for a custom Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customfilesystemconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_file_system_config_property = sagemaker.CfnDomain.CustomFileSystemConfigProperty(
                    efs_file_system_config=sagemaker.CfnDomain.EFSFileSystemConfigProperty(
                        file_system_id="fileSystemId",
                
                        # the properties below are optional
                        file_system_path="fileSystemPath"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__acb2194c11b5367f9afdacac546d8288c9357d3ca5f49b7d828264eb239b24c8)
                check_type(argname="argument efs_file_system_config", value=efs_file_system_config, expected_type=type_hints["efs_file_system_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if efs_file_system_config is not None:
                self._values["efs_file_system_config"] = efs_file_system_config

        @builtins.property
        def efs_file_system_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.EFSFileSystemConfigProperty"]]:
            '''The settings for a custom Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customfilesystemconfig.html#cfn-sagemaker-domain-customfilesystemconfig-efsfilesystemconfig
            '''
            result = self._values.get("efs_file_system_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.EFSFileSystemConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomFileSystemConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.CustomImageProperty",
        jsii_struct_bases=[],
        name_mapping={
            "app_image_config_name": "appImageConfigName",
            "image_name": "imageName",
            "image_version_number": "imageVersionNumber",
        },
    )
    class CustomImageProperty:
        def __init__(
            self,
            *,
            app_image_config_name: builtins.str,
            image_name: builtins.str,
            image_version_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''A custom SageMaker image.

            For more information, see `Bring your own SageMaker image <https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html>`_ .

            :param app_image_config_name: The name of the AppImageConfig.
            :param image_name: The name of the CustomImage. Must be unique to your account.
            :param image_version_number: The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customimage.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_image_property = sagemaker.CfnDomain.CustomImageProperty(
                    app_image_config_name="appImageConfigName",
                    image_name="imageName",
                
                    # the properties below are optional
                    image_version_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2406a28ab5a6558d6675669b44f0ae0fc98be5d4a9d0f1426d9e8ba1b3a2b623)
                check_type(argname="argument app_image_config_name", value=app_image_config_name, expected_type=type_hints["app_image_config_name"])
                check_type(argname="argument image_name", value=image_name, expected_type=type_hints["image_name"])
                check_type(argname="argument image_version_number", value=image_version_number, expected_type=type_hints["image_version_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "app_image_config_name": app_image_config_name,
                "image_name": image_name,
            }
            if image_version_number is not None:
                self._values["image_version_number"] = image_version_number

        @builtins.property
        def app_image_config_name(self) -> builtins.str:
            '''The name of the AppImageConfig.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customimage.html#cfn-sagemaker-domain-customimage-appimageconfigname
            '''
            result = self._values.get("app_image_config_name")
            assert result is not None, "Required property 'app_image_config_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_name(self) -> builtins.str:
            '''The name of the CustomImage.

            Must be unique to your account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customimage.html#cfn-sagemaker-domain-customimage-imagename
            '''
            result = self._values.get("image_name")
            assert result is not None, "Required property 'image_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_version_number(self) -> typing.Optional[jsii.Number]:
            '''The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customimage.html#cfn-sagemaker-domain-customimage-imageversionnumber
            '''
            result = self._values.get("image_version_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomImageProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.CustomPosixUserConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"gid": "gid", "uid": "uid"},
    )
    class CustomPosixUserConfigProperty:
        def __init__(self, *, gid: jsii.Number, uid: jsii.Number) -> None:
            '''Details about the POSIX identity that is used for file system operations.

            :param gid: The POSIX group ID.
            :param uid: The POSIX user ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customposixuserconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_posix_user_config_property = sagemaker.CfnDomain.CustomPosixUserConfigProperty(
                    gid=123,
                    uid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b89c0efcbc897595afb135954faed4acca8f58bad6b6be89e253973b9d9aeb4d)
                check_type(argname="argument gid", value=gid, expected_type=type_hints["gid"])
                check_type(argname="argument uid", value=uid, expected_type=type_hints["uid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "gid": gid,
                "uid": uid,
            }

        @builtins.property
        def gid(self) -> jsii.Number:
            '''The POSIX group ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customposixuserconfig.html#cfn-sagemaker-domain-customposixuserconfig-gid
            '''
            result = self._values.get("gid")
            assert result is not None, "Required property 'gid' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def uid(self) -> jsii.Number:
            '''The POSIX user ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-customposixuserconfig.html#cfn-sagemaker-domain-customposixuserconfig-uid
            '''
            result = self._values.get("uid")
            assert result is not None, "Required property 'uid' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomPosixUserConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "default_ebs_volume_size_in_gb": "defaultEbsVolumeSizeInGb",
            "maximum_ebs_volume_size_in_gb": "maximumEbsVolumeSizeInGb",
        },
    )
    class DefaultEbsStorageSettingsProperty:
        def __init__(
            self,
            *,
            default_ebs_volume_size_in_gb: jsii.Number,
            maximum_ebs_volume_size_in_gb: jsii.Number,
        ) -> None:
            '''A collection of default EBS storage settings that applies to private spaces created within a domain or user profile.

            :param default_ebs_volume_size_in_gb: The default size of the EBS storage volume for a private space.
            :param maximum_ebs_volume_size_in_gb: The maximum size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultebsstoragesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                default_ebs_storage_settings_property = sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty(
                    default_ebs_volume_size_in_gb=123,
                    maximum_ebs_volume_size_in_gb=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b52c119b99eae7bccd0ea69c20d2eb78b4e2a18d561fcfd418dff5adba549437)
                check_type(argname="argument default_ebs_volume_size_in_gb", value=default_ebs_volume_size_in_gb, expected_type=type_hints["default_ebs_volume_size_in_gb"])
                check_type(argname="argument maximum_ebs_volume_size_in_gb", value=maximum_ebs_volume_size_in_gb, expected_type=type_hints["maximum_ebs_volume_size_in_gb"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "default_ebs_volume_size_in_gb": default_ebs_volume_size_in_gb,
                "maximum_ebs_volume_size_in_gb": maximum_ebs_volume_size_in_gb,
            }

        @builtins.property
        def default_ebs_volume_size_in_gb(self) -> jsii.Number:
            '''The default size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultebsstoragesettings.html#cfn-sagemaker-domain-defaultebsstoragesettings-defaultebsvolumesizeingb
            '''
            result = self._values.get("default_ebs_volume_size_in_gb")
            assert result is not None, "Required property 'default_ebs_volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def maximum_ebs_volume_size_in_gb(self) -> jsii.Number:
            '''The maximum size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultebsstoragesettings.html#cfn-sagemaker-domain-defaultebsstoragesettings-maximumebsvolumesizeingb
            '''
            result = self._values.get("maximum_ebs_volume_size_in_gb")
            assert result is not None, "Required property 'maximum_ebs_volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DefaultEbsStorageSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.DefaultSpaceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "execution_role": "executionRole",
            "jupyter_server_app_settings": "jupyterServerAppSettings",
            "kernel_gateway_app_settings": "kernelGatewayAppSettings",
            "security_groups": "securityGroups",
        },
    )
    class DefaultSpaceSettingsProperty:
        def __init__(
            self,
            *,
            execution_role: builtins.str,
            jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.JupyterServerAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.KernelGatewayAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''A collection of settings that apply to spaces created in the Domain.

            :param execution_role: The ARN of the execution role for the space.
            :param jupyter_server_app_settings: The JupyterServer app settings.
            :param kernel_gateway_app_settings: The KernelGateway app settings.
            :param security_groups: The security group IDs for the Amazon Virtual Private Cloud that the space uses for communication.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                default_space_settings_property = sagemaker.CfnDomain.DefaultSpaceSettingsProperty(
                    execution_role="executionRole",
                
                    # the properties below are optional
                    jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    security_groups=["securityGroups"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6f9de66f7050e50e98d4b4c96b379ab71681a650698564e825f452052572214f)
                check_type(argname="argument execution_role", value=execution_role, expected_type=type_hints["execution_role"])
                check_type(argname="argument jupyter_server_app_settings", value=jupyter_server_app_settings, expected_type=type_hints["jupyter_server_app_settings"])
                check_type(argname="argument kernel_gateway_app_settings", value=kernel_gateway_app_settings, expected_type=type_hints["kernel_gateway_app_settings"])
                check_type(argname="argument security_groups", value=security_groups, expected_type=type_hints["security_groups"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "execution_role": execution_role,
            }
            if jupyter_server_app_settings is not None:
                self._values["jupyter_server_app_settings"] = jupyter_server_app_settings
            if kernel_gateway_app_settings is not None:
                self._values["kernel_gateway_app_settings"] = kernel_gateway_app_settings
            if security_groups is not None:
                self._values["security_groups"] = security_groups

        @builtins.property
        def execution_role(self) -> builtins.str:
            '''The ARN of the execution role for the space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacesettings.html#cfn-sagemaker-domain-defaultspacesettings-executionrole
            '''
            result = self._values.get("execution_role")
            assert result is not None, "Required property 'execution_role' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def jupyter_server_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterServerAppSettingsProperty"]]:
            '''The JupyterServer app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacesettings.html#cfn-sagemaker-domain-defaultspacesettings-jupyterserverappsettings
            '''
            result = self._values.get("jupyter_server_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterServerAppSettingsProperty"]], result)

        @builtins.property
        def kernel_gateway_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.KernelGatewayAppSettingsProperty"]]:
            '''The KernelGateway app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacesettings.html#cfn-sagemaker-domain-defaultspacesettings-kernelgatewayappsettings
            '''
            result = self._values.get("kernel_gateway_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.KernelGatewayAppSettingsProperty"]], result)

        @builtins.property
        def security_groups(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The security group IDs for the Amazon Virtual Private Cloud that the space uses for communication.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacesettings.html#cfn-sagemaker-domain-defaultspacesettings-securitygroups
            '''
            result = self._values.get("security_groups")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DefaultSpaceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.DefaultSpaceStorageSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"default_ebs_storage_settings": "defaultEbsStorageSettings"},
    )
    class DefaultSpaceStorageSettingsProperty:
        def __init__(
            self,
            *,
            default_ebs_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.DefaultEbsStorageSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The default storage settings for a private space.

            :param default_ebs_storage_settings: The default EBS storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacestoragesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                default_space_storage_settings_property = sagemaker.CfnDomain.DefaultSpaceStorageSettingsProperty(
                    default_ebs_storage_settings=sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty(
                        default_ebs_volume_size_in_gb=123,
                        maximum_ebs_volume_size_in_gb=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__65b37e511dc3aca202a4950f1f8750ff3beb0c7745987fbeac5766d6635c681e)
                check_type(argname="argument default_ebs_storage_settings", value=default_ebs_storage_settings, expected_type=type_hints["default_ebs_storage_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_ebs_storage_settings is not None:
                self._values["default_ebs_storage_settings"] = default_ebs_storage_settings

        @builtins.property
        def default_ebs_storage_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultEbsStorageSettingsProperty"]]:
            '''The default EBS storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-defaultspacestoragesettings.html#cfn-sagemaker-domain-defaultspacestoragesettings-defaultebsstoragesettings
            '''
            result = self._values.get("default_ebs_storage_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultEbsStorageSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DefaultSpaceStorageSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.DomainSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "r_studio_server_pro_domain_settings": "rStudioServerProDomainSettings",
            "security_group_ids": "securityGroupIds",
        },
    )
    class DomainSettingsProperty:
        def __init__(
            self,
            *,
            r_studio_server_pro_domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.RStudioServerProDomainSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''A collection of settings that apply to the ``SageMaker Domain`` .

            These settings are specified through the ``CreateDomain`` API call.

            :param r_studio_server_pro_domain_settings: A collection of settings that configure the ``RStudioServerPro`` Domain-level app.
            :param security_group_ids: The security groups for the Amazon Virtual Private Cloud that the ``Domain`` uses for communication between Domain-level apps and user apps.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-domainsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                domain_settings_property = sagemaker.CfnDomain.DomainSettingsProperty(
                    r_studio_server_pro_domain_settings=sagemaker.CfnDomain.RStudioServerProDomainSettingsProperty(
                        domain_execution_role_arn="domainExecutionRoleArn",
                
                        # the properties below are optional
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        r_studio_connect_url="rStudioConnectUrl",
                        r_studio_package_manager_url="rStudioPackageManagerUrl"
                    ),
                    security_group_ids=["securityGroupIds"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b23323cc301476d59d77a279da88bfc3d14a3c21fb8709a0ecc6db6074a56cf9)
                check_type(argname="argument r_studio_server_pro_domain_settings", value=r_studio_server_pro_domain_settings, expected_type=type_hints["r_studio_server_pro_domain_settings"])
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if r_studio_server_pro_domain_settings is not None:
                self._values["r_studio_server_pro_domain_settings"] = r_studio_server_pro_domain_settings
            if security_group_ids is not None:
                self._values["security_group_ids"] = security_group_ids

        @builtins.property
        def r_studio_server_pro_domain_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RStudioServerProDomainSettingsProperty"]]:
            '''A collection of settings that configure the ``RStudioServerPro`` Domain-level app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-domainsettings.html#cfn-sagemaker-domain-domainsettings-rstudioserverprodomainsettings
            '''
            result = self._values.get("r_studio_server_pro_domain_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RStudioServerProDomainSettingsProperty"]], result)

        @builtins.property
        def security_group_ids(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The security groups for the Amazon Virtual Private Cloud that the ``Domain`` uses for communication between Domain-level apps and user apps.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-domainsettings.html#cfn-sagemaker-domain-domainsettings-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DomainSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.EFSFileSystemConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "file_system_id": "fileSystemId",
            "file_system_path": "fileSystemPath",
        },
    )
    class EFSFileSystemConfigProperty:
        def __init__(
            self,
            *,
            file_system_id: builtins.str,
            file_system_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for assigning a custom Amazon EFS file system to a user profile or space for an Amazon SageMaker Domain.

            :param file_system_id: The ID of your Amazon EFS file system.
            :param file_system_path: The path to the file system directory that is accessible in Amazon SageMaker Studio. Permitted users can access only this directory and below.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-efsfilesystemconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                e_fSFile_system_config_property = sagemaker.CfnDomain.EFSFileSystemConfigProperty(
                    file_system_id="fileSystemId",
                
                    # the properties below are optional
                    file_system_path="fileSystemPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f58dbfc3d8dc294c7e7f3e4dbd80fef3d00950f110fa9f391ce587b6d1499684)
                check_type(argname="argument file_system_id", value=file_system_id, expected_type=type_hints["file_system_id"])
                check_type(argname="argument file_system_path", value=file_system_path, expected_type=type_hints["file_system_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "file_system_id": file_system_id,
            }
            if file_system_path is not None:
                self._values["file_system_path"] = file_system_path

        @builtins.property
        def file_system_id(self) -> builtins.str:
            '''The ID of your Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-efsfilesystemconfig.html#cfn-sagemaker-domain-efsfilesystemconfig-filesystemid
            '''
            result = self._values.get("file_system_id")
            assert result is not None, "Required property 'file_system_id' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def file_system_path(self) -> typing.Optional[builtins.str]:
            '''The path to the file system directory that is accessible in Amazon SageMaker Studio.

            Permitted users can access only this directory and below.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-efsfilesystemconfig.html#cfn-sagemaker-domain-efsfilesystemconfig-filesystempath
            '''
            result = self._values.get("file_system_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EFSFileSystemConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.JupyterLabAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "code_repositories": "codeRepositories",
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
            "lifecycle_config_arns": "lifecycleConfigArns",
        },
    )
    class JupyterLabAppSettingsProperty:
        def __init__(
            self,
            *,
            code_repositories: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CodeRepositoryProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''The settings for the JupyterLab application.

            :param code_repositories: A list of Git repositories that SageMaker automatically displays to users for cloning in the JupyterLab application.
            :param custom_images: A list of custom SageMaker images that are configured to run as a JupyterLab app.
            :param default_resource_spec: 
            :param lifecycle_config_arns: The Amazon Resource Name (ARN) of the lifecycle configurations attached to the user profile or domain. To remove a lifecycle config, you must set ``LifecycleConfigArns`` to an empty list.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterlabappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                jupyter_lab_app_settings_property = sagemaker.CfnDomain.JupyterLabAppSettingsProperty(
                    code_repositories=[sagemaker.CfnDomain.CodeRepositoryProperty(
                        repository_url="repositoryUrl"
                    )],
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3cd086b89fbe936eaaa5fb775d9cbd0e29ad00fb21eb2a45265c217414f406d1)
                check_type(argname="argument code_repositories", value=code_repositories, expected_type=type_hints["code_repositories"])
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
                check_type(argname="argument lifecycle_config_arns", value=lifecycle_config_arns, expected_type=type_hints["lifecycle_config_arns"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if code_repositories is not None:
                self._values["code_repositories"] = code_repositories
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec
            if lifecycle_config_arns is not None:
                self._values["lifecycle_config_arns"] = lifecycle_config_arns

        @builtins.property
        def code_repositories(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CodeRepositoryProperty"]]]]:
            '''A list of Git repositories that SageMaker automatically displays to users for cloning in the JupyterLab application.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterlabappsettings.html#cfn-sagemaker-domain-jupyterlabappsettings-coderepositories
            '''
            result = self._values.get("code_repositories")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CodeRepositoryProperty"]]]], result)

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a JupyterLab app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterlabappsettings.html#cfn-sagemaker-domain-jupyterlabappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterlabappsettings.html#cfn-sagemaker-domain-jupyterlabappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        @builtins.property
        def lifecycle_config_arns(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The Amazon Resource Name (ARN) of the lifecycle configurations attached to the user profile or domain.

            To remove a lifecycle config, you must set ``LifecycleConfigArns`` to an empty list.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterlabappsettings.html#cfn-sagemaker-domain-jupyterlabappsettings-lifecycleconfigarns
            '''
            result = self._values.get("lifecycle_config_arns")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JupyterLabAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.JupyterServerAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"default_resource_spec": "defaultResourceSpec"},
    )
    class JupyterServerAppSettingsProperty:
        def __init__(
            self,
            *,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The JupyterServer app settings.

            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterserverappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                jupyter_server_app_settings_property = sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__942897b920fdd808a5ea532138ac1b0df0fb1c9ddd37871604e65d095f882b59)
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-jupyterserverappsettings.html#cfn-sagemaker-domain-jupyterserverappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JupyterServerAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.KernelGatewayAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
        },
    )
    class KernelGatewayAppSettingsProperty:
        def __init__(
            self,
            *,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The KernelGateway app settings.

            :param custom_images: A list of custom SageMaker images that are configured to run as a KernelGateway app.
            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app. .. epigraph:: The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-kernelgatewayappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                kernel_gateway_app_settings_property = sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__976135962fc7c07e542fc30bab2304803e495b79c9c357ea5114ddc4b0dbb7ed)
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a KernelGateway app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-kernelgatewayappsettings.html#cfn-sagemaker-domain-kernelgatewayappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.

            .. epigraph::

               The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-kernelgatewayappsettings.html#cfn-sagemaker-domain-kernelgatewayappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KernelGatewayAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.RSessionAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
        },
    )
    class RSessionAppSettingsProperty:
        def __init__(
            self,
            *,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''A collection of settings that apply to an ``RSessionGateway`` app.

            :param custom_images: A list of custom SageMaker images that are configured to run as a RSession app.
            :param default_resource_spec: Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rsessionappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                r_session_app_settings_property = sagemaker.CfnDomain.RSessionAppSettingsProperty(
                    custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ed9236f4ca80bc2b976cbd6c7f549652ec32a05dfb3665bd8630243e309c6276)
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a RSession app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rsessionappsettings.html#cfn-sagemaker-domain-rsessionappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''Specifies the ARNs of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rsessionappsettings.html#cfn-sagemaker-domain-rsessionappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RSessionAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.RStudioServerProAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"access_status": "accessStatus", "user_group": "userGroup"},
    )
    class RStudioServerProAppSettingsProperty:
        def __init__(
            self,
            *,
            access_status: typing.Optional[builtins.str] = None,
            user_group: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A collection of settings that configure user interaction with the ``RStudioServerPro`` app.

            :param access_status: Indicates whether the current user has access to the ``RStudioServerPro`` app.
            :param user_group: The level of permissions that the user has within the ``RStudioServerPro`` app. This value defaults to ``User``. The ``Admin`` value allows the user access to the RStudio Administrative Dashboard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverproappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                r_studio_server_pro_app_settings_property = sagemaker.CfnDomain.RStudioServerProAppSettingsProperty(
                    access_status="accessStatus",
                    user_group="userGroup"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5bdad69d0d7dd9f412f84d21f9ef9cb6bb758f797a769d60e05dab58f67a85af)
                check_type(argname="argument access_status", value=access_status, expected_type=type_hints["access_status"])
                check_type(argname="argument user_group", value=user_group, expected_type=type_hints["user_group"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if access_status is not None:
                self._values["access_status"] = access_status
            if user_group is not None:
                self._values["user_group"] = user_group

        @builtins.property
        def access_status(self) -> typing.Optional[builtins.str]:
            '''Indicates whether the current user has access to the ``RStudioServerPro`` app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverproappsettings.html#cfn-sagemaker-domain-rstudioserverproappsettings-accessstatus
            '''
            result = self._values.get("access_status")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def user_group(self) -> typing.Optional[builtins.str]:
            '''The level of permissions that the user has within the ``RStudioServerPro`` app.

            This value defaults to ``User``. The ``Admin`` value allows the user access to the RStudio Administrative Dashboard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverproappsettings.html#cfn-sagemaker-domain-rstudioserverproappsettings-usergroup
            '''
            result = self._values.get("user_group")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RStudioServerProAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.RStudioServerProDomainSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "domain_execution_role_arn": "domainExecutionRoleArn",
            "default_resource_spec": "defaultResourceSpec",
            "r_studio_connect_url": "rStudioConnectUrl",
            "r_studio_package_manager_url": "rStudioPackageManagerUrl",
        },
    )
    class RStudioServerProDomainSettingsProperty:
        def __init__(
            self,
            *,
            domain_execution_role_arn: builtins.str,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            r_studio_connect_url: typing.Optional[builtins.str] = None,
            r_studio_package_manager_url: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A collection of settings that configure the ``RStudioServerPro`` Domain-level app.

            :param domain_execution_role_arn: The ARN of the execution role for the ``RStudioServerPro`` Domain-level app.
            :param default_resource_spec: A collection that defines the default ``InstanceType`` , ``SageMakerImageArn`` , and ``SageMakerImageVersionArn`` for the Domain.
            :param r_studio_connect_url: A URL pointing to an RStudio Connect server.
            :param r_studio_package_manager_url: A URL pointing to an RStudio Package Manager server.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverprodomainsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                r_studio_server_pro_domain_settings_property = sagemaker.CfnDomain.RStudioServerProDomainSettingsProperty(
                    domain_execution_role_arn="domainExecutionRoleArn",
                
                    # the properties below are optional
                    default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                        instance_type="instanceType",
                        lifecycle_config_arn="lifecycleConfigArn",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    r_studio_connect_url="rStudioConnectUrl",
                    r_studio_package_manager_url="rStudioPackageManagerUrl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a53076bef887f5d807ddb5491cbeabe991590efba7801d2aa8d981d6913eb70c)
                check_type(argname="argument domain_execution_role_arn", value=domain_execution_role_arn, expected_type=type_hints["domain_execution_role_arn"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
                check_type(argname="argument r_studio_connect_url", value=r_studio_connect_url, expected_type=type_hints["r_studio_connect_url"])
                check_type(argname="argument r_studio_package_manager_url", value=r_studio_package_manager_url, expected_type=type_hints["r_studio_package_manager_url"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "domain_execution_role_arn": domain_execution_role_arn,
            }
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec
            if r_studio_connect_url is not None:
                self._values["r_studio_connect_url"] = r_studio_connect_url
            if r_studio_package_manager_url is not None:
                self._values["r_studio_package_manager_url"] = r_studio_package_manager_url

        @builtins.property
        def domain_execution_role_arn(self) -> builtins.str:
            '''The ARN of the execution role for the ``RStudioServerPro`` Domain-level app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverprodomainsettings.html#cfn-sagemaker-domain-rstudioserverprodomainsettings-domainexecutionrolearn
            '''
            result = self._values.get("domain_execution_role_arn")
            assert result is not None, "Required property 'domain_execution_role_arn' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]]:
            '''A collection that defines the default ``InstanceType`` , ``SageMakerImageArn`` , and ``SageMakerImageVersionArn`` for the Domain.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverprodomainsettings.html#cfn-sagemaker-domain-rstudioserverprodomainsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.ResourceSpecProperty"]], result)

        @builtins.property
        def r_studio_connect_url(self) -> typing.Optional[builtins.str]:
            '''A URL pointing to an RStudio Connect server.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverprodomainsettings.html#cfn-sagemaker-domain-rstudioserverprodomainsettings-rstudioconnecturl
            '''
            result = self._values.get("r_studio_connect_url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def r_studio_package_manager_url(self) -> typing.Optional[builtins.str]:
            '''A URL pointing to an RStudio Package Manager server.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-rstudioserverprodomainsettings.html#cfn-sagemaker-domain-rstudioserverprodomainsettings-rstudiopackagemanagerurl
            '''
            result = self._values.get("r_studio_package_manager_url")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RStudioServerProDomainSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.ResourceSpecProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_type": "instanceType",
            "lifecycle_config_arn": "lifecycleConfigArn",
            "sage_maker_image_arn": "sageMakerImageArn",
            "sage_maker_image_version_arn": "sageMakerImageVersionArn",
        },
    )
    class ResourceSpecProperty:
        def __init__(
            self,
            *,
            instance_type: typing.Optional[builtins.str] = None,
            lifecycle_config_arn: typing.Optional[builtins.str] = None,
            sage_maker_image_arn: typing.Optional[builtins.str] = None,
            sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the ARN's of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :param instance_type: The instance type that the image version runs on. .. epigraph:: *JupyterServer apps* only support the ``system`` value. For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.
            :param lifecycle_config_arn: The Amazon Resource Name (ARN) of the Lifecycle Configuration attached to the Resource.
            :param sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
            :param sage_maker_image_version_arn: The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                resource_spec_property = sagemaker.CfnDomain.ResourceSpecProperty(
                    instance_type="instanceType",
                    lifecycle_config_arn="lifecycleConfigArn",
                    sage_maker_image_arn="sageMakerImageArn",
                    sage_maker_image_version_arn="sageMakerImageVersionArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a15c1a8a4f296645dbaf164af882f41bb1cf89c7585a52dc9b76a9ade4b3f49a)
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument lifecycle_config_arn", value=lifecycle_config_arn, expected_type=type_hints["lifecycle_config_arn"])
                check_type(argname="argument sage_maker_image_arn", value=sage_maker_image_arn, expected_type=type_hints["sage_maker_image_arn"])
                check_type(argname="argument sage_maker_image_version_arn", value=sage_maker_image_version_arn, expected_type=type_hints["sage_maker_image_version_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if instance_type is not None:
                self._values["instance_type"] = instance_type
            if lifecycle_config_arn is not None:
                self._values["lifecycle_config_arn"] = lifecycle_config_arn
            if sage_maker_image_arn is not None:
                self._values["sage_maker_image_arn"] = sage_maker_image_arn
            if sage_maker_image_version_arn is not None:
                self._values["sage_maker_image_version_arn"] = sage_maker_image_version_arn

        @builtins.property
        def instance_type(self) -> typing.Optional[builtins.str]:
            '''The instance type that the image version runs on.

            .. epigraph::

               *JupyterServer apps* only support the ``system`` value.

               For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-instancetype
            '''
            result = self._values.get("instance_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def lifecycle_config_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the Lifecycle Configuration attached to the Resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-lifecycleconfigarn
            '''
            result = self._values.get("lifecycle_config_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the SageMaker image that the image version belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-sagemakerimagearn
            '''
            result = self._values.get("sage_maker_image_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_version_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-resourcespec.html#cfn-sagemaker-domain-resourcespec-sagemakerimageversionarn
            '''
            result = self._values.get("sage_maker_image_version_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ResourceSpecProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.SharingSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "notebook_output_option": "notebookOutputOption",
            "s3_kms_key_id": "s3KmsKeyId",
            "s3_output_path": "s3OutputPath",
        },
    )
    class SharingSettingsProperty:
        def __init__(
            self,
            *,
            notebook_output_option: typing.Optional[builtins.str] = None,
            s3_kms_key_id: typing.Optional[builtins.str] = None,
            s3_output_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies options when sharing an Amazon SageMaker Studio notebook.

            These settings are specified as part of ``DefaultUserSettings`` when the `CreateDomain <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDomain.html>`_ API is called, and as part of ``UserSettings`` when the `CreateUserProfile <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateUserProfile.html>`_ API is called.

            :param notebook_output_option: Whether to include the notebook cell output when sharing the notebook. The default is ``Disabled`` .
            :param s3_kms_key_id: When ``NotebookOutputOption`` is ``Allowed`` , the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
            :param s3_output_path: When ``NotebookOutputOption`` is ``Allowed`` , the Amazon S3 bucket used to store the shared notebook snapshots.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-sharingsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                sharing_settings_property = sagemaker.CfnDomain.SharingSettingsProperty(
                    notebook_output_option="notebookOutputOption",
                    s3_kms_key_id="s3KmsKeyId",
                    s3_output_path="s3OutputPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__548dd396dfd935cd647f2a1297e1f20836fc0ddc163c1659d63bbf9e9cf88849)
                check_type(argname="argument notebook_output_option", value=notebook_output_option, expected_type=type_hints["notebook_output_option"])
                check_type(argname="argument s3_kms_key_id", value=s3_kms_key_id, expected_type=type_hints["s3_kms_key_id"])
                check_type(argname="argument s3_output_path", value=s3_output_path, expected_type=type_hints["s3_output_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if notebook_output_option is not None:
                self._values["notebook_output_option"] = notebook_output_option
            if s3_kms_key_id is not None:
                self._values["s3_kms_key_id"] = s3_kms_key_id
            if s3_output_path is not None:
                self._values["s3_output_path"] = s3_output_path

        @builtins.property
        def notebook_output_option(self) -> typing.Optional[builtins.str]:
            '''Whether to include the notebook cell output when sharing the notebook.

            The default is ``Disabled`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-sharingsettings.html#cfn-sagemaker-domain-sharingsettings-notebookoutputoption
            '''
            result = self._values.get("notebook_output_option")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''When ``NotebookOutputOption`` is ``Allowed`` , the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-sharingsettings.html#cfn-sagemaker-domain-sharingsettings-s3kmskeyid
            '''
            result = self._values.get("s3_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_output_path(self) -> typing.Optional[builtins.str]:
            '''When ``NotebookOutputOption`` is ``Allowed`` , the Amazon S3 bucket used to store the shared notebook snapshots.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-sharingsettings.html#cfn-sagemaker-domain-sharingsettings-s3outputpath
            '''
            result = self._values.get("s3_output_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SharingSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomain.UserSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "execution_role": "executionRole",
            "code_editor_app_settings": "codeEditorAppSettings",
            "custom_file_system_configs": "customFileSystemConfigs",
            "custom_posix_user_config": "customPosixUserConfig",
            "default_landing_uri": "defaultLandingUri",
            "jupyter_lab_app_settings": "jupyterLabAppSettings",
            "jupyter_server_app_settings": "jupyterServerAppSettings",
            "kernel_gateway_app_settings": "kernelGatewayAppSettings",
            "r_session_app_settings": "rSessionAppSettings",
            "r_studio_server_pro_app_settings": "rStudioServerProAppSettings",
            "security_groups": "securityGroups",
            "sharing_settings": "sharingSettings",
            "space_storage_settings": "spaceStorageSettings",
            "studio_web_portal": "studioWebPortal",
        },
    )
    class UserSettingsProperty:
        def __init__(
            self,
            *,
            execution_role: builtins.str,
            code_editor_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CodeEditorAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            custom_file_system_configs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CustomFileSystemConfigProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            custom_posix_user_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.CustomPosixUserConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            default_landing_uri: typing.Optional[builtins.str] = None,
            jupyter_lab_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.JupyterLabAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.JupyterServerAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.KernelGatewayAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            r_session_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.RSessionAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            r_studio_server_pro_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.RStudioServerProAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
            sharing_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.SharingSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            space_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnDomain.DefaultSpaceStorageSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            studio_web_portal: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A collection of settings that apply to users of Amazon SageMaker Studio.

            These settings are specified when the `CreateUserProfile <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateUserProfile.html>`_ API is called, and as ``DefaultUserSettings`` when the `CreateDomain <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDomain.html>`_ API is called.

            ``SecurityGroups`` is aggregated when specified in both calls. For all other settings in ``UserSettings`` , the values specified in ``CreateUserProfile`` take precedence over those specified in ``CreateDomain`` .

            :param execution_role: The execution role for the user.
            :param code_editor_app_settings: The Code Editor application settings.
            :param custom_file_system_configs: The settings for assigning a custom file system to a user profile. Permitted users can access this file system in Amazon SageMaker Studio.
            :param custom_posix_user_config: Details about the POSIX identity that is used for file system operations.
            :param default_landing_uri: The default experience that the user is directed to when accessing the domain. The supported values are:. - ``studio::`` : Indicates that Studio is the default experience. This value can only be passed if ``StudioWebPortal`` is set to ``ENABLED`` . - ``app:JupyterServer:`` : Indicates that Studio Classic is the default experience.
            :param jupyter_lab_app_settings: The settings for the JupyterLab application.
            :param jupyter_server_app_settings: The Jupyter server's app settings.
            :param kernel_gateway_app_settings: The kernel gateway app settings.
            :param r_session_app_settings: A collection of settings that configure the ``RSessionGateway`` app.
            :param r_studio_server_pro_app_settings: A collection of settings that configure user interaction with the ``RStudioServerPro`` app.
            :param security_groups: The security groups for the Amazon Virtual Private Cloud (VPC) that the domain uses for communication. Optional when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``PublicInternetOnly`` . Required when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``VpcOnly`` , unless specified as part of the ``DefaultUserSettings`` for the domain. Amazon SageMaker adds a security group to allow NFS traffic from Amazon SageMaker Studio. Therefore, the number of security groups that you can specify is one less than the maximum number shown.
            :param sharing_settings: Specifies options for sharing Amazon SageMaker Studio notebooks.
            :param space_storage_settings: The storage settings for a private space.
            :param studio_web_portal: Whether the user can access Studio. If this value is set to ``DISABLED`` , the user cannot access Studio, even if that is the default experience for the domain.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                user_settings_property = sagemaker.CfnDomain.UserSettingsProperty(
                    execution_role="executionRole",
                
                    # the properties below are optional
                    code_editor_app_settings=sagemaker.CfnDomain.CodeEditorAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    custom_file_system_configs=[sagemaker.CfnDomain.CustomFileSystemConfigProperty(
                        efs_file_system_config=sagemaker.CfnDomain.EFSFileSystemConfigProperty(
                            file_system_id="fileSystemId",
                
                            # the properties below are optional
                            file_system_path="fileSystemPath"
                        )
                    )],
                    custom_posix_user_config=sagemaker.CfnDomain.CustomPosixUserConfigProperty(
                        gid=123,
                        uid=123
                    ),
                    default_landing_uri="defaultLandingUri",
                    jupyter_lab_app_settings=sagemaker.CfnDomain.JupyterLabAppSettingsProperty(
                        code_repositories=[sagemaker.CfnDomain.CodeRepositoryProperty(
                            repository_url="repositoryUrl"
                        )],
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_session_app_settings=sagemaker.CfnDomain.RSessionAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_studio_server_pro_app_settings=sagemaker.CfnDomain.RStudioServerProAppSettingsProperty(
                        access_status="accessStatus",
                        user_group="userGroup"
                    ),
                    security_groups=["securityGroups"],
                    sharing_settings=sagemaker.CfnDomain.SharingSettingsProperty(
                        notebook_output_option="notebookOutputOption",
                        s3_kms_key_id="s3KmsKeyId",
                        s3_output_path="s3OutputPath"
                    ),
                    space_storage_settings=sagemaker.CfnDomain.DefaultSpaceStorageSettingsProperty(
                        default_ebs_storage_settings=sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty(
                            default_ebs_volume_size_in_gb=123,
                            maximum_ebs_volume_size_in_gb=123
                        )
                    ),
                    studio_web_portal="studioWebPortal"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__88423e90a647fb1fb625855a5ca5160b5e8125e664363a24f90939664cc2d507)
                check_type(argname="argument execution_role", value=execution_role, expected_type=type_hints["execution_role"])
                check_type(argname="argument code_editor_app_settings", value=code_editor_app_settings, expected_type=type_hints["code_editor_app_settings"])
                check_type(argname="argument custom_file_system_configs", value=custom_file_system_configs, expected_type=type_hints["custom_file_system_configs"])
                check_type(argname="argument custom_posix_user_config", value=custom_posix_user_config, expected_type=type_hints["custom_posix_user_config"])
                check_type(argname="argument default_landing_uri", value=default_landing_uri, expected_type=type_hints["default_landing_uri"])
                check_type(argname="argument jupyter_lab_app_settings", value=jupyter_lab_app_settings, expected_type=type_hints["jupyter_lab_app_settings"])
                check_type(argname="argument jupyter_server_app_settings", value=jupyter_server_app_settings, expected_type=type_hints["jupyter_server_app_settings"])
                check_type(argname="argument kernel_gateway_app_settings", value=kernel_gateway_app_settings, expected_type=type_hints["kernel_gateway_app_settings"])
                check_type(argname="argument r_session_app_settings", value=r_session_app_settings, expected_type=type_hints["r_session_app_settings"])
                check_type(argname="argument r_studio_server_pro_app_settings", value=r_studio_server_pro_app_settings, expected_type=type_hints["r_studio_server_pro_app_settings"])
                check_type(argname="argument security_groups", value=security_groups, expected_type=type_hints["security_groups"])
                check_type(argname="argument sharing_settings", value=sharing_settings, expected_type=type_hints["sharing_settings"])
                check_type(argname="argument space_storage_settings", value=space_storage_settings, expected_type=type_hints["space_storage_settings"])
                check_type(argname="argument studio_web_portal", value=studio_web_portal, expected_type=type_hints["studio_web_portal"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "execution_role": execution_role,
            }
            if code_editor_app_settings is not None:
                self._values["code_editor_app_settings"] = code_editor_app_settings
            if custom_file_system_configs is not None:
                self._values["custom_file_system_configs"] = custom_file_system_configs
            if custom_posix_user_config is not None:
                self._values["custom_posix_user_config"] = custom_posix_user_config
            if default_landing_uri is not None:
                self._values["default_landing_uri"] = default_landing_uri
            if jupyter_lab_app_settings is not None:
                self._values["jupyter_lab_app_settings"] = jupyter_lab_app_settings
            if jupyter_server_app_settings is not None:
                self._values["jupyter_server_app_settings"] = jupyter_server_app_settings
            if kernel_gateway_app_settings is not None:
                self._values["kernel_gateway_app_settings"] = kernel_gateway_app_settings
            if r_session_app_settings is not None:
                self._values["r_session_app_settings"] = r_session_app_settings
            if r_studio_server_pro_app_settings is not None:
                self._values["r_studio_server_pro_app_settings"] = r_studio_server_pro_app_settings
            if security_groups is not None:
                self._values["security_groups"] = security_groups
            if sharing_settings is not None:
                self._values["sharing_settings"] = sharing_settings
            if space_storage_settings is not None:
                self._values["space_storage_settings"] = space_storage_settings
            if studio_web_portal is not None:
                self._values["studio_web_portal"] = studio_web_portal

        @builtins.property
        def execution_role(self) -> builtins.str:
            '''The execution role for the user.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-executionrole
            '''
            result = self._values.get("execution_role")
            assert result is not None, "Required property 'execution_role' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def code_editor_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.CodeEditorAppSettingsProperty"]]:
            '''The Code Editor application settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-codeeditorappsettings
            '''
            result = self._values.get("code_editor_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.CodeEditorAppSettingsProperty"]], result)

        @builtins.property
        def custom_file_system_configs(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomFileSystemConfigProperty"]]]]:
            '''The settings for assigning a custom file system to a user profile.

            Permitted users can access this file system in Amazon SageMaker Studio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-customfilesystemconfigs
            '''
            result = self._values.get("custom_file_system_configs")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomFileSystemConfigProperty"]]]], result)

        @builtins.property
        def custom_posix_user_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomPosixUserConfigProperty"]]:
            '''Details about the POSIX identity that is used for file system operations.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-customposixuserconfig
            '''
            result = self._values.get("custom_posix_user_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.CustomPosixUserConfigProperty"]], result)

        @builtins.property
        def default_landing_uri(self) -> typing.Optional[builtins.str]:
            '''The default experience that the user is directed to when accessing the domain. The supported values are:.

            - ``studio::`` : Indicates that Studio is the default experience. This value can only be passed if ``StudioWebPortal`` is set to ``ENABLED`` .
            - ``app:JupyterServer:`` : Indicates that Studio Classic is the default experience.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-defaultlandinguri
            '''
            result = self._values.get("default_landing_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def jupyter_lab_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterLabAppSettingsProperty"]]:
            '''The settings for the JupyterLab application.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-jupyterlabappsettings
            '''
            result = self._values.get("jupyter_lab_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterLabAppSettingsProperty"]], result)

        @builtins.property
        def jupyter_server_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterServerAppSettingsProperty"]]:
            '''The Jupyter server's app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-jupyterserverappsettings
            '''
            result = self._values.get("jupyter_server_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.JupyterServerAppSettingsProperty"]], result)

        @builtins.property
        def kernel_gateway_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.KernelGatewayAppSettingsProperty"]]:
            '''The kernel gateway app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-kernelgatewayappsettings
            '''
            result = self._values.get("kernel_gateway_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.KernelGatewayAppSettingsProperty"]], result)

        @builtins.property
        def r_session_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RSessionAppSettingsProperty"]]:
            '''A collection of settings that configure the ``RSessionGateway`` app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-rsessionappsettings
            '''
            result = self._values.get("r_session_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RSessionAppSettingsProperty"]], result)

        @builtins.property
        def r_studio_server_pro_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RStudioServerProAppSettingsProperty"]]:
            '''A collection of settings that configure user interaction with the ``RStudioServerPro`` app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-rstudioserverproappsettings
            '''
            result = self._values.get("r_studio_server_pro_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.RStudioServerProAppSettingsProperty"]], result)

        @builtins.property
        def security_groups(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The security groups for the Amazon Virtual Private Cloud (VPC) that the domain uses for communication.

            Optional when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``PublicInternetOnly`` .

            Required when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``VpcOnly`` , unless specified as part of the ``DefaultUserSettings`` for the domain.

            Amazon SageMaker adds a security group to allow NFS traffic from Amazon SageMaker Studio. Therefore, the number of security groups that you can specify is one less than the maximum number shown.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-securitygroups
            '''
            result = self._values.get("security_groups")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def sharing_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.SharingSettingsProperty"]]:
            '''Specifies options for sharing Amazon SageMaker Studio notebooks.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-sharingsettings
            '''
            result = self._values.get("sharing_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.SharingSettingsProperty"]], result)

        @builtins.property
        def space_storage_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultSpaceStorageSettingsProperty"]]:
            '''The storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-spacestoragesettings
            '''
            result = self._values.get("space_storage_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnDomain.DefaultSpaceStorageSettingsProperty"]], result)

        @builtins.property
        def studio_web_portal(self) -> typing.Optional[builtins.str]:
            '''Whether the user can access Studio.

            If this value is set to ``DISABLED`` , the user cannot access Studio, even if that is the default experience for the domain.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-domain-usersettings.html#cfn-sagemaker-domain-usersettings-studiowebportal
            '''
            result = self._values.get("studio_web_portal")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UserSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnDomainProps",
    jsii_struct_bases=[],
    name_mapping={
        "auth_mode": "authMode",
        "default_user_settings": "defaultUserSettings",
        "domain_name": "domainName",
        "subnet_ids": "subnetIds",
        "vpc_id": "vpcId",
        "app_network_access_type": "appNetworkAccessType",
        "app_security_group_management": "appSecurityGroupManagement",
        "default_space_settings": "defaultSpaceSettings",
        "domain_settings": "domainSettings",
        "kms_key_id": "kmsKeyId",
        "tags": "tags",
    },
)
class CfnDomainProps:
    def __init__(
        self,
        *,
        auth_mode: builtins.str,
        default_user_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
        domain_name: builtins.str,
        subnet_ids: typing.Sequence[builtins.str],
        vpc_id: builtins.str,
        app_network_access_type: typing.Optional[builtins.str] = None,
        app_security_group_management: typing.Optional[builtins.str] = None,
        default_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DefaultSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DomainSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnDomain``.

        :param auth_mode: The mode of authentication that members use to access the Domain. *Valid Values* : ``SSO | IAM``
        :param default_user_settings: The default user settings.
        :param domain_name: The domain name.
        :param subnet_ids: The VPC subnets that Studio uses for communication. *Length Constraints* : Maximum length of 32. *Array members* : Minimum number of 1 item. Maximum number of 16 items. *Pattern* : ``[-0-9a-zA-Z]+``
        :param vpc_id: The ID of the Amazon Virtual Private Cloud (Amazon VPC) that Studio uses for communication. *Length Constraints* : Maximum length of 32. *Pattern* : ``[-0-9a-zA-Z]+``
        :param app_network_access_type: Specifies the VPC used for non-EFS traffic. The default value is ``PublicInternetOnly`` . - ``PublicInternetOnly`` - Non-EFS traffic is through a VPC managed by Amazon SageMaker , which allows direct internet access - ``VpcOnly`` - All Studio traffic is through the specified VPC and subnets *Valid Values* : ``PublicInternetOnly | VpcOnly``
        :param app_security_group_management: The entity that creates and manages the required security groups for inter-app communication in ``VpcOnly`` mode. Required when ``CreateDomain.AppNetworkAccessType`` is ``VpcOnly`` and ``DomainSettings.RStudioServerProDomainSettings.DomainExecutionRoleArn`` is provided. If setting up the domain for use with RStudio, this value must be set to ``Service`` . *Allowed Values* : ``Service`` | ``Customer``
        :param default_space_settings: A collection of settings that apply to spaces created in the Domain.
        :param domain_settings: A collection of settings that apply to the ``SageMaker Domain`` . These settings are specified through the ``CreateDomain`` API call.
        :param kms_key_id: SageMaker uses AWS KMS to encrypt the EFS volume attached to the Domain with an AWS managed customer master key (CMK) by default. For more control, specify a customer managed CMK. *Length Constraints* : Maximum length of 2048. *Pattern* : ``.*``
        :param tags: Tags to associated with the Domain. Each tag consists of a key and an optional value. Tag keys must be unique per resource. Tags are searchable using the Search API. Tags that you specify for the Domain are also added to all apps that are launched in the Domain. *Array members* : Minimum number of 0 items. Maximum number of 50 items.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_domain_props = sagemaker.CfnDomainProps(
                auth_mode="authMode",
                default_user_settings=sagemaker.CfnDomain.UserSettingsProperty(
                    execution_role="executionRole",
            
                    # the properties below are optional
                    code_editor_app_settings=sagemaker.CfnDomain.CodeEditorAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    custom_file_system_configs=[sagemaker.CfnDomain.CustomFileSystemConfigProperty(
                        efs_file_system_config=sagemaker.CfnDomain.EFSFileSystemConfigProperty(
                            file_system_id="fileSystemId",
            
                            # the properties below are optional
                            file_system_path="fileSystemPath"
                        )
                    )],
                    custom_posix_user_config=sagemaker.CfnDomain.CustomPosixUserConfigProperty(
                        gid=123,
                        uid=123
                    ),
                    default_landing_uri="defaultLandingUri",
                    jupyter_lab_app_settings=sagemaker.CfnDomain.JupyterLabAppSettingsProperty(
                        code_repositories=[sagemaker.CfnDomain.CodeRepositoryProperty(
                            repository_url="repositoryUrl"
                        )],
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_session_app_settings=sagemaker.CfnDomain.RSessionAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_studio_server_pro_app_settings=sagemaker.CfnDomain.RStudioServerProAppSettingsProperty(
                        access_status="accessStatus",
                        user_group="userGroup"
                    ),
                    security_groups=["securityGroups"],
                    sharing_settings=sagemaker.CfnDomain.SharingSettingsProperty(
                        notebook_output_option="notebookOutputOption",
                        s3_kms_key_id="s3KmsKeyId",
                        s3_output_path="s3OutputPath"
                    ),
                    space_storage_settings=sagemaker.CfnDomain.DefaultSpaceStorageSettingsProperty(
                        default_ebs_storage_settings=sagemaker.CfnDomain.DefaultEbsStorageSettingsProperty(
                            default_ebs_volume_size_in_gb=123,
                            maximum_ebs_volume_size_in_gb=123
                        )
                    ),
                    studio_web_portal="studioWebPortal"
                ),
                domain_name="domainName",
                subnet_ids=["subnetIds"],
                vpc_id="vpcId",
            
                # the properties below are optional
                app_network_access_type="appNetworkAccessType",
                app_security_group_management="appSecurityGroupManagement",
                default_space_settings=sagemaker.CfnDomain.DefaultSpaceSettingsProperty(
                    execution_role="executionRole",
            
                    # the properties below are optional
                    jupyter_server_app_settings=sagemaker.CfnDomain.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnDomain.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnDomain.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    security_groups=["securityGroups"]
                ),
                domain_settings=sagemaker.CfnDomain.DomainSettingsProperty(
                    r_studio_server_pro_domain_settings=sagemaker.CfnDomain.RStudioServerProDomainSettingsProperty(
                        domain_execution_role_arn="domainExecutionRoleArn",
            
                        # the properties below are optional
                        default_resource_spec=sagemaker.CfnDomain.ResourceSpecProperty(
                            instance_type="instanceType",
                            lifecycle_config_arn="lifecycleConfigArn",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        r_studio_connect_url="rStudioConnectUrl",
                        r_studio_package_manager_url="rStudioPackageManagerUrl"
                    ),
                    security_group_ids=["securityGroupIds"]
                ),
                kms_key_id="kmsKeyId",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d70b90cbf9af0f3b53a18e5f11f7de868ef5fe3e6110bb229fd1350019f730e5)
            check_type(argname="argument auth_mode", value=auth_mode, expected_type=type_hints["auth_mode"])
            check_type(argname="argument default_user_settings", value=default_user_settings, expected_type=type_hints["default_user_settings"])
            check_type(argname="argument domain_name", value=domain_name, expected_type=type_hints["domain_name"])
            check_type(argname="argument subnet_ids", value=subnet_ids, expected_type=type_hints["subnet_ids"])
            check_type(argname="argument vpc_id", value=vpc_id, expected_type=type_hints["vpc_id"])
            check_type(argname="argument app_network_access_type", value=app_network_access_type, expected_type=type_hints["app_network_access_type"])
            check_type(argname="argument app_security_group_management", value=app_security_group_management, expected_type=type_hints["app_security_group_management"])
            check_type(argname="argument default_space_settings", value=default_space_settings, expected_type=type_hints["default_space_settings"])
            check_type(argname="argument domain_settings", value=domain_settings, expected_type=type_hints["domain_settings"])
            check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "auth_mode": auth_mode,
            "default_user_settings": default_user_settings,
            "domain_name": domain_name,
            "subnet_ids": subnet_ids,
            "vpc_id": vpc_id,
        }
        if app_network_access_type is not None:
            self._values["app_network_access_type"] = app_network_access_type
        if app_security_group_management is not None:
            self._values["app_security_group_management"] = app_security_group_management
        if default_space_settings is not None:
            self._values["default_space_settings"] = default_space_settings
        if domain_settings is not None:
            self._values["domain_settings"] = domain_settings
        if kms_key_id is not None:
            self._values["kms_key_id"] = kms_key_id
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def auth_mode(self) -> builtins.str:
        '''The mode of authentication that members use to access the Domain.

        *Valid Values* : ``SSO | IAM``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-authmode
        '''
        result = self._values.get("auth_mode")
        assert result is not None, "Required property 'auth_mode' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def default_user_settings(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnDomain.UserSettingsProperty]:
        '''The default user settings.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-defaultusersettings
        '''
        result = self._values.get("default_user_settings")
        assert result is not None, "Required property 'default_user_settings' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnDomain.UserSettingsProperty], result)

    @builtins.property
    def domain_name(self) -> builtins.str:
        '''The domain name.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-domainname
        '''
        result = self._values.get("domain_name")
        assert result is not None, "Required property 'domain_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def subnet_ids(self) -> typing.List[builtins.str]:
        '''The VPC subnets that Studio uses for communication.

        *Length Constraints* : Maximum length of 32.

        *Array members* : Minimum number of 1 item. Maximum number of 16 items.

        *Pattern* : ``[-0-9a-zA-Z]+``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-subnetids
        '''
        result = self._values.get("subnet_ids")
        assert result is not None, "Required property 'subnet_ids' is missing"
        return typing.cast(typing.List[builtins.str], result)

    @builtins.property
    def vpc_id(self) -> builtins.str:
        '''The ID of the Amazon Virtual Private Cloud (Amazon VPC) that Studio uses for communication.

        *Length Constraints* : Maximum length of 32.

        *Pattern* : ``[-0-9a-zA-Z]+``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-vpcid
        '''
        result = self._values.get("vpc_id")
        assert result is not None, "Required property 'vpc_id' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def app_network_access_type(self) -> typing.Optional[builtins.str]:
        '''Specifies the VPC used for non-EFS traffic. The default value is ``PublicInternetOnly`` .

        - ``PublicInternetOnly`` - Non-EFS traffic is through a VPC managed by Amazon SageMaker , which allows direct internet access
        - ``VpcOnly`` - All Studio traffic is through the specified VPC and subnets

        *Valid Values* : ``PublicInternetOnly | VpcOnly``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-appnetworkaccesstype
        '''
        result = self._values.get("app_network_access_type")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def app_security_group_management(self) -> typing.Optional[builtins.str]:
        '''The entity that creates and manages the required security groups for inter-app communication in ``VpcOnly`` mode.

        Required when ``CreateDomain.AppNetworkAccessType`` is ``VpcOnly`` and ``DomainSettings.RStudioServerProDomainSettings.DomainExecutionRoleArn`` is provided. If setting up the domain for use with RStudio, this value must be set to ``Service`` .

        *Allowed Values* : ``Service`` | ``Customer``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-appsecuritygroupmanagement
        '''
        result = self._values.get("app_security_group_management")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def default_space_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DefaultSpaceSettingsProperty]]:
        '''A collection of settings that apply to spaces created in the Domain.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-defaultspacesettings
        '''
        result = self._values.get("default_space_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DefaultSpaceSettingsProperty]], result)

    @builtins.property
    def domain_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DomainSettingsProperty]]:
        '''A collection of settings that apply to the ``SageMaker Domain`` .

        These settings are specified through the ``CreateDomain`` API call.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-domainsettings
        '''
        result = self._values.get("domain_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DomainSettingsProperty]], result)

    @builtins.property
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''SageMaker uses AWS KMS to encrypt the EFS volume attached to the Domain with an AWS managed customer master key (CMK) by default.

        For more control, specify a customer managed CMK.

        *Length Constraints* : Maximum length of 2048.

        *Pattern* : ``.*``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-kmskeyid
        '''
        result = self._values.get("kms_key_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Tags to associated with the Domain.

        Each tag consists of a key and an optional value. Tag keys must be unique per resource. Tags are searchable using the Search API.

        Tags that you specify for the Domain are also added to all apps that are launched in the Domain.

        *Array members* : Minimum number of 0 items. Maximum number of 50 items.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-domain.html#cfn-sagemaker-domain-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnDomainProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnEndpoint(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint",
):
    '''Use the ``AWS::SageMaker::Endpoint`` resource to create an endpoint using the specified configuration in the request.

    Amazon SageMaker uses the endpoint to provision resources and deploy models. You create the endpoint configuration with the `AWS::SageMaker::EndpointConfig <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html>`_ resource. For more information, see `Deploy a Model on Amazon SageMaker Hosting Services <https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-hosting.html>`_ in the *Amazon SageMaker Developer Guide* .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html
    :cloudformationResource: AWS::SageMaker::Endpoint
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_endpoint = sagemaker.CfnEndpoint(self, "MyCfnEndpoint",
            endpoint_config_name="endpointConfigName",
        
            # the properties below are optional
            deployment_config=sagemaker.CfnEndpoint.DeploymentConfigProperty(
                auto_rollback_configuration=sagemaker.CfnEndpoint.AutoRollbackConfigProperty(
                    alarms=[sagemaker.CfnEndpoint.AlarmProperty(
                        alarm_name="alarmName"
                    )]
                ),
                blue_green_update_policy=sagemaker.CfnEndpoint.BlueGreenUpdatePolicyProperty(
                    traffic_routing_configuration=sagemaker.CfnEndpoint.TrafficRoutingConfigProperty(
                        type="type",
        
                        # the properties below are optional
                        canary_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        linear_step_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        wait_interval_in_seconds=123
                    ),
        
                    # the properties below are optional
                    maximum_execution_timeout_in_seconds=123,
                    termination_wait_in_seconds=123
                ),
                rolling_update_policy=sagemaker.CfnEndpoint.RollingUpdatePolicyProperty(
                    maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    ),
                    wait_interval_in_seconds=123,
        
                    # the properties below are optional
                    maximum_execution_timeout_in_seconds=123,
                    rollback_maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    )
                )
            ),
            endpoint_name="endpointName",
            exclude_retained_variant_properties=[sagemaker.CfnEndpoint.VariantPropertyProperty(
                variant_property_type="variantPropertyType"
            )],
            retain_all_variant_properties=False,
            retain_deployment_config=False,
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        endpoint_config_name: builtins.str,
        deployment_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.DeploymentConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        endpoint_name: typing.Optional[builtins.str] = None,
        exclude_retained_variant_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.VariantPropertyProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        retain_all_variant_properties: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        retain_deployment_config: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param endpoint_config_name: The name of the `AWS::SageMaker::EndpointConfig <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html>`_ resource that specifies the configuration for the endpoint. For more information, see `CreateEndpointConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html>`_ .
        :param deployment_config: The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.
        :param endpoint_name: The name of the endpoint.The name must be unique within an AWS Region in your AWS account. The name is case-insensitive in ``CreateEndpoint`` , but the case is preserved and must be matched in ` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html>`_ .
        :param exclude_retained_variant_properties: When you are updating endpoint resources with `RetainAllVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-RetainAllVariantProperties>`_ whose value is set to ``true`` , ``ExcludeRetainedVariantProperties`` specifies the list of type `VariantProperty <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html>`_ to override with the values provided by ``EndpointConfig`` . If you don't specify a value for ``ExcludeAllVariantProperties`` , no variant properties are overridden. Don't use this property when creating new endpoint resources or when ``RetainAllVariantProperties`` is set to ``false`` .
        :param retain_all_variant_properties: When updating endpoint resources, enables or disables the retention of variant properties, such as the instance count or the variant weight. To retain the variant properties of an endpoint when updating it, set ``RetainAllVariantProperties`` to ``true`` . To use the variant properties specified in a new ``EndpointConfig`` call when updating an endpoint, set ``RetainAllVariantProperties`` to ``false`` . Use this property only when updating endpoint resources, not when creating new endpoint resources.
        :param retain_deployment_config: Specifies whether to reuse the last deployment configuration. The default value is false (the configuration is not reused).
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__25a1b782521c912d49f8881f9136b81a31874db7423cbc69dd4d592308ab1637)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnEndpointProps(
            endpoint_config_name=endpoint_config_name,
            deployment_config=deployment_config,
            endpoint_name=endpoint_name,
            exclude_retained_variant_properties=exclude_retained_variant_properties,
            retain_all_variant_properties=retain_all_variant_properties,
            retain_deployment_config=retain_deployment_config,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__30e2eaf7ae1d65739ce7b332f2d2eaa983053d55ecf4081e243a2ac5f47961eb)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2f47dbdb18a90354facd890ea710422eaf2acd63bfcef2ca594f9c45be4c0741)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointName")
    def attr_endpoint_name(self) -> builtins.str:
        '''The name of the endpoint, such as ``MyEndpoint`` .

        :cloudformationAttribute: EndpointName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrEndpointName"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="endpointConfigName")
    def endpoint_config_name(self) -> builtins.str:
        '''The name of the `AWS::SageMaker::EndpointConfig <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html>`_ resource that specifies the configuration for the endpoint. For more information, see `CreateEndpointConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html>`_ .'''
        return typing.cast(builtins.str, jsii.get(self, "endpointConfigName"))

    @endpoint_config_name.setter
    def endpoint_config_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8fc46b5a4608391c5b023fa1800209955387c9abc04000465c1497a02ffcc73b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointConfigName", value)

    @builtins.property
    @jsii.member(jsii_name="deploymentConfig")
    def deployment_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.DeploymentConfigProperty"]]:
        '''The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.DeploymentConfigProperty"]], jsii.get(self, "deploymentConfig"))

    @deployment_config.setter
    def deployment_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.DeploymentConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__282ad840d284416c74cb1dec9d8585464ab2fdabef85c02a2157137e553d929d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "deploymentConfig", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint.The name must be unique within an AWS Region in your AWS account. The name is case-insensitive in ``CreateEndpoint`` , but the case is preserved and must be matched in ` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html>`_ .'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ed57f464bb55b112eacf852ffafe64ee93beb0dd0f9a9c81cfed938f546e9413)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="excludeRetainedVariantProperties")
    def exclude_retained_variant_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.VariantPropertyProperty"]]]]:
        '''When you are updating endpoint resources with `RetainAllVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-RetainAllVariantProperties>`_ whose value is set to ``true`` , ``ExcludeRetainedVariantProperties`` specifies the list of type `VariantProperty <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html>`_ to override with the values provided by ``EndpointConfig`` . If you don't specify a value for ``ExcludeAllVariantProperties`` , no variant properties are overridden. Don't use this property when creating new endpoint resources or when ``RetainAllVariantProperties`` is set to ``false`` .'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.VariantPropertyProperty"]]]], jsii.get(self, "excludeRetainedVariantProperties"))

    @exclude_retained_variant_properties.setter
    def exclude_retained_variant_properties(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.VariantPropertyProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5ee6a8f5fa98cdfc488825acbd1978c8669d4e6de4cdb626a755c8b4462edb18)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "excludeRetainedVariantProperties", value)

    @builtins.property
    @jsii.member(jsii_name="retainAllVariantProperties")
    def retain_all_variant_properties(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''When updating endpoint resources, enables or disables the retention of variant properties, such as the instance count or the variant weight.'''
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "retainAllVariantProperties"))

    @retain_all_variant_properties.setter
    def retain_all_variant_properties(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a449b8aec7663417625aba5613780daefbd54794f3fc085c8275ee15b03e0ddd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "retainAllVariantProperties", value)

    @builtins.property
    @jsii.member(jsii_name="retainDeploymentConfig")
    def retain_deployment_config(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Specifies whether to reuse the last deployment configuration.'''
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "retainDeploymentConfig"))

    @retain_deployment_config.setter
    def retain_deployment_config(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__edaf654b3efad8522601d55dc70b1fbe91565b325788322fd32078ba331c7236)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "retainDeploymentConfig", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a09ce1e0fbf50769fe1466ab68006be1481654b4884a0501ebd711c3f0d46435)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.AlarmProperty",
        jsii_struct_bases=[],
        name_mapping={"alarm_name": "alarmName"},
    )
    class AlarmProperty:
        def __init__(self, *, alarm_name: builtins.str) -> None:
            '''An Amazon CloudWatch alarm configured to monitor metrics on an endpoint.

            :param alarm_name: The name of a CloudWatch alarm in your account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-alarm.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                alarm_property = sagemaker.CfnEndpoint.AlarmProperty(
                    alarm_name="alarmName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__545f901797973de76167553f39b693c4f1564abc9dfaeb5563cb8afd7917adb1)
                check_type(argname="argument alarm_name", value=alarm_name, expected_type=type_hints["alarm_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "alarm_name": alarm_name,
            }

        @builtins.property
        def alarm_name(self) -> builtins.str:
            '''The name of a CloudWatch alarm in your account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-alarm.html#cfn-sagemaker-endpoint-alarm-alarmname
            '''
            result = self._values.get("alarm_name")
            assert result is not None, "Required property 'alarm_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AlarmProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.AutoRollbackConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"alarms": "alarms"},
    )
    class AutoRollbackConfigProperty:
        def __init__(
            self,
            *,
            alarms: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.AlarmProperty", typing.Dict[builtins.str, typing.Any]]]]],
        ) -> None:
            '''Automatic rollback configuration for handling endpoint deployment failures and recovery.

            :param alarms: List of CloudWatch alarms in your account that are configured to monitor metrics on an endpoint. If any alarms are tripped during a deployment, SageMaker rolls back the deployment.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-autorollbackconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                auto_rollback_config_property = sagemaker.CfnEndpoint.AutoRollbackConfigProperty(
                    alarms=[sagemaker.CfnEndpoint.AlarmProperty(
                        alarm_name="alarmName"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d86e3846eb32ca90c0c7fbf8652bbfcc5f60c6360575c7f19bc7e9da7d2fe467)
                check_type(argname="argument alarms", value=alarms, expected_type=type_hints["alarms"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "alarms": alarms,
            }

        @builtins.property
        def alarms(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.AlarmProperty"]]]:
            '''List of CloudWatch alarms in your account that are configured to monitor metrics on an endpoint.

            If any alarms are tripped during a deployment, SageMaker rolls back the deployment.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-autorollbackconfig.html#cfn-sagemaker-endpoint-autorollbackconfig-alarms
            '''
            result = self._values.get("alarms")
            assert result is not None, "Required property 'alarms' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.AlarmProperty"]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AutoRollbackConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.BlueGreenUpdatePolicyProperty",
        jsii_struct_bases=[],
        name_mapping={
            "traffic_routing_configuration": "trafficRoutingConfiguration",
            "maximum_execution_timeout_in_seconds": "maximumExecutionTimeoutInSeconds",
            "termination_wait_in_seconds": "terminationWaitInSeconds",
        },
    )
    class BlueGreenUpdatePolicyProperty:
        def __init__(
            self,
            *,
            traffic_routing_configuration: typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.TrafficRoutingConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            maximum_execution_timeout_in_seconds: typing.Optional[jsii.Number] = None,
            termination_wait_in_seconds: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Update policy for a blue/green deployment.

            If this update policy is specified, SageMaker creates a new fleet during the deployment while maintaining the old fleet. SageMaker flips traffic to the new fleet according to the specified traffic routing configuration. Only one update policy should be used in the deployment configuration. If no update policy is specified, SageMaker uses a blue/green deployment strategy with all at once traffic shifting by default.

            :param traffic_routing_configuration: Defines the traffic routing strategy to shift traffic from the old fleet to the new fleet during an endpoint deployment.
            :param maximum_execution_timeout_in_seconds: Maximum execution timeout for the deployment. Note that the timeout value should be larger than the total waiting time specified in ``TerminationWaitInSeconds`` and ``WaitIntervalInSeconds`` .
            :param termination_wait_in_seconds: Additional waiting time in seconds after the completion of an endpoint deployment before terminating the old endpoint fleet. Default is 0.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-bluegreenupdatepolicy.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                blue_green_update_policy_property = sagemaker.CfnEndpoint.BlueGreenUpdatePolicyProperty(
                    traffic_routing_configuration=sagemaker.CfnEndpoint.TrafficRoutingConfigProperty(
                        type="type",
                
                        # the properties below are optional
                        canary_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        linear_step_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        wait_interval_in_seconds=123
                    ),
                
                    # the properties below are optional
                    maximum_execution_timeout_in_seconds=123,
                    termination_wait_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d28be213bc658ab75fb13a94b106b4201e989c105915c39fb50705be12d37728)
                check_type(argname="argument traffic_routing_configuration", value=traffic_routing_configuration, expected_type=type_hints["traffic_routing_configuration"])
                check_type(argname="argument maximum_execution_timeout_in_seconds", value=maximum_execution_timeout_in_seconds, expected_type=type_hints["maximum_execution_timeout_in_seconds"])
                check_type(argname="argument termination_wait_in_seconds", value=termination_wait_in_seconds, expected_type=type_hints["termination_wait_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "traffic_routing_configuration": traffic_routing_configuration,
            }
            if maximum_execution_timeout_in_seconds is not None:
                self._values["maximum_execution_timeout_in_seconds"] = maximum_execution_timeout_in_seconds
            if termination_wait_in_seconds is not None:
                self._values["termination_wait_in_seconds"] = termination_wait_in_seconds

        @builtins.property
        def traffic_routing_configuration(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnEndpoint.TrafficRoutingConfigProperty"]:
            '''Defines the traffic routing strategy to shift traffic from the old fleet to the new fleet during an endpoint deployment.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-bluegreenupdatepolicy.html#cfn-sagemaker-endpoint-bluegreenupdatepolicy-trafficroutingconfiguration
            '''
            result = self._values.get("traffic_routing_configuration")
            assert result is not None, "Required property 'traffic_routing_configuration' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnEndpoint.TrafficRoutingConfigProperty"], result)

        @builtins.property
        def maximum_execution_timeout_in_seconds(self) -> typing.Optional[jsii.Number]:
            '''Maximum execution timeout for the deployment.

            Note that the timeout value should be larger than the total waiting time specified in ``TerminationWaitInSeconds`` and ``WaitIntervalInSeconds`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-bluegreenupdatepolicy.html#cfn-sagemaker-endpoint-bluegreenupdatepolicy-maximumexecutiontimeoutinseconds
            '''
            result = self._values.get("maximum_execution_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def termination_wait_in_seconds(self) -> typing.Optional[jsii.Number]:
            '''Additional waiting time in seconds after the completion of an endpoint deployment before terminating the old endpoint fleet.

            Default is 0.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-bluegreenupdatepolicy.html#cfn-sagemaker-endpoint-bluegreenupdatepolicy-terminationwaitinseconds
            '''
            result = self._values.get("termination_wait_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BlueGreenUpdatePolicyProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.CapacitySizeProperty",
        jsii_struct_bases=[],
        name_mapping={"type": "type", "value": "value"},
    )
    class CapacitySizeProperty:
        def __init__(self, *, type: builtins.str, value: jsii.Number) -> None:
            '''Specifies the type and size of the endpoint capacity to activate for a blue/green deployment, a rolling deployment, or a rollback strategy.

            You can specify your batches as either instance count or the overall percentage or your fleet.

            For a rollback strategy, if you don't specify the fields in this object, or if you set the ``Value`` to 100%, then SageMaker uses a blue/green rollback strategy and rolls all traffic back to the blue fleet.

            :param type: Specifies the endpoint capacity type. - ``INSTANCE_COUNT`` : The endpoint activates based on the number of instances. - ``CAPACITY_PERCENT`` : The endpoint activates based on the specified percentage of capacity.
            :param value: Defines the capacity size, either as a number of instances or a capacity percentage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-capacitysize.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                capacity_size_property = sagemaker.CfnEndpoint.CapacitySizeProperty(
                    type="type",
                    value=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__620e1fd2701901a3771895d025a10da547bd6349c473e05ba7dd2b7c1ee9235b)
                check_type(argname="argument type", value=type, expected_type=type_hints["type"])
                check_type(argname="argument value", value=value, expected_type=type_hints["value"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "type": type,
                "value": value,
            }

        @builtins.property
        def type(self) -> builtins.str:
            '''Specifies the endpoint capacity type.

            - ``INSTANCE_COUNT`` : The endpoint activates based on the number of instances.
            - ``CAPACITY_PERCENT`` : The endpoint activates based on the specified percentage of capacity.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-capacitysize.html#cfn-sagemaker-endpoint-capacitysize-type
            '''
            result = self._values.get("type")
            assert result is not None, "Required property 'type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def value(self) -> jsii.Number:
            '''Defines the capacity size, either as a number of instances or a capacity percentage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-capacitysize.html#cfn-sagemaker-endpoint-capacitysize-value
            '''
            result = self._values.get("value")
            assert result is not None, "Required property 'value' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CapacitySizeProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.DeploymentConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "auto_rollback_configuration": "autoRollbackConfiguration",
            "blue_green_update_policy": "blueGreenUpdatePolicy",
            "rolling_update_policy": "rollingUpdatePolicy",
        },
    )
    class DeploymentConfigProperty:
        def __init__(
            self,
            *,
            auto_rollback_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.AutoRollbackConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            blue_green_update_policy: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.BlueGreenUpdatePolicyProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            rolling_update_policy: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.RollingUpdatePolicyProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.

            :param auto_rollback_configuration: Automatic rollback configuration for handling endpoint deployment failures and recovery.
            :param blue_green_update_policy: Update policy for a blue/green deployment. If this update policy is specified, SageMaker creates a new fleet during the deployment while maintaining the old fleet. SageMaker flips traffic to the new fleet according to the specified traffic routing configuration. Only one update policy should be used in the deployment configuration. If no update policy is specified, SageMaker uses a blue/green deployment strategy with all at once traffic shifting by default.
            :param rolling_update_policy: Specifies a rolling deployment strategy for updating a SageMaker endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-deploymentconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                deployment_config_property = sagemaker.CfnEndpoint.DeploymentConfigProperty(
                    auto_rollback_configuration=sagemaker.CfnEndpoint.AutoRollbackConfigProperty(
                        alarms=[sagemaker.CfnEndpoint.AlarmProperty(
                            alarm_name="alarmName"
                        )]
                    ),
                    blue_green_update_policy=sagemaker.CfnEndpoint.BlueGreenUpdatePolicyProperty(
                        traffic_routing_configuration=sagemaker.CfnEndpoint.TrafficRoutingConfigProperty(
                            type="type",
                
                            # the properties below are optional
                            canary_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                                type="type",
                                value=123
                            ),
                            linear_step_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                                type="type",
                                value=123
                            ),
                            wait_interval_in_seconds=123
                        ),
                
                        # the properties below are optional
                        maximum_execution_timeout_in_seconds=123,
                        termination_wait_in_seconds=123
                    ),
                    rolling_update_policy=sagemaker.CfnEndpoint.RollingUpdatePolicyProperty(
                        maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        wait_interval_in_seconds=123,
                
                        # the properties below are optional
                        maximum_execution_timeout_in_seconds=123,
                        rollback_maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ef4fd0099485ae9d7fd2d7347509c94feea591075e4c9b0ec8f5dd9747851049)
                check_type(argname="argument auto_rollback_configuration", value=auto_rollback_configuration, expected_type=type_hints["auto_rollback_configuration"])
                check_type(argname="argument blue_green_update_policy", value=blue_green_update_policy, expected_type=type_hints["blue_green_update_policy"])
                check_type(argname="argument rolling_update_policy", value=rolling_update_policy, expected_type=type_hints["rolling_update_policy"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if auto_rollback_configuration is not None:
                self._values["auto_rollback_configuration"] = auto_rollback_configuration
            if blue_green_update_policy is not None:
                self._values["blue_green_update_policy"] = blue_green_update_policy
            if rolling_update_policy is not None:
                self._values["rolling_update_policy"] = rolling_update_policy

        @builtins.property
        def auto_rollback_configuration(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.AutoRollbackConfigProperty"]]:
            '''Automatic rollback configuration for handling endpoint deployment failures and recovery.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-deploymentconfig.html#cfn-sagemaker-endpoint-deploymentconfig-autorollbackconfiguration
            '''
            result = self._values.get("auto_rollback_configuration")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.AutoRollbackConfigProperty"]], result)

        @builtins.property
        def blue_green_update_policy(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.BlueGreenUpdatePolicyProperty"]]:
            '''Update policy for a blue/green deployment.

            If this update policy is specified, SageMaker creates a new fleet during the deployment while maintaining the old fleet. SageMaker flips traffic to the new fleet according to the specified traffic routing configuration. Only one update policy should be used in the deployment configuration. If no update policy is specified, SageMaker uses a blue/green deployment strategy with all at once traffic shifting by default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-deploymentconfig.html#cfn-sagemaker-endpoint-deploymentconfig-bluegreenupdatepolicy
            '''
            result = self._values.get("blue_green_update_policy")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.BlueGreenUpdatePolicyProperty"]], result)

        @builtins.property
        def rolling_update_policy(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.RollingUpdatePolicyProperty"]]:
            '''Specifies a rolling deployment strategy for updating a SageMaker endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-deploymentconfig.html#cfn-sagemaker-endpoint-deploymentconfig-rollingupdatepolicy
            '''
            result = self._values.get("rolling_update_policy")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.RollingUpdatePolicyProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DeploymentConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.RollingUpdatePolicyProperty",
        jsii_struct_bases=[],
        name_mapping={
            "maximum_batch_size": "maximumBatchSize",
            "wait_interval_in_seconds": "waitIntervalInSeconds",
            "maximum_execution_timeout_in_seconds": "maximumExecutionTimeoutInSeconds",
            "rollback_maximum_batch_size": "rollbackMaximumBatchSize",
        },
    )
    class RollingUpdatePolicyProperty:
        def __init__(
            self,
            *,
            maximum_batch_size: typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.CapacitySizeProperty", typing.Dict[builtins.str, typing.Any]]],
            wait_interval_in_seconds: jsii.Number,
            maximum_execution_timeout_in_seconds: typing.Optional[jsii.Number] = None,
            rollback_maximum_batch_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.CapacitySizeProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Specifies a rolling deployment strategy for updating a SageMaker endpoint.

            :param maximum_batch_size: Batch size for each rolling step to provision capacity and turn on traffic on the new endpoint fleet, and terminate capacity on the old endpoint fleet. Value must be between 5% to 50% of the variant's total instance count.
            :param wait_interval_in_seconds: The length of the baking period, during which SageMaker monitors alarms for each batch on the new fleet.
            :param maximum_execution_timeout_in_seconds: The time limit for the total deployment. Exceeding this limit causes a timeout.
            :param rollback_maximum_batch_size: Batch size for rollback to the old endpoint fleet. Each rolling step to provision capacity and turn on traffic on the old endpoint fleet, and terminate capacity on the new endpoint fleet. If this field is absent, the default value will be set to 100% of total capacity which means to bring up the whole capacity of the old fleet at once during rollback.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-rollingupdatepolicy.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                rolling_update_policy_property = sagemaker.CfnEndpoint.RollingUpdatePolicyProperty(
                    maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    ),
                    wait_interval_in_seconds=123,
                
                    # the properties below are optional
                    maximum_execution_timeout_in_seconds=123,
                    rollback_maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0d94ee607e8086635b8f00b305f4dbb6e2be8a4dfe79113facceefda72439b8c)
                check_type(argname="argument maximum_batch_size", value=maximum_batch_size, expected_type=type_hints["maximum_batch_size"])
                check_type(argname="argument wait_interval_in_seconds", value=wait_interval_in_seconds, expected_type=type_hints["wait_interval_in_seconds"])
                check_type(argname="argument maximum_execution_timeout_in_seconds", value=maximum_execution_timeout_in_seconds, expected_type=type_hints["maximum_execution_timeout_in_seconds"])
                check_type(argname="argument rollback_maximum_batch_size", value=rollback_maximum_batch_size, expected_type=type_hints["rollback_maximum_batch_size"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "maximum_batch_size": maximum_batch_size,
                "wait_interval_in_seconds": wait_interval_in_seconds,
            }
            if maximum_execution_timeout_in_seconds is not None:
                self._values["maximum_execution_timeout_in_seconds"] = maximum_execution_timeout_in_seconds
            if rollback_maximum_batch_size is not None:
                self._values["rollback_maximum_batch_size"] = rollback_maximum_batch_size

        @builtins.property
        def maximum_batch_size(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]:
            '''Batch size for each rolling step to provision capacity and turn on traffic on the new endpoint fleet, and terminate capacity on the old endpoint fleet.

            Value must be between 5% to 50% of the variant's total instance count.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-rollingupdatepolicy.html#cfn-sagemaker-endpoint-rollingupdatepolicy-maximumbatchsize
            '''
            result = self._values.get("maximum_batch_size")
            assert result is not None, "Required property 'maximum_batch_size' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"], result)

        @builtins.property
        def wait_interval_in_seconds(self) -> jsii.Number:
            '''The length of the baking period, during which SageMaker monitors alarms for each batch on the new fleet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-rollingupdatepolicy.html#cfn-sagemaker-endpoint-rollingupdatepolicy-waitintervalinseconds
            '''
            result = self._values.get("wait_interval_in_seconds")
            assert result is not None, "Required property 'wait_interval_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def maximum_execution_timeout_in_seconds(self) -> typing.Optional[jsii.Number]:
            '''The time limit for the total deployment.

            Exceeding this limit causes a timeout.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-rollingupdatepolicy.html#cfn-sagemaker-endpoint-rollingupdatepolicy-maximumexecutiontimeoutinseconds
            '''
            result = self._values.get("maximum_execution_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def rollback_maximum_batch_size(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]]:
            '''Batch size for rollback to the old endpoint fleet.

            Each rolling step to provision capacity and turn on traffic on the old endpoint fleet, and terminate capacity on the new endpoint fleet. If this field is absent, the default value will be set to 100% of total capacity which means to bring up the whole capacity of the old fleet at once during rollback.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-rollingupdatepolicy.html#cfn-sagemaker-endpoint-rollingupdatepolicy-rollbackmaximumbatchsize
            '''
            result = self._values.get("rollback_maximum_batch_size")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RollingUpdatePolicyProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.TrafficRoutingConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "type": "type",
            "canary_size": "canarySize",
            "linear_step_size": "linearStepSize",
            "wait_interval_in_seconds": "waitIntervalInSeconds",
        },
    )
    class TrafficRoutingConfigProperty:
        def __init__(
            self,
            *,
            type: builtins.str,
            canary_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.CapacitySizeProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            linear_step_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpoint.CapacitySizeProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            wait_interval_in_seconds: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Defines the traffic routing strategy during an endpoint deployment to shift traffic from the old fleet to the new fleet.

            :param type: Traffic routing strategy type. - ``ALL_AT_ONCE`` : Endpoint traffic shifts to the new fleet in a single step. - ``CANARY`` : Endpoint traffic shifts to the new fleet in two steps. The first step is the canary, which is a small portion of the traffic. The second step is the remainder of the traffic. - ``LINEAR`` : Endpoint traffic shifts to the new fleet in n steps of a configurable size.
            :param canary_size: Batch size for the first step to turn on traffic on the new endpoint fleet. ``Value`` must be less than or equal to 50% of the variant's total instance count.
            :param linear_step_size: Batch size for each step to turn on traffic on the new endpoint fleet. ``Value`` must be 10-50% of the variant's total instance count.
            :param wait_interval_in_seconds: The waiting time (in seconds) between incremental steps to turn on traffic on the new endpoint fleet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-trafficroutingconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                traffic_routing_config_property = sagemaker.CfnEndpoint.TrafficRoutingConfigProperty(
                    type="type",
                
                    # the properties below are optional
                    canary_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    ),
                    linear_step_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                        type="type",
                        value=123
                    ),
                    wait_interval_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ed93bec369cf789d2763e6fe66be5df767a5c5c4c898134732efbeb60fd121ee)
                check_type(argname="argument type", value=type, expected_type=type_hints["type"])
                check_type(argname="argument canary_size", value=canary_size, expected_type=type_hints["canary_size"])
                check_type(argname="argument linear_step_size", value=linear_step_size, expected_type=type_hints["linear_step_size"])
                check_type(argname="argument wait_interval_in_seconds", value=wait_interval_in_seconds, expected_type=type_hints["wait_interval_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "type": type,
            }
            if canary_size is not None:
                self._values["canary_size"] = canary_size
            if linear_step_size is not None:
                self._values["linear_step_size"] = linear_step_size
            if wait_interval_in_seconds is not None:
                self._values["wait_interval_in_seconds"] = wait_interval_in_seconds

        @builtins.property
        def type(self) -> builtins.str:
            '''Traffic routing strategy type.

            - ``ALL_AT_ONCE`` : Endpoint traffic shifts to the new fleet in a single step.
            - ``CANARY`` : Endpoint traffic shifts to the new fleet in two steps. The first step is the canary, which is a small portion of the traffic. The second step is the remainder of the traffic.
            - ``LINEAR`` : Endpoint traffic shifts to the new fleet in n steps of a configurable size.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-trafficroutingconfig.html#cfn-sagemaker-endpoint-trafficroutingconfig-type
            '''
            result = self._values.get("type")
            assert result is not None, "Required property 'type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def canary_size(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]]:
            '''Batch size for the first step to turn on traffic on the new endpoint fleet.

            ``Value`` must be less than or equal to 50% of the variant's total instance count.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-trafficroutingconfig.html#cfn-sagemaker-endpoint-trafficroutingconfig-canarysize
            '''
            result = self._values.get("canary_size")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]], result)

        @builtins.property
        def linear_step_size(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]]:
            '''Batch size for each step to turn on traffic on the new endpoint fleet.

            ``Value`` must be 10-50% of the variant's total instance count.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-trafficroutingconfig.html#cfn-sagemaker-endpoint-trafficroutingconfig-linearstepsize
            '''
            result = self._values.get("linear_step_size")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpoint.CapacitySizeProperty"]], result)

        @builtins.property
        def wait_interval_in_seconds(self) -> typing.Optional[jsii.Number]:
            '''The waiting time (in seconds) between incremental steps to turn on traffic on the new endpoint fleet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-trafficroutingconfig.html#cfn-sagemaker-endpoint-trafficroutingconfig-waitintervalinseconds
            '''
            result = self._values.get("wait_interval_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrafficRoutingConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpoint.VariantPropertyProperty",
        jsii_struct_bases=[],
        name_mapping={"variant_property_type": "variantPropertyType"},
    )
    class VariantPropertyProperty:
        def __init__(
            self,
            *,
            variant_property_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies a production variant property type for an Endpoint.

            If you are updating an Endpoint with the `RetainAllVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-RetainAllVariantProperties>`_ option set to ``true`` , the ``VarientProperty`` objects listed in `ExcludeRetainedVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-ExcludeRetainedVariantProperties>`_ override the existing variant properties of the Endpoint.

            :param variant_property_type: The type of variant property. The supported values are:. - ``DesiredInstanceCount`` : Overrides the existing variant instance counts using the `InitialInstanceCount <https://docs.aws.amazon.com/sagemaker/latest/dg/API_ProductionVariant.html#SageMaker-Type-ProductionVariant-InitialInstanceCount>`_ values in the `ProductionVariants <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html#SageMaker-CreateEndpointConfig-request-ProductionVariants>`_ . - ``DesiredWeight`` : Overrides the existing variant weights using the `InitialVariantWeight <https://docs.aws.amazon.com/sagemaker/latest/dg/API_ProductionVariant.html#SageMaker-Type-ProductionVariant-InitialVariantWeight>`_ values in the `ProductionVariants <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html#SageMaker-CreateEndpointConfig-request-ProductionVariants>`_ . - ``DataCaptureConfig`` : (Not currently supported.)

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                variant_property_property = sagemaker.CfnEndpoint.VariantPropertyProperty(
                    variant_property_type="variantPropertyType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a64f8f48a2b5af883cfc2cd98614bb5fc82a1ad9e9bad182f015286151da4d68)
                check_type(argname="argument variant_property_type", value=variant_property_type, expected_type=type_hints["variant_property_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if variant_property_type is not None:
                self._values["variant_property_type"] = variant_property_type

        @builtins.property
        def variant_property_type(self) -> typing.Optional[builtins.str]:
            '''The type of variant property. The supported values are:.

            - ``DesiredInstanceCount`` : Overrides the existing variant instance counts using the `InitialInstanceCount <https://docs.aws.amazon.com/sagemaker/latest/dg/API_ProductionVariant.html#SageMaker-Type-ProductionVariant-InitialInstanceCount>`_ values in the `ProductionVariants <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html#SageMaker-CreateEndpointConfig-request-ProductionVariants>`_ .
            - ``DesiredWeight`` : Overrides the existing variant weights using the `InitialVariantWeight <https://docs.aws.amazon.com/sagemaker/latest/dg/API_ProductionVariant.html#SageMaker-Type-ProductionVariant-InitialVariantWeight>`_ values in the `ProductionVariants <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html#SageMaker-CreateEndpointConfig-request-ProductionVariants>`_ .
            - ``DataCaptureConfig`` : (Not currently supported.)

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html#cfn-sagemaker-endpoint-variantproperty-variantpropertytype
            '''
            result = self._values.get("variant_property_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VariantPropertyProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnEndpointConfig(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig",
):
    '''The ``AWS::SageMaker::EndpointConfig`` resource creates a configuration for an Amazon SageMaker endpoint.

    For more information, see `CreateEndpointConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html>`_ in the *SageMaker Developer Guide* .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html
    :cloudformationResource: AWS::SageMaker::EndpointConfig
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_endpoint_config = sagemaker.CfnEndpointConfig(self, "MyCfnEndpointConfig",
            production_variants=[sagemaker.CfnEndpointConfig.ProductionVariantProperty(
                variant_name="variantName",
        
                # the properties below are optional
                accelerator_type="acceleratorType",
                container_startup_health_check_timeout_in_seconds=123,
                enable_ssm_access=False,
                initial_instance_count=123,
                initial_variant_weight=123,
                instance_type="instanceType",
                managed_instance_scaling=sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                    max_instance_count=123,
                    min_instance_count=123,
                    status="status"
                ),
                model_data_download_timeout_in_seconds=123,
                model_name="modelName",
                routing_config=sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                    routing_strategy="routingStrategy"
                ),
                serverless_config=sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                    max_concurrency=123,
                    memory_size_in_mb=123,
        
                    # the properties below are optional
                    provisioned_concurrency=123
                ),
                volume_size_in_gb=123
            )],
        
            # the properties below are optional
            async_inference_config=sagemaker.CfnEndpointConfig.AsyncInferenceConfigProperty(
                output_config=sagemaker.CfnEndpointConfig.AsyncInferenceOutputConfigProperty(
                    kms_key_id="kmsKeyId",
                    notification_config=sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty(
                        error_topic="errorTopic",
                        include_inference_response_in=["includeInferenceResponseIn"],
                        success_topic="successTopic"
                    ),
                    s3_failure_path="s3FailurePath",
                    s3_output_path="s3OutputPath"
                ),
        
                # the properties below are optional
                client_config=sagemaker.CfnEndpointConfig.AsyncInferenceClientConfigProperty(
                    max_concurrent_invocations_per_instance=123
                )
            ),
            data_capture_config=sagemaker.CfnEndpointConfig.DataCaptureConfigProperty(
                capture_options=[sagemaker.CfnEndpointConfig.CaptureOptionProperty(
                    capture_mode="captureMode"
                )],
                destination_s3_uri="destinationS3Uri",
                initial_sampling_percentage=123,
        
                # the properties below are optional
                capture_content_type_header=sagemaker.CfnEndpointConfig.CaptureContentTypeHeaderProperty(
                    csv_content_types=["csvContentTypes"],
                    json_content_types=["jsonContentTypes"]
                ),
                enable_capture=False,
                kms_key_id="kmsKeyId"
            ),
            enable_network_isolation=False,
            endpoint_config_name="endpointConfigName",
            execution_role_arn="executionRoleArn",
            explainer_config=sagemaker.CfnEndpointConfig.ExplainerConfigProperty(
                clarify_explainer_config=sagemaker.CfnEndpointConfig.ClarifyExplainerConfigProperty(
                    shap_config=sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty(
                        shap_baseline_config=sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                            mime_type="mimeType",
                            shap_baseline="shapBaseline",
                            shap_baseline_uri="shapBaselineUri"
                        ),
        
                        # the properties below are optional
                        number_of_samples=123,
                        seed=123,
                        text_config=sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                            granularity="granularity",
                            language="language"
                        ),
                        use_logit=False
                    ),
        
                    # the properties below are optional
                    enable_explanations="enableExplanations",
                    inference_config=sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty(
                        content_template="contentTemplate",
                        feature_headers=["featureHeaders"],
                        features_attribute="featuresAttribute",
                        feature_types=["featureTypes"],
                        label_attribute="labelAttribute",
                        label_headers=["labelHeaders"],
                        label_index=123,
                        max_payload_in_mb=123,
                        max_record_count=123,
                        probability_attribute="probabilityAttribute",
                        probability_index=123
                    )
                )
            ),
            kms_key_id="kmsKeyId",
            shadow_production_variants=[sagemaker.CfnEndpointConfig.ProductionVariantProperty(
                variant_name="variantName",
        
                # the properties below are optional
                accelerator_type="acceleratorType",
                container_startup_health_check_timeout_in_seconds=123,
                enable_ssm_access=False,
                initial_instance_count=123,
                initial_variant_weight=123,
                instance_type="instanceType",
                managed_instance_scaling=sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                    max_instance_count=123,
                    min_instance_count=123,
                    status="status"
                ),
                model_data_download_timeout_in_seconds=123,
                model_name="modelName",
                routing_config=sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                    routing_strategy="routingStrategy"
                ),
                serverless_config=sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                    max_concurrency=123,
                    memory_size_in_mb=123,
        
                    # the properties below are optional
                    provisioned_concurrency=123
                ),
                volume_size_in_gb=123
            )],
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            vpc_config=sagemaker.CfnEndpointConfig.VpcConfigProperty(
                security_group_ids=["securityGroupIds"],
                subnets=["subnets"]
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        production_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ProductionVariantProperty", typing.Dict[builtins.str, typing.Any]]]]],
        async_inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.AsyncInferenceConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        data_capture_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.DataCaptureConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        endpoint_config_name: typing.Optional[builtins.str] = None,
        execution_role_arn: typing.Optional[builtins.str] = None,
        explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ExplainerConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        shadow_production_variants: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ProductionVariantProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param production_variants: A list of ``ProductionVariant`` objects, one for each model that you want to host at this endpoint.
        :param async_inference_config: Specifies configuration for how an endpoint performs asynchronous inference.
        :param data_capture_config: Specifies how to capture endpoint data for model monitor. The data capture configuration applies to all production variants hosted at the endpoint.
        :param enable_network_isolation: 
        :param endpoint_config_name: The name of the endpoint configuration.
        :param execution_role_arn: 
        :param explainer_config: A parameter to activate explainers.
        :param kms_key_id: The Amazon Resource Name (ARN) of an AWS Key Management Service key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance that hosts the endpoint. - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` - Alias name: ``alias/ExampleAlias`` - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias`` The KMS key policy must grant permission to the IAM role that you specify in your ``CreateEndpoint`` , ``UpdateEndpoint`` requests. For more information, refer to the AWS Key Management Service section `Using Key Policies in AWS KMS <https://docs.aws.amazon.com//kms/latest/developerguide/key-policies.html>`_ .. epigraph:: Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a ``KmsKeyId`` when using an instance type with local storage. If any of the models that you specify in the ``ProductionVariants`` parameter use nitro-based instances with local storage, do not specify a value for the ``KmsKeyId`` parameter. If you specify a value for ``KmsKeyId`` when using any nitro-based instances with local storage, the call to ``CreateEndpointConfig`` fails. For a list of instance types that support local instance storage, see `Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes>`_ . For more information about local instance storage encryption, see `SSD Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html>`_ .
        :param shadow_production_variants: Array of ``ProductionVariant`` objects. There is one for each model that you want to host at this endpoint in shadow mode with production traffic replicated from the model specified on ``ProductionVariants`` . If you use this field, you can only specify one variant for ``ProductionVariants`` and one variant for ``ShadowProductionVariants`` .
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ .
        :param vpc_config: 
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d5ec3761393d0c2344de58784b3017f7e1498d65c80ca0e29094c617103903e4)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnEndpointConfigProps(
            production_variants=production_variants,
            async_inference_config=async_inference_config,
            data_capture_config=data_capture_config,
            enable_network_isolation=enable_network_isolation,
            endpoint_config_name=endpoint_config_name,
            execution_role_arn=execution_role_arn,
            explainer_config=explainer_config,
            kms_key_id=kms_key_id,
            shadow_production_variants=shadow_production_variants,
            tags=tags,
            vpc_config=vpc_config,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b2d94310d95f958331f33f530628190b1b0cb9f396a80c916a18ff5d4f37f1b4)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0d017ceb78f627a4d082938a9d00f60606064212462ecc172f2732ca4cfecf4e)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointConfigName")
    def attr_endpoint_config_name(self) -> builtins.str:
        '''The name of the endpoint configuration, such as ``MyEndpointConfiguration`` .

        :cloudformationAttribute: EndpointConfigName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrEndpointConfigName"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="productionVariants")
    def production_variants(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]]:
        '''A list of ``ProductionVariant`` objects, one for each model that you want to host at this endpoint.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]], jsii.get(self, "productionVariants"))

    @production_variants.setter
    def production_variants(
        self,
        value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bfd9dbaba28aed3cd83027875322f2cbb70f3fea264bd0ad0c78e962c341e3e9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "productionVariants", value)

    @builtins.property
    @jsii.member(jsii_name="asyncInferenceConfig")
    def async_inference_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceConfigProperty"]]:
        '''Specifies configuration for how an endpoint performs asynchronous inference.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceConfigProperty"]], jsii.get(self, "asyncInferenceConfig"))

    @async_inference_config.setter
    def async_inference_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3d66437c5253334608419691e2755c084d9f098a57fe7460e997e14374a4394b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "asyncInferenceConfig", value)

    @builtins.property
    @jsii.member(jsii_name="dataCaptureConfig")
    def data_capture_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.DataCaptureConfigProperty"]]:
        '''Specifies how to capture endpoint data for model monitor.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.DataCaptureConfigProperty"]], jsii.get(self, "dataCaptureConfig"))

    @data_capture_config.setter
    def data_capture_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.DataCaptureConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__13ddfd0a291efa4705835c0f8adb807852e0c61e1bcff1144556e06335ac7f46)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataCaptureConfig", value)

    @builtins.property
    @jsii.member(jsii_name="enableNetworkIsolation")
    def enable_network_isolation(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "enableNetworkIsolation"))

    @enable_network_isolation.setter
    def enable_network_isolation(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b84b130678c86998100d841aba59b69e7249ee09f47b89e205eddb9f70d59cd6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "enableNetworkIsolation", value)

    @builtins.property
    @jsii.member(jsii_name="endpointConfigName")
    def endpoint_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint configuration.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointConfigName"))

    @endpoint_config_name.setter
    def endpoint_config_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c1e35e22547536b5f3a9420b1327dcc09512d00f5a6fcb7050fb847aef3cc7e2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointConfigName", value)

    @builtins.property
    @jsii.member(jsii_name="executionRoleArn")
    def execution_role_arn(self) -> typing.Optional[builtins.str]:
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "executionRoleArn"))

    @execution_role_arn.setter
    def execution_role_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__581dfd37743e4c2af9ac0f0eecf04a51838a2258349beb74cea64c57f10c1b56)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "executionRoleArn", value)

    @builtins.property
    @jsii.member(jsii_name="explainerConfig")
    def explainer_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ExplainerConfigProperty"]]:
        '''A parameter to activate explainers.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ExplainerConfigProperty"]], jsii.get(self, "explainerConfig"))

    @explainer_config.setter
    def explainer_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ExplainerConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1f3348af00a67f21513de8698151acf7998ee647db8a9740c9d0d51eb170a4fa)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "explainerConfig", value)

    @builtins.property
    @jsii.member(jsii_name="kmsKeyId")
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of an AWS Key Management Service key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance that hosts the endpoint.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "kmsKeyId"))

    @kms_key_id.setter
    def kms_key_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1feedfcd01ce7ecf1fca052ce76bf378f4ce268fabd561d3ec301f697053426d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "kmsKeyId", value)

    @builtins.property
    @jsii.member(jsii_name="shadowProductionVariants")
    def shadow_production_variants(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]]]:
        '''Array of ``ProductionVariant`` objects.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]]], jsii.get(self, "shadowProductionVariants"))

    @shadow_production_variants.setter
    def shadow_production_variants(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ProductionVariantProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__364e8e55ae8c7122cb952ab736c20798058ad6defc1088f9d91757193a806d68)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "shadowProductionVariants", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a87b0cdee3111cac9d994b2db39e4afee50e739e8856c202cbae175391893dd6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="vpcConfig")
    def vpc_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.VpcConfigProperty"]]:
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.VpcConfigProperty"]], jsii.get(self, "vpcConfig"))

    @vpc_config.setter
    def vpc_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.VpcConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b56879c446ab33e312f91778c0221db7735c2aed701c929318efc4707ff5c69f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vpcConfig", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.AsyncInferenceClientConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "max_concurrent_invocations_per_instance": "maxConcurrentInvocationsPerInstance",
        },
    )
    class AsyncInferenceClientConfigProperty:
        def __init__(
            self,
            *,
            max_concurrent_invocations_per_instance: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Configures the behavior of the client used by SageMaker to interact with the model container during asynchronous inference.

            :param max_concurrent_invocations_per_instance: The maximum number of concurrent requests sent by the SageMaker client to the model container. If no value is provided, SageMaker will choose an optimal value for you.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceclientconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                async_inference_client_config_property = sagemaker.CfnEndpointConfig.AsyncInferenceClientConfigProperty(
                    max_concurrent_invocations_per_instance=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3dee0d44cdca5f0d19568fbd2782436822015939f8aeb568463590b55f41cfe6)
                check_type(argname="argument max_concurrent_invocations_per_instance", value=max_concurrent_invocations_per_instance, expected_type=type_hints["max_concurrent_invocations_per_instance"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if max_concurrent_invocations_per_instance is not None:
                self._values["max_concurrent_invocations_per_instance"] = max_concurrent_invocations_per_instance

        @builtins.property
        def max_concurrent_invocations_per_instance(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The maximum number of concurrent requests sent by the SageMaker client to the model container.

            If no value is provided, SageMaker will choose an optimal value for you.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceclientconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceclientconfig-maxconcurrentinvocationsperinstance
            '''
            result = self._values.get("max_concurrent_invocations_per_instance")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AsyncInferenceClientConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.AsyncInferenceConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "output_config": "outputConfig",
            "client_config": "clientConfig",
        },
    )
    class AsyncInferenceConfigProperty:
        def __init__(
            self,
            *,
            output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.AsyncInferenceOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            client_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.AsyncInferenceClientConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Specifies configuration for how an endpoint performs asynchronous inference.

            :param output_config: Specifies the configuration for asynchronous inference invocation outputs.
            :param client_config: Configures the behavior of the client used by SageMaker to interact with the model container during asynchronous inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                async_inference_config_property = sagemaker.CfnEndpointConfig.AsyncInferenceConfigProperty(
                    output_config=sagemaker.CfnEndpointConfig.AsyncInferenceOutputConfigProperty(
                        kms_key_id="kmsKeyId",
                        notification_config=sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty(
                            error_topic="errorTopic",
                            include_inference_response_in=["includeInferenceResponseIn"],
                            success_topic="successTopic"
                        ),
                        s3_failure_path="s3FailurePath",
                        s3_output_path="s3OutputPath"
                    ),
                
                    # the properties below are optional
                    client_config=sagemaker.CfnEndpointConfig.AsyncInferenceClientConfigProperty(
                        max_concurrent_invocations_per_instance=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9d6279f6f1637a7f063e020863fb6143db719f071239eaff4a14abcffa4e236c)
                check_type(argname="argument output_config", value=output_config, expected_type=type_hints["output_config"])
                check_type(argname="argument client_config", value=client_config, expected_type=type_hints["client_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "output_config": output_config,
            }
            if client_config is not None:
                self._values["client_config"] = client_config

        @builtins.property
        def output_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceOutputConfigProperty"]:
            '''Specifies the configuration for asynchronous inference invocation outputs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceconfig-outputconfig
            '''
            result = self._values.get("output_config")
            assert result is not None, "Required property 'output_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceOutputConfigProperty"], result)

        @builtins.property
        def client_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceClientConfigProperty"]]:
            '''Configures the behavior of the client used by SageMaker to interact with the model container during asynchronous inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceconfig-clientconfig
            '''
            result = self._values.get("client_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceClientConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AsyncInferenceConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "error_topic": "errorTopic",
            "include_inference_response_in": "includeInferenceResponseIn",
            "success_topic": "successTopic",
        },
    )
    class AsyncInferenceNotificationConfigProperty:
        def __init__(
            self,
            *,
            error_topic: typing.Optional[builtins.str] = None,
            include_inference_response_in: typing.Optional[typing.Sequence[builtins.str]] = None,
            success_topic: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the configuration for notifications of inference results for asynchronous inference.

            :param error_topic: Amazon SNS topic to post a notification to when an inference fails. If no topic is provided, no notification is sent on failure.
            :param include_inference_response_in: The Amazon SNS topics where you want the inference response to be included. .. epigraph:: The inference response is included only if the response size is less than or equal to 128 KB.
            :param success_topic: Amazon SNS topic to post a notification to when an inference completes successfully. If no topic is provided, no notification is sent on success.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferencenotificationconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                async_inference_notification_config_property = sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty(
                    error_topic="errorTopic",
                    include_inference_response_in=["includeInferenceResponseIn"],
                    success_topic="successTopic"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__78f6f560c2b90941cc4af6490a3ab4a8382e19112589f81c2bff6e63dfa574bb)
                check_type(argname="argument error_topic", value=error_topic, expected_type=type_hints["error_topic"])
                check_type(argname="argument include_inference_response_in", value=include_inference_response_in, expected_type=type_hints["include_inference_response_in"])
                check_type(argname="argument success_topic", value=success_topic, expected_type=type_hints["success_topic"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if error_topic is not None:
                self._values["error_topic"] = error_topic
            if include_inference_response_in is not None:
                self._values["include_inference_response_in"] = include_inference_response_in
            if success_topic is not None:
                self._values["success_topic"] = success_topic

        @builtins.property
        def error_topic(self) -> typing.Optional[builtins.str]:
            '''Amazon SNS topic to post a notification to when an inference fails.

            If no topic is provided, no notification is sent on failure.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferencenotificationconfig.html#cfn-sagemaker-endpointconfig-asyncinferencenotificationconfig-errortopic
            '''
            result = self._values.get("error_topic")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def include_inference_response_in(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''The Amazon SNS topics where you want the inference response to be included.

            .. epigraph::

               The inference response is included only if the response size is less than or equal to 128 KB.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferencenotificationconfig.html#cfn-sagemaker-endpointconfig-asyncinferencenotificationconfig-includeinferenceresponsein
            '''
            result = self._values.get("include_inference_response_in")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def success_topic(self) -> typing.Optional[builtins.str]:
            '''Amazon SNS topic to post a notification to when an inference completes successfully.

            If no topic is provided, no notification is sent on success.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferencenotificationconfig.html#cfn-sagemaker-endpointconfig-asyncinferencenotificationconfig-successtopic
            '''
            result = self._values.get("success_topic")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AsyncInferenceNotificationConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.AsyncInferenceOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "kms_key_id": "kmsKeyId",
            "notification_config": "notificationConfig",
            "s3_failure_path": "s3FailurePath",
            "s3_output_path": "s3OutputPath",
        },
    )
    class AsyncInferenceOutputConfigProperty:
        def __init__(
            self,
            *,
            kms_key_id: typing.Optional[builtins.str] = None,
            notification_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.AsyncInferenceNotificationConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            s3_failure_path: typing.Optional[builtins.str] = None,
            s3_output_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the configuration for asynchronous inference invocation outputs.

            :param kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the asynchronous inference output in Amazon S3.
            :param notification_config: Specifies the configuration for notifications of inference results for asynchronous inference.
            :param s3_failure_path: The Amazon S3 location to upload failure inference responses to.
            :param s3_output_path: The Amazon S3 location to upload inference responses to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                async_inference_output_config_property = sagemaker.CfnEndpointConfig.AsyncInferenceOutputConfigProperty(
                    kms_key_id="kmsKeyId",
                    notification_config=sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty(
                        error_topic="errorTopic",
                        include_inference_response_in=["includeInferenceResponseIn"],
                        success_topic="successTopic"
                    ),
                    s3_failure_path="s3FailurePath",
                    s3_output_path="s3OutputPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c3ae80c64de4a57385622840864bf472efd012f72363c8a905b70c436e071533)
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
                check_type(argname="argument notification_config", value=notification_config, expected_type=type_hints["notification_config"])
                check_type(argname="argument s3_failure_path", value=s3_failure_path, expected_type=type_hints["s3_failure_path"])
                check_type(argname="argument s3_output_path", value=s3_output_path, expected_type=type_hints["s3_output_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id
            if notification_config is not None:
                self._values["notification_config"] = notification_config
            if s3_failure_path is not None:
                self._values["s3_failure_path"] = s3_failure_path
            if s3_output_path is not None:
                self._values["s3_output_path"] = s3_output_path

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the asynchronous inference output in Amazon S3.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceoutputconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def notification_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceNotificationConfigProperty"]]:
            '''Specifies the configuration for notifications of inference results for asynchronous inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceoutputconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceoutputconfig-notificationconfig
            '''
            result = self._values.get("notification_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.AsyncInferenceNotificationConfigProperty"]], result)

        @builtins.property
        def s3_failure_path(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 location to upload failure inference responses to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceoutputconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceoutputconfig-s3failurepath
            '''
            result = self._values.get("s3_failure_path")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_output_path(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 location to upload inference responses to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-asyncinferenceoutputconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceoutputconfig-s3outputpath
            '''
            result = self._values.get("s3_output_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AsyncInferenceOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.CaptureContentTypeHeaderProperty",
        jsii_struct_bases=[],
        name_mapping={
            "csv_content_types": "csvContentTypes",
            "json_content_types": "jsonContentTypes",
        },
    )
    class CaptureContentTypeHeaderProperty:
        def __init__(
            self,
            *,
            csv_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            json_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Specifies the JSON and CSV content types of the data that the endpoint captures.

            :param csv_content_types: A list of the CSV content types of the data that the endpoint captures. For the endpoint to capture the data, you must also specify the content type when you invoke the endpoint.
            :param json_content_types: A list of the JSON content types of the data that the endpoint captures. For the endpoint to capture the data, you must also specify the content type when you invoke the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-capturecontenttypeheader.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                capture_content_type_header_property = sagemaker.CfnEndpointConfig.CaptureContentTypeHeaderProperty(
                    csv_content_types=["csvContentTypes"],
                    json_content_types=["jsonContentTypes"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8f365f85e452b00846d8dd4987370795343fee0c95178a92e6cb69c5d32bba4e)
                check_type(argname="argument csv_content_types", value=csv_content_types, expected_type=type_hints["csv_content_types"])
                check_type(argname="argument json_content_types", value=json_content_types, expected_type=type_hints["json_content_types"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv_content_types is not None:
                self._values["csv_content_types"] = csv_content_types
            if json_content_types is not None:
                self._values["json_content_types"] = json_content_types

        @builtins.property
        def csv_content_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the CSV content types of the data that the endpoint captures.

            For the endpoint to capture the data, you must also specify the content type when you invoke the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-capturecontenttypeheader.html#cfn-sagemaker-endpointconfig-capturecontenttypeheader-csvcontenttypes
            '''
            result = self._values.get("csv_content_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def json_content_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the JSON content types of the data that the endpoint captures.

            For the endpoint to capture the data, you must also specify the content type when you invoke the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-capturecontenttypeheader.html#cfn-sagemaker-endpointconfig-capturecontenttypeheader-jsoncontenttypes
            '''
            result = self._values.get("json_content_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptureContentTypeHeaderProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.CaptureOptionProperty",
        jsii_struct_bases=[],
        name_mapping={"capture_mode": "captureMode"},
    )
    class CaptureOptionProperty:
        def __init__(self, *, capture_mode: builtins.str) -> None:
            '''Specifies whether the endpoint captures input data or output data.

            :param capture_mode: Specifies whether the endpoint captures input data or output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-captureoption.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                capture_option_property = sagemaker.CfnEndpointConfig.CaptureOptionProperty(
                    capture_mode="captureMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__025dde0eee27b1ccd2ed0364dddac7611f70b70c09602593590e4a1cc7047b37)
                check_type(argname="argument capture_mode", value=capture_mode, expected_type=type_hints["capture_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "capture_mode": capture_mode,
            }

        @builtins.property
        def capture_mode(self) -> builtins.str:
            '''Specifies whether the endpoint captures input data or output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-captureoption.html#cfn-sagemaker-endpointconfig-captureoption-capturemode
            '''
            result = self._values.get("capture_mode")
            assert result is not None, "Required property 'capture_mode' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptureOptionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ClarifyExplainerConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "shap_config": "shapConfig",
            "enable_explanations": "enableExplanations",
            "inference_config": "inferenceConfig",
        },
    )
    class ClarifyExplainerConfigProperty:
        def __init__(
            self,
            *,
            shap_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ClarifyShapConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            enable_explanations: typing.Optional[builtins.str] = None,
            inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ClarifyInferenceConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration parameters for the SageMaker Clarify explainer.

            :param shap_config: The configuration for SHAP analysis.
            :param enable_explanations: A JMESPath boolean expression used to filter which records to explain. Explanations are activated by default. See ```EnableExplanations`` <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html#clarify-online-explainability-create-endpoint-enable>`_ for additional information.
            :param inference_config: The inference configuration parameter for the model container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyexplainerconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                clarify_explainer_config_property = sagemaker.CfnEndpointConfig.ClarifyExplainerConfigProperty(
                    shap_config=sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty(
                        shap_baseline_config=sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                            mime_type="mimeType",
                            shap_baseline="shapBaseline",
                            shap_baseline_uri="shapBaselineUri"
                        ),
                
                        # the properties below are optional
                        number_of_samples=123,
                        seed=123,
                        text_config=sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                            granularity="granularity",
                            language="language"
                        ),
                        use_logit=False
                    ),
                
                    # the properties below are optional
                    enable_explanations="enableExplanations",
                    inference_config=sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty(
                        content_template="contentTemplate",
                        feature_headers=["featureHeaders"],
                        features_attribute="featuresAttribute",
                        feature_types=["featureTypes"],
                        label_attribute="labelAttribute",
                        label_headers=["labelHeaders"],
                        label_index=123,
                        max_payload_in_mb=123,
                        max_record_count=123,
                        probability_attribute="probabilityAttribute",
                        probability_index=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__558fc059462816c0491f464603da3fabbd56effd8ec81519187f942727b6f280)
                check_type(argname="argument shap_config", value=shap_config, expected_type=type_hints["shap_config"])
                check_type(argname="argument enable_explanations", value=enable_explanations, expected_type=type_hints["enable_explanations"])
                check_type(argname="argument inference_config", value=inference_config, expected_type=type_hints["inference_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "shap_config": shap_config,
            }
            if enable_explanations is not None:
                self._values["enable_explanations"] = enable_explanations
            if inference_config is not None:
                self._values["inference_config"] = inference_config

        @builtins.property
        def shap_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyShapConfigProperty"]:
            '''The configuration for SHAP analysis.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyexplainerconfig.html#cfn-sagemaker-endpointconfig-clarifyexplainerconfig-shapconfig
            '''
            result = self._values.get("shap_config")
            assert result is not None, "Required property 'shap_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyShapConfigProperty"], result)

        @builtins.property
        def enable_explanations(self) -> typing.Optional[builtins.str]:
            '''A JMESPath boolean expression used to filter which records to explain.

            Explanations are activated by default. See ```EnableExplanations`` <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html#clarify-online-explainability-create-endpoint-enable>`_ for additional information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyexplainerconfig.html#cfn-sagemaker-endpointconfig-clarifyexplainerconfig-enableexplanations
            '''
            result = self._values.get("enable_explanations")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyInferenceConfigProperty"]]:
            '''The inference configuration parameter for the model container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyexplainerconfig.html#cfn-sagemaker-endpointconfig-clarifyexplainerconfig-inferenceconfig
            '''
            result = self._values.get("inference_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyInferenceConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClarifyExplainerConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "content_template": "contentTemplate",
            "feature_headers": "featureHeaders",
            "features_attribute": "featuresAttribute",
            "feature_types": "featureTypes",
            "label_attribute": "labelAttribute",
            "label_headers": "labelHeaders",
            "label_index": "labelIndex",
            "max_payload_in_mb": "maxPayloadInMb",
            "max_record_count": "maxRecordCount",
            "probability_attribute": "probabilityAttribute",
            "probability_index": "probabilityIndex",
        },
    )
    class ClarifyInferenceConfigProperty:
        def __init__(
            self,
            *,
            content_template: typing.Optional[builtins.str] = None,
            feature_headers: typing.Optional[typing.Sequence[builtins.str]] = None,
            features_attribute: typing.Optional[builtins.str] = None,
            feature_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            label_attribute: typing.Optional[builtins.str] = None,
            label_headers: typing.Optional[typing.Sequence[builtins.str]] = None,
            label_index: typing.Optional[jsii.Number] = None,
            max_payload_in_mb: typing.Optional[jsii.Number] = None,
            max_record_count: typing.Optional[jsii.Number] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            probability_index: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''The inference configuration parameter for the model container.

            :param content_template: A template string used to format a JSON record into an acceptable model container input. For example, a ``ContentTemplate`` string ``'{"myfeatures":$features}'`` will format a list of features ``[1,2,3]`` into the record string ``'{"myfeatures":[1,2,3]}'`` . Required only when the model container input is in JSON Lines format.
            :param feature_headers: The names of the features. If provided, these are included in the endpoint response payload to help readability of the ``InvokeEndpoint`` output. See the `Response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information.
            :param features_attribute: Provides the JMESPath expression to extract the features from a model container input in JSON Lines format. For example, if ``FeaturesAttribute`` is the JMESPath expression ``'myfeatures'`` , it extracts a list of features ``[1,2,3]`` from request data ``'{"myfeatures":[1,2,3]}'`` .
            :param feature_types: A list of data types of the features (optional). Applicable only to NLP explainability. If provided, ``FeatureTypes`` must have at least one ``'text'`` string (for example, ``['text']`` ). If ``FeatureTypes`` is not provided, the explainer infers the feature types based on the baseline data. The feature types are included in the endpoint response payload. For additional information see the `response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information.
            :param label_attribute: A JMESPath expression used to locate the list of label headers in the model container output. *Example* : If the model container output of a batch request is ``'{"labels":["cat","dog","fish"],"probability":[0.6,0.3,0.1]}'`` , then set ``LabelAttribute`` to ``'labels'`` to extract the list of label headers ``["cat","dog","fish"]``
            :param label_headers: For multiclass classification problems, the label headers are the names of the classes. Otherwise, the label header is the name of the predicted label. These are used to help readability for the output of the ``InvokeEndpoint`` API. See the `response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information. If there are no label headers in the model container output, provide them manually using this parameter.
            :param label_index: A zero-based index used to extract a label header or list of label headers from model container output in CSV format. *Example for a multiclass model:* If the model container output consists of label headers followed by probabilities: ``'"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"'`` , set ``LabelIndex`` to ``0`` to select the label headers ``['cat','dog','fish']`` .
            :param max_payload_in_mb: The maximum payload size (MB) allowed of a request from the explainer to the model container. Defaults to ``6`` MB.
            :param max_record_count: The maximum number of records in a request that the model container can process when querying the model container for the predictions of a `synthetic dataset <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html#clarify-online-explainability-create-endpoint-synthetic>`_ . A record is a unit of input data that inference can be made on, for example, a single line in CSV data. If ``MaxRecordCount`` is ``1`` , the model container expects one record per request. A value of 2 or greater means that the model expects batch requests, which can reduce overhead and speed up the inferencing process. If this parameter is not provided, the explainer will tune the record count per request according to the model container's capacity at runtime.
            :param probability_attribute: A JMESPath expression used to extract the probability (or score) from the model container output if the model container is in JSON Lines format. *Example* : If the model container output of a single request is ``'{"predicted_label":1,"probability":0.6}'`` , then set ``ProbabilityAttribute`` to ``'probability'`` .
            :param probability_index: A zero-based index used to extract a probability value (score) or list from model container output in CSV format. If this value is not provided, the entire model container output will be treated as a probability value (score) or list. *Example for a single class model:* If the model container output consists of a string-formatted prediction label followed by its probability: ``'1,0.6'`` , set ``ProbabilityIndex`` to ``1`` to select the probability value ``0.6`` . *Example for a multiclass model:* If the model container output consists of a string-formatted prediction label followed by its probability: ``'"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"'`` , set ``ProbabilityIndex`` to ``1`` to select the probability values ``[0.1,0.6,0.3]`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                clarify_inference_config_property = sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty(
                    content_template="contentTemplate",
                    feature_headers=["featureHeaders"],
                    features_attribute="featuresAttribute",
                    feature_types=["featureTypes"],
                    label_attribute="labelAttribute",
                    label_headers=["labelHeaders"],
                    label_index=123,
                    max_payload_in_mb=123,
                    max_record_count=123,
                    probability_attribute="probabilityAttribute",
                    probability_index=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__219c4bc4be82ae8b985455b761775c8949e24bde8f8339359c77ac29849deaa3)
                check_type(argname="argument content_template", value=content_template, expected_type=type_hints["content_template"])
                check_type(argname="argument feature_headers", value=feature_headers, expected_type=type_hints["feature_headers"])
                check_type(argname="argument features_attribute", value=features_attribute, expected_type=type_hints["features_attribute"])
                check_type(argname="argument feature_types", value=feature_types, expected_type=type_hints["feature_types"])
                check_type(argname="argument label_attribute", value=label_attribute, expected_type=type_hints["label_attribute"])
                check_type(argname="argument label_headers", value=label_headers, expected_type=type_hints["label_headers"])
                check_type(argname="argument label_index", value=label_index, expected_type=type_hints["label_index"])
                check_type(argname="argument max_payload_in_mb", value=max_payload_in_mb, expected_type=type_hints["max_payload_in_mb"])
                check_type(argname="argument max_record_count", value=max_record_count, expected_type=type_hints["max_record_count"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument probability_index", value=probability_index, expected_type=type_hints["probability_index"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if content_template is not None:
                self._values["content_template"] = content_template
            if feature_headers is not None:
                self._values["feature_headers"] = feature_headers
            if features_attribute is not None:
                self._values["features_attribute"] = features_attribute
            if feature_types is not None:
                self._values["feature_types"] = feature_types
            if label_attribute is not None:
                self._values["label_attribute"] = label_attribute
            if label_headers is not None:
                self._values["label_headers"] = label_headers
            if label_index is not None:
                self._values["label_index"] = label_index
            if max_payload_in_mb is not None:
                self._values["max_payload_in_mb"] = max_payload_in_mb
            if max_record_count is not None:
                self._values["max_record_count"] = max_record_count
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if probability_index is not None:
                self._values["probability_index"] = probability_index

        @builtins.property
        def content_template(self) -> typing.Optional[builtins.str]:
            '''A template string used to format a JSON record into an acceptable model container input.

            For example, a ``ContentTemplate`` string ``'{"myfeatures":$features}'`` will format a list of features ``[1,2,3]`` into the record string ``'{"myfeatures":[1,2,3]}'`` . Required only when the model container input is in JSON Lines format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-contenttemplate
            '''
            result = self._values.get("content_template")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def feature_headers(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The names of the features.

            If provided, these are included in the endpoint response payload to help readability of the ``InvokeEndpoint`` output. See the `Response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-featureheaders
            '''
            result = self._values.get("feature_headers")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def features_attribute(self) -> typing.Optional[builtins.str]:
            '''Provides the JMESPath expression to extract the features from a model container input in JSON Lines format.

            For example, if ``FeaturesAttribute`` is the JMESPath expression ``'myfeatures'`` , it extracts a list of features ``[1,2,3]`` from request data ``'{"myfeatures":[1,2,3]}'`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-featuresattribute
            '''
            result = self._values.get("features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def feature_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of data types of the features (optional).

            Applicable only to NLP explainability. If provided, ``FeatureTypes`` must have at least one ``'text'`` string (for example, ``['text']`` ). If ``FeatureTypes`` is not provided, the explainer infers the feature types based on the baseline data. The feature types are included in the endpoint response payload. For additional information see the `response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-featuretypes
            '''
            result = self._values.get("feature_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def label_attribute(self) -> typing.Optional[builtins.str]:
            '''A JMESPath expression used to locate the list of label headers in the model container output.

            *Example* : If the model container output of a batch request is ``'{"labels":["cat","dog","fish"],"probability":[0.6,0.3,0.1]}'`` , then set ``LabelAttribute`` to ``'labels'`` to extract the list of label headers ``["cat","dog","fish"]``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-labelattribute
            '''
            result = self._values.get("label_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def label_headers(self) -> typing.Optional[typing.List[builtins.str]]:
            '''For multiclass classification problems, the label headers are the names of the classes.

            Otherwise, the label header is the name of the predicted label. These are used to help readability for the output of the ``InvokeEndpoint`` API. See the `response <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-invoke-endpoint.html#clarify-online-explainability-response>`_ section under *Invoke the endpoint* in the Developer Guide for more information. If there are no label headers in the model container output, provide them manually using this parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-labelheaders
            '''
            result = self._values.get("label_headers")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def label_index(self) -> typing.Optional[jsii.Number]:
            '''A zero-based index used to extract a label header or list of label headers from model container output in CSV format.

            *Example for a multiclass model:* If the model container output consists of label headers followed by probabilities: ``'"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"'`` , set ``LabelIndex`` to ``0`` to select the label headers ``['cat','dog','fish']`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-labelindex
            '''
            result = self._values.get("label_index")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def max_payload_in_mb(self) -> typing.Optional[jsii.Number]:
            '''The maximum payload size (MB) allowed of a request from the explainer to the model container.

            Defaults to ``6`` MB.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-maxpayloadinmb
            '''
            result = self._values.get("max_payload_in_mb")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def max_record_count(self) -> typing.Optional[jsii.Number]:
            '''The maximum number of records in a request that the model container can process when querying the model container for the predictions of a `synthetic dataset <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html#clarify-online-explainability-create-endpoint-synthetic>`_ . A record is a unit of input data that inference can be made on, for example, a single line in CSV data. If ``MaxRecordCount`` is ``1`` , the model container expects one record per request. A value of 2 or greater means that the model expects batch requests, which can reduce overhead and speed up the inferencing process. If this parameter is not provided, the explainer will tune the record count per request according to the model container's capacity at runtime.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-maxrecordcount
            '''
            result = self._values.get("max_record_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''A JMESPath expression used to extract the probability (or score) from the model container output if the model container is in JSON Lines format.

            *Example* : If the model container output of a single request is ``'{"predicted_label":1,"probability":0.6}'`` , then set ``ProbabilityAttribute`` to ``'probability'`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_index(self) -> typing.Optional[jsii.Number]:
            '''A zero-based index used to extract a probability value (score) or list from model container output in CSV format.

            If this value is not provided, the entire model container output will be treated as a probability value (score) or list.

            *Example for a single class model:* If the model container output consists of a string-formatted prediction label followed by its probability: ``'1,0.6'`` , set ``ProbabilityIndex`` to ``1`` to select the probability value ``0.6`` .

            *Example for a multiclass model:* If the model container output consists of a string-formatted prediction label followed by its probability: ``'"[\\'cat\\',\\'dog\\',\\'fish\\']","[0.1,0.6,0.3]"'`` , set ``ProbabilityIndex`` to ``1`` to select the probability values ``[0.1,0.6,0.3]`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyinferenceconfig.html#cfn-sagemaker-endpointconfig-clarifyinferenceconfig-probabilityindex
            '''
            result = self._values.get("probability_index")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClarifyInferenceConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "mime_type": "mimeType",
            "shap_baseline": "shapBaseline",
            "shap_baseline_uri": "shapBaselineUri",
        },
    )
    class ClarifyShapBaselineConfigProperty:
        def __init__(
            self,
            *,
            mime_type: typing.Optional[builtins.str] = None,
            shap_baseline: typing.Optional[builtins.str] = None,
            shap_baseline_uri: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration for the `SHAP baseline <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-feature-attribute-shap-baselines.html>`_ (also called the background or reference dataset) of the Kernal SHAP algorithm.

            .. epigraph::

               - The number of records in the baseline data determines the size of the synthetic dataset, which has an impact on latency of explainability requests. For more information, see the *Synthetic data* of `Configure and create an endpoint <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html>`_ .
               - ``ShapBaseline`` and ``ShapBaselineUri`` are mutually exclusive parameters. One or the either is required to configure a SHAP baseline.

            :param mime_type: The MIME type of the baseline data. Choose from ``'text/csv'`` or ``'application/jsonlines'`` . Defaults to ``'text/csv'`` .
            :param shap_baseline: The inline SHAP baseline data in string format. ``ShapBaseline`` can have one or multiple records to be used as the baseline dataset. The format of the SHAP baseline file should be the same format as the training dataset. For example, if the training dataset is in CSV format and each record contains four features, and all features are numerical, then the format of the baseline data should also share these characteristics. For natural language processing (NLP) of text columns, the baseline value should be the value used to replace the unit of text specified by the ``Granularity`` of the ``TextConfig`` parameter. The size limit for ``ShapBasline`` is 4 KB. Use the ``ShapBaselineUri`` parameter if you want to provide more than 4 KB of baseline data.
            :param shap_baseline_uri: The uniform resource identifier (URI) of the S3 bucket where the SHAP baseline file is stored. The format of the SHAP baseline file should be the same format as the format of the training dataset. For example, if the training dataset is in CSV format, and each record in the training dataset has four features, and all features are numerical, then the baseline file should also have this same format. Each record should contain only the features. If you are using a virtual private cloud (VPC), the ``ShapBaselineUri`` should be accessible to the VPC. For more information about setting up endpoints with Amazon Virtual Private Cloud, see `Give SageMaker access to Resources in your Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapbaselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                clarify_shap_baseline_config_property = sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                    mime_type="mimeType",
                    shap_baseline="shapBaseline",
                    shap_baseline_uri="shapBaselineUri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__cdc07b2ae81ca067b669ad8eee10c233a84cec6816b6e1eaeb4a3c9022fb49f4)
                check_type(argname="argument mime_type", value=mime_type, expected_type=type_hints["mime_type"])
                check_type(argname="argument shap_baseline", value=shap_baseline, expected_type=type_hints["shap_baseline"])
                check_type(argname="argument shap_baseline_uri", value=shap_baseline_uri, expected_type=type_hints["shap_baseline_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if mime_type is not None:
                self._values["mime_type"] = mime_type
            if shap_baseline is not None:
                self._values["shap_baseline"] = shap_baseline
            if shap_baseline_uri is not None:
                self._values["shap_baseline_uri"] = shap_baseline_uri

        @builtins.property
        def mime_type(self) -> typing.Optional[builtins.str]:
            '''The MIME type of the baseline data.

            Choose from ``'text/csv'`` or ``'application/jsonlines'`` . Defaults to ``'text/csv'`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapbaselineconfig.html#cfn-sagemaker-endpointconfig-clarifyshapbaselineconfig-mimetype
            '''
            result = self._values.get("mime_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def shap_baseline(self) -> typing.Optional[builtins.str]:
            '''The inline SHAP baseline data in string format.

            ``ShapBaseline`` can have one or multiple records to be used as the baseline dataset. The format of the SHAP baseline file should be the same format as the training dataset. For example, if the training dataset is in CSV format and each record contains four features, and all features are numerical, then the format of the baseline data should also share these characteristics. For natural language processing (NLP) of text columns, the baseline value should be the value used to replace the unit of text specified by the ``Granularity`` of the ``TextConfig`` parameter. The size limit for ``ShapBasline`` is 4 KB. Use the ``ShapBaselineUri`` parameter if you want to provide more than 4 KB of baseline data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapbaselineconfig.html#cfn-sagemaker-endpointconfig-clarifyshapbaselineconfig-shapbaseline
            '''
            result = self._values.get("shap_baseline")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def shap_baseline_uri(self) -> typing.Optional[builtins.str]:
            '''The uniform resource identifier (URI) of the S3 bucket where the SHAP baseline file is stored.

            The format of the SHAP baseline file should be the same format as the format of the training dataset. For example, if the training dataset is in CSV format, and each record in the training dataset has four features, and all features are numerical, then the baseline file should also have this same format. Each record should contain only the features. If you are using a virtual private cloud (VPC), the ``ShapBaselineUri`` should be accessible to the VPC. For more information about setting up endpoints with Amazon Virtual Private Cloud, see `Give SageMaker access to Resources in your Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapbaselineconfig.html#cfn-sagemaker-endpointconfig-clarifyshapbaselineconfig-shapbaselineuri
            '''
            result = self._values.get("shap_baseline_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClarifyShapBaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "shap_baseline_config": "shapBaselineConfig",
            "number_of_samples": "numberOfSamples",
            "seed": "seed",
            "text_config": "textConfig",
            "use_logit": "useLogit",
        },
    )
    class ClarifyShapConfigProperty:
        def __init__(
            self,
            *,
            shap_baseline_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ClarifyShapBaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            number_of_samples: typing.Optional[jsii.Number] = None,
            seed: typing.Optional[jsii.Number] = None,
            text_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ClarifyTextConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            use_logit: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The configuration for SHAP analysis using SageMaker Clarify Explainer.

            :param shap_baseline_config: The configuration for the SHAP baseline of the Kernal SHAP algorithm.
            :param number_of_samples: The number of samples to be used for analysis by the Kernal SHAP algorithm. .. epigraph:: The number of samples determines the size of the synthetic dataset, which has an impact on latency of explainability requests. For more information, see the *Synthetic data* of `Configure and create an endpoint <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html>`_ .
            :param seed: The starting value used to initialize the random number generator in the explainer. Provide a value for this parameter to obtain a deterministic SHAP result.
            :param text_config: A parameter that indicates if text features are treated as text and explanations are provided for individual units of text. Required for natural language processing (NLP) explainability only.
            :param use_logit: A Boolean toggle to indicate if you want to use the logit function (true) or log-odds units (false) for model predictions. Defaults to false.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                clarify_shap_config_property = sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty(
                    shap_baseline_config=sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                        mime_type="mimeType",
                        shap_baseline="shapBaseline",
                        shap_baseline_uri="shapBaselineUri"
                    ),
                
                    # the properties below are optional
                    number_of_samples=123,
                    seed=123,
                    text_config=sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                        granularity="granularity",
                        language="language"
                    ),
                    use_logit=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d13ff204bac34e66abda71c300286f5367bc3e95b80ce1f5be250f0fd508e677)
                check_type(argname="argument shap_baseline_config", value=shap_baseline_config, expected_type=type_hints["shap_baseline_config"])
                check_type(argname="argument number_of_samples", value=number_of_samples, expected_type=type_hints["number_of_samples"])
                check_type(argname="argument seed", value=seed, expected_type=type_hints["seed"])
                check_type(argname="argument text_config", value=text_config, expected_type=type_hints["text_config"])
                check_type(argname="argument use_logit", value=use_logit, expected_type=type_hints["use_logit"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "shap_baseline_config": shap_baseline_config,
            }
            if number_of_samples is not None:
                self._values["number_of_samples"] = number_of_samples
            if seed is not None:
                self._values["seed"] = seed
            if text_config is not None:
                self._values["text_config"] = text_config
            if use_logit is not None:
                self._values["use_logit"] = use_logit

        @builtins.property
        def shap_baseline_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyShapBaselineConfigProperty"]:
            '''The configuration for the SHAP baseline of the Kernal SHAP algorithm.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html#cfn-sagemaker-endpointconfig-clarifyshapconfig-shapbaselineconfig
            '''
            result = self._values.get("shap_baseline_config")
            assert result is not None, "Required property 'shap_baseline_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyShapBaselineConfigProperty"], result)

        @builtins.property
        def number_of_samples(self) -> typing.Optional[jsii.Number]:
            '''The number of samples to be used for analysis by the Kernal SHAP algorithm.

            .. epigraph::

               The number of samples determines the size of the synthetic dataset, which has an impact on latency of explainability requests. For more information, see the *Synthetic data* of `Configure and create an endpoint <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-create-endpoint.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html#cfn-sagemaker-endpointconfig-clarifyshapconfig-numberofsamples
            '''
            result = self._values.get("number_of_samples")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def seed(self) -> typing.Optional[jsii.Number]:
            '''The starting value used to initialize the random number generator in the explainer.

            Provide a value for this parameter to obtain a deterministic SHAP result.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html#cfn-sagemaker-endpointconfig-clarifyshapconfig-seed
            '''
            result = self._values.get("seed")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def text_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyTextConfigProperty"]]:
            '''A parameter that indicates if text features are treated as text and explanations are provided for individual units of text.

            Required for natural language processing (NLP) explainability only.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html#cfn-sagemaker-endpointconfig-clarifyshapconfig-textconfig
            '''
            result = self._values.get("text_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyTextConfigProperty"]], result)

        @builtins.property
        def use_logit(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A Boolean toggle to indicate if you want to use the logit function (true) or log-odds units (false) for model predictions.

            Defaults to false.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifyshapconfig.html#cfn-sagemaker-endpointconfig-clarifyshapconfig-uselogit
            '''
            result = self._values.get("use_logit")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClarifyShapConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"granularity": "granularity", "language": "language"},
    )
    class ClarifyTextConfigProperty:
        def __init__(
            self,
            *,
            granularity: builtins.str,
            language: builtins.str,
        ) -> None:
            '''A parameter used to configure the SageMaker Clarify explainer to treat text features as text so that explanations are provided for individual units of text.

            Required only for natural language processing (NLP) explainability.

            :param granularity: The unit of granularity for the analysis of text features. For example, if the unit is ``'token'`` , then each token (like a word in English) of the text is treated as a feature. SHAP values are computed for each unit/feature.
            :param language: Specifies the language of the text features in [ISO 639-1](https://docs.aws.amazon.com/ https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) or `ISO 639-3 <https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/ISO_639-3>`_ code of a supported language. .. epigraph:: For a mix of multiple languages, use code ``'xx'`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifytextconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                clarify_text_config_property = sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                    granularity="granularity",
                    language="language"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bb02c2885c5605c12d9e5b35849a33c20ae5db4791746707dc4165477061ed2d)
                check_type(argname="argument granularity", value=granularity, expected_type=type_hints["granularity"])
                check_type(argname="argument language", value=language, expected_type=type_hints["language"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "granularity": granularity,
                "language": language,
            }

        @builtins.property
        def granularity(self) -> builtins.str:
            '''The unit of granularity for the analysis of text features.

            For example, if the unit is ``'token'`` , then each token (like a word in English) of the text is treated as a feature. SHAP values are computed for each unit/feature.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifytextconfig.html#cfn-sagemaker-endpointconfig-clarifytextconfig-granularity
            '''
            result = self._values.get("granularity")
            assert result is not None, "Required property 'granularity' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def language(self) -> builtins.str:
            '''Specifies the language of the text features in [ISO 639-1](https://docs.aws.amazon.com/ https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) or `ISO 639-3 <https://docs.aws.amazon.com/https://en.wikipedia.org/wiki/ISO_639-3>`_ code of a supported language.

            .. epigraph::

               For a mix of multiple languages, use code ``'xx'`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-clarifytextconfig.html#cfn-sagemaker-endpointconfig-clarifytextconfig-language
            '''
            result = self._values.get("language")
            assert result is not None, "Required property 'language' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClarifyTextConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.DataCaptureConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "capture_options": "captureOptions",
            "destination_s3_uri": "destinationS3Uri",
            "initial_sampling_percentage": "initialSamplingPercentage",
            "capture_content_type_header": "captureContentTypeHeader",
            "enable_capture": "enableCapture",
            "kms_key_id": "kmsKeyId",
        },
    )
    class DataCaptureConfigProperty:
        def __init__(
            self,
            *,
            capture_options: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.CaptureOptionProperty", typing.Dict[builtins.str, typing.Any]]]]],
            destination_s3_uri: builtins.str,
            initial_sampling_percentage: jsii.Number,
            capture_content_type_header: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.CaptureContentTypeHeaderProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            enable_capture: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the configuration of your endpoint for model monitor data capture.

            :param capture_options: Specifies whether the endpoint captures input data to your model, output data from your model, or both.
            :param destination_s3_uri: The S3 bucket where model monitor stores captured data.
            :param initial_sampling_percentage: The percentage of data to capture.
            :param capture_content_type_header: A list of the JSON and CSV content type that the endpoint captures.
            :param enable_capture: Set to ``True`` to enable data capture.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the captured data at rest using Amazon S3 server-side encryption. The KmsKeyId can be any of the following formats: Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab Key ARN: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab Alias name: alias/ExampleAlias Alias name ARN: arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account. For more information, see KMS-Managed Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) in the Amazon Simple Storage Service Developer Guide. The KMS key policy must grant permission to the IAM role that you specify in your CreateModel (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) request. For more information, see Using Key Policies in AWS KMS (http://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) in the AWS Key Management Service Developer Guide.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_capture_config_property = sagemaker.CfnEndpointConfig.DataCaptureConfigProperty(
                    capture_options=[sagemaker.CfnEndpointConfig.CaptureOptionProperty(
                        capture_mode="captureMode"
                    )],
                    destination_s3_uri="destinationS3Uri",
                    initial_sampling_percentage=123,
                
                    # the properties below are optional
                    capture_content_type_header=sagemaker.CfnEndpointConfig.CaptureContentTypeHeaderProperty(
                        csv_content_types=["csvContentTypes"],
                        json_content_types=["jsonContentTypes"]
                    ),
                    enable_capture=False,
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5f66371a559ba65ff125b2321cd8b6a93386ca97a2bbac0b89139668121914bb)
                check_type(argname="argument capture_options", value=capture_options, expected_type=type_hints["capture_options"])
                check_type(argname="argument destination_s3_uri", value=destination_s3_uri, expected_type=type_hints["destination_s3_uri"])
                check_type(argname="argument initial_sampling_percentage", value=initial_sampling_percentage, expected_type=type_hints["initial_sampling_percentage"])
                check_type(argname="argument capture_content_type_header", value=capture_content_type_header, expected_type=type_hints["capture_content_type_header"])
                check_type(argname="argument enable_capture", value=enable_capture, expected_type=type_hints["enable_capture"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "capture_options": capture_options,
                "destination_s3_uri": destination_s3_uri,
                "initial_sampling_percentage": initial_sampling_percentage,
            }
            if capture_content_type_header is not None:
                self._values["capture_content_type_header"] = capture_content_type_header
            if enable_capture is not None:
                self._values["enable_capture"] = enable_capture
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def capture_options(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.CaptureOptionProperty"]]]:
            '''Specifies whether the endpoint captures input data to your model, output data from your model, or both.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-captureoptions
            '''
            result = self._values.get("capture_options")
            assert result is not None, "Required property 'capture_options' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.CaptureOptionProperty"]]], result)

        @builtins.property
        def destination_s3_uri(self) -> builtins.str:
            '''The S3 bucket where model monitor stores captured data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-destinations3uri
            '''
            result = self._values.get("destination_s3_uri")
            assert result is not None, "Required property 'destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def initial_sampling_percentage(self) -> jsii.Number:
            '''The percentage of data to capture.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-initialsamplingpercentage
            '''
            result = self._values.get("initial_sampling_percentage")
            assert result is not None, "Required property 'initial_sampling_percentage' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def capture_content_type_header(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.CaptureContentTypeHeaderProperty"]]:
            '''A list of the JSON and CSV content type that the endpoint captures.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-capturecontenttypeheader
            '''
            result = self._values.get("capture_content_type_header")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.CaptureContentTypeHeaderProperty"]], result)

        @builtins.property
        def enable_capture(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Set to ``True`` to enable data capture.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-enablecapture
            '''
            result = self._values.get("enable_capture")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the captured data at rest using Amazon S3 server-side encryption.

            The KmsKeyId can be any of the following formats: Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab Key ARN: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab Alias name: alias/ExampleAlias Alias name ARN: arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account. For more information, see KMS-Managed Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) in the Amazon Simple Storage Service Developer Guide. The KMS key policy must grant permission to the IAM role that you specify in your CreateModel (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) request. For more information, see Using Key Policies in AWS KMS (http://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) in the AWS Key Management Service Developer Guide.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-datacaptureconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataCaptureConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ExplainerConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"clarify_explainer_config": "clarifyExplainerConfig"},
    )
    class ExplainerConfigProperty:
        def __init__(
            self,
            *,
            clarify_explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ClarifyExplainerConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''A parameter to activate explainers.

            :param clarify_explainer_config: A member of ``ExplainerConfig`` that contains configuration parameters for the SageMaker Clarify explainer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-explainerconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                explainer_config_property = sagemaker.CfnEndpointConfig.ExplainerConfigProperty(
                    clarify_explainer_config=sagemaker.CfnEndpointConfig.ClarifyExplainerConfigProperty(
                        shap_config=sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty(
                            shap_baseline_config=sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                                mime_type="mimeType",
                                shap_baseline="shapBaseline",
                                shap_baseline_uri="shapBaselineUri"
                            ),
                
                            # the properties below are optional
                            number_of_samples=123,
                            seed=123,
                            text_config=sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                                granularity="granularity",
                                language="language"
                            ),
                            use_logit=False
                        ),
                
                        # the properties below are optional
                        enable_explanations="enableExplanations",
                        inference_config=sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty(
                            content_template="contentTemplate",
                            feature_headers=["featureHeaders"],
                            features_attribute="featuresAttribute",
                            feature_types=["featureTypes"],
                            label_attribute="labelAttribute",
                            label_headers=["labelHeaders"],
                            label_index=123,
                            max_payload_in_mb=123,
                            max_record_count=123,
                            probability_attribute="probabilityAttribute",
                            probability_index=123
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bca400d67b7e0b7493acf5a52ff4165f4d522d876c087e0e3b8c804a10c9e4e5)
                check_type(argname="argument clarify_explainer_config", value=clarify_explainer_config, expected_type=type_hints["clarify_explainer_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if clarify_explainer_config is not None:
                self._values["clarify_explainer_config"] = clarify_explainer_config

        @builtins.property
        def clarify_explainer_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyExplainerConfigProperty"]]:
            '''A member of ``ExplainerConfig`` that contains configuration parameters for the SageMaker Clarify explainer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-explainerconfig.html#cfn-sagemaker-endpointconfig-explainerconfig-clarifyexplainerconfig
            '''
            result = self._values.get("clarify_explainer_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ClarifyExplainerConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ExplainerConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty",
        jsii_struct_bases=[],
        name_mapping={
            "max_instance_count": "maxInstanceCount",
            "min_instance_count": "minInstanceCount",
            "status": "status",
        },
    )
    class ManagedInstanceScalingProperty:
        def __init__(
            self,
            *,
            max_instance_count: typing.Optional[jsii.Number] = None,
            min_instance_count: typing.Optional[jsii.Number] = None,
            status: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param max_instance_count: 
            :param min_instance_count: 
            :param status: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-managedinstancescaling.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                managed_instance_scaling_property = sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                    max_instance_count=123,
                    min_instance_count=123,
                    status="status"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__46cb311c857cc447bc44e0db8728dd4118d07da4d442a846a68ff8c75a4c5e62)
                check_type(argname="argument max_instance_count", value=max_instance_count, expected_type=type_hints["max_instance_count"])
                check_type(argname="argument min_instance_count", value=min_instance_count, expected_type=type_hints["min_instance_count"])
                check_type(argname="argument status", value=status, expected_type=type_hints["status"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if max_instance_count is not None:
                self._values["max_instance_count"] = max_instance_count
            if min_instance_count is not None:
                self._values["min_instance_count"] = min_instance_count
            if status is not None:
                self._values["status"] = status

        @builtins.property
        def max_instance_count(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-managedinstancescaling.html#cfn-sagemaker-endpointconfig-managedinstancescaling-maxinstancecount
            '''
            result = self._values.get("max_instance_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def min_instance_count(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-managedinstancescaling.html#cfn-sagemaker-endpointconfig-managedinstancescaling-mininstancecount
            '''
            result = self._values.get("min_instance_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def status(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-managedinstancescaling.html#cfn-sagemaker-endpointconfig-managedinstancescaling-status
            '''
            result = self._values.get("status")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ManagedInstanceScalingProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ProductionVariantProperty",
        jsii_struct_bases=[],
        name_mapping={
            "variant_name": "variantName",
            "accelerator_type": "acceleratorType",
            "container_startup_health_check_timeout_in_seconds": "containerStartupHealthCheckTimeoutInSeconds",
            "enable_ssm_access": "enableSsmAccess",
            "initial_instance_count": "initialInstanceCount",
            "initial_variant_weight": "initialVariantWeight",
            "instance_type": "instanceType",
            "managed_instance_scaling": "managedInstanceScaling",
            "model_data_download_timeout_in_seconds": "modelDataDownloadTimeoutInSeconds",
            "model_name": "modelName",
            "routing_config": "routingConfig",
            "serverless_config": "serverlessConfig",
            "volume_size_in_gb": "volumeSizeInGb",
        },
    )
    class ProductionVariantProperty:
        def __init__(
            self,
            *,
            variant_name: builtins.str,
            accelerator_type: typing.Optional[builtins.str] = None,
            container_startup_health_check_timeout_in_seconds: typing.Optional[jsii.Number] = None,
            enable_ssm_access: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            initial_instance_count: typing.Optional[jsii.Number] = None,
            initial_variant_weight: typing.Optional[jsii.Number] = None,
            instance_type: typing.Optional[builtins.str] = None,
            managed_instance_scaling: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ManagedInstanceScalingProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_data_download_timeout_in_seconds: typing.Optional[jsii.Number] = None,
            model_name: typing.Optional[builtins.str] = None,
            routing_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.RoutingConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            serverless_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnEndpointConfig.ServerlessConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            volume_size_in_gb: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Specifies a model that you want to host and the resources to deploy for hosting it.

            If you are deploying multiple models, tell Amazon SageMaker how to distribute traffic among the models by specifying the ``InitialVariantWeight`` objects.

            :param variant_name: The name of the production variant.
            :param accelerator_type: The size of the Elastic Inference (EI) instance to use for the production variant. EI instances provide on-demand GPU computing for inference. For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ . For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ .
            :param container_startup_health_check_timeout_in_seconds: The timeout value, in seconds, for your inference container to pass health check by SageMaker Hosting. For more information about health check, see `How Your Container Should Respond to Health Check (Ping) Requests <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-algo-ping-requests>`_ .
            :param enable_ssm_access: You can use this parameter to turn on native AWS Systems Manager (SSM) access for a production variant behind an endpoint. By default, SSM access is disabled for all production variants behind an endpoint. You can turn on or turn off SSM access for a production variant behind an existing endpoint by creating a new endpoint configuration and calling ``UpdateEndpoint`` .
            :param initial_instance_count: Number of instances to launch initially.
            :param initial_variant_weight: Determines initial traffic distribution among all of the models that you specify in the endpoint configuration. The traffic to a production variant is determined by the ratio of the ``VariantWeight`` to the sum of all ``VariantWeight`` values across all ProductionVariants. If unspecified, it defaults to 1.0.
            :param instance_type: The ML compute instance type.
            :param managed_instance_scaling: 
            :param model_data_download_timeout_in_seconds: The timeout value, in seconds, to download and extract the model that you want to host from Amazon S3 to the individual inference instance associated with this production variant.
            :param model_name: The name of the model that you want to host. This is the name that you specified when creating the model.
            :param routing_config: 
            :param serverless_config: The serverless configuration for an endpoint. Specifies a serverless endpoint configuration instead of an instance-based endpoint configuration.
            :param volume_size_in_gb: The size, in GB, of the ML storage volume attached to individual inference instance associated with the production variant. Currently only Amazon EBS gp2 storage volumes are supported.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                production_variant_property = sagemaker.CfnEndpointConfig.ProductionVariantProperty(
                    variant_name="variantName",
                
                    # the properties below are optional
                    accelerator_type="acceleratorType",
                    container_startup_health_check_timeout_in_seconds=123,
                    enable_ssm_access=False,
                    initial_instance_count=123,
                    initial_variant_weight=123,
                    instance_type="instanceType",
                    managed_instance_scaling=sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                        max_instance_count=123,
                        min_instance_count=123,
                        status="status"
                    ),
                    model_data_download_timeout_in_seconds=123,
                    model_name="modelName",
                    routing_config=sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                        routing_strategy="routingStrategy"
                    ),
                    serverless_config=sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                        max_concurrency=123,
                        memory_size_in_mb=123,
                
                        # the properties below are optional
                        provisioned_concurrency=123
                    ),
                    volume_size_in_gb=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__685c22aefe4bd12e237f4e6f239c6de7809e228c81d2604127d6824fa36dee01)
                check_type(argname="argument variant_name", value=variant_name, expected_type=type_hints["variant_name"])
                check_type(argname="argument accelerator_type", value=accelerator_type, expected_type=type_hints["accelerator_type"])
                check_type(argname="argument container_startup_health_check_timeout_in_seconds", value=container_startup_health_check_timeout_in_seconds, expected_type=type_hints["container_startup_health_check_timeout_in_seconds"])
                check_type(argname="argument enable_ssm_access", value=enable_ssm_access, expected_type=type_hints["enable_ssm_access"])
                check_type(argname="argument initial_instance_count", value=initial_instance_count, expected_type=type_hints["initial_instance_count"])
                check_type(argname="argument initial_variant_weight", value=initial_variant_weight, expected_type=type_hints["initial_variant_weight"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument managed_instance_scaling", value=managed_instance_scaling, expected_type=type_hints["managed_instance_scaling"])
                check_type(argname="argument model_data_download_timeout_in_seconds", value=model_data_download_timeout_in_seconds, expected_type=type_hints["model_data_download_timeout_in_seconds"])
                check_type(argname="argument model_name", value=model_name, expected_type=type_hints["model_name"])
                check_type(argname="argument routing_config", value=routing_config, expected_type=type_hints["routing_config"])
                check_type(argname="argument serverless_config", value=serverless_config, expected_type=type_hints["serverless_config"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "variant_name": variant_name,
            }
            if accelerator_type is not None:
                self._values["accelerator_type"] = accelerator_type
            if container_startup_health_check_timeout_in_seconds is not None:
                self._values["container_startup_health_check_timeout_in_seconds"] = container_startup_health_check_timeout_in_seconds
            if enable_ssm_access is not None:
                self._values["enable_ssm_access"] = enable_ssm_access
            if initial_instance_count is not None:
                self._values["initial_instance_count"] = initial_instance_count
            if initial_variant_weight is not None:
                self._values["initial_variant_weight"] = initial_variant_weight
            if instance_type is not None:
                self._values["instance_type"] = instance_type
            if managed_instance_scaling is not None:
                self._values["managed_instance_scaling"] = managed_instance_scaling
            if model_data_download_timeout_in_seconds is not None:
                self._values["model_data_download_timeout_in_seconds"] = model_data_download_timeout_in_seconds
            if model_name is not None:
                self._values["model_name"] = model_name
            if routing_config is not None:
                self._values["routing_config"] = routing_config
            if serverless_config is not None:
                self._values["serverless_config"] = serverless_config
            if volume_size_in_gb is not None:
                self._values["volume_size_in_gb"] = volume_size_in_gb

        @builtins.property
        def variant_name(self) -> builtins.str:
            '''The name of the production variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-variantname
            '''
            result = self._values.get("variant_name")
            assert result is not None, "Required property 'variant_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def accelerator_type(self) -> typing.Optional[builtins.str]:
            '''The size of the Elastic Inference (EI) instance to use for the production variant.

            EI instances provide on-demand GPU computing for inference. For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ . For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-acceleratortype
            '''
            result = self._values.get("accelerator_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def container_startup_health_check_timeout_in_seconds(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The timeout value, in seconds, for your inference container to pass health check by SageMaker Hosting.

            For more information about health check, see `How Your Container Should Respond to Health Check (Ping) Requests <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-algo-ping-requests>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-containerstartuphealthchecktimeoutinseconds
            '''
            result = self._values.get("container_startup_health_check_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def enable_ssm_access(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''You can use this parameter to turn on native AWS Systems Manager (SSM) access for a production variant behind an endpoint.

            By default, SSM access is disabled for all production variants behind an endpoint. You can turn on or turn off SSM access for a production variant behind an existing endpoint by creating a new endpoint configuration and calling ``UpdateEndpoint`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-enablessmaccess
            '''
            result = self._values.get("enable_ssm_access")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def initial_instance_count(self) -> typing.Optional[jsii.Number]:
            '''Number of instances to launch initially.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-initialinstancecount
            '''
            result = self._values.get("initial_instance_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def initial_variant_weight(self) -> typing.Optional[jsii.Number]:
            '''Determines initial traffic distribution among all of the models that you specify in the endpoint configuration.

            The traffic to a production variant is determined by the ratio of the ``VariantWeight`` to the sum of all ``VariantWeight`` values across all ProductionVariants. If unspecified, it defaults to 1.0.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-initialvariantweight
            '''
            result = self._values.get("initial_variant_weight")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def instance_type(self) -> typing.Optional[builtins.str]:
            '''The ML compute instance type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-instancetype
            '''
            result = self._values.get("instance_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def managed_instance_scaling(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ManagedInstanceScalingProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-managedinstancescaling
            '''
            result = self._values.get("managed_instance_scaling")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ManagedInstanceScalingProperty"]], result)

        @builtins.property
        def model_data_download_timeout_in_seconds(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The timeout value, in seconds, to download and extract the model that you want to host from Amazon S3 to the individual inference instance associated with this production variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-modeldatadownloadtimeoutinseconds
            '''
            result = self._values.get("model_data_download_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def model_name(self) -> typing.Optional[builtins.str]:
            '''The name of the model that you want to host.

            This is the name that you specified when creating the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-modelname
            '''
            result = self._values.get("model_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def routing_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.RoutingConfigProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-routingconfig
            '''
            result = self._values.get("routing_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.RoutingConfigProperty"]], result)

        @builtins.property
        def serverless_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ServerlessConfigProperty"]]:
            '''The serverless configuration for an endpoint.

            Specifies a serverless endpoint configuration instead of an instance-based endpoint configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-serverlessconfig
            '''
            result = self._values.get("serverless_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnEndpointConfig.ServerlessConfigProperty"]], result)

        @builtins.property
        def volume_size_in_gb(self) -> typing.Optional[jsii.Number]:
            '''The size, in GB, of the ML storage volume attached to individual inference instance associated with the production variant.

            Currently only Amazon EBS gp2 storage volumes are supported.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-productionvariant.html#cfn-sagemaker-endpointconfig-productionvariant-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ProductionVariantProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.RoutingConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"routing_strategy": "routingStrategy"},
    )
    class RoutingConfigProperty:
        def __init__(
            self,
            *,
            routing_strategy: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param routing_strategy: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-routingconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                routing_config_property = sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                    routing_strategy="routingStrategy"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__41a70a45b46693d52cb9cc5fc85772297ca38491c9ce53c7e06d6304a7c4f1e0)
                check_type(argname="argument routing_strategy", value=routing_strategy, expected_type=type_hints["routing_strategy"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if routing_strategy is not None:
                self._values["routing_strategy"] = routing_strategy

        @builtins.property
        def routing_strategy(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-routingconfig.html#cfn-sagemaker-endpointconfig-routingconfig-routingstrategy
            '''
            result = self._values.get("routing_strategy")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RoutingConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.ServerlessConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "max_concurrency": "maxConcurrency",
            "memory_size_in_mb": "memorySizeInMb",
            "provisioned_concurrency": "provisionedConcurrency",
        },
    )
    class ServerlessConfigProperty:
        def __init__(
            self,
            *,
            max_concurrency: jsii.Number,
            memory_size_in_mb: jsii.Number,
            provisioned_concurrency: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Specifies the serverless configuration for an endpoint variant.

            :param max_concurrency: The maximum number of concurrent invocations your serverless endpoint can process.
            :param memory_size_in_mb: The memory size of your serverless endpoint. Valid values are in 1 GB increments: 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB, or 6144 MB.
            :param provisioned_concurrency: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-serverlessconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                serverless_config_property = sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                    max_concurrency=123,
                    memory_size_in_mb=123,
                
                    # the properties below are optional
                    provisioned_concurrency=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__106fe363b377b1cd93971d0e7e50c104cd6274d6f8c54c71faa17da1c784753b)
                check_type(argname="argument max_concurrency", value=max_concurrency, expected_type=type_hints["max_concurrency"])
                check_type(argname="argument memory_size_in_mb", value=memory_size_in_mb, expected_type=type_hints["memory_size_in_mb"])
                check_type(argname="argument provisioned_concurrency", value=provisioned_concurrency, expected_type=type_hints["provisioned_concurrency"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_concurrency": max_concurrency,
                "memory_size_in_mb": memory_size_in_mb,
            }
            if provisioned_concurrency is not None:
                self._values["provisioned_concurrency"] = provisioned_concurrency

        @builtins.property
        def max_concurrency(self) -> jsii.Number:
            '''The maximum number of concurrent invocations your serverless endpoint can process.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-serverlessconfig.html#cfn-sagemaker-endpointconfig-serverlessconfig-maxconcurrency
            '''
            result = self._values.get("max_concurrency")
            assert result is not None, "Required property 'max_concurrency' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def memory_size_in_mb(self) -> jsii.Number:
            '''The memory size of your serverless endpoint.

            Valid values are in 1 GB increments: 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB, or 6144 MB.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-serverlessconfig.html#cfn-sagemaker-endpointconfig-serverlessconfig-memorysizeinmb
            '''
            result = self._values.get("memory_size_in_mb")
            assert result is not None, "Required property 'memory_size_in_mb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def provisioned_concurrency(self) -> typing.Optional[jsii.Number]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-serverlessconfig.html#cfn-sagemaker-endpointconfig-serverlessconfig-provisionedconcurrency
            '''
            result = self._values.get("provisioned_concurrency")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ServerlessConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfig.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''
            :param security_group_ids: 
            :param subnets: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnEndpointConfig.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1c6a09f61bc385349b0211430cceb3d842e9c43b8196ce0da566274f27b2a59e)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-vpcconfig.html#cfn-sagemaker-endpointconfig-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpointconfig-vpcconfig.html#cfn-sagemaker-endpointconfig-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointConfigProps",
    jsii_struct_bases=[],
    name_mapping={
        "production_variants": "productionVariants",
        "async_inference_config": "asyncInferenceConfig",
        "data_capture_config": "dataCaptureConfig",
        "enable_network_isolation": "enableNetworkIsolation",
        "endpoint_config_name": "endpointConfigName",
        "execution_role_arn": "executionRoleArn",
        "explainer_config": "explainerConfig",
        "kms_key_id": "kmsKeyId",
        "shadow_production_variants": "shadowProductionVariants",
        "tags": "tags",
        "vpc_config": "vpcConfig",
    },
)
class CfnEndpointConfigProps:
    def __init__(
        self,
        *,
        production_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]],
        async_inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        data_capture_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.DataCaptureConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        endpoint_config_name: typing.Optional[builtins.str] = None,
        execution_role_arn: typing.Optional[builtins.str] = None,
        explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ExplainerConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        shadow_production_variants: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnEndpointConfig``.

        :param production_variants: A list of ``ProductionVariant`` objects, one for each model that you want to host at this endpoint.
        :param async_inference_config: Specifies configuration for how an endpoint performs asynchronous inference.
        :param data_capture_config: Specifies how to capture endpoint data for model monitor. The data capture configuration applies to all production variants hosted at the endpoint.
        :param enable_network_isolation: 
        :param endpoint_config_name: The name of the endpoint configuration.
        :param execution_role_arn: 
        :param explainer_config: A parameter to activate explainers.
        :param kms_key_id: The Amazon Resource Name (ARN) of an AWS Key Management Service key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance that hosts the endpoint. - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` - Alias name: ``alias/ExampleAlias`` - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias`` The KMS key policy must grant permission to the IAM role that you specify in your ``CreateEndpoint`` , ``UpdateEndpoint`` requests. For more information, refer to the AWS Key Management Service section `Using Key Policies in AWS KMS <https://docs.aws.amazon.com//kms/latest/developerguide/key-policies.html>`_ .. epigraph:: Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a ``KmsKeyId`` when using an instance type with local storage. If any of the models that you specify in the ``ProductionVariants`` parameter use nitro-based instances with local storage, do not specify a value for the ``KmsKeyId`` parameter. If you specify a value for ``KmsKeyId`` when using any nitro-based instances with local storage, the call to ``CreateEndpointConfig`` fails. For a list of instance types that support local instance storage, see `Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes>`_ . For more information about local instance storage encryption, see `SSD Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html>`_ .
        :param shadow_production_variants: Array of ``ProductionVariant`` objects. There is one for each model that you want to host at this endpoint in shadow mode with production traffic replicated from the model specified on ``ProductionVariants`` . If you use this field, you can only specify one variant for ``ProductionVariants`` and one variant for ``ShadowProductionVariants`` .
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ .
        :param vpc_config: 

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_endpoint_config_props = sagemaker.CfnEndpointConfigProps(
                production_variants=[sagemaker.CfnEndpointConfig.ProductionVariantProperty(
                    variant_name="variantName",
            
                    # the properties below are optional
                    accelerator_type="acceleratorType",
                    container_startup_health_check_timeout_in_seconds=123,
                    enable_ssm_access=False,
                    initial_instance_count=123,
                    initial_variant_weight=123,
                    instance_type="instanceType",
                    managed_instance_scaling=sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                        max_instance_count=123,
                        min_instance_count=123,
                        status="status"
                    ),
                    model_data_download_timeout_in_seconds=123,
                    model_name="modelName",
                    routing_config=sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                        routing_strategy="routingStrategy"
                    ),
                    serverless_config=sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                        max_concurrency=123,
                        memory_size_in_mb=123,
            
                        # the properties below are optional
                        provisioned_concurrency=123
                    ),
                    volume_size_in_gb=123
                )],
            
                # the properties below are optional
                async_inference_config=sagemaker.CfnEndpointConfig.AsyncInferenceConfigProperty(
                    output_config=sagemaker.CfnEndpointConfig.AsyncInferenceOutputConfigProperty(
                        kms_key_id="kmsKeyId",
                        notification_config=sagemaker.CfnEndpointConfig.AsyncInferenceNotificationConfigProperty(
                            error_topic="errorTopic",
                            include_inference_response_in=["includeInferenceResponseIn"],
                            success_topic="successTopic"
                        ),
                        s3_failure_path="s3FailurePath",
                        s3_output_path="s3OutputPath"
                    ),
            
                    # the properties below are optional
                    client_config=sagemaker.CfnEndpointConfig.AsyncInferenceClientConfigProperty(
                        max_concurrent_invocations_per_instance=123
                    )
                ),
                data_capture_config=sagemaker.CfnEndpointConfig.DataCaptureConfigProperty(
                    capture_options=[sagemaker.CfnEndpointConfig.CaptureOptionProperty(
                        capture_mode="captureMode"
                    )],
                    destination_s3_uri="destinationS3Uri",
                    initial_sampling_percentage=123,
            
                    # the properties below are optional
                    capture_content_type_header=sagemaker.CfnEndpointConfig.CaptureContentTypeHeaderProperty(
                        csv_content_types=["csvContentTypes"],
                        json_content_types=["jsonContentTypes"]
                    ),
                    enable_capture=False,
                    kms_key_id="kmsKeyId"
                ),
                enable_network_isolation=False,
                endpoint_config_name="endpointConfigName",
                execution_role_arn="executionRoleArn",
                explainer_config=sagemaker.CfnEndpointConfig.ExplainerConfigProperty(
                    clarify_explainer_config=sagemaker.CfnEndpointConfig.ClarifyExplainerConfigProperty(
                        shap_config=sagemaker.CfnEndpointConfig.ClarifyShapConfigProperty(
                            shap_baseline_config=sagemaker.CfnEndpointConfig.ClarifyShapBaselineConfigProperty(
                                mime_type="mimeType",
                                shap_baseline="shapBaseline",
                                shap_baseline_uri="shapBaselineUri"
                            ),
            
                            # the properties below are optional
                            number_of_samples=123,
                            seed=123,
                            text_config=sagemaker.CfnEndpointConfig.ClarifyTextConfigProperty(
                                granularity="granularity",
                                language="language"
                            ),
                            use_logit=False
                        ),
            
                        # the properties below are optional
                        enable_explanations="enableExplanations",
                        inference_config=sagemaker.CfnEndpointConfig.ClarifyInferenceConfigProperty(
                            content_template="contentTemplate",
                            feature_headers=["featureHeaders"],
                            features_attribute="featuresAttribute",
                            feature_types=["featureTypes"],
                            label_attribute="labelAttribute",
                            label_headers=["labelHeaders"],
                            label_index=123,
                            max_payload_in_mb=123,
                            max_record_count=123,
                            probability_attribute="probabilityAttribute",
                            probability_index=123
                        )
                    )
                ),
                kms_key_id="kmsKeyId",
                shadow_production_variants=[sagemaker.CfnEndpointConfig.ProductionVariantProperty(
                    variant_name="variantName",
            
                    # the properties below are optional
                    accelerator_type="acceleratorType",
                    container_startup_health_check_timeout_in_seconds=123,
                    enable_ssm_access=False,
                    initial_instance_count=123,
                    initial_variant_weight=123,
                    instance_type="instanceType",
                    managed_instance_scaling=sagemaker.CfnEndpointConfig.ManagedInstanceScalingProperty(
                        max_instance_count=123,
                        min_instance_count=123,
                        status="status"
                    ),
                    model_data_download_timeout_in_seconds=123,
                    model_name="modelName",
                    routing_config=sagemaker.CfnEndpointConfig.RoutingConfigProperty(
                        routing_strategy="routingStrategy"
                    ),
                    serverless_config=sagemaker.CfnEndpointConfig.ServerlessConfigProperty(
                        max_concurrency=123,
                        memory_size_in_mb=123,
            
                        # the properties below are optional
                        provisioned_concurrency=123
                    ),
                    volume_size_in_gb=123
                )],
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                vpc_config=sagemaker.CfnEndpointConfig.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__78ef2b9ddede793caaf7b19d01bb59252a5dbfeb2526319f7e6ad617b37c5814)
            check_type(argname="argument production_variants", value=production_variants, expected_type=type_hints["production_variants"])
            check_type(argname="argument async_inference_config", value=async_inference_config, expected_type=type_hints["async_inference_config"])
            check_type(argname="argument data_capture_config", value=data_capture_config, expected_type=type_hints["data_capture_config"])
            check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
            check_type(argname="argument endpoint_config_name", value=endpoint_config_name, expected_type=type_hints["endpoint_config_name"])
            check_type(argname="argument execution_role_arn", value=execution_role_arn, expected_type=type_hints["execution_role_arn"])
            check_type(argname="argument explainer_config", value=explainer_config, expected_type=type_hints["explainer_config"])
            check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            check_type(argname="argument shadow_production_variants", value=shadow_production_variants, expected_type=type_hints["shadow_production_variants"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "production_variants": production_variants,
        }
        if async_inference_config is not None:
            self._values["async_inference_config"] = async_inference_config
        if data_capture_config is not None:
            self._values["data_capture_config"] = data_capture_config
        if enable_network_isolation is not None:
            self._values["enable_network_isolation"] = enable_network_isolation
        if endpoint_config_name is not None:
            self._values["endpoint_config_name"] = endpoint_config_name
        if execution_role_arn is not None:
            self._values["execution_role_arn"] = execution_role_arn
        if explainer_config is not None:
            self._values["explainer_config"] = explainer_config
        if kms_key_id is not None:
            self._values["kms_key_id"] = kms_key_id
        if shadow_production_variants is not None:
            self._values["shadow_production_variants"] = shadow_production_variants
        if tags is not None:
            self._values["tags"] = tags
        if vpc_config is not None:
            self._values["vpc_config"] = vpc_config

    @builtins.property
    def production_variants(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]]:
        '''A list of ``ProductionVariant`` objects, one for each model that you want to host at this endpoint.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-productionvariants
        '''
        result = self._values.get("production_variants")
        assert result is not None, "Required property 'production_variants' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]], result)

    @builtins.property
    def async_inference_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.AsyncInferenceConfigProperty]]:
        '''Specifies configuration for how an endpoint performs asynchronous inference.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-asyncinferenceconfig
        '''
        result = self._values.get("async_inference_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.AsyncInferenceConfigProperty]], result)

    @builtins.property
    def data_capture_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.DataCaptureConfigProperty]]:
        '''Specifies how to capture endpoint data for model monitor.

        The data capture configuration applies to all production variants hosted at the endpoint.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-datacaptureconfig
        '''
        result = self._values.get("data_capture_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.DataCaptureConfigProperty]], result)

    @builtins.property
    def enable_network_isolation(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''
        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-enablenetworkisolation
        '''
        result = self._values.get("enable_network_isolation")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def endpoint_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint configuration.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-endpointconfigname
        '''
        result = self._values.get("endpoint_config_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def execution_role_arn(self) -> typing.Optional[builtins.str]:
        '''
        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-executionrolearn
        '''
        result = self._values.get("execution_role_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def explainer_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ExplainerConfigProperty]]:
        '''A parameter to activate explainers.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-explainerconfig
        '''
        result = self._values.get("explainer_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ExplainerConfigProperty]], result)

    @builtins.property
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of an AWS Key Management Service key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance that hosts the endpoint.

        - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab``
        - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab``
        - Alias name: ``alias/ExampleAlias``
        - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias``

        The KMS key policy must grant permission to the IAM role that you specify in your ``CreateEndpoint`` , ``UpdateEndpoint`` requests. For more information, refer to the AWS Key Management Service section `Using Key Policies in AWS KMS <https://docs.aws.amazon.com//kms/latest/developerguide/key-policies.html>`_
        .. epigraph::

           Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a ``KmsKeyId`` when using an instance type with local storage. If any of the models that you specify in the ``ProductionVariants`` parameter use nitro-based instances with local storage, do not specify a value for the ``KmsKeyId`` parameter. If you specify a value for ``KmsKeyId`` when using any nitro-based instances with local storage, the call to ``CreateEndpointConfig`` fails.

           For a list of instance types that support local instance storage, see `Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes>`_ .

           For more information about local instance storage encryption, see `SSD Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-kmskeyid
        '''
        result = self._values.get("kms_key_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def shadow_production_variants(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]]]:
        '''Array of ``ProductionVariant`` objects.

        There is one for each model that you want to host at this endpoint in shadow mode with production traffic replicated from the model specified on ``ProductionVariants`` . If you use this field, you can only specify one variant for ``ProductionVariants`` and one variant for ``ShadowProductionVariants`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-shadowproductionvariants
        '''
        result = self._values.get("shadow_production_variants")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def vpc_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.VpcConfigProperty]]:
        '''
        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html#cfn-sagemaker-endpointconfig-vpcconfig
        '''
        result = self._values.get("vpc_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.VpcConfigProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnEndpointConfigProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnEndpointProps",
    jsii_struct_bases=[],
    name_mapping={
        "endpoint_config_name": "endpointConfigName",
        "deployment_config": "deploymentConfig",
        "endpoint_name": "endpointName",
        "exclude_retained_variant_properties": "excludeRetainedVariantProperties",
        "retain_all_variant_properties": "retainAllVariantProperties",
        "retain_deployment_config": "retainDeploymentConfig",
        "tags": "tags",
    },
)
class CfnEndpointProps:
    def __init__(
        self,
        *,
        endpoint_config_name: builtins.str,
        deployment_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.DeploymentConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        endpoint_name: typing.Optional[builtins.str] = None,
        exclude_retained_variant_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.VariantPropertyProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        retain_all_variant_properties: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        retain_deployment_config: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnEndpoint``.

        :param endpoint_config_name: The name of the `AWS::SageMaker::EndpointConfig <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html>`_ resource that specifies the configuration for the endpoint. For more information, see `CreateEndpointConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html>`_ .
        :param deployment_config: The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.
        :param endpoint_name: The name of the endpoint.The name must be unique within an AWS Region in your AWS account. The name is case-insensitive in ``CreateEndpoint`` , but the case is preserved and must be matched in ` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html>`_ .
        :param exclude_retained_variant_properties: When you are updating endpoint resources with `RetainAllVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-RetainAllVariantProperties>`_ whose value is set to ``true`` , ``ExcludeRetainedVariantProperties`` specifies the list of type `VariantProperty <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html>`_ to override with the values provided by ``EndpointConfig`` . If you don't specify a value for ``ExcludeAllVariantProperties`` , no variant properties are overridden. Don't use this property when creating new endpoint resources or when ``RetainAllVariantProperties`` is set to ``false`` .
        :param retain_all_variant_properties: When updating endpoint resources, enables or disables the retention of variant properties, such as the instance count or the variant weight. To retain the variant properties of an endpoint when updating it, set ``RetainAllVariantProperties`` to ``true`` . To use the variant properties specified in a new ``EndpointConfig`` call when updating an endpoint, set ``RetainAllVariantProperties`` to ``false`` . Use this property only when updating endpoint resources, not when creating new endpoint resources.
        :param retain_deployment_config: Specifies whether to reuse the last deployment configuration. The default value is false (the configuration is not reused).
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_endpoint_props = sagemaker.CfnEndpointProps(
                endpoint_config_name="endpointConfigName",
            
                # the properties below are optional
                deployment_config=sagemaker.CfnEndpoint.DeploymentConfigProperty(
                    auto_rollback_configuration=sagemaker.CfnEndpoint.AutoRollbackConfigProperty(
                        alarms=[sagemaker.CfnEndpoint.AlarmProperty(
                            alarm_name="alarmName"
                        )]
                    ),
                    blue_green_update_policy=sagemaker.CfnEndpoint.BlueGreenUpdatePolicyProperty(
                        traffic_routing_configuration=sagemaker.CfnEndpoint.TrafficRoutingConfigProperty(
                            type="type",
            
                            # the properties below are optional
                            canary_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                                type="type",
                                value=123
                            ),
                            linear_step_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                                type="type",
                                value=123
                            ),
                            wait_interval_in_seconds=123
                        ),
            
                        # the properties below are optional
                        maximum_execution_timeout_in_seconds=123,
                        termination_wait_in_seconds=123
                    ),
                    rolling_update_policy=sagemaker.CfnEndpoint.RollingUpdatePolicyProperty(
                        maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        ),
                        wait_interval_in_seconds=123,
            
                        # the properties below are optional
                        maximum_execution_timeout_in_seconds=123,
                        rollback_maximum_batch_size=sagemaker.CfnEndpoint.CapacitySizeProperty(
                            type="type",
                            value=123
                        )
                    )
                ),
                endpoint_name="endpointName",
                exclude_retained_variant_properties=[sagemaker.CfnEndpoint.VariantPropertyProperty(
                    variant_property_type="variantPropertyType"
                )],
                retain_all_variant_properties=False,
                retain_deployment_config=False,
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__52a2e56834295c61b7da5a9bf2f08a781f50e70d1e6a1452ded8f8b0cc1245c1)
            check_type(argname="argument endpoint_config_name", value=endpoint_config_name, expected_type=type_hints["endpoint_config_name"])
            check_type(argname="argument deployment_config", value=deployment_config, expected_type=type_hints["deployment_config"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument exclude_retained_variant_properties", value=exclude_retained_variant_properties, expected_type=type_hints["exclude_retained_variant_properties"])
            check_type(argname="argument retain_all_variant_properties", value=retain_all_variant_properties, expected_type=type_hints["retain_all_variant_properties"])
            check_type(argname="argument retain_deployment_config", value=retain_deployment_config, expected_type=type_hints["retain_deployment_config"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "endpoint_config_name": endpoint_config_name,
        }
        if deployment_config is not None:
            self._values["deployment_config"] = deployment_config
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if exclude_retained_variant_properties is not None:
            self._values["exclude_retained_variant_properties"] = exclude_retained_variant_properties
        if retain_all_variant_properties is not None:
            self._values["retain_all_variant_properties"] = retain_all_variant_properties
        if retain_deployment_config is not None:
            self._values["retain_deployment_config"] = retain_deployment_config
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def endpoint_config_name(self) -> builtins.str:
        '''The name of the `AWS::SageMaker::EndpointConfig <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpointconfig.html>`_ resource that specifies the configuration for the endpoint. For more information, see `CreateEndpointConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-endpointconfigname
        '''
        result = self._values.get("endpoint_config_name")
        assert result is not None, "Required property 'endpoint_config_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def deployment_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpoint.DeploymentConfigProperty]]:
        '''The deployment configuration for an endpoint, which contains the desired deployment strategy and rollback configurations.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-deploymentconfig
        '''
        result = self._values.get("deployment_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpoint.DeploymentConfigProperty]], result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint.The name must be unique within an AWS Region in your AWS account. The name is case-insensitive in ``CreateEndpoint`` , but the case is preserved and must be matched in ` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def exclude_retained_variant_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpoint.VariantPropertyProperty]]]]:
        '''When you are updating endpoint resources with `RetainAllVariantProperties <https://docs.aws.amazon.com/sagemaker/latest/dg/API_UpdateEndpoint.html#SageMaker-UpdateEndpoint-request-RetainAllVariantProperties>`_ whose value is set to ``true`` , ``ExcludeRetainedVariantProperties`` specifies the list of type `VariantProperty <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-endpoint-variantproperty.html>`_ to override with the values provided by ``EndpointConfig`` . If you don't specify a value for ``ExcludeAllVariantProperties`` , no variant properties are overridden. Don't use this property when creating new endpoint resources or when ``RetainAllVariantProperties`` is set to ``false`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-excluderetainedvariantproperties
        '''
        result = self._values.get("exclude_retained_variant_properties")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpoint.VariantPropertyProperty]]]], result)

    @builtins.property
    def retain_all_variant_properties(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''When updating endpoint resources, enables or disables the retention of variant properties, such as the instance count or the variant weight.

        To retain the variant properties of an endpoint when updating it, set ``RetainAllVariantProperties`` to ``true`` . To use the variant properties specified in a new ``EndpointConfig`` call when updating an endpoint, set ``RetainAllVariantProperties`` to ``false`` . Use this property only when updating endpoint resources, not when creating new endpoint resources.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-retainallvariantproperties
        '''
        result = self._values.get("retain_all_variant_properties")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def retain_deployment_config(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Specifies whether to reuse the last deployment configuration.

        The default value is false (the configuration is not reused).

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-retaindeploymentconfig
        '''
        result = self._values.get("retain_deployment_config")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-endpoint.html#cfn-sagemaker-endpoint-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnEndpointProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnFeatureGroup(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup",
):
    '''Create a new ``FeatureGroup`` .

    A ``FeatureGroup`` is a group of ``Features`` defined in the ``FeatureStore`` to describe a ``Record`` .

    The ``FeatureGroup`` defines the schema and features contained in the FeatureGroup. A ``FeatureGroup`` definition is composed of a list of ``Features`` , a ``RecordIdentifierFeatureName`` , an ``EventTimeFeatureName`` and configurations for its ``OnlineStore`` and ``OfflineStore`` . Check `AWS service quotas <https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html>`_ to see the ``FeatureGroup`` s quota for your AWS account.
    .. epigraph::

       You must include at least one of ``OnlineStoreConfig`` and ``OfflineStoreConfig`` to create a ``FeatureGroup`` .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html
    :cloudformationResource: AWS::SageMaker::FeatureGroup
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # offline_store_config: Any
        # online_store_config: Any
        
        cfn_feature_group = sagemaker.CfnFeatureGroup(self, "MyCfnFeatureGroup",
            event_time_feature_name="eventTimeFeatureName",
            feature_definitions=[sagemaker.CfnFeatureGroup.FeatureDefinitionProperty(
                feature_name="featureName",
                feature_type="featureType"
            )],
            feature_group_name="featureGroupName",
            record_identifier_feature_name="recordIdentifierFeatureName",
        
            # the properties below are optional
            description="description",
            offline_store_config=offline_store_config,
            online_store_config=online_store_config,
            role_arn="roleArn",
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            throughput_config=sagemaker.CfnFeatureGroup.ThroughputConfigProperty(
                throughput_mode="throughputMode",
        
                # the properties below are optional
                provisioned_read_capacity_units=123,
                provisioned_write_capacity_units=123
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        event_time_feature_name: builtins.str,
        feature_definitions: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnFeatureGroup.FeatureDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]],
        feature_group_name: builtins.str,
        record_identifier_feature_name: builtins.str,
        description: typing.Optional[builtins.str] = None,
        offline_store_config: typing.Any = None,
        online_store_config: typing.Any = None,
        role_arn: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        throughput_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnFeatureGroup.ThroughputConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param event_time_feature_name: The name of the feature that stores the ``EventTime`` of a Record in a ``FeatureGroup`` . A ``EventTime`` is point in time when a new event occurs that corresponds to the creation or update of a ``Record`` in ``FeatureGroup`` . All ``Records`` in the ``FeatureGroup`` must have a corresponding ``EventTime`` .
        :param feature_definitions: A list of ``Feature`` s. Each ``Feature`` must include a ``FeatureName`` and a ``FeatureType`` . Valid ``FeatureType`` s are ``Integral`` , ``Fractional`` and ``String`` . ``FeatureName`` s cannot be any of the following: ``is_deleted`` , ``write_time`` , ``api_invocation_time`` . You can create up to 2,500 ``FeatureDefinition`` s per ``FeatureGroup`` .
        :param feature_group_name: The name of the ``FeatureGroup`` .
        :param record_identifier_feature_name: The name of the ``Feature`` whose value uniquely identifies a ``Record`` defined in the ``FeatureGroup`` ``FeatureDefinitions`` .
        :param description: A free form description of a ``FeatureGroup`` .
        :param offline_store_config: The configuration of an ``OfflineStore`` .
        :param online_store_config: The configuration of an ``OnlineStore`` .
        :param role_arn: The Amazon Resource Name (ARN) of the IAM execution role used to create the feature group.
        :param tags: Tags used to define a ``FeatureGroup`` .
        :param throughput_config: Used to set feature group throughput configuration. There are two modes: ``ON_DEMAND`` and ``PROVISIONED`` . With on-demand mode, you are charged for data reads and writes that your application performs on your feature group. You do not need to specify read and write throughput because Feature Store accommodates your workloads as they ramp up and down. You can switch a feature group to on-demand only once in a 24 hour period. With provisioned throughput mode, you specify the read and write capacity per second that you expect your application to require, and you are billed based on those limits. Exceeding provisioned throughput will result in your requests being throttled. Note: ``PROVISIONED`` throughput mode is supported only for feature groups that are offline-only, or use the ```Standard`` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OnlineStoreConfig.html#sagemaker-Type-OnlineStoreConfig-StorageType>`_ tier online store.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4102c01580236aeaa8183dc09f0ab2d908ee3b4650df43ce2419ef038f864258)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnFeatureGroupProps(
            event_time_feature_name=event_time_feature_name,
            feature_definitions=feature_definitions,
            feature_group_name=feature_group_name,
            record_identifier_feature_name=record_identifier_feature_name,
            description=description,
            offline_store_config=offline_store_config,
            online_store_config=online_store_config,
            role_arn=role_arn,
            tags=tags,
            throughput_config=throughput_config,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0cd6259820b736e87a6da7d27e2e1e1a14b614640e31da0fcb54668a45db785f)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4377922dbd7c3d2d8d521bce16c0e6ef23d2e76a3cd1823cfe6bb698934e9794)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time a ``FeatureGroup`` was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrFeatureGroupStatus")
    def attr_feature_group_status(self) -> builtins.str:
        '''A ``FeatureGroup`` status.

        :cloudformationAttribute: FeatureGroupStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrFeatureGroupStatus"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="eventTimeFeatureName")
    def event_time_feature_name(self) -> builtins.str:
        '''The name of the feature that stores the ``EventTime`` of a Record in a ``FeatureGroup`` .'''
        return typing.cast(builtins.str, jsii.get(self, "eventTimeFeatureName"))

    @event_time_feature_name.setter
    def event_time_feature_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8adfc53ff0bc63839afe55973c1f5c8873bebb52fb98328b9839255298b674b9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "eventTimeFeatureName", value)

    @builtins.property
    @jsii.member(jsii_name="featureDefinitions")
    def feature_definitions(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.FeatureDefinitionProperty"]]]:
        '''A list of ``Feature`` s.

        Each ``Feature`` must include a ``FeatureName`` and a ``FeatureType`` .
        '''
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.FeatureDefinitionProperty"]]], jsii.get(self, "featureDefinitions"))

    @feature_definitions.setter
    def feature_definitions(
        self,
        value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.FeatureDefinitionProperty"]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__554ed28625ccedc71ce244f01f302b22d68e2b9ad204918f91e7f3fd85527e61)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "featureDefinitions", value)

    @builtins.property
    @jsii.member(jsii_name="featureGroupName")
    def feature_group_name(self) -> builtins.str:
        '''The name of the ``FeatureGroup`` .'''
        return typing.cast(builtins.str, jsii.get(self, "featureGroupName"))

    @feature_group_name.setter
    def feature_group_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d6f4169fe264f570e3e6859737b587e566b9716d614cf3a24902f6b04cde8b93)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "featureGroupName", value)

    @builtins.property
    @jsii.member(jsii_name="recordIdentifierFeatureName")
    def record_identifier_feature_name(self) -> builtins.str:
        '''The name of the ``Feature`` whose value uniquely identifies a ``Record`` defined in the ``FeatureGroup`` ``FeatureDefinitions`` .'''
        return typing.cast(builtins.str, jsii.get(self, "recordIdentifierFeatureName"))

    @record_identifier_feature_name.setter
    def record_identifier_feature_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b78873bd7aeb067f399e0d34bbfcead148ee8cd93f599510cd64c6e738908832)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "recordIdentifierFeatureName", value)

    @builtins.property
    @jsii.member(jsii_name="description")
    def description(self) -> typing.Optional[builtins.str]:
        '''A free form description of a ``FeatureGroup`` .'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "description"))

    @description.setter
    def description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2b3eb81281cd3d68bb6a0b5a3ea79863153df71f1420743d27c3d773a2fd6c98)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "description", value)

    @builtins.property
    @jsii.member(jsii_name="offlineStoreConfig")
    def offline_store_config(self) -> typing.Any:
        '''The configuration of an ``OfflineStore`` .'''
        return typing.cast(typing.Any, jsii.get(self, "offlineStoreConfig"))

    @offline_store_config.setter
    def offline_store_config(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__35a3cd1a7f2eeb38ecbdecb8d787b667dd2fb89f595b3887438fb9c49ebe2125)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "offlineStoreConfig", value)

    @builtins.property
    @jsii.member(jsii_name="onlineStoreConfig")
    def online_store_config(self) -> typing.Any:
        '''The configuration of an ``OnlineStore`` .'''
        return typing.cast(typing.Any, jsii.get(self, "onlineStoreConfig"))

    @online_store_config.setter
    def online_store_config(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__36874ea58589f290874ec1f6e4483a6eaf3b42f76d17dd0b2c0aa81106ea1710)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "onlineStoreConfig", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the IAM execution role used to create the feature group.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dd4c4dc86f0dd4d52ceac67d70b2ea2229a255079338500d2261a011ff1b32ee)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Tags used to define a ``FeatureGroup`` .'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d8168817a8eaecafae45794cccbd827fb5a8ecca77d875940f9f6a69e039d7b6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="throughputConfig")
    def throughput_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.ThroughputConfigProperty"]]:
        '''Used to set feature group throughput configuration.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.ThroughputConfigProperty"]], jsii.get(self, "throughputConfig"))

    @throughput_config.setter
    def throughput_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.ThroughputConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__af00a14f14915d9468127ac75d20463075f7aef1c7623208e6c755ca9f7feba2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "throughputConfig", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.DataCatalogConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "catalog": "catalog",
            "database": "database",
            "table_name": "tableName",
        },
    )
    class DataCatalogConfigProperty:
        def __init__(
            self,
            *,
            catalog: builtins.str,
            database: builtins.str,
            table_name: builtins.str,
        ) -> None:
            '''The meta data of the Glue table which serves as data catalog for the ``OfflineStore`` .

            :param catalog: The name of the Glue table catalog.
            :param database: The name of the Glue table database.
            :param table_name: The name of the Glue table.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_catalog_config_property = sagemaker.CfnFeatureGroup.DataCatalogConfigProperty(
                    catalog="catalog",
                    database="database",
                    table_name="tableName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4caa5f76e9359d50b237d02f2288070020184465e320800c861a60749c9be45b)
                check_type(argname="argument catalog", value=catalog, expected_type=type_hints["catalog"])
                check_type(argname="argument database", value=database, expected_type=type_hints["database"])
                check_type(argname="argument table_name", value=table_name, expected_type=type_hints["table_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "catalog": catalog,
                "database": database,
                "table_name": table_name,
            }

        @builtins.property
        def catalog(self) -> builtins.str:
            '''The name of the Glue table catalog.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-catalog
            '''
            result = self._values.get("catalog")
            assert result is not None, "Required property 'catalog' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def database(self) -> builtins.str:
            '''The name of the Glue table database.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-database
            '''
            result = self._values.get("database")
            assert result is not None, "Required property 'database' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def table_name(self) -> builtins.str:
            '''The name of the Glue table.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-datacatalogconfig.html#cfn-sagemaker-featuregroup-datacatalogconfig-tablename
            '''
            result = self._values.get("table_name")
            assert result is not None, "Required property 'table_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataCatalogConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.FeatureDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={"feature_name": "featureName", "feature_type": "featureType"},
    )
    class FeatureDefinitionProperty:
        def __init__(
            self,
            *,
            feature_name: builtins.str,
            feature_type: builtins.str,
        ) -> None:
            '''A list of features.

            You must include ``FeatureName`` and ``FeatureType`` . Valid feature ``FeatureType`` s are ``Integral`` , ``Fractional`` and ``String`` .

            :param feature_name: The name of a feature. The type must be a string. ``FeatureName`` cannot be any of the following: ``is_deleted`` , ``write_time`` , ``api_invocation_time`` .
            :param feature_type: The value type of a feature. Valid values are Integral, Fractional, or String.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-featuredefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                feature_definition_property = sagemaker.CfnFeatureGroup.FeatureDefinitionProperty(
                    feature_name="featureName",
                    feature_type="featureType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__04848822e3ad8782bf48bda17c952f5ed10b1558aac29dcca56aa3c21c34f2a1)
                check_type(argname="argument feature_name", value=feature_name, expected_type=type_hints["feature_name"])
                check_type(argname="argument feature_type", value=feature_type, expected_type=type_hints["feature_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "feature_name": feature_name,
                "feature_type": feature_type,
            }

        @builtins.property
        def feature_name(self) -> builtins.str:
            '''The name of a feature.

            The type must be a string. ``FeatureName`` cannot be any of the following: ``is_deleted`` , ``write_time`` , ``api_invocation_time`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-featuredefinition.html#cfn-sagemaker-featuregroup-featuredefinition-featurename
            '''
            result = self._values.get("feature_name")
            assert result is not None, "Required property 'feature_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def feature_type(self) -> builtins.str:
            '''The value type of a feature.

            Valid values are Integral, Fractional, or String.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-featuredefinition.html#cfn-sagemaker-featuregroup-featuredefinition-featuretype
            '''
            result = self._values.get("feature_type")
            assert result is not None, "Required property 'feature_type' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FeatureDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.OfflineStoreConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "s3_storage_config": "s3StorageConfig",
            "data_catalog_config": "dataCatalogConfig",
            "disable_glue_table_creation": "disableGlueTableCreation",
            "table_format": "tableFormat",
        },
    )
    class OfflineStoreConfigProperty:
        def __init__(
            self,
            *,
            s3_storage_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnFeatureGroup.S3StorageConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            data_catalog_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnFeatureGroup.DataCatalogConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            disable_glue_table_creation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            table_format: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration of an ``OfflineStore`` .

            Provide an ``OfflineStoreConfig`` in a request to ``CreateFeatureGroup`` to create an ``OfflineStore`` .

            To encrypt an ``OfflineStore`` using at rest data encryption, specify AWS Key Management Service (KMS) key ID, or ``KMSKeyId`` , in ``S3StorageConfig`` .

            :param s3_storage_config: The Amazon Simple Storage (Amazon S3) location of ``OfflineStore`` .
            :param data_catalog_config: The meta data of the Glue table that is autogenerated when an ``OfflineStore`` is created.
            :param disable_glue_table_creation: Set to ``True`` to disable the automatic creation of an AWS Glue table when configuring an ``OfflineStore`` . If set to ``False`` , Feature Store will name the ``OfflineStore`` Glue table following `Athena's naming recommendations <https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html>`_ . The default value is ``False`` .
            :param table_format: Format for the offline store table. Supported formats are Glue (Default) and `Apache Iceberg <https://docs.aws.amazon.com/https://iceberg.apache.org/>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                offline_store_config_property = sagemaker.CfnFeatureGroup.OfflineStoreConfigProperty(
                    s3_storage_config=sagemaker.CfnFeatureGroup.S3StorageConfigProperty(
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        kms_key_id="kmsKeyId"
                    ),
                
                    # the properties below are optional
                    data_catalog_config=sagemaker.CfnFeatureGroup.DataCatalogConfigProperty(
                        catalog="catalog",
                        database="database",
                        table_name="tableName"
                    ),
                    disable_glue_table_creation=False,
                    table_format="tableFormat"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2f29e7edde4b24306bda02357db072f0b29e6110817a4c588bd3c02734019d42)
                check_type(argname="argument s3_storage_config", value=s3_storage_config, expected_type=type_hints["s3_storage_config"])
                check_type(argname="argument data_catalog_config", value=data_catalog_config, expected_type=type_hints["data_catalog_config"])
                check_type(argname="argument disable_glue_table_creation", value=disable_glue_table_creation, expected_type=type_hints["disable_glue_table_creation"])
                check_type(argname="argument table_format", value=table_format, expected_type=type_hints["table_format"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_storage_config": s3_storage_config,
            }
            if data_catalog_config is not None:
                self._values["data_catalog_config"] = data_catalog_config
            if disable_glue_table_creation is not None:
                self._values["disable_glue_table_creation"] = disable_glue_table_creation
            if table_format is not None:
                self._values["table_format"] = table_format

        @builtins.property
        def s3_storage_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.S3StorageConfigProperty"]:
            '''The Amazon Simple Storage (Amazon S3) location of ``OfflineStore`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-s3storageconfig
            '''
            result = self._values.get("s3_storage_config")
            assert result is not None, "Required property 's3_storage_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.S3StorageConfigProperty"], result)

        @builtins.property
        def data_catalog_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.DataCatalogConfigProperty"]]:
            '''The meta data of the Glue table that is autogenerated when an ``OfflineStore`` is created.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-datacatalogconfig
            '''
            result = self._values.get("data_catalog_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.DataCatalogConfigProperty"]], result)

        @builtins.property
        def disable_glue_table_creation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Set to ``True`` to disable the automatic creation of an AWS Glue table when configuring an ``OfflineStore`` .

            If set to ``False`` , Feature Store will name the ``OfflineStore`` Glue table following `Athena's naming recommendations <https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html>`_ .

            The default value is ``False`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-disablegluetablecreation
            '''
            result = self._values.get("disable_glue_table_creation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def table_format(self) -> typing.Optional[builtins.str]:
            '''Format for the offline store table.

            Supported formats are Glue (Default) and `Apache Iceberg <https://docs.aws.amazon.com/https://iceberg.apache.org/>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-offlinestoreconfig.html#cfn-sagemaker-featuregroup-offlinestoreconfig-tableformat
            '''
            result = self._values.get("table_format")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OfflineStoreConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.OnlineStoreConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_online_store": "enableOnlineStore",
            "security_config": "securityConfig",
            "storage_type": "storageType",
        },
    )
    class OnlineStoreConfigProperty:
        def __init__(
            self,
            *,
            enable_online_store: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnFeatureGroup.OnlineStoreSecurityConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            storage_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Use this to specify the AWS Key Management Service (KMS) Key ID, or ``KMSKeyId`` , for at rest data encryption.

            You can turn ``OnlineStore`` on or off by specifying the ``EnableOnlineStore`` flag at General Assembly.

            The default value is ``False`` .

            :param enable_online_store: Turn ``OnlineStore`` off by specifying ``False`` for the ``EnableOnlineStore`` flag. Turn ``OnlineStore`` on by specifying ``True`` for the ``EnableOnlineStore`` flag. The default value is ``False`` .
            :param security_config: Use to specify KMS Key ID ( ``KMSKeyId`` ) for at-rest encryption of your ``OnlineStore`` .
            :param storage_type: Option for different tiers of low latency storage for real-time data retrieval. - ``Standard`` : A managed low latency data store for feature groups. - ``InMemory`` : A managed data store for feature groups that supports very low latency retrieval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                online_store_config_property = sagemaker.CfnFeatureGroup.OnlineStoreConfigProperty(
                    enable_online_store=False,
                    security_config=sagemaker.CfnFeatureGroup.OnlineStoreSecurityConfigProperty(
                        kms_key_id="kmsKeyId"
                    ),
                    storage_type="storageType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4068ec17c64be821371cb37a174b97e325a38220882aa92f5b086d22af6c9c9b)
                check_type(argname="argument enable_online_store", value=enable_online_store, expected_type=type_hints["enable_online_store"])
                check_type(argname="argument security_config", value=security_config, expected_type=type_hints["security_config"])
                check_type(argname="argument storage_type", value=storage_type, expected_type=type_hints["storage_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_online_store is not None:
                self._values["enable_online_store"] = enable_online_store
            if security_config is not None:
                self._values["security_config"] = security_config
            if storage_type is not None:
                self._values["storage_type"] = storage_type

        @builtins.property
        def enable_online_store(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Turn ``OnlineStore`` off by specifying ``False`` for the ``EnableOnlineStore`` flag.

            Turn ``OnlineStore`` on by specifying ``True`` for the ``EnableOnlineStore`` flag.

            The default value is ``False`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html#cfn-sagemaker-featuregroup-onlinestoreconfig-enableonlinestore
            '''
            result = self._values.get("enable_online_store")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def security_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.OnlineStoreSecurityConfigProperty"]]:
            '''Use to specify KMS Key ID ( ``KMSKeyId`` ) for at-rest encryption of your ``OnlineStore`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html#cfn-sagemaker-featuregroup-onlinestoreconfig-securityconfig
            '''
            result = self._values.get("security_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnFeatureGroup.OnlineStoreSecurityConfigProperty"]], result)

        @builtins.property
        def storage_type(self) -> typing.Optional[builtins.str]:
            '''Option for different tiers of low latency storage for real-time data retrieval.

            - ``Standard`` : A managed low latency data store for feature groups.
            - ``InMemory`` : A managed data store for feature groups that supports very low latency retrieval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoreconfig.html#cfn-sagemaker-featuregroup-onlinestoreconfig-storagetype
            '''
            result = self._values.get("storage_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OnlineStoreConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.OnlineStoreSecurityConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"kms_key_id": "kmsKeyId"},
    )
    class OnlineStoreSecurityConfigProperty:
        def __init__(self, *, kms_key_id: typing.Optional[builtins.str] = None) -> None:
            '''The security configuration for ``OnlineStore`` .

            :param kms_key_id: The AWS Key Management Service (KMS) key ARN that SageMaker Feature Store uses to encrypt the Amazon S3 objects at rest using Amazon S3 server-side encryption. The caller (either user or IAM role) of ``CreateFeatureGroup`` must have below permissions to the ``OnlineStore`` ``KmsKeyId`` : - ``"kms:Encrypt"`` - ``"kms:Decrypt"`` - ``"kms:DescribeKey"`` - ``"kms:CreateGrant"`` - ``"kms:RetireGrant"`` - ``"kms:ReEncryptFrom"`` - ``"kms:ReEncryptTo"`` - ``"kms:GenerateDataKey"`` - ``"kms:ListAliases"`` - ``"kms:ListGrants"`` - ``"kms:RevokeGrant"`` The caller (either user or IAM role) to all DataPlane operations ( ``PutRecord`` , ``GetRecord`` , ``DeleteRecord`` ) must have the following permissions to the ``KmsKeyId`` : - ``"kms:Decrypt"``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoresecurityconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                online_store_security_config_property = sagemaker.CfnFeatureGroup.OnlineStoreSecurityConfigProperty(
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9ba97e020f46b5d443fb0f7a2b65107dfb083e44bf5c9573eb5b040837128996)
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service (KMS) key ARN that SageMaker Feature Store uses to encrypt the Amazon S3 objects at rest using Amazon S3 server-side encryption.

            The caller (either user or IAM role) of ``CreateFeatureGroup`` must have below permissions to the ``OnlineStore`` ``KmsKeyId`` :

            - ``"kms:Encrypt"``
            - ``"kms:Decrypt"``
            - ``"kms:DescribeKey"``
            - ``"kms:CreateGrant"``
            - ``"kms:RetireGrant"``
            - ``"kms:ReEncryptFrom"``
            - ``"kms:ReEncryptTo"``
            - ``"kms:GenerateDataKey"``
            - ``"kms:ListAliases"``
            - ``"kms:ListGrants"``
            - ``"kms:RevokeGrant"``

            The caller (either user or IAM role) to all DataPlane operations ( ``PutRecord`` , ``GetRecord`` , ``DeleteRecord`` ) must have the following permissions to the ``KmsKeyId`` :

            - ``"kms:Decrypt"``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-onlinestoresecurityconfig.html#cfn-sagemaker-featuregroup-onlinestoresecurityconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OnlineStoreSecurityConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.S3StorageConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri", "kms_key_id": "kmsKeyId"},
    )
    class S3StorageConfigProperty:
        def __init__(
            self,
            *,
            s3_uri: builtins.str,
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon Simple Storage (Amazon S3) location and and security configuration for ``OfflineStore`` .

            :param s3_uri: The S3 URI, or location in Amazon S3, of ``OfflineStore`` . S3 URIs have a format similar to the following: ``s3://example-bucket/prefix/`` .
            :param kms_key_id: The AWS Key Management Service (KMS) key ARN of the key used to encrypt any objects written into the ``OfflineStore`` S3 location. The IAM ``roleARN`` that is passed as a parameter to ``CreateFeatureGroup`` must have below permissions to the ``KmsKeyId`` : - ``"kms:GenerateDataKey"``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_storage_config_property = sagemaker.CfnFeatureGroup.S3StorageConfigProperty(
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4deea26cb2dc59d1dedd4813cf07b36e4bf8da5eff8446a0b746de73938917fc)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_uri": s3_uri,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''The S3 URI, or location in Amazon S3, of ``OfflineStore`` .

            S3 URIs have a format similar to the following: ``s3://example-bucket/prefix/`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html#cfn-sagemaker-featuregroup-s3storageconfig-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service (KMS) key ARN of the key used to encrypt any objects written into the ``OfflineStore`` S3 location.

            The IAM ``roleARN`` that is passed as a parameter to ``CreateFeatureGroup`` must have below permissions to the ``KmsKeyId`` :

            - ``"kms:GenerateDataKey"``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-s3storageconfig.html#cfn-sagemaker-featuregroup-s3storageconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3StorageConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroup.ThroughputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "throughput_mode": "throughputMode",
            "provisioned_read_capacity_units": "provisionedReadCapacityUnits",
            "provisioned_write_capacity_units": "provisionedWriteCapacityUnits",
        },
    )
    class ThroughputConfigProperty:
        def __init__(
            self,
            *,
            throughput_mode: builtins.str,
            provisioned_read_capacity_units: typing.Optional[jsii.Number] = None,
            provisioned_write_capacity_units: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Used to set feature group throughput configuration.

            There are two modes: ``ON_DEMAND`` and ``PROVISIONED`` . With on-demand mode, you are charged for data reads and writes that your application performs on your feature group. You do not need to specify read and write throughput because Feature Store accommodates your workloads as they ramp up and down. You can switch a feature group to on-demand only once in a 24 hour period. With provisioned throughput mode, you specify the read and write capacity per second that you expect your application to require, and you are billed based on those limits. Exceeding provisioned throughput will result in your requests being throttled.

            Note: ``PROVISIONED`` throughput mode is supported only for feature groups that are offline-only, or use the ```Standard`` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OnlineStoreConfig.html#sagemaker-Type-OnlineStoreConfig-StorageType>`_ tier online store.

            :param throughput_mode: The mode used for your feature group throughput: ``ON_DEMAND`` or ``PROVISIONED`` .
            :param provisioned_read_capacity_units: For provisioned feature groups with online store enabled, this indicates the read throughput you are billed for and can consume without throttling. This field is not applicable for on-demand feature groups.
            :param provisioned_write_capacity_units: For provisioned feature groups, this indicates the write throughput you are billed for and can consume without throttling. This field is not applicable for on-demand feature groups.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-throughputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                throughput_config_property = sagemaker.CfnFeatureGroup.ThroughputConfigProperty(
                    throughput_mode="throughputMode",
                
                    # the properties below are optional
                    provisioned_read_capacity_units=123,
                    provisioned_write_capacity_units=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6d458f28019d4b4a6f2a06acd0db6858b60dffb2d229940dd18dcb6dd4e010a3)
                check_type(argname="argument throughput_mode", value=throughput_mode, expected_type=type_hints["throughput_mode"])
                check_type(argname="argument provisioned_read_capacity_units", value=provisioned_read_capacity_units, expected_type=type_hints["provisioned_read_capacity_units"])
                check_type(argname="argument provisioned_write_capacity_units", value=provisioned_write_capacity_units, expected_type=type_hints["provisioned_write_capacity_units"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "throughput_mode": throughput_mode,
            }
            if provisioned_read_capacity_units is not None:
                self._values["provisioned_read_capacity_units"] = provisioned_read_capacity_units
            if provisioned_write_capacity_units is not None:
                self._values["provisioned_write_capacity_units"] = provisioned_write_capacity_units

        @builtins.property
        def throughput_mode(self) -> builtins.str:
            '''The mode used for your feature group throughput: ``ON_DEMAND`` or ``PROVISIONED`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-throughputconfig.html#cfn-sagemaker-featuregroup-throughputconfig-throughputmode
            '''
            result = self._values.get("throughput_mode")
            assert result is not None, "Required property 'throughput_mode' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def provisioned_read_capacity_units(self) -> typing.Optional[jsii.Number]:
            '''For provisioned feature groups with online store enabled, this indicates the read throughput you are billed for and can consume without throttling.

            This field is not applicable for on-demand feature groups.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-throughputconfig.html#cfn-sagemaker-featuregroup-throughputconfig-provisionedreadcapacityunits
            '''
            result = self._values.get("provisioned_read_capacity_units")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def provisioned_write_capacity_units(self) -> typing.Optional[jsii.Number]:
            '''For provisioned feature groups, this indicates the write throughput you are billed for and can consume without throttling.

            This field is not applicable for on-demand feature groups.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-featuregroup-throughputconfig.html#cfn-sagemaker-featuregroup-throughputconfig-provisionedwritecapacityunits
            '''
            result = self._values.get("provisioned_write_capacity_units")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ThroughputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnFeatureGroupProps",
    jsii_struct_bases=[],
    name_mapping={
        "event_time_feature_name": "eventTimeFeatureName",
        "feature_definitions": "featureDefinitions",
        "feature_group_name": "featureGroupName",
        "record_identifier_feature_name": "recordIdentifierFeatureName",
        "description": "description",
        "offline_store_config": "offlineStoreConfig",
        "online_store_config": "onlineStoreConfig",
        "role_arn": "roleArn",
        "tags": "tags",
        "throughput_config": "throughputConfig",
    },
)
class CfnFeatureGroupProps:
    def __init__(
        self,
        *,
        event_time_feature_name: builtins.str,
        feature_definitions: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.FeatureDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]],
        feature_group_name: builtins.str,
        record_identifier_feature_name: builtins.str,
        description: typing.Optional[builtins.str] = None,
        offline_store_config: typing.Any = None,
        online_store_config: typing.Any = None,
        role_arn: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        throughput_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.ThroughputConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnFeatureGroup``.

        :param event_time_feature_name: The name of the feature that stores the ``EventTime`` of a Record in a ``FeatureGroup`` . A ``EventTime`` is point in time when a new event occurs that corresponds to the creation or update of a ``Record`` in ``FeatureGroup`` . All ``Records`` in the ``FeatureGroup`` must have a corresponding ``EventTime`` .
        :param feature_definitions: A list of ``Feature`` s. Each ``Feature`` must include a ``FeatureName`` and a ``FeatureType`` . Valid ``FeatureType`` s are ``Integral`` , ``Fractional`` and ``String`` . ``FeatureName`` s cannot be any of the following: ``is_deleted`` , ``write_time`` , ``api_invocation_time`` . You can create up to 2,500 ``FeatureDefinition`` s per ``FeatureGroup`` .
        :param feature_group_name: The name of the ``FeatureGroup`` .
        :param record_identifier_feature_name: The name of the ``Feature`` whose value uniquely identifies a ``Record`` defined in the ``FeatureGroup`` ``FeatureDefinitions`` .
        :param description: A free form description of a ``FeatureGroup`` .
        :param offline_store_config: The configuration of an ``OfflineStore`` .
        :param online_store_config: The configuration of an ``OnlineStore`` .
        :param role_arn: The Amazon Resource Name (ARN) of the IAM execution role used to create the feature group.
        :param tags: Tags used to define a ``FeatureGroup`` .
        :param throughput_config: Used to set feature group throughput configuration. There are two modes: ``ON_DEMAND`` and ``PROVISIONED`` . With on-demand mode, you are charged for data reads and writes that your application performs on your feature group. You do not need to specify read and write throughput because Feature Store accommodates your workloads as they ramp up and down. You can switch a feature group to on-demand only once in a 24 hour period. With provisioned throughput mode, you specify the read and write capacity per second that you expect your application to require, and you are billed based on those limits. Exceeding provisioned throughput will result in your requests being throttled. Note: ``PROVISIONED`` throughput mode is supported only for feature groups that are offline-only, or use the ```Standard`` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OnlineStoreConfig.html#sagemaker-Type-OnlineStoreConfig-StorageType>`_ tier online store.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # offline_store_config: Any
            # online_store_config: Any
            
            cfn_feature_group_props = sagemaker.CfnFeatureGroupProps(
                event_time_feature_name="eventTimeFeatureName",
                feature_definitions=[sagemaker.CfnFeatureGroup.FeatureDefinitionProperty(
                    feature_name="featureName",
                    feature_type="featureType"
                )],
                feature_group_name="featureGroupName",
                record_identifier_feature_name="recordIdentifierFeatureName",
            
                # the properties below are optional
                description="description",
                offline_store_config=offline_store_config,
                online_store_config=online_store_config,
                role_arn="roleArn",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                throughput_config=sagemaker.CfnFeatureGroup.ThroughputConfigProperty(
                    throughput_mode="throughputMode",
            
                    # the properties below are optional
                    provisioned_read_capacity_units=123,
                    provisioned_write_capacity_units=123
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bb1e9da53f754dd8978f06cdc95c9101b0ef89f3b1a689ab0a1e92eacd0a0951)
            check_type(argname="argument event_time_feature_name", value=event_time_feature_name, expected_type=type_hints["event_time_feature_name"])
            check_type(argname="argument feature_definitions", value=feature_definitions, expected_type=type_hints["feature_definitions"])
            check_type(argname="argument feature_group_name", value=feature_group_name, expected_type=type_hints["feature_group_name"])
            check_type(argname="argument record_identifier_feature_name", value=record_identifier_feature_name, expected_type=type_hints["record_identifier_feature_name"])
            check_type(argname="argument description", value=description, expected_type=type_hints["description"])
            check_type(argname="argument offline_store_config", value=offline_store_config, expected_type=type_hints["offline_store_config"])
            check_type(argname="argument online_store_config", value=online_store_config, expected_type=type_hints["online_store_config"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument throughput_config", value=throughput_config, expected_type=type_hints["throughput_config"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "event_time_feature_name": event_time_feature_name,
            "feature_definitions": feature_definitions,
            "feature_group_name": feature_group_name,
            "record_identifier_feature_name": record_identifier_feature_name,
        }
        if description is not None:
            self._values["description"] = description
        if offline_store_config is not None:
            self._values["offline_store_config"] = offline_store_config
        if online_store_config is not None:
            self._values["online_store_config"] = online_store_config
        if role_arn is not None:
            self._values["role_arn"] = role_arn
        if tags is not None:
            self._values["tags"] = tags
        if throughput_config is not None:
            self._values["throughput_config"] = throughput_config

    @builtins.property
    def event_time_feature_name(self) -> builtins.str:
        '''The name of the feature that stores the ``EventTime`` of a Record in a ``FeatureGroup`` .

        A ``EventTime`` is point in time when a new event occurs that corresponds to the creation or update of a ``Record`` in ``FeatureGroup`` . All ``Records`` in the ``FeatureGroup`` must have a corresponding ``EventTime`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-eventtimefeaturename
        '''
        result = self._values.get("event_time_feature_name")
        assert result is not None, "Required property 'event_time_feature_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def feature_definitions(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.FeatureDefinitionProperty]]]:
        '''A list of ``Feature`` s. Each ``Feature`` must include a ``FeatureName`` and a ``FeatureType`` .

        Valid ``FeatureType`` s are ``Integral`` , ``Fractional`` and ``String`` .

        ``FeatureName`` s cannot be any of the following: ``is_deleted`` , ``write_time`` , ``api_invocation_time`` .

        You can create up to 2,500 ``FeatureDefinition`` s per ``FeatureGroup`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-featuredefinitions
        '''
        result = self._values.get("feature_definitions")
        assert result is not None, "Required property 'feature_definitions' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.FeatureDefinitionProperty]]], result)

    @builtins.property
    def feature_group_name(self) -> builtins.str:
        '''The name of the ``FeatureGroup`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-featuregroupname
        '''
        result = self._values.get("feature_group_name")
        assert result is not None, "Required property 'feature_group_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def record_identifier_feature_name(self) -> builtins.str:
        '''The name of the ``Feature`` whose value uniquely identifies a ``Record`` defined in the ``FeatureGroup`` ``FeatureDefinitions`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-recordidentifierfeaturename
        '''
        result = self._values.get("record_identifier_feature_name")
        assert result is not None, "Required property 'record_identifier_feature_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def description(self) -> typing.Optional[builtins.str]:
        '''A free form description of a ``FeatureGroup`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-description
        '''
        result = self._values.get("description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def offline_store_config(self) -> typing.Any:
        '''The configuration of an ``OfflineStore`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-offlinestoreconfig
        '''
        result = self._values.get("offline_store_config")
        return typing.cast(typing.Any, result)

    @builtins.property
    def online_store_config(self) -> typing.Any:
        '''The configuration of an ``OnlineStore`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-onlinestoreconfig
        '''
        result = self._values.get("online_store_config")
        return typing.cast(typing.Any, result)

    @builtins.property
    def role_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the IAM execution role used to create the feature group.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-rolearn
        '''
        result = self._values.get("role_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Tags used to define a ``FeatureGroup`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def throughput_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.ThroughputConfigProperty]]:
        '''Used to set feature group throughput configuration.

        There are two modes: ``ON_DEMAND`` and ``PROVISIONED`` . With on-demand mode, you are charged for data reads and writes that your application performs on your feature group. You do not need to specify read and write throughput because Feature Store accommodates your workloads as they ramp up and down. You can switch a feature group to on-demand only once in a 24 hour period. With provisioned throughput mode, you specify the read and write capacity per second that you expect your application to require, and you are billed based on those limits. Exceeding provisioned throughput will result in your requests being throttled.

        Note: ``PROVISIONED`` throughput mode is supported only for feature groups that are offline-only, or use the ```Standard`` <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OnlineStoreConfig.html#sagemaker-Type-OnlineStoreConfig-StorageType>`_ tier online store.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-featuregroup.html#cfn-sagemaker-featuregroup-throughputconfig
        '''
        result = self._values.get("throughput_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.ThroughputConfigProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnFeatureGroupProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnImage(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnImage",
):
    '''Creates a custom SageMaker image.

    A SageMaker image is a set of image versions. Each image version represents a container image stored in Amazon Elastic Container Registry (ECR). For more information, see `Bring your own SageMaker image <https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html
    :cloudformationResource: AWS::SageMaker::Image
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_image = sagemaker.CfnImage(self, "MyCfnImage",
            image_name="imageName",
            image_role_arn="imageRoleArn",
        
            # the properties below are optional
            image_description="imageDescription",
            image_display_name="imageDisplayName",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        image_name: builtins.str,
        image_role_arn: builtins.str,
        image_description: typing.Optional[builtins.str] = None,
        image_display_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param image_name: The name of the Image. Must be unique by region in your account. *Length Constraints* : Minimum length of 1. Maximum length of 63. *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``
        :param image_role_arn: The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on your behalf. *Length Constraints* : Minimum length of 20. Maximum length of 2048. *Pattern* : ``^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$``
        :param image_description: The description of the image.
        :param image_display_name: The display name of the image. *Length Constraints* : Minimum length of 1. Maximum length of 128. *Pattern* : ``^\\S(.*\\S)?$``
        :param tags: A list of key-value pairs to apply to this resource. *Array Members* : Minimum number of 0 items. Maximum number of 50 items.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dde982bdab4dea21946725303bd84c1eb61267733b6351eb23c00f7d036f6966)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnImageProps(
            image_name=image_name,
            image_role_arn=image_role_arn,
            image_description=image_description,
            image_display_name=image_display_name,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3683228322bbbd09cb4aac0a4469f1685a49afb4d71c553abbab272eaef100dc)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4230003faeb71eb706948f19ec046a12d72b36d81d5e22c11bcc3b1ebe02c2c0)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrImageArn")
    def attr_image_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the image.

        *Type* : String

        *Length Constraints* : Maximum length of 256.

        *Pattern* : ``^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image/[a-z0-9]([-.]?[a-z0-9])*$``

        :cloudformationAttribute: ImageArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrImageArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="imageName")
    def image_name(self) -> builtins.str:
        '''The name of the Image.

        Must be unique by region in your account.
        '''
        return typing.cast(builtins.str, jsii.get(self, "imageName"))

    @image_name.setter
    def image_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c83dda1eec4dea7e586e14528740a9a908c8dc9cfdfaa25322bcb6254256fe95)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "imageName", value)

    @builtins.property
    @jsii.member(jsii_name="imageRoleArn")
    def image_role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "imageRoleArn"))

    @image_role_arn.setter
    def image_role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f4cb3cf1a068192a3c85d41bfd4e7865613f5eaad72e81e906ea09806af1a6a2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "imageRoleArn", value)

    @builtins.property
    @jsii.member(jsii_name="imageDescription")
    def image_description(self) -> typing.Optional[builtins.str]:
        '''The description of the image.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "imageDescription"))

    @image_description.setter
    def image_description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d98fb90f3bdd23e0a7e2f8f7f3b5da1a34a2efdfb7989565b70a598777d1d2e9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "imageDescription", value)

    @builtins.property
    @jsii.member(jsii_name="imageDisplayName")
    def image_display_name(self) -> typing.Optional[builtins.str]:
        '''The display name of the image.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "imageDisplayName"))

    @image_display_name.setter
    def image_display_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9507742917d9e396f824e9318497084f8ae68b4ebb9daa0f6845e96629a78a4d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "imageDisplayName", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cc08ec4a8b34363d9c0cf6afe34c04e17ea65e896db8f146c6a6a1ba5a120bb1)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnImageProps",
    jsii_struct_bases=[],
    name_mapping={
        "image_name": "imageName",
        "image_role_arn": "imageRoleArn",
        "image_description": "imageDescription",
        "image_display_name": "imageDisplayName",
        "tags": "tags",
    },
)
class CfnImageProps:
    def __init__(
        self,
        *,
        image_name: builtins.str,
        image_role_arn: builtins.str,
        image_description: typing.Optional[builtins.str] = None,
        image_display_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnImage``.

        :param image_name: The name of the Image. Must be unique by region in your account. *Length Constraints* : Minimum length of 1. Maximum length of 63. *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``
        :param image_role_arn: The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on your behalf. *Length Constraints* : Minimum length of 20. Maximum length of 2048. *Pattern* : ``^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$``
        :param image_description: The description of the image.
        :param image_display_name: The display name of the image. *Length Constraints* : Minimum length of 1. Maximum length of 128. *Pattern* : ``^\\S(.*\\S)?$``
        :param tags: A list of key-value pairs to apply to this resource. *Array Members* : Minimum number of 0 items. Maximum number of 50 items.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_image_props = sagemaker.CfnImageProps(
                image_name="imageName",
                image_role_arn="imageRoleArn",
            
                # the properties below are optional
                image_description="imageDescription",
                image_display_name="imageDisplayName",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dc32c041f4bbebc30466bd7f70f1571b2e2a1def5e8e2166caa2d830a35fe8e8)
            check_type(argname="argument image_name", value=image_name, expected_type=type_hints["image_name"])
            check_type(argname="argument image_role_arn", value=image_role_arn, expected_type=type_hints["image_role_arn"])
            check_type(argname="argument image_description", value=image_description, expected_type=type_hints["image_description"])
            check_type(argname="argument image_display_name", value=image_display_name, expected_type=type_hints["image_display_name"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "image_name": image_name,
            "image_role_arn": image_role_arn,
        }
        if image_description is not None:
            self._values["image_description"] = image_description
        if image_display_name is not None:
            self._values["image_display_name"] = image_display_name
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def image_name(self) -> builtins.str:
        '''The name of the Image. Must be unique by region in your account.

        *Length Constraints* : Minimum length of 1. Maximum length of 63.

        *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-imagename
        '''
        result = self._values.get("image_name")
        assert result is not None, "Required property 'image_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def image_role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that enables Amazon SageMaker to perform tasks on your behalf.

        *Length Constraints* : Minimum length of 20. Maximum length of 2048.

        *Pattern* : ``^arn:aws[a-z\\-]*:iam::\\d{12}:role/?[a-zA-Z_0-9+=,.@\\-_/]+$``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-imagerolearn
        '''
        result = self._values.get("image_role_arn")
        assert result is not None, "Required property 'image_role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def image_description(self) -> typing.Optional[builtins.str]:
        '''The description of the image.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-imagedescription
        '''
        result = self._values.get("image_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def image_display_name(self) -> typing.Optional[builtins.str]:
        '''The display name of the image.

        *Length Constraints* : Minimum length of 1. Maximum length of 128.

        *Pattern* : ``^\\S(.*\\S)?$``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-imagedisplayname
        '''
        result = self._values.get("image_display_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        *Array Members* : Minimum number of 0 items. Maximum number of 50 items.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-image.html#cfn-sagemaker-image-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnImageProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556)
class CfnImageVersion(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnImageVersion",
):
    '''Creates a version of the SageMaker image specified by ``ImageName`` .

    The version represents the Amazon Container Registry (ECR) container image specified by ``BaseImage`` .
    .. epigraph::

       You can use the ``DependsOn`` attribute to specify that the creation of a specific resource follows another. You can use it for the following use cases. For more information, see ```DependsOn`` attribute <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html>`_ .

       1. ``DependsOn`` can be used to establish a parent/child relationship between ``ImageVersion`` and ``Image`` where the ``ImageVersion`` ``DependsOn`` the ``Image`` .
       2. ``DependsOn`` can be used to establish order among ``ImageVersion`` s within the same ``Image`` namespace. For example, if ImageVersionB ``DependsOn`` ImageVersionA and both share the same parent ``Image`` , then ImageVersionA is version N and ImageVersionB is N+1.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html
    :cloudformationResource: AWS::SageMaker::ImageVersion
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_image_version = sagemaker.CfnImageVersion(self, "MyCfnImageVersion",
            base_image="baseImage",
            image_name="imageName",
        
            # the properties below are optional
            alias="alias",
            aliases=["aliases"],
            horovod=False,
            job_type="jobType",
            ml_framework="mlFramework",
            processor="processor",
            programming_lang="programmingLang",
            release_notes="releaseNotes",
            vendor_guidance="vendorGuidance"
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        base_image: builtins.str,
        image_name: builtins.str,
        alias: typing.Optional[builtins.str] = None,
        aliases: typing.Optional[typing.Sequence[builtins.str]] = None,
        horovod: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        job_type: typing.Optional[builtins.str] = None,
        ml_framework: typing.Optional[builtins.str] = None,
        processor: typing.Optional[builtins.str] = None,
        programming_lang: typing.Optional[builtins.str] = None,
        release_notes: typing.Optional[builtins.str] = None,
        vendor_guidance: typing.Optional[builtins.str] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param base_image: The container image that the SageMaker image version is based on.
        :param image_name: The name of the parent image. *Length Constraints* : Minimum length of 1. Maximum length of 63. *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``
        :param alias: The alias of the image version.
        :param aliases: List of aliases for the image version.
        :param horovod: Indicates Horovod compatibility.
        :param job_type: Indicates SageMaker job type compatibility.
        :param ml_framework: The machine learning framework vended in the image version.
        :param processor: Indicates CPU or GPU compatibility.
        :param programming_lang: The supported programming language and its version.
        :param release_notes: The maintainer description of the image version.
        :param vendor_guidance: The availability of the image version specified by the maintainer.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1ad8c361f2876657ea1cf0f0f9f7356de06575f95ad80d7a587da19094ecd39f)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnImageVersionProps(
            base_image=base_image,
            image_name=image_name,
            alias=alias,
            aliases=aliases,
            horovod=horovod,
            job_type=job_type,
            ml_framework=ml_framework,
            processor=processor,
            programming_lang=programming_lang,
            release_notes=release_notes,
            vendor_guidance=vendor_guidance,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d5617eaff0fc7e0099928623a36e2b9f1458a37ad9fe1fa24bd54f054ebffae4)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0c4bc42175535dc7e1f18100775e38634217828944c7afb9a921d5d4ded34609)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrContainerImage")
    def attr_container_image(self) -> builtins.str:
        '''The URI of the container image version referenced by ImageVersion.

        :cloudformationAttribute: ContainerImage
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrContainerImage"))

    @builtins.property
    @jsii.member(jsii_name="attrImageArn")
    def attr_image_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the parent Image.

        :cloudformationAttribute: ImageArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrImageArn"))

    @builtins.property
    @jsii.member(jsii_name="attrImageVersionArn")
    def attr_image_version_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the image version.

        *Type* : String

        *Length Constraints* : Maximum length of 256.

        *Pattern* : ``^arn:aws(-[\\w]+)*:sagemaker:.+:[0-9]{12}:image-version/[a-z0-9]([-.]?[a-z0-9])* /[0-9]+$``

        :cloudformationAttribute: ImageVersionArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrImageVersionArn"))

    @builtins.property
    @jsii.member(jsii_name="attrVersion")
    def attr_version(self) -> jsii.Number:
        '''The version of the image.

        :cloudformationAttribute: Version
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrVersion"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="baseImage")
    def base_image(self) -> builtins.str:
        '''The container image that the SageMaker image version is based on.'''
        return typing.cast(builtins.str, jsii.get(self, "baseImage"))

    @base_image.setter
    def base_image(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4cd7f0125c670f13843a82d4765f1707e53ed79633a107bc8f478ee89f7c4447)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "baseImage", value)

    @builtins.property
    @jsii.member(jsii_name="imageName")
    def image_name(self) -> builtins.str:
        '''The name of the parent image.'''
        return typing.cast(builtins.str, jsii.get(self, "imageName"))

    @image_name.setter
    def image_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__32397b68bd7477c88dd5aca2fab6262902fec8c5be04520516af969354dc3411)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "imageName", value)

    @builtins.property
    @jsii.member(jsii_name="alias")
    def alias(self) -> typing.Optional[builtins.str]:
        '''The alias of the image version.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "alias"))

    @alias.setter
    def alias(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__130335aafd8604a37bb0c6378189d323e11f1c9a8d9de59d6826369f2086fb54)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "alias", value)

    @builtins.property
    @jsii.member(jsii_name="aliases")
    def aliases(self) -> typing.Optional[typing.List[builtins.str]]:
        '''List of aliases for the image version.'''
        return typing.cast(typing.Optional[typing.List[builtins.str]], jsii.get(self, "aliases"))

    @aliases.setter
    def aliases(self, value: typing.Optional[typing.List[builtins.str]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1b53841ef8f974620a34f1089ddd34dab945dc1cfc6214ff5c96805c28fee339)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "aliases", value)

    @builtins.property
    @jsii.member(jsii_name="horovod")
    def horovod(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Indicates Horovod compatibility.'''
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "horovod"))

    @horovod.setter
    def horovod(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__63b740d348bf3bc8f512963928cc212f67fef7490d5bc60dbf44641d8a8bba80)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "horovod", value)

    @builtins.property
    @jsii.member(jsii_name="jobType")
    def job_type(self) -> typing.Optional[builtins.str]:
        '''Indicates SageMaker job type compatibility.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "jobType"))

    @job_type.setter
    def job_type(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4325909e50b32e3c971c803ff8d527558eaf27440a7e1eecd39347ec829edf7e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobType", value)

    @builtins.property
    @jsii.member(jsii_name="mlFramework")
    def ml_framework(self) -> typing.Optional[builtins.str]:
        '''The machine learning framework vended in the image version.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "mlFramework"))

    @ml_framework.setter
    def ml_framework(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__81d68f0650f7bba3ce23357345acab3a7f8c2473cb1f04dd8ec3718f4ad3f061)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "mlFramework", value)

    @builtins.property
    @jsii.member(jsii_name="processor")
    def processor(self) -> typing.Optional[builtins.str]:
        '''Indicates CPU or GPU compatibility.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "processor"))

    @processor.setter
    def processor(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__51796dc1c41721e2403c8fcaf57981fc62e4d27583b46f696048e71c11c42217)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "processor", value)

    @builtins.property
    @jsii.member(jsii_name="programmingLang")
    def programming_lang(self) -> typing.Optional[builtins.str]:
        '''The supported programming language and its version.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "programmingLang"))

    @programming_lang.setter
    def programming_lang(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__558e00760dafdf270030f6c74f7af644a9073b029f802c09baf4ca45a0f96579)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "programmingLang", value)

    @builtins.property
    @jsii.member(jsii_name="releaseNotes")
    def release_notes(self) -> typing.Optional[builtins.str]:
        '''The maintainer description of the image version.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "releaseNotes"))

    @release_notes.setter
    def release_notes(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fdda2091c290a3c94f3594803b8ff7d3846931cb6976f4fbe76584d69581fac1)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "releaseNotes", value)

    @builtins.property
    @jsii.member(jsii_name="vendorGuidance")
    def vendor_guidance(self) -> typing.Optional[builtins.str]:
        '''The availability of the image version specified by the maintainer.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "vendorGuidance"))

    @vendor_guidance.setter
    def vendor_guidance(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5382fea0d28fb1b1a6c04307334e93f65dd93058c962443126e5776048b93ac6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vendorGuidance", value)


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnImageVersionProps",
    jsii_struct_bases=[],
    name_mapping={
        "base_image": "baseImage",
        "image_name": "imageName",
        "alias": "alias",
        "aliases": "aliases",
        "horovod": "horovod",
        "job_type": "jobType",
        "ml_framework": "mlFramework",
        "processor": "processor",
        "programming_lang": "programmingLang",
        "release_notes": "releaseNotes",
        "vendor_guidance": "vendorGuidance",
    },
)
class CfnImageVersionProps:
    def __init__(
        self,
        *,
        base_image: builtins.str,
        image_name: builtins.str,
        alias: typing.Optional[builtins.str] = None,
        aliases: typing.Optional[typing.Sequence[builtins.str]] = None,
        horovod: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        job_type: typing.Optional[builtins.str] = None,
        ml_framework: typing.Optional[builtins.str] = None,
        processor: typing.Optional[builtins.str] = None,
        programming_lang: typing.Optional[builtins.str] = None,
        release_notes: typing.Optional[builtins.str] = None,
        vendor_guidance: typing.Optional[builtins.str] = None,
    ) -> None:
        '''Properties for defining a ``CfnImageVersion``.

        :param base_image: The container image that the SageMaker image version is based on.
        :param image_name: The name of the parent image. *Length Constraints* : Minimum length of 1. Maximum length of 63. *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``
        :param alias: The alias of the image version.
        :param aliases: List of aliases for the image version.
        :param horovod: Indicates Horovod compatibility.
        :param job_type: Indicates SageMaker job type compatibility.
        :param ml_framework: The machine learning framework vended in the image version.
        :param processor: Indicates CPU or GPU compatibility.
        :param programming_lang: The supported programming language and its version.
        :param release_notes: The maintainer description of the image version.
        :param vendor_guidance: The availability of the image version specified by the maintainer.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_image_version_props = sagemaker.CfnImageVersionProps(
                base_image="baseImage",
                image_name="imageName",
            
                # the properties below are optional
                alias="alias",
                aliases=["aliases"],
                horovod=False,
                job_type="jobType",
                ml_framework="mlFramework",
                processor="processor",
                programming_lang="programmingLang",
                release_notes="releaseNotes",
                vendor_guidance="vendorGuidance"
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__eb1cf2f49fa3a5bb0e6e9fdd2097a7a9401edb65fabfda045235c1b04b02fbf1)
            check_type(argname="argument base_image", value=base_image, expected_type=type_hints["base_image"])
            check_type(argname="argument image_name", value=image_name, expected_type=type_hints["image_name"])
            check_type(argname="argument alias", value=alias, expected_type=type_hints["alias"])
            check_type(argname="argument aliases", value=aliases, expected_type=type_hints["aliases"])
            check_type(argname="argument horovod", value=horovod, expected_type=type_hints["horovod"])
            check_type(argname="argument job_type", value=job_type, expected_type=type_hints["job_type"])
            check_type(argname="argument ml_framework", value=ml_framework, expected_type=type_hints["ml_framework"])
            check_type(argname="argument processor", value=processor, expected_type=type_hints["processor"])
            check_type(argname="argument programming_lang", value=programming_lang, expected_type=type_hints["programming_lang"])
            check_type(argname="argument release_notes", value=release_notes, expected_type=type_hints["release_notes"])
            check_type(argname="argument vendor_guidance", value=vendor_guidance, expected_type=type_hints["vendor_guidance"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "base_image": base_image,
            "image_name": image_name,
        }
        if alias is not None:
            self._values["alias"] = alias
        if aliases is not None:
            self._values["aliases"] = aliases
        if horovod is not None:
            self._values["horovod"] = horovod
        if job_type is not None:
            self._values["job_type"] = job_type
        if ml_framework is not None:
            self._values["ml_framework"] = ml_framework
        if processor is not None:
            self._values["processor"] = processor
        if programming_lang is not None:
            self._values["programming_lang"] = programming_lang
        if release_notes is not None:
            self._values["release_notes"] = release_notes
        if vendor_guidance is not None:
            self._values["vendor_guidance"] = vendor_guidance

    @builtins.property
    def base_image(self) -> builtins.str:
        '''The container image that the SageMaker image version is based on.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-baseimage
        '''
        result = self._values.get("base_image")
        assert result is not None, "Required property 'base_image' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def image_name(self) -> builtins.str:
        '''The name of the parent image.

        *Length Constraints* : Minimum length of 1. Maximum length of 63.

        *Pattern* : ``^[a-zA-Z0-9]([-.]?[a-zA-Z0-9]){0,62}$``

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-imagename
        '''
        result = self._values.get("image_name")
        assert result is not None, "Required property 'image_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def alias(self) -> typing.Optional[builtins.str]:
        '''The alias of the image version.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-alias
        '''
        result = self._values.get("alias")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def aliases(self) -> typing.Optional[typing.List[builtins.str]]:
        '''List of aliases for the image version.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-aliases
        '''
        result = self._values.get("aliases")
        return typing.cast(typing.Optional[typing.List[builtins.str]], result)

    @builtins.property
    def horovod(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Indicates Horovod compatibility.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-horovod
        '''
        result = self._values.get("horovod")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def job_type(self) -> typing.Optional[builtins.str]:
        '''Indicates SageMaker job type compatibility.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-jobtype
        '''
        result = self._values.get("job_type")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def ml_framework(self) -> typing.Optional[builtins.str]:
        '''The machine learning framework vended in the image version.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-mlframework
        '''
        result = self._values.get("ml_framework")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def processor(self) -> typing.Optional[builtins.str]:
        '''Indicates CPU or GPU compatibility.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-processor
        '''
        result = self._values.get("processor")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def programming_lang(self) -> typing.Optional[builtins.str]:
        '''The supported programming language and its version.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-programminglang
        '''
        result = self._values.get("programming_lang")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def release_notes(self) -> typing.Optional[builtins.str]:
        '''The maintainer description of the image version.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-releasenotes
        '''
        result = self._values.get("release_notes")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def vendor_guidance(self) -> typing.Optional[builtins.str]:
        '''The availability of the image version specified by the maintainer.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-imageversion.html#cfn-sagemaker-imageversion-vendorguidance
        '''
        result = self._values.get("vendor_guidance")
        return typing.cast(typing.Optional[builtins.str], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnImageVersionProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556)
class CfnInferenceComponent(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent",
):
    '''Creates an inference component, which is a SageMaker hosting object that you can use to deploy a model to an endpoint.

    In the inference component settings, you specify the model, the endpoint, and how the model utilizes the resources that the endpoint hosts. You can optimize resource utilization by tailoring how the required CPU cores, accelerators, and memory are allocated. You can deploy multiple inference components to an endpoint, where each inference component contains one model and the resource utilization needs for that individual model. After you deploy an inference component, you can directly invoke the associated model when you use the InvokeEndpoint API action.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html
    :cloudformationResource: AWS::SageMaker::InferenceComponent
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_inference_component = sagemaker.CfnInferenceComponent(self, "MyCfnInferenceComponent",
            endpoint_name="endpointName",
            runtime_config=sagemaker.CfnInferenceComponent.InferenceComponentRuntimeConfigProperty(
                copy_count=123,
                current_copy_count=123,
                desired_copy_count=123
            ),
            specification=sagemaker.CfnInferenceComponent.InferenceComponentSpecificationProperty(
                compute_resource_requirements=sagemaker.CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty(
                    max_memory_required_in_mb=123,
                    min_memory_required_in_mb=123,
                    number_of_accelerator_devices_required=123,
                    number_of_cpu_cores_required=123
                ),
        
                # the properties below are optional
                container=sagemaker.CfnInferenceComponent.InferenceComponentContainerSpecificationProperty(
                    artifact_url="artifactUrl",
                    deployed_image=sagemaker.CfnInferenceComponent.DeployedImageProperty(
                        resolution_time="resolutionTime",
                        resolved_image="resolvedImage",
                        specified_image="specifiedImage"
                    ),
                    environment={
                        "environment_key": "environment"
                    },
                    image="image"
                ),
                model_name="modelName",
                startup_parameters=sagemaker.CfnInferenceComponent.InferenceComponentStartupParametersProperty(
                    container_startup_health_check_timeout_in_seconds=123,
                    model_data_download_timeout_in_seconds=123
                )
            ),
            variant_name="variantName",
        
            # the properties below are optional
            endpoint_arn="endpointArn",
            inference_component_name="inferenceComponentName",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        endpoint_name: builtins.str,
        runtime_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.InferenceComponentRuntimeConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.InferenceComponentSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
        variant_name: builtins.str,
        endpoint_arn: typing.Optional[builtins.str] = None,
        inference_component_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param endpoint_name: The name of the endpoint that hosts the inference component.
        :param runtime_config: The runtime config for the inference component.
        :param specification: The specification for the inference component.
        :param variant_name: The name of the production variant that hosts the inference component.
        :param endpoint_arn: The Amazon Resource Name (ARN) of the endpoint that hosts the inference component.
        :param inference_component_name: The name of the inference component.
        :param tags: An array of tags to apply to the resource.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3f4e5766b29b94468be54bb573abdb408c06e9ece9272100939b3c0180556e58)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnInferenceComponentProps(
            endpoint_name=endpoint_name,
            runtime_config=runtime_config,
            specification=specification,
            variant_name=variant_name,
            endpoint_arn=endpoint_arn,
            inference_component_name=inference_component_name,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b1229b87a01037ac1a39fba400729787882a0e5da916a89f8f2d664594cf6695)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ea8877be2acff923e7ef08e1efa4d1f02452a154b43e2e34180d83113e4cb35a)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the inference component was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrFailureReason")
    def attr_failure_reason(self) -> builtins.str:
        '''The failure reason if the inference component is in a failed state.

        :cloudformationAttribute: FailureReason
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrFailureReason"))

    @builtins.property
    @jsii.member(jsii_name="attrInferenceComponentArn")
    def attr_inference_component_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the inference component.

        :cloudformationAttribute: InferenceComponentArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrInferenceComponentArn"))

    @builtins.property
    @jsii.member(jsii_name="attrInferenceComponentStatus")
    def attr_inference_component_status(self) -> builtins.str:
        '''The status of the inference component.

        :cloudformationAttribute: InferenceComponentStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrInferenceComponentStatus"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedTime")
    def attr_last_modified_time(self) -> builtins.str:
        '''The time when the inference component was last updated.

        :cloudformationAttribute: LastModifiedTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedTime"))

    @builtins.property
    @jsii.member(jsii_name="attrRuntimeConfigCurrentCopyCount")
    def attr_runtime_config_current_copy_count(self) -> jsii.Number:
        '''The number of copies for the inference component.

        :cloudformationAttribute: RuntimeConfig.CurrentCopyCount
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrRuntimeConfigCurrentCopyCount"))

    @builtins.property
    @jsii.member(jsii_name="attrRuntimeConfigDesiredCopyCount")
    def attr_runtime_config_desired_copy_count(self) -> jsii.Number:
        '''The number of copies for the inference component.

        :cloudformationAttribute: RuntimeConfig.DesiredCopyCount
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrRuntimeConfigDesiredCopyCount"))

    @builtins.property
    @jsii.member(jsii_name="attrSpecificationContainerDeployedImage")
    def attr_specification_container_deployed_image(self) -> _IResolvable_da3f097b:
        '''
        :cloudformationAttribute: Specification.Container.DeployedImage
        '''
        return typing.cast(_IResolvable_da3f097b, jsii.get(self, "attrSpecificationContainerDeployedImage"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint that hosts the inference component.'''
        return typing.cast(builtins.str, jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b5da5a7b9146494fb112ee7d607f46334dc3051d93d50b77735f62bdd6ca326a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="runtimeConfig")
    def runtime_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentRuntimeConfigProperty"]:
        '''The runtime config for the inference component.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentRuntimeConfigProperty"], jsii.get(self, "runtimeConfig"))

    @runtime_config.setter
    def runtime_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentRuntimeConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4e7c351a25e5bcfa57adb1a6effe98407a73bd29e017ee9e9dea5d09a2106d9c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "runtimeConfig", value)

    @builtins.property
    @jsii.member(jsii_name="specification")
    def specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentSpecificationProperty"]:
        '''The specification for the inference component.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentSpecificationProperty"], jsii.get(self, "specification"))

    @specification.setter
    def specification(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentSpecificationProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0adfcd5be0b7e042e0a87c6ccfbe4b53fc4803e5b7da8ad8951b7875f1bc187d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "specification", value)

    @builtins.property
    @jsii.member(jsii_name="variantName")
    def variant_name(self) -> builtins.str:
        '''The name of the production variant that hosts the inference component.'''
        return typing.cast(builtins.str, jsii.get(self, "variantName"))

    @variant_name.setter
    def variant_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ca03af9ff83216f8a0636af33c0e4a7a2eb600513b2eed7eb75f082151eb70e5)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "variantName", value)

    @builtins.property
    @jsii.member(jsii_name="endpointArn")
    def endpoint_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the endpoint that hosts the inference component.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointArn"))

    @endpoint_arn.setter
    def endpoint_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6177c630f46f5680f400bfc08061f6f7a9f5f1e1736976ebe24194a8378cbb9c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointArn", value)

    @builtins.property
    @jsii.member(jsii_name="inferenceComponentName")
    def inference_component_name(self) -> typing.Optional[builtins.str]:
        '''The name of the inference component.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "inferenceComponentName"))

    @inference_component_name.setter
    def inference_component_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3472a30311d416ad067afa5672326f2c73cf974625b4aa6be0907db35a5a4bac)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inferenceComponentName", value)

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of tags to apply to the resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tags"))

    @tags.setter
    def tags(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__01670e9b8687fbb8bb10369a12d0d3b7f4aba931c3ce72496c12f3a81c2890f4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tags", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.DeployedImageProperty",
        jsii_struct_bases=[],
        name_mapping={
            "resolution_time": "resolutionTime",
            "resolved_image": "resolvedImage",
            "specified_image": "specifiedImage",
        },
    )
    class DeployedImageProperty:
        def __init__(
            self,
            *,
            resolution_time: typing.Optional[builtins.str] = None,
            resolved_image: typing.Optional[builtins.str] = None,
            specified_image: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Gets the Amazon EC2 Container Registry path of the docker image of the model that is hosted in this `ProductionVariant <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html>`_ .

            If you used the ``registry/repository[:tag]`` form to specify the image path of the primary container when you created the model hosted in this ``ProductionVariant`` , the path resolves to a path of the form ``registry/repository[@digest]`` . A digest is a hash value that identifies a specific version of an image. For information about Amazon ECR paths, see `Pulling an Image <https://docs.aws.amazon.com//AmazonECR/latest/userguide/docker-pull-ecr-image.html>`_ in the *Amazon ECR User Guide* .

            :param resolution_time: The date and time when the image path for the model resolved to the ``ResolvedImage``.
            :param resolved_image: The specific digest path of the image hosted in this ``ProductionVariant`` .
            :param specified_image: The image path you specified when you created the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-deployedimage.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                deployed_image_property = sagemaker.CfnInferenceComponent.DeployedImageProperty(
                    resolution_time="resolutionTime",
                    resolved_image="resolvedImage",
                    specified_image="specifiedImage"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c27834d414a93bc1a61027191b0a24b7e6f65578d28266dfd21a6ed1a5a85ee1)
                check_type(argname="argument resolution_time", value=resolution_time, expected_type=type_hints["resolution_time"])
                check_type(argname="argument resolved_image", value=resolved_image, expected_type=type_hints["resolved_image"])
                check_type(argname="argument specified_image", value=specified_image, expected_type=type_hints["specified_image"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if resolution_time is not None:
                self._values["resolution_time"] = resolution_time
            if resolved_image is not None:
                self._values["resolved_image"] = resolved_image
            if specified_image is not None:
                self._values["specified_image"] = specified_image

        @builtins.property
        def resolution_time(self) -> typing.Optional[builtins.str]:
            '''The date and time when the image path for the model resolved to the ``ResolvedImage``.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-deployedimage.html#cfn-sagemaker-inferencecomponent-deployedimage-resolutiontime
            '''
            result = self._values.get("resolution_time")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def resolved_image(self) -> typing.Optional[builtins.str]:
            '''The specific digest path of the image hosted in this ``ProductionVariant`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-deployedimage.html#cfn-sagemaker-inferencecomponent-deployedimage-resolvedimage
            '''
            result = self._values.get("resolved_image")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def specified_image(self) -> typing.Optional[builtins.str]:
            '''The image path you specified when you created the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-deployedimage.html#cfn-sagemaker-inferencecomponent-deployedimage-specifiedimage
            '''
            result = self._values.get("specified_image")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DeployedImageProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "max_memory_required_in_mb": "maxMemoryRequiredInMb",
            "min_memory_required_in_mb": "minMemoryRequiredInMb",
            "number_of_accelerator_devices_required": "numberOfAcceleratorDevicesRequired",
            "number_of_cpu_cores_required": "numberOfCpuCoresRequired",
        },
    )
    class InferenceComponentComputeResourceRequirementsProperty:
        def __init__(
            self,
            *,
            max_memory_required_in_mb: typing.Optional[jsii.Number] = None,
            min_memory_required_in_mb: typing.Optional[jsii.Number] = None,
            number_of_accelerator_devices_required: typing.Optional[jsii.Number] = None,
            number_of_cpu_cores_required: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Defines the compute resources to allocate to run a model that you assign to an inference component.

            These resources include CPU cores, accelerators, and memory.

            :param max_memory_required_in_mb: The maximum MB of memory to allocate to run a model that you assign to an inference component.
            :param min_memory_required_in_mb: The minimum MB of memory to allocate to run a model that you assign to an inference component.
            :param number_of_accelerator_devices_required: The number of accelerators to allocate to run a model that you assign to an inference component. Accelerators include GPUs and AWS Inferentia.
            :param number_of_cpu_cores_required: The number of CPU cores to allocate to run a model that you assign to an inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_component_compute_resource_requirements_property = sagemaker.CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty(
                    max_memory_required_in_mb=123,
                    min_memory_required_in_mb=123,
                    number_of_accelerator_devices_required=123,
                    number_of_cpu_cores_required=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c434e562757acaaae52cb6bda4572fad68492cf9a55f32d82b5e11d8f3897a91)
                check_type(argname="argument max_memory_required_in_mb", value=max_memory_required_in_mb, expected_type=type_hints["max_memory_required_in_mb"])
                check_type(argname="argument min_memory_required_in_mb", value=min_memory_required_in_mb, expected_type=type_hints["min_memory_required_in_mb"])
                check_type(argname="argument number_of_accelerator_devices_required", value=number_of_accelerator_devices_required, expected_type=type_hints["number_of_accelerator_devices_required"])
                check_type(argname="argument number_of_cpu_cores_required", value=number_of_cpu_cores_required, expected_type=type_hints["number_of_cpu_cores_required"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if max_memory_required_in_mb is not None:
                self._values["max_memory_required_in_mb"] = max_memory_required_in_mb
            if min_memory_required_in_mb is not None:
                self._values["min_memory_required_in_mb"] = min_memory_required_in_mb
            if number_of_accelerator_devices_required is not None:
                self._values["number_of_accelerator_devices_required"] = number_of_accelerator_devices_required
            if number_of_cpu_cores_required is not None:
                self._values["number_of_cpu_cores_required"] = number_of_cpu_cores_required

        @builtins.property
        def max_memory_required_in_mb(self) -> typing.Optional[jsii.Number]:
            '''The maximum MB of memory to allocate to run a model that you assign to an inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements.html#cfn-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements-maxmemoryrequiredinmb
            '''
            result = self._values.get("max_memory_required_in_mb")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def min_memory_required_in_mb(self) -> typing.Optional[jsii.Number]:
            '''The minimum MB of memory to allocate to run a model that you assign to an inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements.html#cfn-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements-minmemoryrequiredinmb
            '''
            result = self._values.get("min_memory_required_in_mb")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def number_of_accelerator_devices_required(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The number of accelerators to allocate to run a model that you assign to an inference component.

            Accelerators include GPUs and AWS Inferentia.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements.html#cfn-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements-numberofacceleratordevicesrequired
            '''
            result = self._values.get("number_of_accelerator_devices_required")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def number_of_cpu_cores_required(self) -> typing.Optional[jsii.Number]:
            '''The number of CPU cores to allocate to run a model that you assign to an inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements.html#cfn-sagemaker-inferencecomponent-inferencecomponentcomputeresourcerequirements-numberofcpucoresrequired
            '''
            result = self._values.get("number_of_cpu_cores_required")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceComponentComputeResourceRequirementsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.InferenceComponentContainerSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "artifact_url": "artifactUrl",
            "deployed_image": "deployedImage",
            "environment": "environment",
            "image": "image",
        },
    )
    class InferenceComponentContainerSpecificationProperty:
        def __init__(
            self,
            *,
            artifact_url: typing.Optional[builtins.str] = None,
            deployed_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.DeployedImageProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            image: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Defines a container that provides the runtime environment for a model that you deploy with an inference component.

            :param artifact_url: The Amazon S3 path where the model artifacts, which result from model training, are stored. This path must point to a single gzip compressed tar archive (.tar.gz suffix).
            :param deployed_image: 
            :param environment: The environment variables to set in the Docker container. Each key and value in the Environment string-to-string map can have length of up to 1024. We support up to 16 entries in the map.
            :param image: The Amazon Elastic Container Registry (Amazon ECR) path where the Docker image for the model is stored.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcontainerspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_component_container_specification_property = sagemaker.CfnInferenceComponent.InferenceComponentContainerSpecificationProperty(
                    artifact_url="artifactUrl",
                    deployed_image=sagemaker.CfnInferenceComponent.DeployedImageProperty(
                        resolution_time="resolutionTime",
                        resolved_image="resolvedImage",
                        specified_image="specifiedImage"
                    ),
                    environment={
                        "environment_key": "environment"
                    },
                    image="image"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f5aed592935acb4ecc3dffe218101a8b9053d16d99e4a24219409fd2bd906fec)
                check_type(argname="argument artifact_url", value=artifact_url, expected_type=type_hints["artifact_url"])
                check_type(argname="argument deployed_image", value=deployed_image, expected_type=type_hints["deployed_image"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument image", value=image, expected_type=type_hints["image"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if artifact_url is not None:
                self._values["artifact_url"] = artifact_url
            if deployed_image is not None:
                self._values["deployed_image"] = deployed_image
            if environment is not None:
                self._values["environment"] = environment
            if image is not None:
                self._values["image"] = image

        @builtins.property
        def artifact_url(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 path where the model artifacts, which result from model training, are stored.

            This path must point to a single gzip compressed tar archive (.tar.gz suffix).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcontainerspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentcontainerspecification-artifacturl
            '''
            result = self._values.get("artifact_url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def deployed_image(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.DeployedImageProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcontainerspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentcontainerspecification-deployedimage
            '''
            result = self._values.get("deployed_image")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.DeployedImageProperty"]], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''The environment variables to set in the Docker container.

            Each key and value in the Environment string-to-string map can have length of up to 1024. We support up to 16 entries in the map.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcontainerspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentcontainerspecification-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def image(self) -> typing.Optional[builtins.str]:
            '''The Amazon Elastic Container Registry (Amazon ECR) path where the Docker image for the model is stored.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentcontainerspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentcontainerspecification-image
            '''
            result = self._values.get("image")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceComponentContainerSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.InferenceComponentRuntimeConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "copy_count": "copyCount",
            "current_copy_count": "currentCopyCount",
            "desired_copy_count": "desiredCopyCount",
        },
    )
    class InferenceComponentRuntimeConfigProperty:
        def __init__(
            self,
            *,
            copy_count: typing.Optional[jsii.Number] = None,
            current_copy_count: typing.Optional[jsii.Number] = None,
            desired_copy_count: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Runtime settings for a model that is deployed with an inference component.

            :param copy_count: The number of runtime copies of the model container to deploy with the inference component. Each copy can serve inference requests.
            :param current_copy_count: The number of copies for the inference component.
            :param desired_copy_count: The number of copies for the inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentruntimeconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_component_runtime_config_property = sagemaker.CfnInferenceComponent.InferenceComponentRuntimeConfigProperty(
                    copy_count=123,
                    current_copy_count=123,
                    desired_copy_count=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__63c5c7c37d4a557d84dc45694cd00ae845f319a810bc817c50db41e7d063109f)
                check_type(argname="argument copy_count", value=copy_count, expected_type=type_hints["copy_count"])
                check_type(argname="argument current_copy_count", value=current_copy_count, expected_type=type_hints["current_copy_count"])
                check_type(argname="argument desired_copy_count", value=desired_copy_count, expected_type=type_hints["desired_copy_count"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if copy_count is not None:
                self._values["copy_count"] = copy_count
            if current_copy_count is not None:
                self._values["current_copy_count"] = current_copy_count
            if desired_copy_count is not None:
                self._values["desired_copy_count"] = desired_copy_count

        @builtins.property
        def copy_count(self) -> typing.Optional[jsii.Number]:
            '''The number of runtime copies of the model container to deploy with the inference component.

            Each copy can serve inference requests.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentruntimeconfig.html#cfn-sagemaker-inferencecomponent-inferencecomponentruntimeconfig-copycount
            '''
            result = self._values.get("copy_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def current_copy_count(self) -> typing.Optional[jsii.Number]:
            '''The number of copies for the inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentruntimeconfig.html#cfn-sagemaker-inferencecomponent-inferencecomponentruntimeconfig-currentcopycount
            '''
            result = self._values.get("current_copy_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def desired_copy_count(self) -> typing.Optional[jsii.Number]:
            '''The number of copies for the inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentruntimeconfig.html#cfn-sagemaker-inferencecomponent-inferencecomponentruntimeconfig-desiredcopycount
            '''
            result = self._values.get("desired_copy_count")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceComponentRuntimeConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.InferenceComponentSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "compute_resource_requirements": "computeResourceRequirements",
            "container": "container",
            "model_name": "modelName",
            "startup_parameters": "startupParameters",
        },
    )
    class InferenceComponentSpecificationProperty:
        def __init__(
            self,
            *,
            compute_resource_requirements: typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty", typing.Dict[builtins.str, typing.Any]]],
            container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.InferenceComponentContainerSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_name: typing.Optional[builtins.str] = None,
            startup_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceComponent.InferenceComponentStartupParametersProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Details about the resources to deploy with this inference component, including the model, container, and compute resources.

            :param compute_resource_requirements: The compute resources allocated to run the model assigned to the inference component.
            :param container: Defines a container that provides the runtime environment for a model that you deploy with an inference component.
            :param model_name: The name of an existing SageMaker model object in your account that you want to deploy with the inference component.
            :param startup_parameters: Settings that take effect while the model container starts up.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_component_specification_property = sagemaker.CfnInferenceComponent.InferenceComponentSpecificationProperty(
                    compute_resource_requirements=sagemaker.CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty(
                        max_memory_required_in_mb=123,
                        min_memory_required_in_mb=123,
                        number_of_accelerator_devices_required=123,
                        number_of_cpu_cores_required=123
                    ),
                
                    # the properties below are optional
                    container=sagemaker.CfnInferenceComponent.InferenceComponentContainerSpecificationProperty(
                        artifact_url="artifactUrl",
                        deployed_image=sagemaker.CfnInferenceComponent.DeployedImageProperty(
                            resolution_time="resolutionTime",
                            resolved_image="resolvedImage",
                            specified_image="specifiedImage"
                        ),
                        environment={
                            "environment_key": "environment"
                        },
                        image="image"
                    ),
                    model_name="modelName",
                    startup_parameters=sagemaker.CfnInferenceComponent.InferenceComponentStartupParametersProperty(
                        container_startup_health_check_timeout_in_seconds=123,
                        model_data_download_timeout_in_seconds=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6a0b62210860358f55c428526365b9cb1755209df1a27a1d8b73278ffe9fe251)
                check_type(argname="argument compute_resource_requirements", value=compute_resource_requirements, expected_type=type_hints["compute_resource_requirements"])
                check_type(argname="argument container", value=container, expected_type=type_hints["container"])
                check_type(argname="argument model_name", value=model_name, expected_type=type_hints["model_name"])
                check_type(argname="argument startup_parameters", value=startup_parameters, expected_type=type_hints["startup_parameters"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "compute_resource_requirements": compute_resource_requirements,
            }
            if container is not None:
                self._values["container"] = container
            if model_name is not None:
                self._values["model_name"] = model_name
            if startup_parameters is not None:
                self._values["startup_parameters"] = startup_parameters

        @builtins.property
        def compute_resource_requirements(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty"]:
            '''The compute resources allocated to run the model assigned to the inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentspecification-computeresourcerequirements
            '''
            result = self._values.get("compute_resource_requirements")
            assert result is not None, "Required property 'compute_resource_requirements' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty"], result)

        @builtins.property
        def container(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentContainerSpecificationProperty"]]:
            '''Defines a container that provides the runtime environment for a model that you deploy with an inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentspecification-container
            '''
            result = self._values.get("container")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentContainerSpecificationProperty"]], result)

        @builtins.property
        def model_name(self) -> typing.Optional[builtins.str]:
            '''The name of an existing SageMaker model object in your account that you want to deploy with the inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentspecification-modelname
            '''
            result = self._values.get("model_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def startup_parameters(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentStartupParametersProperty"]]:
            '''Settings that take effect while the model container starts up.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentspecification.html#cfn-sagemaker-inferencecomponent-inferencecomponentspecification-startupparameters
            '''
            result = self._values.get("startup_parameters")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceComponent.InferenceComponentStartupParametersProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceComponentSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponent.InferenceComponentStartupParametersProperty",
        jsii_struct_bases=[],
        name_mapping={
            "container_startup_health_check_timeout_in_seconds": "containerStartupHealthCheckTimeoutInSeconds",
            "model_data_download_timeout_in_seconds": "modelDataDownloadTimeoutInSeconds",
        },
    )
    class InferenceComponentStartupParametersProperty:
        def __init__(
            self,
            *,
            container_startup_health_check_timeout_in_seconds: typing.Optional[jsii.Number] = None,
            model_data_download_timeout_in_seconds: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Settings that take effect while the model container starts up.

            :param container_startup_health_check_timeout_in_seconds: The timeout value, in seconds, for your inference container to pass health check by Amazon S3 Hosting. For more information about health check, see `How Your Container Should Respond to Health Check (Ping) Requests <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-algo-ping-requests>`_ .
            :param model_data_download_timeout_in_seconds: The timeout value, in seconds, to download and extract the model that you want to host from Amazon S3 to the individual inference instance associated with this inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentstartupparameters.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_component_startup_parameters_property = sagemaker.CfnInferenceComponent.InferenceComponentStartupParametersProperty(
                    container_startup_health_check_timeout_in_seconds=123,
                    model_data_download_timeout_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__51a3a32a227ed8c98901c9a701372df1d229c6ff59152c6bdae0644d1cdd4dea)
                check_type(argname="argument container_startup_health_check_timeout_in_seconds", value=container_startup_health_check_timeout_in_seconds, expected_type=type_hints["container_startup_health_check_timeout_in_seconds"])
                check_type(argname="argument model_data_download_timeout_in_seconds", value=model_data_download_timeout_in_seconds, expected_type=type_hints["model_data_download_timeout_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if container_startup_health_check_timeout_in_seconds is not None:
                self._values["container_startup_health_check_timeout_in_seconds"] = container_startup_health_check_timeout_in_seconds
            if model_data_download_timeout_in_seconds is not None:
                self._values["model_data_download_timeout_in_seconds"] = model_data_download_timeout_in_seconds

        @builtins.property
        def container_startup_health_check_timeout_in_seconds(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The timeout value, in seconds, for your inference container to pass health check by Amazon S3 Hosting.

            For more information about health check, see `How Your Container Should Respond to Health Check (Ping) Requests <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-inference-code.html#your-algorithms-inference-algo-ping-requests>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentstartupparameters.html#cfn-sagemaker-inferencecomponent-inferencecomponentstartupparameters-containerstartuphealthchecktimeoutinseconds
            '''
            result = self._values.get("container_startup_health_check_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def model_data_download_timeout_in_seconds(
            self,
        ) -> typing.Optional[jsii.Number]:
            '''The timeout value, in seconds, to download and extract the model that you want to host from Amazon S3 to the individual inference instance associated with this inference component.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferencecomponent-inferencecomponentstartupparameters.html#cfn-sagemaker-inferencecomponent-inferencecomponentstartupparameters-modeldatadownloadtimeoutinseconds
            '''
            result = self._values.get("model_data_download_timeout_in_seconds")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceComponentStartupParametersProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceComponentProps",
    jsii_struct_bases=[],
    name_mapping={
        "endpoint_name": "endpointName",
        "runtime_config": "runtimeConfig",
        "specification": "specification",
        "variant_name": "variantName",
        "endpoint_arn": "endpointArn",
        "inference_component_name": "inferenceComponentName",
        "tags": "tags",
    },
)
class CfnInferenceComponentProps:
    def __init__(
        self,
        *,
        endpoint_name: builtins.str,
        runtime_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentRuntimeConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
        variant_name: builtins.str,
        endpoint_arn: typing.Optional[builtins.str] = None,
        inference_component_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnInferenceComponent``.

        :param endpoint_name: The name of the endpoint that hosts the inference component.
        :param runtime_config: The runtime config for the inference component.
        :param specification: The specification for the inference component.
        :param variant_name: The name of the production variant that hosts the inference component.
        :param endpoint_arn: The Amazon Resource Name (ARN) of the endpoint that hosts the inference component.
        :param inference_component_name: The name of the inference component.
        :param tags: An array of tags to apply to the resource.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_inference_component_props = sagemaker.CfnInferenceComponentProps(
                endpoint_name="endpointName",
                runtime_config=sagemaker.CfnInferenceComponent.InferenceComponentRuntimeConfigProperty(
                    copy_count=123,
                    current_copy_count=123,
                    desired_copy_count=123
                ),
                specification=sagemaker.CfnInferenceComponent.InferenceComponentSpecificationProperty(
                    compute_resource_requirements=sagemaker.CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty(
                        max_memory_required_in_mb=123,
                        min_memory_required_in_mb=123,
                        number_of_accelerator_devices_required=123,
                        number_of_cpu_cores_required=123
                    ),
            
                    # the properties below are optional
                    container=sagemaker.CfnInferenceComponent.InferenceComponentContainerSpecificationProperty(
                        artifact_url="artifactUrl",
                        deployed_image=sagemaker.CfnInferenceComponent.DeployedImageProperty(
                            resolution_time="resolutionTime",
                            resolved_image="resolvedImage",
                            specified_image="specifiedImage"
                        ),
                        environment={
                            "environment_key": "environment"
                        },
                        image="image"
                    ),
                    model_name="modelName",
                    startup_parameters=sagemaker.CfnInferenceComponent.InferenceComponentStartupParametersProperty(
                        container_startup_health_check_timeout_in_seconds=123,
                        model_data_download_timeout_in_seconds=123
                    )
                ),
                variant_name="variantName",
            
                # the properties below are optional
                endpoint_arn="endpointArn",
                inference_component_name="inferenceComponentName",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3926edf39d044760bb8195e9466dfa81ab70056fcc1e3a9053c6c3d90bcaaafa)
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument runtime_config", value=runtime_config, expected_type=type_hints["runtime_config"])
            check_type(argname="argument specification", value=specification, expected_type=type_hints["specification"])
            check_type(argname="argument variant_name", value=variant_name, expected_type=type_hints["variant_name"])
            check_type(argname="argument endpoint_arn", value=endpoint_arn, expected_type=type_hints["endpoint_arn"])
            check_type(argname="argument inference_component_name", value=inference_component_name, expected_type=type_hints["inference_component_name"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "endpoint_name": endpoint_name,
            "runtime_config": runtime_config,
            "specification": specification,
            "variant_name": variant_name,
        }
        if endpoint_arn is not None:
            self._values["endpoint_arn"] = endpoint_arn
        if inference_component_name is not None:
            self._values["inference_component_name"] = inference_component_name
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint that hosts the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-endpointname
        '''
        result = self._values.get("endpoint_name")
        assert result is not None, "Required property 'endpoint_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def runtime_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentRuntimeConfigProperty]:
        '''The runtime config for the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-runtimeconfig
        '''
        result = self._values.get("runtime_config")
        assert result is not None, "Required property 'runtime_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentRuntimeConfigProperty], result)

    @builtins.property
    def specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentSpecificationProperty]:
        '''The specification for the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-specification
        '''
        result = self._values.get("specification")
        assert result is not None, "Required property 'specification' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentSpecificationProperty], result)

    @builtins.property
    def variant_name(self) -> builtins.str:
        '''The name of the production variant that hosts the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-variantname
        '''
        result = self._values.get("variant_name")
        assert result is not None, "Required property 'variant_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def endpoint_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the endpoint that hosts the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-endpointarn
        '''
        result = self._values.get("endpoint_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def inference_component_name(self) -> typing.Optional[builtins.str]:
        '''The name of the inference component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-inferencecomponentname
        '''
        result = self._values.get("inference_component_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of tags to apply to the resource.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferencecomponent.html#cfn-sagemaker-inferencecomponent-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnInferenceComponentProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnInferenceExperiment(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment",
):
    '''Creates an inference experiment using the configurations specified in the request.

    Use this API to setup and schedule an experiment to compare model variants on a Amazon SageMaker inference endpoint. For more information about inference experiments, see `Shadow tests <https://docs.aws.amazon.com/sagemaker/latest/dg/shadow-tests.html>`_ .

    Amazon SageMaker begins your experiment at the scheduled time and routes traffic to your endpoint's model variants based on your specified configuration.

    While the experiment is in progress or after it has concluded, you can view metrics that compare your model variants. For more information, see `View, monitor, and edit shadow tests <https://docs.aws.amazon.com/sagemaker/latest/dg/shadow-tests-view-monitor-edit.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html
    :cloudformationResource: AWS::SageMaker::InferenceExperiment
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_inference_experiment = sagemaker.CfnInferenceExperiment(self, "MyCfnInferenceExperiment",
            endpoint_name="endpointName",
            model_variants=[sagemaker.CfnInferenceExperiment.ModelVariantConfigProperty(
                infrastructure_config=sagemaker.CfnInferenceExperiment.ModelInfrastructureConfigProperty(
                    infrastructure_type="infrastructureType",
                    real_time_inference_config=sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty(
                        instance_count=123,
                        instance_type="instanceType"
                    )
                ),
                model_name="modelName",
                variant_name="variantName"
            )],
            name="name",
            role_arn="roleArn",
            type="type",
        
            # the properties below are optional
            data_storage_config=sagemaker.CfnInferenceExperiment.DataStorageConfigProperty(
                destination="destination",
        
                # the properties below are optional
                content_type=sagemaker.CfnInferenceExperiment.CaptureContentTypeHeaderProperty(
                    csv_content_types=["csvContentTypes"],
                    json_content_types=["jsonContentTypes"]
                ),
                kms_key="kmsKey"
            ),
            description="description",
            desired_state="desiredState",
            kms_key="kmsKey",
            schedule=sagemaker.CfnInferenceExperiment.InferenceExperimentScheduleProperty(
                end_time="endTime",
                start_time="startTime"
            ),
            shadow_mode_config=sagemaker.CfnInferenceExperiment.ShadowModeConfigProperty(
                shadow_model_variants=[sagemaker.CfnInferenceExperiment.ShadowModelVariantConfigProperty(
                    sampling_percentage=123,
                    shadow_model_variant_name="shadowModelVariantName"
                )],
                source_model_variant_name="sourceModelVariantName"
            ),
            status_reason="statusReason",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        endpoint_name: builtins.str,
        model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.ModelVariantConfigProperty", typing.Dict[builtins.str, typing.Any]]]]],
        name: builtins.str,
        role_arn: builtins.str,
        type: builtins.str,
        data_storage_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.DataStorageConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        description: typing.Optional[builtins.str] = None,
        desired_state: typing.Optional[builtins.str] = None,
        kms_key: typing.Optional[builtins.str] = None,
        schedule: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.InferenceExperimentScheduleProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        shadow_mode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.ShadowModeConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        status_reason: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param endpoint_name: The name of the endpoint.
        :param model_variants: An array of ``ModelVariantConfigSummary`` objects. There is one for each variant in the inference experiment. Each ``ModelVariantConfigSummary`` object in the array describes the infrastructure configuration for deploying the corresponding variant.
        :param name: The name of the inference experiment.
        :param role_arn: The ARN of the IAM role that Amazon SageMaker can assume to access model artifacts and container images, and manage Amazon SageMaker Inference endpoints for model deployment.
        :param type: The type of the inference experiment.
        :param data_storage_config: The Amazon S3 location and configuration for storing inference request and response data.
        :param description: The description of the inference experiment.
        :param desired_state: The desired state of the experiment after stopping. The possible states are the following:. - ``Completed`` : The experiment completed successfully - ``Cancelled`` : The experiment was canceled
        :param kms_key: The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.
        :param schedule: The duration for which the inference experiment ran or will run. The maximum duration that you can set for an inference experiment is 30 days.
        :param shadow_mode_config: The configuration of ``ShadowMode`` inference experiment type, which shows the production variant that takes all the inference requests, and the shadow variant to which Amazon SageMaker replicates a percentage of the inference requests. For the shadow variant it also shows the percentage of requests that Amazon SageMaker replicates.
        :param status_reason: The error message for the inference experiment status result.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__43a6aafd6835d00baa8d211b8e504c33f5e79820719546466a90ba8ccba23e8b)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnInferenceExperimentProps(
            endpoint_name=endpoint_name,
            model_variants=model_variants,
            name=name,
            role_arn=role_arn,
            type=type,
            data_storage_config=data_storage_config,
            description=description,
            desired_state=desired_state,
            kms_key=kms_key,
            schedule=schedule,
            shadow_mode_config=shadow_mode_config,
            status_reason=status_reason,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0429293b59a464f1c87e050fd5de3a0f1283acf5234761acc40dd9a0c1529ec6)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5d5462c366a245602783769db7714995b6576c73554805c7d6edbb2f89fa9c82)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrArn")
    def attr_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the inference experiment.

        :cloudformationAttribute: Arn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrArn"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The timestamp at which you created the inference experiment.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointMetadata")
    def attr_endpoint_metadata(self) -> _IResolvable_da3f097b:
        '''The metadata of the endpoint on which the inference experiment ran.

        :cloudformationAttribute: EndpointMetadata
        '''
        return typing.cast(_IResolvable_da3f097b, jsii.get(self, "attrEndpointMetadata"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointMetadataEndpointConfigName")
    def attr_endpoint_metadata_endpoint_config_name(self) -> builtins.str:
        '''
        :cloudformationAttribute: EndpointMetadata.EndpointConfigName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrEndpointMetadataEndpointConfigName"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointMetadataEndpointName")
    def attr_endpoint_metadata_endpoint_name(self) -> builtins.str:
        '''
        :cloudformationAttribute: EndpointMetadata.EndpointName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrEndpointMetadataEndpointName"))

    @builtins.property
    @jsii.member(jsii_name="attrEndpointMetadataEndpointStatus")
    def attr_endpoint_metadata_endpoint_status(self) -> builtins.str:
        '''
        :cloudformationAttribute: EndpointMetadata.EndpointStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrEndpointMetadataEndpointStatus"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedTime")
    def attr_last_modified_time(self) -> builtins.str:
        '''The timestamp at which you last modified the inference experiment.

        :cloudformationAttribute: LastModifiedTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedTime"))

    @builtins.property
    @jsii.member(jsii_name="attrStatus")
    def attr_status(self) -> builtins.str:
        '''The status of the inference experiment.

        :cloudformationAttribute: Status
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrStatus"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint.'''
        return typing.cast(builtins.str, jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2c4337f067fc258ce16c34b1da89725682a5cf8ff9f6a2ddd422b9f89840ee1a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="modelVariants")
    def model_variants(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ModelVariantConfigProperty"]]]:
        '''An array of ``ModelVariantConfigSummary`` objects.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ModelVariantConfigProperty"]]], jsii.get(self, "modelVariants"))

    @model_variants.setter
    def model_variants(
        self,
        value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ModelVariantConfigProperty"]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d41f9ab792b0ee24b059dd0c689f265f2cc5451883b9558031beef50d938eb62)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelVariants", value)

    @builtins.property
    @jsii.member(jsii_name="name")
    def name(self) -> builtins.str:
        '''The name of the inference experiment.'''
        return typing.cast(builtins.str, jsii.get(self, "name"))

    @name.setter
    def name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__043744ee899f8ec5bbdbd1fbc6d8774cadd21db45111864f5c8ead306bb7b595)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "name", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The ARN of the IAM role that Amazon SageMaker can assume to access model artifacts and container images, and manage Amazon SageMaker Inference endpoints for model deployment.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d34c11a8c1a2565fd1bd312899edca7a17ece1ab4a263f6b77d6495463d16160)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="type")
    def type(self) -> builtins.str:
        '''The type of the inference experiment.'''
        return typing.cast(builtins.str, jsii.get(self, "type"))

    @type.setter
    def type(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__85a5c60f39e6ced69371734777bf1a7f5120ae90108f9878242836df2968b2cf)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "type", value)

    @builtins.property
    @jsii.member(jsii_name="dataStorageConfig")
    def data_storage_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.DataStorageConfigProperty"]]:
        '''The Amazon S3 location and configuration for storing inference request and response data.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.DataStorageConfigProperty"]], jsii.get(self, "dataStorageConfig"))

    @data_storage_config.setter
    def data_storage_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.DataStorageConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4ca53dbe0cab6482d1059c1abb3716bae126aa7390eed3feb2786f3f26ec1f3a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "dataStorageConfig", value)

    @builtins.property
    @jsii.member(jsii_name="description")
    def description(self) -> typing.Optional[builtins.str]:
        '''The description of the inference experiment.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "description"))

    @description.setter
    def description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c9675a0ad932dd544645220c342877b3a50604bc4af74f4945f49c0c1fa4bf9c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "description", value)

    @builtins.property
    @jsii.member(jsii_name="desiredState")
    def desired_state(self) -> typing.Optional[builtins.str]:
        '''The desired state of the experiment after stopping.

        The possible states are the following:.
        '''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "desiredState"))

    @desired_state.setter
    def desired_state(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__560c4e84471ced1b1564fbafbcde81a7c5199b6ab923155b20dfb4ffa055319a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "desiredState", value)

    @builtins.property
    @jsii.member(jsii_name="kmsKey")
    def kms_key(self) -> typing.Optional[builtins.str]:
        '''The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "kmsKey"))

    @kms_key.setter
    def kms_key(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__73ae7d64f9f9a718610ce8ac197a5da229e70b8d0dc49ef88b25fe0fd5c376d4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "kmsKey", value)

    @builtins.property
    @jsii.member(jsii_name="schedule")
    def schedule(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.InferenceExperimentScheduleProperty"]]:
        '''The duration for which the inference experiment ran or will run.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.InferenceExperimentScheduleProperty"]], jsii.get(self, "schedule"))

    @schedule.setter
    def schedule(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.InferenceExperimentScheduleProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ed6b54d3ee809b6078311472039cded4bd4bb4c3baf96c59e62c310c5ff476ab)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "schedule", value)

    @builtins.property
    @jsii.member(jsii_name="shadowModeConfig")
    def shadow_mode_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ShadowModeConfigProperty"]]:
        '''The configuration of ``ShadowMode`` inference experiment type, which shows the production variant that takes all the inference requests, and the shadow variant to which Amazon SageMaker replicates a percentage of the inference requests.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ShadowModeConfigProperty"]], jsii.get(self, "shadowModeConfig"))

    @shadow_mode_config.setter
    def shadow_mode_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ShadowModeConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__67f5007da506049c6e4d9db3b50bf4f19e91b2ec2cdc034cd3d9bf82d7c9d8f4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "shadowModeConfig", value)

    @builtins.property
    @jsii.member(jsii_name="statusReason")
    def status_reason(self) -> typing.Optional[builtins.str]:
        '''The error message for the inference experiment status result.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "statusReason"))

    @status_reason.setter
    def status_reason(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dfebdc6aced204f5eadb3a382298b795ce8fc92befce5a9dcf2c97d6291e404e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "statusReason", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e59016137af4c7b38305436a8dc15ee374c4184401c0e8a57c663b9df5898f81)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.CaptureContentTypeHeaderProperty",
        jsii_struct_bases=[],
        name_mapping={
            "csv_content_types": "csvContentTypes",
            "json_content_types": "jsonContentTypes",
        },
    )
    class CaptureContentTypeHeaderProperty:
        def __init__(
            self,
            *,
            csv_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            json_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Configuration specifying how to treat different headers.

            If no headers are specified Amazon SageMaker will by default base64 encode when capturing the data.

            :param csv_content_types: The list of all content type headers that Amazon SageMaker will treat as CSV and capture accordingly.
            :param json_content_types: The list of all content type headers that SageMaker will treat as JSON and capture accordingly.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-capturecontenttypeheader.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                capture_content_type_header_property = sagemaker.CfnInferenceExperiment.CaptureContentTypeHeaderProperty(
                    csv_content_types=["csvContentTypes"],
                    json_content_types=["jsonContentTypes"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7c0b271d1582078e305c84d489e11f37be3e2b7ef6c6198b16bdde2fd43eb6f4)
                check_type(argname="argument csv_content_types", value=csv_content_types, expected_type=type_hints["csv_content_types"])
                check_type(argname="argument json_content_types", value=json_content_types, expected_type=type_hints["json_content_types"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv_content_types is not None:
                self._values["csv_content_types"] = csv_content_types
            if json_content_types is not None:
                self._values["json_content_types"] = json_content_types

        @builtins.property
        def csv_content_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The list of all content type headers that Amazon SageMaker will treat as CSV and capture accordingly.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-capturecontenttypeheader.html#cfn-sagemaker-inferenceexperiment-capturecontenttypeheader-csvcontenttypes
            '''
            result = self._values.get("csv_content_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def json_content_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The list of all content type headers that SageMaker will treat as JSON and capture accordingly.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-capturecontenttypeheader.html#cfn-sagemaker-inferenceexperiment-capturecontenttypeheader-jsoncontenttypes
            '''
            result = self._values.get("json_content_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CaptureContentTypeHeaderProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.DataStorageConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "destination": "destination",
            "content_type": "contentType",
            "kms_key": "kmsKey",
        },
    )
    class DataStorageConfigProperty:
        def __init__(
            self,
            *,
            destination: builtins.str,
            content_type: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.CaptureContentTypeHeaderProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            kms_key: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon S3 location and configuration for storing inference request and response data.

            This is an optional parameter that you can use for data capture. For more information, see `Capture data <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-data-capture.html>`_ .

            :param destination: The Amazon S3 bucket where the inference request and response data is stored.
            :param content_type: Configuration specifying how to treat different headers. If no headers are specified SageMaker will by default base64 encode when capturing the data.
            :param kms_key: The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-datastorageconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_storage_config_property = sagemaker.CfnInferenceExperiment.DataStorageConfigProperty(
                    destination="destination",
                
                    # the properties below are optional
                    content_type=sagemaker.CfnInferenceExperiment.CaptureContentTypeHeaderProperty(
                        csv_content_types=["csvContentTypes"],
                        json_content_types=["jsonContentTypes"]
                    ),
                    kms_key="kmsKey"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4bb25738a9eaaf2cf105bc471ef7ba191fa9e7b1befb0d87ec8f0b7c0bbf555b)
                check_type(argname="argument destination", value=destination, expected_type=type_hints["destination"])
                check_type(argname="argument content_type", value=content_type, expected_type=type_hints["content_type"])
                check_type(argname="argument kms_key", value=kms_key, expected_type=type_hints["kms_key"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "destination": destination,
            }
            if content_type is not None:
                self._values["content_type"] = content_type
            if kms_key is not None:
                self._values["kms_key"] = kms_key

        @builtins.property
        def destination(self) -> builtins.str:
            '''The Amazon S3 bucket where the inference request and response data is stored.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-datastorageconfig.html#cfn-sagemaker-inferenceexperiment-datastorageconfig-destination
            '''
            result = self._values.get("destination")
            assert result is not None, "Required property 'destination' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def content_type(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.CaptureContentTypeHeaderProperty"]]:
            '''Configuration specifying how to treat different headers.

            If no headers are specified SageMaker will by default base64 encode when capturing the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-datastorageconfig.html#cfn-sagemaker-inferenceexperiment-datastorageconfig-contenttype
            '''
            result = self._values.get("content_type")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.CaptureContentTypeHeaderProperty"]], result)

        @builtins.property
        def kms_key(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-datastorageconfig.html#cfn-sagemaker-inferenceexperiment-datastorageconfig-kmskey
            '''
            result = self._values.get("kms_key")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataStorageConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.EndpointMetadataProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "endpoint_config_name": "endpointConfigName",
            "endpoint_status": "endpointStatus",
        },
    )
    class EndpointMetadataProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            endpoint_config_name: typing.Optional[builtins.str] = None,
            endpoint_status: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The metadata of the endpoint.

            :param endpoint_name: The name of the endpoint.
            :param endpoint_config_name: The name of the endpoint configuration.
            :param endpoint_status: The status of the endpoint. For possible values of the status of an endpoint, see ` <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html#cfn-sagemaker-inferenceexperiment-endpointmetadata-endpointstatus>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_metadata_property = sagemaker.CfnInferenceExperiment.EndpointMetadataProperty(
                    endpoint_name="endpointName",
                
                    # the properties below are optional
                    endpoint_config_name="endpointConfigName",
                    endpoint_status="endpointStatus"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__584b8c3e18059227ecc04adc07f8c677504691a10ba94105216fb343fc851d8c)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument endpoint_config_name", value=endpoint_config_name, expected_type=type_hints["endpoint_config_name"])
                check_type(argname="argument endpoint_status", value=endpoint_status, expected_type=type_hints["endpoint_status"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
            }
            if endpoint_config_name is not None:
                self._values["endpoint_config_name"] = endpoint_config_name
            if endpoint_status is not None:
                self._values["endpoint_status"] = endpoint_status

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''The name of the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html#cfn-sagemaker-inferenceexperiment-endpointmetadata-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def endpoint_config_name(self) -> typing.Optional[builtins.str]:
            '''The name of the endpoint configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html#cfn-sagemaker-inferenceexperiment-endpointmetadata-endpointconfigname
            '''
            result = self._values.get("endpoint_config_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def endpoint_status(self) -> typing.Optional[builtins.str]:
            '''The status of the endpoint.

            For possible values of the status of an endpoint, see ` <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html#cfn-sagemaker-inferenceexperiment-endpointmetadata-endpointstatus>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-endpointmetadata.html#cfn-sagemaker-inferenceexperiment-endpointmetadata-endpointstatus
            '''
            result = self._values.get("endpoint_status")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointMetadataProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.InferenceExperimentScheduleProperty",
        jsii_struct_bases=[],
        name_mapping={"end_time": "endTime", "start_time": "startTime"},
    )
    class InferenceExperimentScheduleProperty:
        def __init__(
            self,
            *,
            end_time: typing.Optional[builtins.str] = None,
            start_time: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The start and end times of an inference experiment.

            The maximum duration that you can set for an inference experiment is 30 days.

            :param end_time: The timestamp at which the inference experiment ended or will end.
            :param start_time: The timestamp at which the inference experiment started or will start.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-inferenceexperimentschedule.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_experiment_schedule_property = sagemaker.CfnInferenceExperiment.InferenceExperimentScheduleProperty(
                    end_time="endTime",
                    start_time="startTime"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__acbe5d91e9d98b2305f92faad4290867d7222976052ee9514438e22424c987af)
                check_type(argname="argument end_time", value=end_time, expected_type=type_hints["end_time"])
                check_type(argname="argument start_time", value=start_time, expected_type=type_hints["start_time"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if end_time is not None:
                self._values["end_time"] = end_time
            if start_time is not None:
                self._values["start_time"] = start_time

        @builtins.property
        def end_time(self) -> typing.Optional[builtins.str]:
            '''The timestamp at which the inference experiment ended or will end.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-inferenceexperimentschedule.html#cfn-sagemaker-inferenceexperiment-inferenceexperimentschedule-endtime
            '''
            result = self._values.get("end_time")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def start_time(self) -> typing.Optional[builtins.str]:
            '''The timestamp at which the inference experiment started or will start.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-inferenceexperimentschedule.html#cfn-sagemaker-inferenceexperiment-inferenceexperimentschedule-starttime
            '''
            result = self._values.get("start_time")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceExperimentScheduleProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.ModelInfrastructureConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "infrastructure_type": "infrastructureType",
            "real_time_inference_config": "realTimeInferenceConfig",
        },
    )
    class ModelInfrastructureConfigProperty:
        def __init__(
            self,
            *,
            infrastructure_type: builtins.str,
            real_time_inference_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.RealTimeInferenceConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The configuration for the infrastructure that the model will be deployed to.

            :param infrastructure_type: The inference option to which to deploy your model. Possible values are the following:. - ``RealTime`` : Deploy to real-time inference.
            :param real_time_inference_config: The infrastructure configuration for deploying the model to real-time inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelinfrastructureconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_infrastructure_config_property = sagemaker.CfnInferenceExperiment.ModelInfrastructureConfigProperty(
                    infrastructure_type="infrastructureType",
                    real_time_inference_config=sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty(
                        instance_count=123,
                        instance_type="instanceType"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4b18fe8646349bdc2b21a39c725771f5758341e2b9462bbc2fa2551d36678833)
                check_type(argname="argument infrastructure_type", value=infrastructure_type, expected_type=type_hints["infrastructure_type"])
                check_type(argname="argument real_time_inference_config", value=real_time_inference_config, expected_type=type_hints["real_time_inference_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "infrastructure_type": infrastructure_type,
                "real_time_inference_config": real_time_inference_config,
            }

        @builtins.property
        def infrastructure_type(self) -> builtins.str:
            '''The inference option to which to deploy your model. Possible values are the following:.

            - ``RealTime`` : Deploy to real-time inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelinfrastructureconfig.html#cfn-sagemaker-inferenceexperiment-modelinfrastructureconfig-infrastructuretype
            '''
            result = self._values.get("infrastructure_type")
            assert result is not None, "Required property 'infrastructure_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def real_time_inference_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.RealTimeInferenceConfigProperty"]:
            '''The infrastructure configuration for deploying the model to real-time inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelinfrastructureconfig.html#cfn-sagemaker-inferenceexperiment-modelinfrastructureconfig-realtimeinferenceconfig
            '''
            result = self._values.get("real_time_inference_config")
            assert result is not None, "Required property 'real_time_inference_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.RealTimeInferenceConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelInfrastructureConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.ModelVariantConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "infrastructure_config": "infrastructureConfig",
            "model_name": "modelName",
            "variant_name": "variantName",
        },
    )
    class ModelVariantConfigProperty:
        def __init__(
            self,
            *,
            infrastructure_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.ModelInfrastructureConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            model_name: builtins.str,
            variant_name: builtins.str,
        ) -> None:
            '''Contains information about the deployment options of a model.

            :param infrastructure_config: The configuration for the infrastructure that the model will be deployed to.
            :param model_name: The name of the Amazon SageMaker Model entity.
            :param variant_name: The name of the variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelvariantconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_variant_config_property = sagemaker.CfnInferenceExperiment.ModelVariantConfigProperty(
                    infrastructure_config=sagemaker.CfnInferenceExperiment.ModelInfrastructureConfigProperty(
                        infrastructure_type="infrastructureType",
                        real_time_inference_config=sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty(
                            instance_count=123,
                            instance_type="instanceType"
                        )
                    ),
                    model_name="modelName",
                    variant_name="variantName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d3c170d8faf15db2d5807c2ae41d4a468de1df8e8a19c9c6caabe6d26f370a21)
                check_type(argname="argument infrastructure_config", value=infrastructure_config, expected_type=type_hints["infrastructure_config"])
                check_type(argname="argument model_name", value=model_name, expected_type=type_hints["model_name"])
                check_type(argname="argument variant_name", value=variant_name, expected_type=type_hints["variant_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "infrastructure_config": infrastructure_config,
                "model_name": model_name,
                "variant_name": variant_name,
            }

        @builtins.property
        def infrastructure_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ModelInfrastructureConfigProperty"]:
            '''The configuration for the infrastructure that the model will be deployed to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelvariantconfig.html#cfn-sagemaker-inferenceexperiment-modelvariantconfig-infrastructureconfig
            '''
            result = self._values.get("infrastructure_config")
            assert result is not None, "Required property 'infrastructure_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ModelInfrastructureConfigProperty"], result)

        @builtins.property
        def model_name(self) -> builtins.str:
            '''The name of the Amazon SageMaker Model entity.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelvariantconfig.html#cfn-sagemaker-inferenceexperiment-modelvariantconfig-modelname
            '''
            result = self._values.get("model_name")
            assert result is not None, "Required property 'model_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def variant_name(self) -> builtins.str:
            '''The name of the variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-modelvariantconfig.html#cfn-sagemaker-inferenceexperiment-modelvariantconfig-variantname
            '''
            result = self._values.get("variant_name")
            assert result is not None, "Required property 'variant_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelVariantConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
        },
    )
    class RealTimeInferenceConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
        ) -> None:
            '''The infrastructure configuration for deploying the model to a real-time inference endpoint.

            :param instance_count: The number of instances of the type specified by ``InstanceType`` .
            :param instance_type: The instance type the model is deployed to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-realtimeinferenceconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                real_time_inference_config_property = sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty(
                    instance_count=123,
                    instance_type="instanceType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ee618762d941d57c3de8cc9c6f383b82dea89ef9cf39ca6466ee5a46c80b81a0)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
            }

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of instances of the type specified by ``InstanceType`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-realtimeinferenceconfig.html#cfn-sagemaker-inferenceexperiment-realtimeinferenceconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The instance type the model is deployed to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-realtimeinferenceconfig.html#cfn-sagemaker-inferenceexperiment-realtimeinferenceconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RealTimeInferenceConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.ShadowModeConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "shadow_model_variants": "shadowModelVariants",
            "source_model_variant_name": "sourceModelVariantName",
        },
    )
    class ShadowModeConfigProperty:
        def __init__(
            self,
            *,
            shadow_model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnInferenceExperiment.ShadowModelVariantConfigProperty", typing.Dict[builtins.str, typing.Any]]]]],
            source_model_variant_name: builtins.str,
        ) -> None:
            '''The configuration of ``ShadowMode`` inference experiment type, which specifies a production variant to take all the inference requests, and a shadow variant to which Amazon SageMaker replicates a percentage of the inference requests.

            For the shadow variant it also specifies the percentage of requests that Amazon SageMaker replicates.

            :param shadow_model_variants: List of shadow variant configurations.
            :param source_model_variant_name: The name of the production variant, which takes all the inference requests.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodeconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                shadow_mode_config_property = sagemaker.CfnInferenceExperiment.ShadowModeConfigProperty(
                    shadow_model_variants=[sagemaker.CfnInferenceExperiment.ShadowModelVariantConfigProperty(
                        sampling_percentage=123,
                        shadow_model_variant_name="shadowModelVariantName"
                    )],
                    source_model_variant_name="sourceModelVariantName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3f291b4e09d5ffc820332818871f4802d2b8177cb6cb21d9e46fa42b37419994)
                check_type(argname="argument shadow_model_variants", value=shadow_model_variants, expected_type=type_hints["shadow_model_variants"])
                check_type(argname="argument source_model_variant_name", value=source_model_variant_name, expected_type=type_hints["source_model_variant_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "shadow_model_variants": shadow_model_variants,
                "source_model_variant_name": source_model_variant_name,
            }

        @builtins.property
        def shadow_model_variants(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ShadowModelVariantConfigProperty"]]]:
            '''List of shadow variant configurations.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodeconfig.html#cfn-sagemaker-inferenceexperiment-shadowmodeconfig-shadowmodelvariants
            '''
            result = self._values.get("shadow_model_variants")
            assert result is not None, "Required property 'shadow_model_variants' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnInferenceExperiment.ShadowModelVariantConfigProperty"]]], result)

        @builtins.property
        def source_model_variant_name(self) -> builtins.str:
            '''The name of the production variant, which takes all the inference requests.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodeconfig.html#cfn-sagemaker-inferenceexperiment-shadowmodeconfig-sourcemodelvariantname
            '''
            result = self._values.get("source_model_variant_name")
            assert result is not None, "Required property 'source_model_variant_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ShadowModeConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperiment.ShadowModelVariantConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "sampling_percentage": "samplingPercentage",
            "shadow_model_variant_name": "shadowModelVariantName",
        },
    )
    class ShadowModelVariantConfigProperty:
        def __init__(
            self,
            *,
            sampling_percentage: jsii.Number,
            shadow_model_variant_name: builtins.str,
        ) -> None:
            '''The name and sampling percentage of a shadow variant.

            :param sampling_percentage: The percentage of inference requests that Amazon SageMaker replicates from the production variant to the shadow variant.
            :param shadow_model_variant_name: The name of the shadow variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodelvariantconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                shadow_model_variant_config_property = sagemaker.CfnInferenceExperiment.ShadowModelVariantConfigProperty(
                    sampling_percentage=123,
                    shadow_model_variant_name="shadowModelVariantName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b71dfceba1d10e6ee264fc7af67e8ae144ee546f86d6a0ff6ceaacdfde0a8cc8)
                check_type(argname="argument sampling_percentage", value=sampling_percentage, expected_type=type_hints["sampling_percentage"])
                check_type(argname="argument shadow_model_variant_name", value=shadow_model_variant_name, expected_type=type_hints["shadow_model_variant_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "sampling_percentage": sampling_percentage,
                "shadow_model_variant_name": shadow_model_variant_name,
            }

        @builtins.property
        def sampling_percentage(self) -> jsii.Number:
            '''The percentage of inference requests that Amazon SageMaker replicates from the production variant to the shadow variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodelvariantconfig.html#cfn-sagemaker-inferenceexperiment-shadowmodelvariantconfig-samplingpercentage
            '''
            result = self._values.get("sampling_percentage")
            assert result is not None, "Required property 'sampling_percentage' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def shadow_model_variant_name(self) -> builtins.str:
            '''The name of the shadow variant.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-inferenceexperiment-shadowmodelvariantconfig.html#cfn-sagemaker-inferenceexperiment-shadowmodelvariantconfig-shadowmodelvariantname
            '''
            result = self._values.get("shadow_model_variant_name")
            assert result is not None, "Required property 'shadow_model_variant_name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ShadowModelVariantConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnInferenceExperimentProps",
    jsii_struct_bases=[],
    name_mapping={
        "endpoint_name": "endpointName",
        "model_variants": "modelVariants",
        "name": "name",
        "role_arn": "roleArn",
        "type": "type",
        "data_storage_config": "dataStorageConfig",
        "description": "description",
        "desired_state": "desiredState",
        "kms_key": "kmsKey",
        "schedule": "schedule",
        "shadow_mode_config": "shadowModeConfig",
        "status_reason": "statusReason",
        "tags": "tags",
    },
)
class CfnInferenceExperimentProps:
    def __init__(
        self,
        *,
        endpoint_name: builtins.str,
        model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ModelVariantConfigProperty, typing.Dict[builtins.str, typing.Any]]]]],
        name: builtins.str,
        role_arn: builtins.str,
        type: builtins.str,
        data_storage_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.DataStorageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        description: typing.Optional[builtins.str] = None,
        desired_state: typing.Optional[builtins.str] = None,
        kms_key: typing.Optional[builtins.str] = None,
        schedule: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.InferenceExperimentScheduleProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        shadow_mode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ShadowModeConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        status_reason: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnInferenceExperiment``.

        :param endpoint_name: The name of the endpoint.
        :param model_variants: An array of ``ModelVariantConfigSummary`` objects. There is one for each variant in the inference experiment. Each ``ModelVariantConfigSummary`` object in the array describes the infrastructure configuration for deploying the corresponding variant.
        :param name: The name of the inference experiment.
        :param role_arn: The ARN of the IAM role that Amazon SageMaker can assume to access model artifacts and container images, and manage Amazon SageMaker Inference endpoints for model deployment.
        :param type: The type of the inference experiment.
        :param data_storage_config: The Amazon S3 location and configuration for storing inference request and response data.
        :param description: The description of the inference experiment.
        :param desired_state: The desired state of the experiment after stopping. The possible states are the following:. - ``Completed`` : The experiment completed successfully - ``Cancelled`` : The experiment was canceled
        :param kms_key: The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.
        :param schedule: The duration for which the inference experiment ran or will run. The maximum duration that you can set for an inference experiment is 30 days.
        :param shadow_mode_config: The configuration of ``ShadowMode`` inference experiment type, which shows the production variant that takes all the inference requests, and the shadow variant to which Amazon SageMaker replicates a percentage of the inference requests. For the shadow variant it also shows the percentage of requests that Amazon SageMaker replicates.
        :param status_reason: The error message for the inference experiment status result.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_inference_experiment_props = sagemaker.CfnInferenceExperimentProps(
                endpoint_name="endpointName",
                model_variants=[sagemaker.CfnInferenceExperiment.ModelVariantConfigProperty(
                    infrastructure_config=sagemaker.CfnInferenceExperiment.ModelInfrastructureConfigProperty(
                        infrastructure_type="infrastructureType",
                        real_time_inference_config=sagemaker.CfnInferenceExperiment.RealTimeInferenceConfigProperty(
                            instance_count=123,
                            instance_type="instanceType"
                        )
                    ),
                    model_name="modelName",
                    variant_name="variantName"
                )],
                name="name",
                role_arn="roleArn",
                type="type",
            
                # the properties below are optional
                data_storage_config=sagemaker.CfnInferenceExperiment.DataStorageConfigProperty(
                    destination="destination",
            
                    # the properties below are optional
                    content_type=sagemaker.CfnInferenceExperiment.CaptureContentTypeHeaderProperty(
                        csv_content_types=["csvContentTypes"],
                        json_content_types=["jsonContentTypes"]
                    ),
                    kms_key="kmsKey"
                ),
                description="description",
                desired_state="desiredState",
                kms_key="kmsKey",
                schedule=sagemaker.CfnInferenceExperiment.InferenceExperimentScheduleProperty(
                    end_time="endTime",
                    start_time="startTime"
                ),
                shadow_mode_config=sagemaker.CfnInferenceExperiment.ShadowModeConfigProperty(
                    shadow_model_variants=[sagemaker.CfnInferenceExperiment.ShadowModelVariantConfigProperty(
                        sampling_percentage=123,
                        shadow_model_variant_name="shadowModelVariantName"
                    )],
                    source_model_variant_name="sourceModelVariantName"
                ),
                status_reason="statusReason",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__92df73cfaf86dc9fd85986305f2cf4611dafd4cb962187062714c75ad4d36821)
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument model_variants", value=model_variants, expected_type=type_hints["model_variants"])
            check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument type", value=type, expected_type=type_hints["type"])
            check_type(argname="argument data_storage_config", value=data_storage_config, expected_type=type_hints["data_storage_config"])
            check_type(argname="argument description", value=description, expected_type=type_hints["description"])
            check_type(argname="argument desired_state", value=desired_state, expected_type=type_hints["desired_state"])
            check_type(argname="argument kms_key", value=kms_key, expected_type=type_hints["kms_key"])
            check_type(argname="argument schedule", value=schedule, expected_type=type_hints["schedule"])
            check_type(argname="argument shadow_mode_config", value=shadow_mode_config, expected_type=type_hints["shadow_mode_config"])
            check_type(argname="argument status_reason", value=status_reason, expected_type=type_hints["status_reason"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "endpoint_name": endpoint_name,
            "model_variants": model_variants,
            "name": name,
            "role_arn": role_arn,
            "type": type,
        }
        if data_storage_config is not None:
            self._values["data_storage_config"] = data_storage_config
        if description is not None:
            self._values["description"] = description
        if desired_state is not None:
            self._values["desired_state"] = desired_state
        if kms_key is not None:
            self._values["kms_key"] = kms_key
        if schedule is not None:
            self._values["schedule"] = schedule
        if shadow_mode_config is not None:
            self._values["shadow_mode_config"] = shadow_mode_config
        if status_reason is not None:
            self._values["status_reason"] = status_reason
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-endpointname
        '''
        result = self._values.get("endpoint_name")
        assert result is not None, "Required property 'endpoint_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def model_variants(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ModelVariantConfigProperty]]]:
        '''An array of ``ModelVariantConfigSummary`` objects.

        There is one for each variant in the inference experiment. Each ``ModelVariantConfigSummary`` object in the array describes the infrastructure configuration for deploying the corresponding variant.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-modelvariants
        '''
        result = self._values.get("model_variants")
        assert result is not None, "Required property 'model_variants' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ModelVariantConfigProperty]]], result)

    @builtins.property
    def name(self) -> builtins.str:
        '''The name of the inference experiment.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-name
        '''
        result = self._values.get("name")
        assert result is not None, "Required property 'name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The ARN of the IAM role that Amazon SageMaker can assume to access model artifacts and container images, and manage Amazon SageMaker Inference endpoints for model deployment.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def type(self) -> builtins.str:
        '''The type of the inference experiment.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-type
        '''
        result = self._values.get("type")
        assert result is not None, "Required property 'type' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def data_storage_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.DataStorageConfigProperty]]:
        '''The Amazon S3 location and configuration for storing inference request and response data.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-datastorageconfig
        '''
        result = self._values.get("data_storage_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.DataStorageConfigProperty]], result)

    @builtins.property
    def description(self) -> typing.Optional[builtins.str]:
        '''The description of the inference experiment.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-description
        '''
        result = self._values.get("description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def desired_state(self) -> typing.Optional[builtins.str]:
        '''The desired state of the experiment after stopping. The possible states are the following:.

        - ``Completed`` : The experiment completed successfully
        - ``Cancelled`` : The experiment was canceled

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-desiredstate
        '''
        result = self._values.get("desired_state")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def kms_key(self) -> typing.Optional[builtins.str]:
        '''The AWS Key Management Service key that Amazon SageMaker uses to encrypt captured data at rest using Amazon S3 server-side encryption.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-kmskey
        '''
        result = self._values.get("kms_key")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def schedule(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.InferenceExperimentScheduleProperty]]:
        '''The duration for which the inference experiment ran or will run.

        The maximum duration that you can set for an inference experiment is 30 days.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-schedule
        '''
        result = self._values.get("schedule")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.InferenceExperimentScheduleProperty]], result)

    @builtins.property
    def shadow_mode_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ShadowModeConfigProperty]]:
        '''The configuration of ``ShadowMode`` inference experiment type, which shows the production variant that takes all the inference requests, and the shadow variant to which Amazon SageMaker replicates a percentage of the inference requests.

        For the shadow variant it also shows the percentage of requests that Amazon SageMaker replicates.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-shadowmodeconfig
        '''
        result = self._values.get("shadow_mode_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ShadowModeConfigProperty]], result)

    @builtins.property
    def status_reason(self) -> typing.Optional[builtins.str]:
        '''The error message for the inference experiment status result.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-statusreason
        '''
        result = self._values.get("status_reason")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-inferenceexperiment.html#cfn-sagemaker-inferenceexperiment-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnInferenceExperimentProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModel(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel",
):
    '''The ``AWS::SageMaker::Model`` resource to create a model to host at an Amazon SageMaker endpoint.

    For more information, see `Deploying a Model on Amazon SageMaker Hosting Services <https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-hosting.html>`_ in the *Amazon SageMaker Developer Guide* .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html
    :cloudformationResource: AWS::SageMaker::Model
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # environment: Any
        
        cfn_model = sagemaker.CfnModel(self, "MyCfnModel",
            containers=[sagemaker.CfnModel.ContainerDefinitionProperty(
                container_hostname="containerHostname",
                environment=environment,
                image="image",
                image_config=sagemaker.CfnModel.ImageConfigProperty(
                    repository_access_mode="repositoryAccessMode",
        
                    # the properties below are optional
                    repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                        repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                    )
                ),
                inference_specification_name="inferenceSpecificationName",
                mode="mode",
                model_data_source=sagemaker.CfnModel.ModelDataSourceProperty(
                    s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                        compression_type="compressionType",
                        s3_data_type="s3DataType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                            accept_eula=False
                        )
                    )
                ),
                model_data_url="modelDataUrl",
                model_package_name="modelPackageName",
                multi_model_config=sagemaker.CfnModel.MultiModelConfigProperty(
                    model_cache_setting="modelCacheSetting"
                )
            )],
            enable_network_isolation=False,
            execution_role_arn="executionRoleArn",
            inference_execution_config=sagemaker.CfnModel.InferenceExecutionConfigProperty(
                mode="mode"
            ),
            model_name="modelName",
            primary_container=sagemaker.CfnModel.ContainerDefinitionProperty(
                container_hostname="containerHostname",
                environment=environment,
                image="image",
                image_config=sagemaker.CfnModel.ImageConfigProperty(
                    repository_access_mode="repositoryAccessMode",
        
                    # the properties below are optional
                    repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                        repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                    )
                ),
                inference_specification_name="inferenceSpecificationName",
                mode="mode",
                model_data_source=sagemaker.CfnModel.ModelDataSourceProperty(
                    s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                        compression_type="compressionType",
                        s3_data_type="s3DataType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                            accept_eula=False
                        )
                    )
                ),
                model_data_url="modelDataUrl",
                model_package_name="modelPackageName",
                multi_model_config=sagemaker.CfnModel.MultiModelConfigProperty(
                    model_cache_setting="modelCacheSetting"
                )
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            vpc_config=sagemaker.CfnModel.VpcConfigProperty(
                security_group_ids=["securityGroupIds"],
                subnets=["subnets"]
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        containers: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.ContainerDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        execution_role_arn: typing.Optional[builtins.str] = None,
        inference_execution_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.InferenceExecutionConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        model_name: typing.Optional[builtins.str] = None,
        primary_container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.ContainerDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param containers: Specifies the containers in the inference pipeline.
        :param enable_network_isolation: Isolates the model container. No inbound or outbound network calls can be made to or from the model container.
        :param execution_role_arn: The Amazon Resource Name (ARN) of the IAM role that SageMaker can assume to access model artifacts and docker image for deployment on ML compute instances or for batch transform jobs. Deploying on ML compute instances is part of model hosting. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ . .. epigraph:: To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.
        :param inference_execution_config: Specifies details of how containers in a multi-container endpoint are called.
        :param model_name: The name of the new model.
        :param primary_container: The location of the primary docker image containing inference code, associated artifacts, and custom environment map that the inference code uses when the model is deployed for predictions.
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .
        :param vpc_config: A `VpcConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_VpcConfig.html>`_ object that specifies the VPC that you want your model to connect to. Control access to and from your model container by configuring the VPC. ``VpcConfig`` is used in hosting services and in batch transform. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Data in Batch Transform Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/batch-vpc.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7038463d0628899b9eb5e6fe2ba453464478eaae99d07015ffbcc79b06d20df5)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelProps(
            containers=containers,
            enable_network_isolation=enable_network_isolation,
            execution_role_arn=execution_role_arn,
            inference_execution_config=inference_execution_config,
            model_name=model_name,
            primary_container=primary_container,
            tags=tags,
            vpc_config=vpc_config,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b84351be1922488ac80002fe5ddee12b876da8414660edea4a2934f89467ec19)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__913c78dc3229ce748ffe616b0a4e27dde623fb940a9aba6e71ddfad962b6cf1a)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrModelName")
    def attr_model_name(self) -> builtins.str:
        '''The name of the model, such as ``MyModel`` .

        :cloudformationAttribute: ModelName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelName"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="containers")
    def containers(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]]]]:
        '''Specifies the containers in the inference pipeline.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]]]], jsii.get(self, "containers"))

    @containers.setter
    def containers(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b01e1f19c42cd636e28c12960d0033c49437123645a888dfe9632b05f82d3e13)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "containers", value)

    @builtins.property
    @jsii.member(jsii_name="enableNetworkIsolation")
    def enable_network_isolation(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Isolates the model container.'''
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "enableNetworkIsolation"))

    @enable_network_isolation.setter
    def enable_network_isolation(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__53bc631344d4b4e3c59054cff75e57ec89c85f75caf719e0dab16fcd8afd0466)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "enableNetworkIsolation", value)

    @builtins.property
    @jsii.member(jsii_name="executionRoleArn")
    def execution_role_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the IAM role that SageMaker can assume to access model artifacts and docker image for deployment on ML compute instances or for batch transform jobs.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "executionRoleArn"))

    @execution_role_arn.setter
    def execution_role_arn(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f9245e519b65722c82aa989675ac43fc87cf93b2550317f4eaf7e13a9664cc7f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "executionRoleArn", value)

    @builtins.property
    @jsii.member(jsii_name="inferenceExecutionConfig")
    def inference_execution_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.InferenceExecutionConfigProperty"]]:
        '''Specifies details of how containers in a multi-container endpoint are called.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.InferenceExecutionConfigProperty"]], jsii.get(self, "inferenceExecutionConfig"))

    @inference_execution_config.setter
    def inference_execution_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.InferenceExecutionConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c2442385f951a1cbcea2aa75bc2ac67e569b8dacf083ebcdbaaf36da6d71e1c9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inferenceExecutionConfig", value)

    @builtins.property
    @jsii.member(jsii_name="modelName")
    def model_name(self) -> typing.Optional[builtins.str]:
        '''The name of the new model.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelName"))

    @model_name.setter
    def model_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4e4e3295bb42e97b1b076108d30037b03bceb1ed3a175c334b83e248865661f3)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelName", value)

    @builtins.property
    @jsii.member(jsii_name="primaryContainer")
    def primary_container(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]]:
        '''The location of the primary docker image containing inference code, associated artifacts, and custom environment map that the inference code uses when the model is deployed for predictions.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]], jsii.get(self, "primaryContainer"))

    @primary_container.setter
    def primary_container(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ContainerDefinitionProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7dd8585adfcdbc3db9b90e6fbfbd279c2c8f241c64f52a3aadf8294bb116c781)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "primaryContainer", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5ff0e0d742056f0edcdcec2eb2ecbf5b6002bd7ae5ba77434b6daf6daae8923d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="vpcConfig")
    def vpc_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.VpcConfigProperty"]]:
        '''A `VpcConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_VpcConfig.html>`_ object that specifies the VPC that you want your model to connect to. Control access to and from your model container by configuring the VPC. ``VpcConfig`` is used in hosting services and in batch transform. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Data in Batch Transform Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/batch-vpc.html>`_ .'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.VpcConfigProperty"]], jsii.get(self, "vpcConfig"))

    @vpc_config.setter
    def vpc_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.VpcConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9cfac637d2a98c4124bfa455969a4e620103bd5e25811264e2ba7b637cc9bf8e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "vpcConfig", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.ContainerDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "container_hostname": "containerHostname",
            "environment": "environment",
            "image": "image",
            "image_config": "imageConfig",
            "inference_specification_name": "inferenceSpecificationName",
            "mode": "mode",
            "model_data_source": "modelDataSource",
            "model_data_url": "modelDataUrl",
            "model_package_name": "modelPackageName",
            "multi_model_config": "multiModelConfig",
        },
    )
    class ContainerDefinitionProperty:
        def __init__(
            self,
            *,
            container_hostname: typing.Optional[builtins.str] = None,
            environment: typing.Any = None,
            image: typing.Optional[builtins.str] = None,
            image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.ImageConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            inference_specification_name: typing.Optional[builtins.str] = None,
            mode: typing.Optional[builtins.str] = None,
            model_data_source: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.ModelDataSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_data_url: typing.Optional[builtins.str] = None,
            model_package_name: typing.Optional[builtins.str] = None,
            multi_model_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.MultiModelConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Describes the container, as part of model definition.

            :param container_hostname: This parameter is ignored for models that contain only a ``PrimaryContainer`` . When a ``ContainerDefinition`` is part of an inference pipeline, the value of the parameter uniquely identifies the container for the purposes of logging and metrics. For information, see `Use Logs and Metrics to Monitor an Inference Pipeline <https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipeline-logs-metrics.html>`_ . If you don't specify a value for this parameter for a ``ContainerDefinition`` that is part of an inference pipeline, a unique name is automatically assigned based on the position of the ``ContainerDefinition`` in the pipeline. If you specify a value for the ``ContainerHostName`` for any ``ContainerDefinition`` that is part of an inference pipeline, you must specify a value for the ``ContainerHostName`` parameter of every ``ContainerDefinition`` in that pipeline.
            :param environment: The environment variables to set in the Docker container. Each key and value in the ``Environment`` string to string map can have length of up to 1024. We support up to 16 entries in the map.
            :param image: The path where inference code is stored. This can be either in Amazon EC2 Container Registry or in a Docker registry that is accessible from the same VPC that you configure for your endpoint. If you are using your own custom algorithm instead of an algorithm provided by SageMaker, the inference code must meet SageMaker requirements. SageMaker supports both ``registry/repository[:tag]`` and ``registry/repository[@digest]`` image path formats. For more information, see `Using Your Own Algorithms with Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html>`_ . .. epigraph:: The model artifacts in an Amazon S3 bucket and the Docker image for inference container in Amazon EC2 Container Registry must be in the same region as the model or endpoint you are creating.
            :param image_config: Specifies whether the model container is in Amazon ECR or a private Docker registry accessible from your Amazon Virtual Private Cloud (VPC). For information about storing containers in a private Docker registry, see `Use a Private Docker Registry for Real-Time Inference Containers <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-containers-inference-private.html>`_ . .. epigraph:: The model artifacts in an Amazon S3 bucket and the Docker image for inference container in Amazon EC2 Container Registry must be in the same region as the model or endpoint you are creating.
            :param inference_specification_name: The inference specification name in the model package version.
            :param mode: Whether the container hosts a single model or multiple models.
            :param model_data_source: Specifies the location of ML model data to deploy. .. epigraph:: Currently you cannot use ``ModelDataSource`` in conjunction with SageMaker batch transform, SageMaker serverless endpoints, SageMaker multi-model endpoints, and SageMaker Marketplace.
            :param model_data_url: The S3 path where the model artifacts, which result from model training, are stored. This path must point to a single gzip compressed tar archive (.tar.gz suffix). The S3 path is required for SageMaker built-in algorithms, but not if you use your own algorithms. For more information on built-in algorithms, see `Common Parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html>`_ . .. epigraph:: The model artifacts must be in an S3 bucket that is in the same region as the model or endpoint you are creating. If you provide a value for this parameter, SageMaker uses AWS Security Token Service to download model artifacts from the S3 path you provide. AWS STS is activated in your AWS account by default. If you previously deactivated AWS STS for a region, you need to reactivate AWS STS for that region. For more information, see `Activating and Deactivating AWS STS in an AWS Region <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html>`_ in the *AWS Identity and Access Management User Guide* . .. epigraph:: If you use a built-in algorithm to create a model, SageMaker requires that you provide a S3 path to the model artifacts in ``ModelDataUrl`` .
            :param model_package_name: The name or Amazon Resource Name (ARN) of the model package to use to create the model.
            :param multi_model_config: Specifies additional configuration for multi-model endpoints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # environment: Any
                
                container_definition_property = sagemaker.CfnModel.ContainerDefinitionProperty(
                    container_hostname="containerHostname",
                    environment=environment,
                    image="image",
                    image_config=sagemaker.CfnModel.ImageConfigProperty(
                        repository_access_mode="repositoryAccessMode",
                
                        # the properties below are optional
                        repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                            repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                        )
                    ),
                    inference_specification_name="inferenceSpecificationName",
                    mode="mode",
                    model_data_source=sagemaker.CfnModel.ModelDataSourceProperty(
                        s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                            compression_type="compressionType",
                            s3_data_type="s3DataType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                                accept_eula=False
                            )
                        )
                    ),
                    model_data_url="modelDataUrl",
                    model_package_name="modelPackageName",
                    multi_model_config=sagemaker.CfnModel.MultiModelConfigProperty(
                        model_cache_setting="modelCacheSetting"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__996935212d254956134eaeb4bf5a82a497d061b5ef4b632b3d9d05c75d492918)
                check_type(argname="argument container_hostname", value=container_hostname, expected_type=type_hints["container_hostname"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument image", value=image, expected_type=type_hints["image"])
                check_type(argname="argument image_config", value=image_config, expected_type=type_hints["image_config"])
                check_type(argname="argument inference_specification_name", value=inference_specification_name, expected_type=type_hints["inference_specification_name"])
                check_type(argname="argument mode", value=mode, expected_type=type_hints["mode"])
                check_type(argname="argument model_data_source", value=model_data_source, expected_type=type_hints["model_data_source"])
                check_type(argname="argument model_data_url", value=model_data_url, expected_type=type_hints["model_data_url"])
                check_type(argname="argument model_package_name", value=model_package_name, expected_type=type_hints["model_package_name"])
                check_type(argname="argument multi_model_config", value=multi_model_config, expected_type=type_hints["multi_model_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if container_hostname is not None:
                self._values["container_hostname"] = container_hostname
            if environment is not None:
                self._values["environment"] = environment
            if image is not None:
                self._values["image"] = image
            if image_config is not None:
                self._values["image_config"] = image_config
            if inference_specification_name is not None:
                self._values["inference_specification_name"] = inference_specification_name
            if mode is not None:
                self._values["mode"] = mode
            if model_data_source is not None:
                self._values["model_data_source"] = model_data_source
            if model_data_url is not None:
                self._values["model_data_url"] = model_data_url
            if model_package_name is not None:
                self._values["model_package_name"] = model_package_name
            if multi_model_config is not None:
                self._values["multi_model_config"] = multi_model_config

        @builtins.property
        def container_hostname(self) -> typing.Optional[builtins.str]:
            '''This parameter is ignored for models that contain only a ``PrimaryContainer`` .

            When a ``ContainerDefinition`` is part of an inference pipeline, the value of the parameter uniquely identifies the container for the purposes of logging and metrics. For information, see `Use Logs and Metrics to Monitor an Inference Pipeline <https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipeline-logs-metrics.html>`_ . If you don't specify a value for this parameter for a ``ContainerDefinition`` that is part of an inference pipeline, a unique name is automatically assigned based on the position of the ``ContainerDefinition`` in the pipeline. If you specify a value for the ``ContainerHostName`` for any ``ContainerDefinition`` that is part of an inference pipeline, you must specify a value for the ``ContainerHostName`` parameter of every ``ContainerDefinition`` in that pipeline.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-containerhostname
            '''
            result = self._values.get("container_hostname")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def environment(self) -> typing.Any:
            '''The environment variables to set in the Docker container.

            Each key and value in the ``Environment`` string to string map can have length of up to 1024. We support up to 16 entries in the map.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Any, result)

        @builtins.property
        def image(self) -> typing.Optional[builtins.str]:
            '''The path where inference code is stored.

            This can be either in Amazon EC2 Container Registry or in a Docker registry that is accessible from the same VPC that you configure for your endpoint. If you are using your own custom algorithm instead of an algorithm provided by SageMaker, the inference code must meet SageMaker requirements. SageMaker supports both ``registry/repository[:tag]`` and ``registry/repository[@digest]`` image path formats. For more information, see `Using Your Own Algorithms with Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html>`_ .
            .. epigraph::

               The model artifacts in an Amazon S3 bucket and the Docker image for inference container in Amazon EC2 Container Registry must be in the same region as the model or endpoint you are creating.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-image
            '''
            result = self._values.get("image")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def image_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ImageConfigProperty"]]:
            '''Specifies whether the model container is in Amazon ECR or a private Docker registry accessible from your Amazon Virtual Private Cloud (VPC).

            For information about storing containers in a private Docker registry, see `Use a Private Docker Registry for Real-Time Inference Containers <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-containers-inference-private.html>`_ .
            .. epigraph::

               The model artifacts in an Amazon S3 bucket and the Docker image for inference container in Amazon EC2 Container Registry must be in the same region as the model or endpoint you are creating.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-imageconfig
            '''
            result = self._values.get("image_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ImageConfigProperty"]], result)

        @builtins.property
        def inference_specification_name(self) -> typing.Optional[builtins.str]:
            '''The inference specification name in the model package version.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-inferencespecificationname
            '''
            result = self._values.get("inference_specification_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def mode(self) -> typing.Optional[builtins.str]:
            '''Whether the container hosts a single model or multiple models.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-mode
            '''
            result = self._values.get("mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_data_source(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ModelDataSourceProperty"]]:
            '''Specifies the location of ML model data to deploy.

            .. epigraph::

               Currently you cannot use ``ModelDataSource`` in conjunction with SageMaker batch transform, SageMaker serverless endpoints, SageMaker multi-model endpoints, and SageMaker Marketplace.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-modeldatasource
            '''
            result = self._values.get("model_data_source")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ModelDataSourceProperty"]], result)

        @builtins.property
        def model_data_url(self) -> typing.Optional[builtins.str]:
            '''The S3 path where the model artifacts, which result from model training, are stored.

            This path must point to a single gzip compressed tar archive (.tar.gz suffix). The S3 path is required for SageMaker built-in algorithms, but not if you use your own algorithms. For more information on built-in algorithms, see `Common Parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html>`_ .
            .. epigraph::

               The model artifacts must be in an S3 bucket that is in the same region as the model or endpoint you are creating.

            If you provide a value for this parameter, SageMaker uses AWS Security Token Service to download model artifacts from the S3 path you provide. AWS STS is activated in your AWS account by default. If you previously deactivated AWS STS for a region, you need to reactivate AWS STS for that region. For more information, see `Activating and Deactivating AWS STS in an AWS Region <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html>`_ in the *AWS Identity and Access Management User Guide* .
            .. epigraph::

               If you use a built-in algorithm to create a model, SageMaker requires that you provide a S3 path to the model artifacts in ``ModelDataUrl`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-modeldataurl
            '''
            result = self._values.get("model_data_url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_name(self) -> typing.Optional[builtins.str]:
            '''The name or Amazon Resource Name (ARN) of the model package to use to create the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-modelpackagename
            '''
            result = self._values.get("model_package_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def multi_model_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.MultiModelConfigProperty"]]:
            '''Specifies additional configuration for multi-model endpoints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-containerdefinition.html#cfn-sagemaker-model-containerdefinition-multimodelconfig
            '''
            result = self._values.get("multi_model_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.MultiModelConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ContainerDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.ImageConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "repository_access_mode": "repositoryAccessMode",
            "repository_auth_config": "repositoryAuthConfig",
        },
    )
    class ImageConfigProperty:
        def __init__(
            self,
            *,
            repository_access_mode: builtins.str,
            repository_auth_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.RepositoryAuthConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Specifies whether the model container is in Amazon ECR or a private Docker registry accessible from your Amazon Virtual Private Cloud (VPC).

            :param repository_access_mode: Set this to one of the following values:. - ``Platform`` - The model image is hosted in Amazon ECR. - ``Vpc`` - The model image is hosted in a private Docker registry in your VPC.
            :param repository_auth_config: (Optional) Specifies an authentication configuration for the private docker registry where your model image is hosted. Specify a value for this property only if you specified ``Vpc`` as the value for the ``RepositoryAccessMode`` field, and the private Docker registry where the model image is hosted requires authentication.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-imageconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                image_config_property = sagemaker.CfnModel.ImageConfigProperty(
                    repository_access_mode="repositoryAccessMode",
                
                    # the properties below are optional
                    repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                        repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__180270b1ba7df71db873af487e12d74fe699c3086d4da3480de69fa5d9547097)
                check_type(argname="argument repository_access_mode", value=repository_access_mode, expected_type=type_hints["repository_access_mode"])
                check_type(argname="argument repository_auth_config", value=repository_auth_config, expected_type=type_hints["repository_auth_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "repository_access_mode": repository_access_mode,
            }
            if repository_auth_config is not None:
                self._values["repository_auth_config"] = repository_auth_config

        @builtins.property
        def repository_access_mode(self) -> builtins.str:
            '''Set this to one of the following values:.

            - ``Platform`` - The model image is hosted in Amazon ECR.
            - ``Vpc`` - The model image is hosted in a private Docker registry in your VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-imageconfig.html#cfn-sagemaker-model-imageconfig-repositoryaccessmode
            '''
            result = self._values.get("repository_access_mode")
            assert result is not None, "Required property 'repository_access_mode' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def repository_auth_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.RepositoryAuthConfigProperty"]]:
            '''(Optional) Specifies an authentication configuration for the private docker registry where your model image is hosted.

            Specify a value for this property only if you specified ``Vpc`` as the value for the ``RepositoryAccessMode`` field, and the private Docker registry where the model image is hosted requires authentication.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-imageconfig.html#cfn-sagemaker-model-imageconfig-repositoryauthconfig
            '''
            result = self._values.get("repository_auth_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.RepositoryAuthConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ImageConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.InferenceExecutionConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"mode": "mode"},
    )
    class InferenceExecutionConfigProperty:
        def __init__(self, *, mode: builtins.str) -> None:
            '''Specifies details about how containers in a multi-container endpoint are run.

            :param mode: How containers in a multi-container are run. The following values are valid. - ``Serial`` - Containers run as a serial pipeline. - ``Direct`` - Only the individual container that you specify is run.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-inferenceexecutionconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_execution_config_property = sagemaker.CfnModel.InferenceExecutionConfigProperty(
                    mode="mode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__de83cd55ed4b1fc85f299ed9d65fccedbf91ee1227e57cfa7bf733eec8cc7555)
                check_type(argname="argument mode", value=mode, expected_type=type_hints["mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "mode": mode,
            }

        @builtins.property
        def mode(self) -> builtins.str:
            '''How containers in a multi-container are run. The following values are valid.

            - ``Serial`` - Containers run as a serial pipeline.
            - ``Direct`` - Only the individual container that you specify is run.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-inferenceexecutionconfig.html#cfn-sagemaker-model-inferenceexecutionconfig-mode
            '''
            result = self._values.get("mode")
            assert result is not None, "Required property 'mode' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceExecutionConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.ModelAccessConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"accept_eula": "acceptEula"},
    )
    class ModelAccessConfigProperty:
        def __init__(
            self,
            *,
            accept_eula: typing.Union[builtins.bool, _IResolvable_da3f097b],
        ) -> None:
            '''The access configuration file to control access to the ML model.

            You can explicitly accept the model end-user license agreement (EULA) within the ``ModelAccessConfig`` .

            - If you are a Jumpstart user, see the `End-user license agreements <https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-choose.html#jumpstart-foundation-models-choose-eula>`_ section for more details on accepting the EULA.
            - If you are an AutoML user, see the *Optional Parameters* section of *Create an AutoML job to fine-tune text generation models using the API* for details on `How to set the EULA acceptance when fine-tuning a model using the AutoML API <https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-create-experiment-finetune-llms.html#autopilot-llms-finetuning-api-optional-params>`_ .

            :param accept_eula: Specifies agreement to the model end-user license agreement (EULA). The ``AcceptEula`` value must be explicitly defined as ``True`` in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-modelaccessconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_access_config_property = sagemaker.CfnModel.ModelAccessConfigProperty(
                    accept_eula=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__054248bc5f3f029699d9ba6431865466995797b77aa5323b0009b8593a6a4be3)
                check_type(argname="argument accept_eula", value=accept_eula, expected_type=type_hints["accept_eula"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "accept_eula": accept_eula,
            }

        @builtins.property
        def accept_eula(self) -> typing.Union[builtins.bool, _IResolvable_da3f097b]:
            '''Specifies agreement to the model end-user license agreement (EULA).

            The ``AcceptEula`` value must be explicitly defined as ``True`` in order to accept the EULA that this model requires. You are responsible for reviewing and complying with any applicable license terms and making sure they are acceptable for your use case before downloading or using a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-modelaccessconfig.html#cfn-sagemaker-model-modelaccessconfig-accepteula
            '''
            result = self._values.get("accept_eula")
            assert result is not None, "Required property 'accept_eula' is missing"
            return typing.cast(typing.Union[builtins.bool, _IResolvable_da3f097b], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelAccessConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.ModelDataSourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_data_source": "s3DataSource"},
    )
    class ModelDataSourceProperty:
        def __init__(
            self,
            *,
            s3_data_source: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.S3DataSourceProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Specifies the location of ML model data to deploy.

            If specified, you must specify one and only one of the available data sources.

            :param s3_data_source: Specifies the S3 location of ML model data to deploy.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-modeldatasource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_data_source_property = sagemaker.CfnModel.ModelDataSourceProperty(
                    s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                        compression_type="compressionType",
                        s3_data_type="s3DataType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                            accept_eula=False
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a2b9ae36f864a8bc684522004675e5402e3a032e13cae5ba270a0a08a2f51c71)
                check_type(argname="argument s3_data_source", value=s3_data_source, expected_type=type_hints["s3_data_source"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_data_source": s3_data_source,
            }

        @builtins.property
        def s3_data_source(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModel.S3DataSourceProperty"]:
            '''Specifies the S3 location of ML model data to deploy.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-modeldatasource.html#cfn-sagemaker-model-modeldatasource-s3datasource
            '''
            result = self._values.get("s3_data_source")
            assert result is not None, "Required property 's3_data_source' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModel.S3DataSourceProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelDataSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.MultiModelConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"model_cache_setting": "modelCacheSetting"},
    )
    class MultiModelConfigProperty:
        def __init__(
            self,
            *,
            model_cache_setting: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies additional configuration for hosting multi-model endpoints.

            :param model_cache_setting: Whether to cache models for a multi-model endpoint. By default, multi-model endpoints cache models so that a model does not have to be loaded into memory each time it is invoked. Some use cases do not benefit from model caching. For example, if an endpoint hosts a large number of models that are each invoked infrequently, the endpoint might perform better if you disable model caching. To disable model caching, set the value of this parameter to Disabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-multimodelconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                multi_model_config_property = sagemaker.CfnModel.MultiModelConfigProperty(
                    model_cache_setting="modelCacheSetting"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__eec04cb7e26e6c993c6789df684dc23c1794f95642a9b7de5423825e8f44827c)
                check_type(argname="argument model_cache_setting", value=model_cache_setting, expected_type=type_hints["model_cache_setting"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if model_cache_setting is not None:
                self._values["model_cache_setting"] = model_cache_setting

        @builtins.property
        def model_cache_setting(self) -> typing.Optional[builtins.str]:
            '''Whether to cache models for a multi-model endpoint.

            By default, multi-model endpoints cache models so that a model does not have to be loaded into memory each time it is invoked. Some use cases do not benefit from model caching. For example, if an endpoint hosts a large number of models that are each invoked infrequently, the endpoint might perform better if you disable model caching. To disable model caching, set the value of this parameter to Disabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-multimodelconfig.html#cfn-sagemaker-model-multimodelconfig-modelcachesetting
            '''
            result = self._values.get("model_cache_setting")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MultiModelConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.RepositoryAuthConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "repository_credentials_provider_arn": "repositoryCredentialsProviderArn",
        },
    )
    class RepositoryAuthConfigProperty:
        def __init__(
            self,
            *,
            repository_credentials_provider_arn: builtins.str,
        ) -> None:
            '''Specifies an authentication configuration for the private docker registry where your model image is hosted.

            Specify a value for this property only if you specified ``Vpc`` as the value for the ``RepositoryAccessMode`` field of the ``ImageConfig`` object that you passed to a call to ``CreateModel`` and the private Docker registry where the model image is hosted requires authentication.

            :param repository_credentials_provider_arn: The Amazon Resource Name (ARN) of an AWS Lambda function that provides credentials to authenticate to the private Docker registry where your model image is hosted. For information about how to create an AWS Lambda function, see `Create a Lambda function with the console <https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html>`_ in the *AWS Lambda Developer Guide* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-repositoryauthconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                repository_auth_config_property = sagemaker.CfnModel.RepositoryAuthConfigProperty(
                    repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__055d3a2d4cf2da6731af22ce760741f05ab6fab49696f9fc65c093a2dfc0571c)
                check_type(argname="argument repository_credentials_provider_arn", value=repository_credentials_provider_arn, expected_type=type_hints["repository_credentials_provider_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "repository_credentials_provider_arn": repository_credentials_provider_arn,
            }

        @builtins.property
        def repository_credentials_provider_arn(self) -> builtins.str:
            '''The Amazon Resource Name (ARN) of an AWS Lambda function that provides credentials to authenticate to the private Docker registry where your model image is hosted.

            For information about how to create an AWS Lambda function, see `Create a Lambda function with the console <https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html>`_ in the *AWS Lambda Developer Guide* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-repositoryauthconfig.html#cfn-sagemaker-model-repositoryauthconfig-repositorycredentialsproviderarn
            '''
            result = self._values.get("repository_credentials_provider_arn")
            assert result is not None, "Required property 'repository_credentials_provider_arn' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RepositoryAuthConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.S3DataSourceProperty",
        jsii_struct_bases=[],
        name_mapping={
            "compression_type": "compressionType",
            "s3_data_type": "s3DataType",
            "s3_uri": "s3Uri",
            "model_access_config": "modelAccessConfig",
        },
    )
    class S3DataSourceProperty:
        def __init__(
            self,
            *,
            compression_type: builtins.str,
            s3_data_type: builtins.str,
            s3_uri: builtins.str,
            model_access_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModel.ModelAccessConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Describes the S3 data source.

            Your input bucket must be in the same AWS region as your training job.

            :param compression_type: 
            :param s3_data_type: If you choose ``S3Prefix`` , ``S3Uri`` identifies a key name prefix. SageMaker uses all objects that match the specified key name prefix for model training. If you choose ``ManifestFile`` , ``S3Uri`` identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training. If you choose ``AugmentedManifestFile`` , S3Uri identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. ``AugmentedManifestFile`` can only be used if the Channel's input mode is ``Pipe`` .
            :param s3_uri: Depending on the value specified for the ``S3DataType`` , identifies either a key name prefix or a manifest. For example: - A key name prefix might look like this: ``s3://bucketname/exampleprefix/`` - A manifest might look like this: ``s3://bucketname/example.manifest`` A manifest is an S3 object which is a JSON file consisting of an array of elements. The first element is a prefix which is followed by one or more suffixes. SageMaker appends the suffix elements to the prefix to get a full set of ``S3Uri`` . Note that the prefix must be a valid non-empty ``S3Uri`` that precludes users from specifying a manifest whose individual ``S3Uri`` is sourced from different S3 buckets. The following code example shows a valid manifest format: ``[ {"prefix": "s3://customer_bucket/some/prefix/"},`` ``"relative/path/to/custdata-1",`` ``"relative/path/custdata-2",`` ``...`` ``"relative/path/custdata-N"`` ``]`` This JSON is equivalent to the following ``S3Uri`` list: ``s3://customer_bucket/some/prefix/relative/path/to/custdata-1`` ``s3://customer_bucket/some/prefix/relative/path/custdata-2`` ``...`` ``s3://customer_bucket/some/prefix/relative/path/custdata-N`` The complete set of ``S3Uri`` in this manifest is the input data for the channel for this data source. The object that each ``S3Uri`` points to must be readable by the IAM role that SageMaker uses to perform tasks on your behalf. Your input bucket must be located in same AWS region as your training job.
            :param model_access_config: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-s3datasource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_data_source_property = sagemaker.CfnModel.S3DataSourceProperty(
                    compression_type="compressionType",
                    s3_data_type="s3DataType",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                        accept_eula=False
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b8f37eb3244bd29202b465b6cd69e8e427a2946e3c4d2d1093fb60182e2ea3a5)
                check_type(argname="argument compression_type", value=compression_type, expected_type=type_hints["compression_type"])
                check_type(argname="argument s3_data_type", value=s3_data_type, expected_type=type_hints["s3_data_type"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument model_access_config", value=model_access_config, expected_type=type_hints["model_access_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "compression_type": compression_type,
                "s3_data_type": s3_data_type,
                "s3_uri": s3_uri,
            }
            if model_access_config is not None:
                self._values["model_access_config"] = model_access_config

        @builtins.property
        def compression_type(self) -> builtins.str:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-s3datasource.html#cfn-sagemaker-model-s3datasource-compressiontype
            '''
            result = self._values.get("compression_type")
            assert result is not None, "Required property 'compression_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_data_type(self) -> builtins.str:
            '''If you choose ``S3Prefix`` , ``S3Uri`` identifies a key name prefix.

            SageMaker uses all objects that match the specified key name prefix for model training.

            If you choose ``ManifestFile`` , ``S3Uri`` identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training.

            If you choose ``AugmentedManifestFile`` , S3Uri identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. ``AugmentedManifestFile`` can only be used if the Channel's input mode is ``Pipe`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-s3datasource.html#cfn-sagemaker-model-s3datasource-s3datatype
            '''
            result = self._values.get("s3_data_type")
            assert result is not None, "Required property 's3_data_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''Depending on the value specified for the ``S3DataType`` , identifies either a key name prefix or a manifest.

            For example:

            - A key name prefix might look like this: ``s3://bucketname/exampleprefix/``
            - A manifest might look like this: ``s3://bucketname/example.manifest``

            A manifest is an S3 object which is a JSON file consisting of an array of elements. The first element is a prefix which is followed by one or more suffixes. SageMaker appends the suffix elements to the prefix to get a full set of ``S3Uri`` . Note that the prefix must be a valid non-empty ``S3Uri`` that precludes users from specifying a manifest whose individual ``S3Uri`` is sourced from different S3 buckets.

            The following code example shows a valid manifest format:

            ``[ {"prefix": "s3://customer_bucket/some/prefix/"},``

            ``"relative/path/to/custdata-1",``

            ``"relative/path/custdata-2",``

            ``...``

            ``"relative/path/custdata-N"``

            ``]``

            This JSON is equivalent to the following ``S3Uri`` list:

            ``s3://customer_bucket/some/prefix/relative/path/to/custdata-1``

            ``s3://customer_bucket/some/prefix/relative/path/custdata-2``

            ``...``

            ``s3://customer_bucket/some/prefix/relative/path/custdata-N``

            The complete set of ``S3Uri`` in this manifest is the input data for the channel for this data source. The object that each ``S3Uri`` points to must be readable by the IAM role that SageMaker uses to perform tasks on your behalf.

            Your input bucket must be located in same AWS region as your training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-s3datasource.html#cfn-sagemaker-model-s3datasource-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def model_access_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ModelAccessConfigProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-s3datasource.html#cfn-sagemaker-model-s3datasource-modelaccessconfig
            '''
            result = self._values.get("model_access_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModel.ModelAccessConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3DataSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModel.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnModel.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__55eaa95aa90ad4b6999e4006738b0d40057c7530e2df3a661a4d6d9ea9b26c3f)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-vpcconfig.html#cfn-sagemaker-model-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-model-vpcconfig.html#cfn-sagemaker-model-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelBiasJobDefinition(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition",
):
    '''Creates the definition for a model bias job.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html
    :cloudformationResource: AWS::SageMaker::ModelBiasJobDefinition
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_model_bias_job_definition = sagemaker.CfnModelBiasJobDefinition(self, "MyCfnModelBiasJobDefinition",
            job_resources=sagemaker.CfnModelBiasJobDefinition.MonitoringResourcesProperty(
                cluster_config=sagemaker.CfnModelBiasJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
        
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            ),
            model_bias_app_specification=sagemaker.CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty(
                config_uri="configUri",
                image_uri="imageUri",
        
                # the properties below are optional
                environment={
                    "environment_key": "environment"
                }
            ),
            model_bias_job_input=sagemaker.CfnModelBiasJobDefinition.ModelBiasJobInputProperty(
                ground_truth_s3_input=sagemaker.CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty(
                    s3_uri="s3Uri"
                ),
        
                # the properties below are optional
                batch_transform_input=sagemaker.CfnModelBiasJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
        
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                ),
                endpoint_input=sagemaker.CfnModelBiasJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
        
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            ),
            model_bias_job_output_config=sagemaker.CfnModelBiasJobDefinition.MonitoringOutputConfigProperty(
                monitoring_outputs=[sagemaker.CfnModelBiasJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelBiasJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )],
        
                # the properties below are optional
                kms_key_id="kmsKeyId"
            ),
            role_arn="roleArn",
        
            # the properties below are optional
            endpoint_name="endpointName",
            job_definition_name="jobDefinitionName",
            model_bias_baseline_config=sagemaker.CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty(
                baselining_job_name="baseliningJobName",
                constraints_resource=sagemaker.CfnModelBiasJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            ),
            network_config=sagemaker.CfnModelBiasJobDefinition.NetworkConfigProperty(
                enable_inter_container_traffic_encryption=False,
                enable_network_isolation=False,
                vpc_config=sagemaker.CfnModelBiasJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            ),
            stopping_condition=sagemaker.CfnModelBiasJobDefinition.StoppingConditionProperty(
                max_runtime_in_seconds=123
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.MonitoringResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
        model_bias_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
        model_bias_job_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.ModelBiasJobInputProperty", typing.Dict[builtins.str, typing.Any]]],
        model_bias_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.MonitoringOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_bias_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.NetworkConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.StoppingConditionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_bias_app_specification: Configures the model bias job to run a specified Docker container image.
        :param model_bias_job_input: Inputs for the model bias job.
        :param model_bias_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the bias job definition. The name must be unique within an AWS Region in the AWS account.
        :param model_bias_baseline_config: The baseline configuration for a model bias job.
        :param network_config: Networking options for a model bias job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5872e9629433c78a4806d9db53eb11d5daed20c7d3e8e4499c965f5459e8a0da)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelBiasJobDefinitionProps(
            job_resources=job_resources,
            model_bias_app_specification=model_bias_app_specification,
            model_bias_job_input=model_bias_job_input,
            model_bias_job_output_config=model_bias_job_output_config,
            role_arn=role_arn,
            endpoint_name=endpoint_name,
            job_definition_name=job_definition_name,
            model_bias_baseline_config=model_bias_baseline_config,
            network_config=network_config,
            stopping_condition=stopping_condition,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__30a2c6f0c977388e724ac91b9243f8c00987aa5ad7e25fb19c61839812145ebc)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__61b39aa70eee6ad364d2a9532cb7f6e9f3c54be8261f5f3b42ea9eb4c31abce4)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the job definition was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrJobDefinitionArn")
    def attr_job_definition_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the job definition.

        :cloudformationAttribute: JobDefinitionArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrJobDefinitionArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="jobResources")
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringResourcesProperty"]:
        '''Identifies the resources to deploy for a monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringResourcesProperty"], jsii.get(self, "jobResources"))

    @job_resources.setter
    def job_resources(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringResourcesProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d4d25577671ac14fc2077caea7b095d699090f94839ed53d13e4875c34c6ba13)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobResources", value)

    @builtins.property
    @jsii.member(jsii_name="modelBiasAppSpecification")
    def model_bias_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty"]:
        '''Configures the model bias job to run a specified Docker container image.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty"], jsii.get(self, "modelBiasAppSpecification"))

    @model_bias_app_specification.setter
    def model_bias_app_specification(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f4a90b0ccee1791598d39d418f1a3314cd5d1b8bea523ee7a5f1ba04e697d49f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelBiasAppSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="modelBiasJobInput")
    def model_bias_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasJobInputProperty"]:
        '''Inputs for the model bias job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasJobInputProperty"], jsii.get(self, "modelBiasJobInput"))

    @model_bias_job_input.setter
    def model_bias_job_input(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasJobInputProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f7d7745ade63f1d91e760582259714ed75129cdf07dc3a2aef1c8453e1c31be2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelBiasJobInput", value)

    @builtins.property
    @jsii.member(jsii_name="modelBiasJobOutputConfig")
    def model_bias_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringOutputConfigProperty"]:
        '''The output configuration for monitoring jobs.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringOutputConfigProperty"], jsii.get(self, "modelBiasJobOutputConfig"))

    @model_bias_job_output_config.setter
    def model_bias_job_output_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringOutputConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ca83e265312887bf91d708a9c2063355e1f575cfe903547ec38487020a048b89)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelBiasJobOutputConfig", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fff9bf6880fe445d4f4aee27a35e15071953a8ce117ebd3abf182497a61a9967)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9e49ca89381d4cd706696ca645f36f1e966bbee42f50fa589af0f2bcd121f117)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="jobDefinitionName")
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the bias job definition.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "jobDefinitionName"))

    @job_definition_name.setter
    def job_definition_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__50c53d48b8ba4b9bb17a0c41365c39ed717b163631f50f1837e6abba7069e579)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobDefinitionName", value)

    @builtins.property
    @jsii.member(jsii_name="modelBiasBaselineConfig")
    def model_bias_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty"]]:
        '''The baseline configuration for a model bias job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty"]], jsii.get(self, "modelBiasBaselineConfig"))

    @model_bias_baseline_config.setter
    def model_bias_baseline_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__564f3203a07a362273c689d273521691f57b7fe7e19b5cdfac97df3e45677ba7)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelBiasBaselineConfig", value)

    @builtins.property
    @jsii.member(jsii_name="networkConfig")
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.NetworkConfigProperty"]]:
        '''Networking options for a model bias job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.NetworkConfigProperty"]], jsii.get(self, "networkConfig"))

    @network_config.setter
    def network_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.NetworkConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0e0f168d3853b9bdc566efd8f97da806d03d1518937caf92cd43447ff5e2e6ae)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "networkConfig", value)

    @builtins.property
    @jsii.member(jsii_name="stoppingCondition")
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.StoppingConditionProperty"]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.StoppingConditionProperty"]], jsii.get(self, "stoppingCondition"))

    @stopping_condition.setter
    def stopping_condition(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.StoppingConditionProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c8b9812c4f147c20439686b5bacf9867f679c51edd630c77d87d65d5ab33b4d7)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "stoppingCondition", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__28deb0afb71e18327b8a1781eae28f1be20a347976d63e9fa12cc725a24045c1)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.BatchTransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_captured_destination_s3_uri": "dataCapturedDestinationS3Uri",
            "dataset_format": "datasetFormat",
            "local_path": "localPath",
            "end_time_offset": "endTimeOffset",
            "features_attribute": "featuresAttribute",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "probability_threshold_attribute": "probabilityThresholdAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
            "start_time_offset": "startTimeOffset",
        },
    )
    class BatchTransformInputProperty:
        def __init__(
            self,
            *,
            data_captured_destination_s3_uri: builtins.str,
            dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.DatasetFormatProperty", typing.Dict[builtins.str, typing.Any]]],
            local_path: builtins.str,
            end_time_offset: typing.Optional[builtins.str] = None,
            features_attribute: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            probability_threshold_attribute: typing.Optional[jsii.Number] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
            start_time_offset: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the batch transform job.

            :param data_captured_destination_s3_uri: The Amazon S3 location being used to capture the data.
            :param dataset_format: The dataset format for your batch transform job.
            :param local_path: Path to the filesystem where the batch transform data is available to the container.
            :param end_time_offset: If specified, monitoring jobs subtract this time from the end time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .
            :param features_attribute: The attributes of the input data that are the input features.
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param probability_threshold_attribute: The threshold for the class probability to be evaluated as a positive result.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .
            :param start_time_offset: If specified, monitoring jobs substract this time from the start time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                batch_transform_input_property = sagemaker.CfnModelBiasJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
                
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__095e1c4ad30edfe45e06a2be3f2d81470123016adae4473fa83adb32923cd5b6)
                check_type(argname="argument data_captured_destination_s3_uri", value=data_captured_destination_s3_uri, expected_type=type_hints["data_captured_destination_s3_uri"])
                check_type(argname="argument dataset_format", value=dataset_format, expected_type=type_hints["dataset_format"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument end_time_offset", value=end_time_offset, expected_type=type_hints["end_time_offset"])
                check_type(argname="argument features_attribute", value=features_attribute, expected_type=type_hints["features_attribute"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument probability_threshold_attribute", value=probability_threshold_attribute, expected_type=type_hints["probability_threshold_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
                check_type(argname="argument start_time_offset", value=start_time_offset, expected_type=type_hints["start_time_offset"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_captured_destination_s3_uri": data_captured_destination_s3_uri,
                "dataset_format": dataset_format,
                "local_path": local_path,
            }
            if end_time_offset is not None:
                self._values["end_time_offset"] = end_time_offset
            if features_attribute is not None:
                self._values["features_attribute"] = features_attribute
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if probability_threshold_attribute is not None:
                self._values["probability_threshold_attribute"] = probability_threshold_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode
            if start_time_offset is not None:
                self._values["start_time_offset"] = start_time_offset

        @builtins.property
        def data_captured_destination_s3_uri(self) -> builtins.str:
            '''The Amazon S3 location being used to capture the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-datacaptureddestinations3uri
            '''
            result = self._values.get("data_captured_destination_s3_uri")
            assert result is not None, "Required property 'data_captured_destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def dataset_format(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.DatasetFormatProperty"]:
            '''The dataset format for your batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-datasetformat
            '''
            result = self._values.get("dataset_format")
            assert result is not None, "Required property 'dataset_format' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.DatasetFormatProperty"], result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the batch transform data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def end_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs subtract this time from the end time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-endtimeoffset
            '''
            result = self._values.get("end_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data that are the input features.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-featuresattribute
            '''
            result = self._values.get("features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_threshold_attribute(self) -> typing.Optional[jsii.Number]:
            '''The threshold for the class probability to be evaluated as a positive result.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-probabilitythresholdattribute
            '''
            result = self._values.get("probability_threshold_attribute")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def start_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the start time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-batchtransforminput.html#cfn-sagemaker-modelbiasjobdefinition-batchtransforminput-starttimeoffset
            '''
            result = self._values.get("start_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BatchTransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.ClusterConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_size_in_gb": "volumeSizeInGb",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class ClusterConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_size_in_gb: jsii.Number,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration for the cluster resources used to run the processing job.

            :param instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
            :param instance_type: The ML compute instance type for the processing job.
            :param volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-clusterconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cluster_config_property = sagemaker.CfnModelBiasJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7b8869dfe33d807dbf7cfd7e3dc13f6b26b3f5e0e5682b9dc2811f4ede94462a)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
                "volume_size_in_gb": volume_size_in_gb,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the model monitoring job.

            For distributed processing jobs, specify a value greater than 1. The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-clusterconfig.html#cfn-sagemaker-modelbiasjobdefinition-clusterconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-clusterconfig.html#cfn-sagemaker-modelbiasjobdefinition-clusterconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_size_in_gb(self) -> jsii.Number:
            '''The size of the ML storage volume, in gigabytes, that you want to provision.

            You must specify sufficient ML storage for your scenario.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-clusterconfig.html#cfn-sagemaker-modelbiasjobdefinition-clusterconfig-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            assert result is not None, "Required property 'volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-clusterconfig.html#cfn-sagemaker-modelbiasjobdefinition-clusterconfig-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClusterConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.ConstraintsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class ConstraintsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The constraints resource for a monitoring job.

            :param s3_uri: The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-constraintsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                constraints_resource_property = sagemaker.CfnModelBiasJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__943ebfed01717dd008a0d1e2960fc1ce2d35b1748556502d98427a764b53750f)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-constraintsresource.html#cfn-sagemaker-modelbiasjobdefinition-constraintsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ConstraintsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.CsvProperty",
        jsii_struct_bases=[],
        name_mapping={"header": "header"},
    )
    class CsvProperty:
        def __init__(
            self,
            *,
            header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The CSV format.

            :param header: A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-csv.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                csv_property = sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                    header=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ad7b9ec14afd894dc6cae82e572b09369f7dbf4f6dcc8847e5dea58a0bd8340c)
                check_type(argname="argument header", value=header, expected_type=type_hints["header"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if header is not None:
                self._values["header"] = header

        @builtins.property
        def header(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-csv.html#cfn-sagemaker-modelbiasjobdefinition-csv-header
            '''
            result = self._values.get("header")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CsvProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty",
        jsii_struct_bases=[],
        name_mapping={"csv": "csv", "json": "json", "parquet": "parquet"},
    )
    class DatasetFormatProperty:
        def __init__(
            self,
            *,
            csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.CsvProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.JsonProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The dataset format of the data to monitor.

            :param csv: The CSV format.
            :param json: The Json format.
            :param parquet: A flag indicate if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-datasetformat.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                dataset_format_property = sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty(
                    csv=sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                        header=False
                    ),
                    json=sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                        line=False
                    ),
                    parquet=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__36892a7975b64582ee5f88a49643cfe6219c5efea35fb7613c7dd08e9b2eaad0)
                check_type(argname="argument csv", value=csv, expected_type=type_hints["csv"])
                check_type(argname="argument json", value=json, expected_type=type_hints["json"])
                check_type(argname="argument parquet", value=parquet, expected_type=type_hints["parquet"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv is not None:
                self._values["csv"] = csv
            if json is not None:
                self._values["json"] = json
            if parquet is not None:
                self._values["parquet"] = parquet

        @builtins.property
        def csv(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.CsvProperty"]]:
            '''The CSV format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-datasetformat.html#cfn-sagemaker-modelbiasjobdefinition-datasetformat-csv
            '''
            result = self._values.get("csv")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.CsvProperty"]], result)

        @builtins.property
        def json(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.JsonProperty"]]:
            '''The Json format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-datasetformat.html#cfn-sagemaker-modelbiasjobdefinition-datasetformat-json
            '''
            result = self._values.get("json")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.JsonProperty"]], result)

        @builtins.property
        def parquet(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A flag indicate if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-datasetformat.html#cfn-sagemaker-modelbiasjobdefinition-datasetformat-parquet
            '''
            result = self._values.get("parquet")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DatasetFormatProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.EndpointInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "local_path": "localPath",
            "end_time_offset": "endTimeOffset",
            "features_attribute": "featuresAttribute",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "probability_threshold_attribute": "probabilityThresholdAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
            "start_time_offset": "startTimeOffset",
        },
    )
    class EndpointInputProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            local_path: builtins.str,
            end_time_offset: typing.Optional[builtins.str] = None,
            features_attribute: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            probability_threshold_attribute: typing.Optional[jsii.Number] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
            start_time_offset: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the endpoint.

            :param endpoint_name: An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.
            :param local_path: Path to the filesystem where the endpoint data is available to the container.
            :param end_time_offset: If specified, monitoring jobs substract this time from the end time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .
            :param features_attribute: The attributes of the input data that are the input features.
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param probability_threshold_attribute: The threshold for the class probability to be evaluated as a positive result.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .
            :param start_time_offset: If specified, monitoring jobs substract this time from the start time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_input_property = sagemaker.CfnModelBiasJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
                
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f1f8abf8437ab2ecf1d7e91d0e0eef66b0b92d6eb75e4e47d89f5119da394e82)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument end_time_offset", value=end_time_offset, expected_type=type_hints["end_time_offset"])
                check_type(argname="argument features_attribute", value=features_attribute, expected_type=type_hints["features_attribute"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument probability_threshold_attribute", value=probability_threshold_attribute, expected_type=type_hints["probability_threshold_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
                check_type(argname="argument start_time_offset", value=start_time_offset, expected_type=type_hints["start_time_offset"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
                "local_path": local_path,
            }
            if end_time_offset is not None:
                self._values["end_time_offset"] = end_time_offset
            if features_attribute is not None:
                self._values["features_attribute"] = features_attribute
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if probability_threshold_attribute is not None:
                self._values["probability_threshold_attribute"] = probability_threshold_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode
            if start_time_offset is not None:
                self._values["start_time_offset"] = start_time_offset

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the endpoint data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def end_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the end time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-endtimeoffset
            '''
            result = self._values.get("end_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data that are the input features.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-featuresattribute
            '''
            result = self._values.get("features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_threshold_attribute(self) -> typing.Optional[jsii.Number]:
            '''The threshold for the class probability to be evaluated as a positive result.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-probabilitythresholdattribute
            '''
            result = self._values.get("probability_threshold_attribute")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def start_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the start time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-endpointinput.html#cfn-sagemaker-modelbiasjobdefinition-endpointinput-starttimeoffset
            '''
            result = self._values.get("start_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.JsonProperty",
        jsii_struct_bases=[],
        name_mapping={"line": "line"},
    )
    class JsonProperty:
        def __init__(
            self,
            *,
            line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The Json format.

            :param line: A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-json.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                json_property = sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                    line=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__108ddba994e973d46709c36ee036ed088e10ebd2bafb950e49da9971b9bd4478)
                check_type(argname="argument line", value=line, expected_type=type_hints["line"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if line is not None:
                self._values["line"] = line

        @builtins.property
        def line(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-json.html#cfn-sagemaker-modelbiasjobdefinition-json-line
            '''
            result = self._values.get("line")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JsonProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "config_uri": "configUri",
            "image_uri": "imageUri",
            "environment": "environment",
        },
    )
    class ModelBiasAppSpecificationProperty:
        def __init__(
            self,
            *,
            config_uri: builtins.str,
            image_uri: builtins.str,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
        ) -> None:
            '''Docker container image configuration object for the model bias job.

            :param config_uri: JSON formatted S3 file that defines bias parameters. For more information on this JSON configuration file, see `Configure bias parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-config-json-monitor-bias-parameters.html>`_ .
            :param image_uri: The container image to be run by the model bias job.
            :param environment: Sets the environment variables in the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasappspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_bias_app_specification_property = sagemaker.CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty(
                    config_uri="configUri",
                    image_uri="imageUri",
                
                    # the properties below are optional
                    environment={
                        "environment_key": "environment"
                    }
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1f01cf0d16de54b691554f90fc0164a32bb034cb11f48e1da830de2f9a3cf5a6)
                check_type(argname="argument config_uri", value=config_uri, expected_type=type_hints["config_uri"])
                check_type(argname="argument image_uri", value=image_uri, expected_type=type_hints["image_uri"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "config_uri": config_uri,
                "image_uri": image_uri,
            }
            if environment is not None:
                self._values["environment"] = environment

        @builtins.property
        def config_uri(self) -> builtins.str:
            '''JSON formatted S3 file that defines bias parameters.

            For more information on this JSON configuration file, see `Configure bias parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-config-json-monitor-bias-parameters.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasappspecification.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasappspecification-configuri
            '''
            result = self._values.get("config_uri")
            assert result is not None, "Required property 'config_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_uri(self) -> builtins.str:
            '''The container image to be run by the model bias job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasappspecification.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasappspecification-imageuri
            '''
            result = self._values.get("image_uri")
            assert result is not None, "Required property 'image_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Sets the environment variables in the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasappspecification.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasappspecification-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelBiasAppSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "baselining_job_name": "baseliningJobName",
            "constraints_resource": "constraintsResource",
        },
    )
    class ModelBiasBaselineConfigProperty:
        def __init__(
            self,
            *,
            baselining_job_name: typing.Optional[builtins.str] = None,
            constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.ConstraintsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration for a baseline model bias job.

            :param baselining_job_name: The name of the baseline model bias job.
            :param constraints_resource: The constraints resource for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_bias_baseline_config_property = sagemaker.CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelBiasJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__823e6e415f7639c7c7afbfb8814917a4e2e40c50c66bdfe3ac97ca0bc30cc5d3)
                check_type(argname="argument baselining_job_name", value=baselining_job_name, expected_type=type_hints["baselining_job_name"])
                check_type(argname="argument constraints_resource", value=constraints_resource, expected_type=type_hints["constraints_resource"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if baselining_job_name is not None:
                self._values["baselining_job_name"] = baselining_job_name
            if constraints_resource is not None:
                self._values["constraints_resource"] = constraints_resource

        @builtins.property
        def baselining_job_name(self) -> typing.Optional[builtins.str]:
            '''The name of the baseline model bias job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig-baseliningjobname
            '''
            result = self._values.get("baselining_job_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def constraints_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ConstraintsResourceProperty"]]:
            '''The constraints resource for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig-constraintsresource
            '''
            result = self._values.get("constraints_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ConstraintsResourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelBiasBaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.ModelBiasJobInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ground_truth_s3_input": "groundTruthS3Input",
            "batch_transform_input": "batchTransformInput",
            "endpoint_input": "endpointInput",
        },
    )
    class ModelBiasJobInputProperty:
        def __init__(
            self,
            *,
            ground_truth_s3_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty", typing.Dict[builtins.str, typing.Any]]],
            batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.BatchTransformInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.EndpointInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Inputs for the model bias job.

            :param ground_truth_s3_input: Location of ground truth labels to use in model bias job.
            :param batch_transform_input: Input object for the batch transform job.
            :param endpoint_input: Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasjobinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_bias_job_input_property = sagemaker.CfnModelBiasJobDefinition.ModelBiasJobInputProperty(
                    ground_truth_s3_input=sagemaker.CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty(
                        s3_uri="s3Uri"
                    ),
                
                    # the properties below are optional
                    batch_transform_input=sagemaker.CfnModelBiasJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
                
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    ),
                    endpoint_input=sagemaker.CfnModelBiasJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
                
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2ffcf5c6155bcd42245ba3b4be18afbff8648089a8d444f8113b04cbaae873b1)
                check_type(argname="argument ground_truth_s3_input", value=ground_truth_s3_input, expected_type=type_hints["ground_truth_s3_input"])
                check_type(argname="argument batch_transform_input", value=batch_transform_input, expected_type=type_hints["batch_transform_input"])
                check_type(argname="argument endpoint_input", value=endpoint_input, expected_type=type_hints["endpoint_input"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "ground_truth_s3_input": ground_truth_s3_input,
            }
            if batch_transform_input is not None:
                self._values["batch_transform_input"] = batch_transform_input
            if endpoint_input is not None:
                self._values["endpoint_input"] = endpoint_input

        @builtins.property
        def ground_truth_s3_input(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty"]:
            '''Location of ground truth labels to use in model bias job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasjobinput.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasjobinput-groundtruths3input
            '''
            result = self._values.get("ground_truth_s3_input")
            assert result is not None, "Required property 'ground_truth_s3_input' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty"], result)

        @builtins.property
        def batch_transform_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.BatchTransformInputProperty"]]:
            '''Input object for the batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasjobinput.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasjobinput-batchtransforminput
            '''
            result = self._values.get("batch_transform_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.BatchTransformInputProperty"]], result)

        @builtins.property
        def endpoint_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.EndpointInputProperty"]]:
            '''Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-modelbiasjobinput.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasjobinput-endpointinput
            '''
            result = self._values.get("endpoint_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.EndpointInputProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelBiasJobInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class MonitoringGroundTruthS3InputProperty:
        def __init__(self, *, s3_uri: builtins.str) -> None:
            '''The ground truth labels for the dataset used for the monitoring job.

            :param s3_uri: The address of the Amazon S3 location of the ground truth labels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringgroundtruths3input.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_ground_truth_s3_input_property = sagemaker.CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__157af7a127a3b0073068813c099aca200305bbf786f887277a81dd44b8ccb7be)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_uri": s3_uri,
            }

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''The address of the Amazon S3 location of the ground truth labels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringgroundtruths3input.html#cfn-sagemaker-modelbiasjobdefinition-monitoringgroundtruths3input-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringGroundTruthS3InputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.MonitoringOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_outputs": "monitoringOutputs",
            "kms_key_id": "kmsKeyId",
        },
    )
    class MonitoringOutputConfigProperty:
        def __init__(
            self,
            *,
            monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.MonitoringOutputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for monitoring jobs.

            :param monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_config_property = sagemaker.CfnModelBiasJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelBiasJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelBiasJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__66d2a40f96e7c82ca2e00fe803e1af79eb9f014c8e2eaaf048e5f919855e60b8)
                check_type(argname="argument monitoring_outputs", value=monitoring_outputs, expected_type=type_hints["monitoring_outputs"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_outputs": monitoring_outputs,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def monitoring_outputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringOutputProperty"]]]:
            '''Monitoring outputs for monitoring jobs.

            This is where the output of the periodic monitoring jobs is uploaded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelbiasjobdefinition-monitoringoutputconfig-monitoringoutputs
            '''
            result = self._values.get("monitoring_outputs")
            assert result is not None, "Required property 'monitoring_outputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.MonitoringOutputProperty"]]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelbiasjobdefinition-monitoringoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.MonitoringOutputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_output": "s3Output"},
    )
    class MonitoringOutputProperty:
        def __init__(
            self,
            *,
            s3_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.S3OutputProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The output object for a monitoring job.

            :param s3_output: The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_property = sagemaker.CfnModelBiasJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelBiasJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__26779aa7e6b94222b25d88996befe67774fd9e96c31cf9ab4b970012ad11c0bd)
                check_type(argname="argument s3_output", value=s3_output, expected_type=type_hints["s3_output"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output": s3_output,
            }

        @builtins.property
        def s3_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.S3OutputProperty"]:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringoutput.html#cfn-sagemaker-modelbiasjobdefinition-monitoringoutput-s3output
            '''
            result = self._values.get("s3_output")
            assert result is not None, "Required property 's3_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.S3OutputProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.MonitoringResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={"cluster_config": "clusterConfig"},
    )
    class MonitoringResourcesProperty:
        def __init__(
            self,
            *,
            cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.ClusterConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Identifies the resources to deploy for a monitoring job.

            :param cluster_config: The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_resources_property = sagemaker.CfnModelBiasJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelBiasJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d366eab1f33057db8e52fa7f9a947a4c33d5d1a88ebc1f70e0b42ddf22fdd665)
                check_type(argname="argument cluster_config", value=cluster_config, expected_type=type_hints["cluster_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cluster_config": cluster_config,
            }

        @builtins.property
        def cluster_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ClusterConfigProperty"]:
            '''The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-monitoringresources.html#cfn-sagemaker-modelbiasjobdefinition-monitoringresources-clusterconfig
            '''
            result = self._values.get("cluster_config")
            assert result is not None, "Required property 'cluster_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.ClusterConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.NetworkConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_inter_container_traffic_encryption": "enableInterContainerTrafficEncryption",
            "enable_network_isolation": "enableNetworkIsolation",
            "vpc_config": "vpcConfig",
        },
    )
    class NetworkConfigProperty:
        def __init__(
            self,
            *,
            enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelBiasJobDefinition.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.

            :param enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
            :param enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
            :param vpc_config: Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-networkconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                network_config_property = sagemaker.CfnModelBiasJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelBiasJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__387cd4dbb8879c27437d3607adf4bc4d6cb6faeb7264e9eb78f046cd461f5447)
                check_type(argname="argument enable_inter_container_traffic_encryption", value=enable_inter_container_traffic_encryption, expected_type=type_hints["enable_inter_container_traffic_encryption"])
                check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
                check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_inter_container_traffic_encryption is not None:
                self._values["enable_inter_container_traffic_encryption"] = enable_inter_container_traffic_encryption
            if enable_network_isolation is not None:
                self._values["enable_network_isolation"] = enable_network_isolation
            if vpc_config is not None:
                self._values["vpc_config"] = vpc_config

        @builtins.property
        def enable_inter_container_traffic_encryption(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to encrypt all communications between distributed processing jobs.

            Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-networkconfig.html#cfn-sagemaker-modelbiasjobdefinition-networkconfig-enableintercontainertrafficencryption
            '''
            result = self._values.get("enable_inter_container_traffic_encryption")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def enable_network_isolation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to allow inbound and outbound network calls to and from the containers used for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-networkconfig.html#cfn-sagemaker-modelbiasjobdefinition-networkconfig-enablenetworkisolation
            '''
            result = self._values.get("enable_network_isolation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def vpc_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.VpcConfigProperty"]]:
            '''Specifies a VPC that your training jobs and hosted models have access to.

            Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-networkconfig.html#cfn-sagemaker-modelbiasjobdefinition-networkconfig-vpcconfig
            '''
            result = self._values.get("vpc_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelBiasJobDefinition.VpcConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.S3OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "local_path": "localPath",
            "s3_uri": "s3Uri",
            "s3_upload_mode": "s3UploadMode",
        },
    )
    class S3OutputProperty:
        def __init__(
            self,
            *,
            local_path: builtins.str,
            s3_uri: builtins.str,
            s3_upload_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :param local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. ``LocalPath`` is an absolute path for the output data.
            :param s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
            :param s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-s3output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_output_property = sagemaker.CfnModelBiasJobDefinition.S3OutputProperty(
                    local_path="localPath",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    s3_upload_mode="s3UploadMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__50955362eff017f76ac61a86f28afca2e07257ac507029f9cf344292c30cc690)
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument s3_upload_mode", value=s3_upload_mode, expected_type=type_hints["s3_upload_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "local_path": local_path,
                "s3_uri": s3_uri,
            }
            if s3_upload_mode is not None:
                self._values["s3_upload_mode"] = s3_upload_mode

        @builtins.property
        def local_path(self) -> builtins.str:
            '''The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            ``LocalPath`` is an absolute path for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-s3output.html#cfn-sagemaker-modelbiasjobdefinition-s3output-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-s3output.html#cfn-sagemaker-modelbiasjobdefinition-s3output-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_upload_mode(self) -> typing.Optional[builtins.str]:
            '''Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-s3output.html#cfn-sagemaker-modelbiasjobdefinition-s3output-s3uploadmode
            '''
            result = self._values.get("s3_upload_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.StoppingConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"max_runtime_in_seconds": "maxRuntimeInSeconds"},
    )
    class StoppingConditionProperty:
        def __init__(self, *, max_runtime_in_seconds: jsii.Number) -> None:
            '''Specifies a limit to how long a model training job or model compilation job can run.

            It also specifies how long a managed spot training job has to complete. When the job reaches the time limit, SageMaker ends the training or compilation job. Use this API to cap model training costs.

            To stop a training job, SageMaker sends the algorithm the ``SIGTERM`` signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost.

            The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with ``CreateModel`` .
            .. epigraph::

               The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.

            :param max_runtime_in_seconds: The maximum length of time, in seconds, that a training or compilation job can run before it is stopped. For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model. For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days. The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-stoppingcondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                stopping_condition_property = sagemaker.CfnModelBiasJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2ab64963f895d7d98e730686e981f063bb28b958ec4593026768864d8df0709b)
                check_type(argname="argument max_runtime_in_seconds", value=max_runtime_in_seconds, expected_type=type_hints["max_runtime_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_runtime_in_seconds": max_runtime_in_seconds,
            }

        @builtins.property
        def max_runtime_in_seconds(self) -> jsii.Number:
            '''The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.

            For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.

            For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.

            The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-stoppingcondition.html#cfn-sagemaker-modelbiasjobdefinition-stoppingcondition-maxruntimeinseconds
            '''
            result = self._values.get("max_runtime_in_seconds")
            assert result is not None, "Required property 'max_runtime_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StoppingConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinition.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnModelBiasJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__041672cbe0536137cc10cb4921c5ada479006d91889f53efb9ed3bc4d57f8ca2)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-vpcconfig.html#cfn-sagemaker-modelbiasjobdefinition-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelbiasjobdefinition-vpcconfig.html#cfn-sagemaker-modelbiasjobdefinition-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelBiasJobDefinitionProps",
    jsii_struct_bases=[],
    name_mapping={
        "job_resources": "jobResources",
        "model_bias_app_specification": "modelBiasAppSpecification",
        "model_bias_job_input": "modelBiasJobInput",
        "model_bias_job_output_config": "modelBiasJobOutputConfig",
        "role_arn": "roleArn",
        "endpoint_name": "endpointName",
        "job_definition_name": "jobDefinitionName",
        "model_bias_baseline_config": "modelBiasBaselineConfig",
        "network_config": "networkConfig",
        "stopping_condition": "stoppingCondition",
        "tags": "tags",
    },
)
class CfnModelBiasJobDefinitionProps:
    def __init__(
        self,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
        model_bias_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
        model_bias_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
        model_bias_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_bias_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelBiasJobDefinition``.

        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_bias_app_specification: Configures the model bias job to run a specified Docker container image.
        :param model_bias_job_input: Inputs for the model bias job.
        :param model_bias_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the bias job definition. The name must be unique within an AWS Region in the AWS account.
        :param model_bias_baseline_config: The baseline configuration for a model bias job.
        :param network_config: Networking options for a model bias job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_model_bias_job_definition_props = sagemaker.CfnModelBiasJobDefinitionProps(
                job_resources=sagemaker.CfnModelBiasJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelBiasJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
            
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                ),
                model_bias_app_specification=sagemaker.CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty(
                    config_uri="configUri",
                    image_uri="imageUri",
            
                    # the properties below are optional
                    environment={
                        "environment_key": "environment"
                    }
                ),
                model_bias_job_input=sagemaker.CfnModelBiasJobDefinition.ModelBiasJobInputProperty(
                    ground_truth_s3_input=sagemaker.CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty(
                        s3_uri="s3Uri"
                    ),
            
                    # the properties below are optional
                    batch_transform_input=sagemaker.CfnModelBiasJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelBiasJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelBiasJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelBiasJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
            
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    ),
                    endpoint_input=sagemaker.CfnModelBiasJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
            
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    )
                ),
                model_bias_job_output_config=sagemaker.CfnModelBiasJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelBiasJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelBiasJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
            
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                ),
                role_arn="roleArn",
            
                # the properties below are optional
                endpoint_name="endpointName",
                job_definition_name="jobDefinitionName",
                model_bias_baseline_config=sagemaker.CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelBiasJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                ),
                network_config=sagemaker.CfnModelBiasJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelBiasJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                ),
                stopping_condition=sagemaker.CfnModelBiasJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3161ba72dcb53b69d61217bc71ca77ee8b6119cd05c9055b38545e88d3f6f6b6)
            check_type(argname="argument job_resources", value=job_resources, expected_type=type_hints["job_resources"])
            check_type(argname="argument model_bias_app_specification", value=model_bias_app_specification, expected_type=type_hints["model_bias_app_specification"])
            check_type(argname="argument model_bias_job_input", value=model_bias_job_input, expected_type=type_hints["model_bias_job_input"])
            check_type(argname="argument model_bias_job_output_config", value=model_bias_job_output_config, expected_type=type_hints["model_bias_job_output_config"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument job_definition_name", value=job_definition_name, expected_type=type_hints["job_definition_name"])
            check_type(argname="argument model_bias_baseline_config", value=model_bias_baseline_config, expected_type=type_hints["model_bias_baseline_config"])
            check_type(argname="argument network_config", value=network_config, expected_type=type_hints["network_config"])
            check_type(argname="argument stopping_condition", value=stopping_condition, expected_type=type_hints["stopping_condition"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "job_resources": job_resources,
            "model_bias_app_specification": model_bias_app_specification,
            "model_bias_job_input": model_bias_job_input,
            "model_bias_job_output_config": model_bias_job_output_config,
            "role_arn": role_arn,
        }
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if job_definition_name is not None:
            self._values["job_definition_name"] = job_definition_name
        if model_bias_baseline_config is not None:
            self._values["model_bias_baseline_config"] = model_bias_baseline_config
        if network_config is not None:
            self._values["network_config"] = network_config
        if stopping_condition is not None:
            self._values["stopping_condition"] = stopping_condition
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringResourcesProperty]:
        '''Identifies the resources to deploy for a monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-jobresources
        '''
        result = self._values.get("job_resources")
        assert result is not None, "Required property 'job_resources' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringResourcesProperty], result)

    @builtins.property
    def model_bias_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty]:
        '''Configures the model bias job to run a specified Docker container image.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasappspecification
        '''
        result = self._values.get("model_bias_app_specification")
        assert result is not None, "Required property 'model_bias_app_specification' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty], result)

    @builtins.property
    def model_bias_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasJobInputProperty]:
        '''Inputs for the model bias job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasjobinput
        '''
        result = self._values.get("model_bias_job_input")
        assert result is not None, "Required property 'model_bias_job_input' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasJobInputProperty], result)

    @builtins.property
    def model_bias_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringOutputConfigProperty]:
        '''The output configuration for monitoring jobs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasjoboutputconfig
        '''
        result = self._values.get("model_bias_job_output_config")
        assert result is not None, "Required property 'model_bias_job_output_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringOutputConfigProperty], result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the bias job definition.

        The name must be unique within an AWS Region in the AWS account.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-jobdefinitionname
        '''
        result = self._values.get("job_definition_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_bias_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty]]:
        '''The baseline configuration for a model bias job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-modelbiasbaselineconfig
        '''
        result = self._values.get("model_bias_baseline_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty]], result)

    @builtins.property
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.NetworkConfigProperty]]:
        '''Networking options for a model bias job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-networkconfig
        '''
        result = self._values.get("network_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.NetworkConfigProperty]], result)

    @builtins.property
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.StoppingConditionProperty]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-stoppingcondition
        '''
        result = self._values.get("stopping_condition")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.StoppingConditionProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelbiasjobdefinition.html#cfn-sagemaker-modelbiasjobdefinition-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelBiasJobDefinitionProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelCard(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard",
):
    '''Creates an Amazon SageMaker Model Card.

    For information about how to use model cards, see `Amazon SageMaker Model Card <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html
    :cloudformationResource: AWS::SageMaker::ModelCard
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # value: Any
        
        cfn_model_card = sagemaker.CfnModelCard(self, "MyCfnModelCard",
            content=sagemaker.CfnModelCard.ContentProperty(
                additional_information=sagemaker.CfnModelCard.AdditionalInformationProperty(
                    caveats_and_recommendations="caveatsAndRecommendations",
                    custom_details={
                        "custom_details_key": "customDetails"
                    },
                    ethical_considerations="ethicalConsiderations"
                ),
                business_details=sagemaker.CfnModelCard.BusinessDetailsProperty(
                    business_problem="businessProblem",
                    business_stakeholders="businessStakeholders",
                    line_of_business="lineOfBusiness"
                ),
                evaluation_details=[sagemaker.CfnModelCard.EvaluationDetailProperty(
                    name="name",
        
                    # the properties below are optional
                    datasets=["datasets"],
                    evaluation_job_arn="evaluationJobArn",
                    evaluation_observation="evaluationObservation",
                    metadata={
                        "metadata_key": "metadata"
                    },
                    metric_groups=[sagemaker.CfnModelCard.MetricGroupProperty(
                        metric_data=[sagemaker.CfnModelCard.MetricDataItemsProperty(
                            name="name",
                            type="type",
                            value=value,
        
                            # the properties below are optional
                            notes="notes",
                            x_axis_name=["xAxisName"],
                            y_axis_name=["yAxisName"]
                        )],
                        name="name"
                    )]
                )],
                intended_uses=sagemaker.CfnModelCard.IntendedUsesProperty(
                    explanations_for_risk_rating="explanationsForRiskRating",
                    factors_affecting_model_efficiency="factorsAffectingModelEfficiency",
                    intended_uses="intendedUses",
                    purpose_of_model="purposeOfModel",
                    risk_rating="riskRating"
                ),
                model_overview=sagemaker.CfnModelCard.ModelOverviewProperty(
                    algorithm_type="algorithmType",
                    inference_environment=sagemaker.CfnModelCard.InferenceEnvironmentProperty(
                        container_image=["containerImage"]
                    ),
                    model_artifact=["modelArtifact"],
                    model_creator="modelCreator",
                    model_description="modelDescription",
                    model_id="modelId",
                    model_name="modelName",
                    model_owner="modelOwner",
                    model_version=123,
                    problem_type="problemType"
                ),
                model_package_details=sagemaker.CfnModelCard.ModelPackageDetailsProperty(
                    approval_description="approvalDescription",
                    created_by=sagemaker.CfnModelCard.ModelPackageCreatorProperty(
                        user_profile_name="userProfileName"
                    ),
                    domain="domain",
                    inference_specification=sagemaker.CfnModelCard.InferenceSpecificationProperty(
                        containers=[sagemaker.CfnModelCard.ContainerProperty(
                            image="image",
        
                            # the properties below are optional
                            model_data_url="modelDataUrl",
                            nearest_model_name="nearestModelName"
                        )]
                    ),
                    model_approval_status="modelApprovalStatus",
                    model_package_arn="modelPackageArn",
                    model_package_description="modelPackageDescription",
                    model_package_group_name="modelPackageGroupName",
                    model_package_name="modelPackageName",
                    model_package_status="modelPackageStatus",
                    model_package_version=123,
                    source_algorithms=[sagemaker.CfnModelCard.SourceAlgorithmProperty(
                        algorithm_name="algorithmName",
        
                        # the properties below are optional
                        model_data_url="modelDataUrl"
                    )],
                    task="task"
                ),
                training_details=sagemaker.CfnModelCard.TrainingDetailsProperty(
                    objective_function=sagemaker.CfnModelCard.ObjectiveFunctionProperty(
                        function=sagemaker.CfnModelCard.FunctionProperty(
                            condition="condition",
                            facet="facet",
                            function="function"
                        ),
                        notes="notes"
                    ),
                    training_job_details=sagemaker.CfnModelCard.TrainingJobDetailsProperty(
                        hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                            name="name",
                            value="value"
                        )],
                        training_arn="trainingArn",
                        training_datasets=["trainingDatasets"],
                        training_environment=sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                            container_image=["containerImage"]
                        ),
                        training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                            name="name",
                            value=123,
        
                            # the properties below are optional
                            notes="notes"
                        )],
                        user_provided_hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                            name="name",
                            value="value"
                        )],
                        user_provided_training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                            name="name",
                            value=123,
        
                            # the properties below are optional
                            notes="notes"
                        )]
                    ),
                    training_observations="trainingObservations"
                )
            ),
            model_card_name="modelCardName",
            model_card_status="modelCardStatus",
        
            # the properties below are optional
            created_by=sagemaker.CfnModelCard.UserContextProperty(
                domain_id="domainId",
                user_profile_arn="userProfileArn",
                user_profile_name="userProfileName"
            ),
            last_modified_by=sagemaker.CfnModelCard.UserContextProperty(
                domain_id="domainId",
                user_profile_arn="userProfileArn",
                user_profile_name="userProfileName"
            ),
            security_config=sagemaker.CfnModelCard.SecurityConfigProperty(
                kms_key_id="kmsKeyId"
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        content: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ContentProperty", typing.Dict[builtins.str, typing.Any]]],
        model_card_name: builtins.str,
        model_card_status: builtins.str,
        created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.UserContextProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        last_modified_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.UserContextProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.SecurityConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param content: The content of the model card. Content uses the `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .
        :param model_card_name: The unique name of the model card.
        :param model_card_status: The approval status of the model card within your organization. Different organizations might have different criteria for model card review and approval. - ``Draft`` : The model card is a work in progress. - ``PendingReview`` : The model card is pending review. - ``Approved`` : The model card is approved. - ``Archived`` : The model card is archived. No more updates should be made to the model card, but it can still be exported.
        :param created_by: Information about the user who created or modified one or more of the following:. - Experiment - Trial - Trial component - Lineage group - Project - Model Card
        :param last_modified_by: Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.
        :param security_config: The security configuration used to protect model card data.
        :param tags: Key-value pairs used to manage metadata for the model card.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a592fe664bd5fc9b01b1e64fc0f6cea3e28e6bcee51c6b1db5790b4854661b17)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelCardProps(
            content=content,
            model_card_name=model_card_name,
            model_card_status=model_card_status,
            created_by=created_by,
            last_modified_by=last_modified_by,
            security_config=security_config,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3a1a3799b007a1226f7f69a3ae5033dd02cabd7734d75bf1f0b2f0945e26ad6e)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f553be99ffe4257f9cb4a7f1b60bc1b90090306760fcbca6966d067686781764)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreatedByDomainId")
    def attr_created_by_domain_id(self) -> builtins.str:
        '''The domain associated with the user.

        :cloudformationAttribute: CreatedBy.DomainId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreatedByDomainId"))

    @builtins.property
    @jsii.member(jsii_name="attrCreatedByUserProfileArn")
    def attr_created_by_user_profile_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the user's profile.

        :cloudformationAttribute: CreatedBy.UserProfileArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreatedByUserProfileArn"))

    @builtins.property
    @jsii.member(jsii_name="attrCreatedByUserProfileName")
    def attr_created_by_user_profile_name(self) -> builtins.str:
        '''The name of the user's profile.

        :cloudformationAttribute: CreatedBy.UserProfileName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreatedByUserProfileName"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The date and time the model card was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedByDomainId")
    def attr_last_modified_by_domain_id(self) -> builtins.str:
        '''The domain associated with the user.

        :cloudformationAttribute: LastModifiedBy.DomainId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedByDomainId"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedByUserProfileArn")
    def attr_last_modified_by_user_profile_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the user's profile.

        :cloudformationAttribute: LastModifiedBy.UserProfileArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedByUserProfileArn"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedByUserProfileName")
    def attr_last_modified_by_user_profile_name(self) -> builtins.str:
        '''The name of the user's profile.

        :cloudformationAttribute: LastModifiedBy.UserProfileName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedByUserProfileName"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedTime")
    def attr_last_modified_time(self) -> builtins.str:
        '''The date and time the model card was last modified.

        :cloudformationAttribute: LastModifiedTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedTime"))

    @builtins.property
    @jsii.member(jsii_name="attrModelCardArn")
    def attr_model_card_arn(self) -> builtins.str:
        '''The Amazon Resource Number (ARN) of the model card.

        For example, ``arn:aws:sagemaker:us-west-2:012345678901:modelcard/examplemodelcard`` .

        :cloudformationAttribute: ModelCardArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelCardArn"))

    @builtins.property
    @jsii.member(jsii_name="attrModelCardProcessingStatus")
    def attr_model_card_processing_status(self) -> builtins.str:
        '''The processing status of model card deletion.

        The ModelCardProcessingStatus updates throughout the different deletion steps.

        :cloudformationAttribute: ModelCardProcessingStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelCardProcessingStatus"))

    @builtins.property
    @jsii.member(jsii_name="attrModelCardVersion")
    def attr_model_card_version(self) -> jsii.Number:
        '''A version of the model card.

        :cloudformationAttribute: ModelCardVersion
        '''
        return typing.cast(jsii.Number, jsii.get(self, "attrModelCardVersion"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="content")
    def content(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelCard.ContentProperty"]:
        '''The content of the model card.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelCard.ContentProperty"], jsii.get(self, "content"))

    @content.setter
    def content(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelCard.ContentProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6312b1e45b9cd115d8d68dc4f0a7a5ba993555ace7bf2658c7bdb9d31af3b066)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "content", value)

    @builtins.property
    @jsii.member(jsii_name="modelCardName")
    def model_card_name(self) -> builtins.str:
        '''The unique name of the model card.'''
        return typing.cast(builtins.str, jsii.get(self, "modelCardName"))

    @model_card_name.setter
    def model_card_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__35b92fd0a88edd62589b1ac3231631690a1025b09fa71eda09f8fb912e29bbb8)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelCardName", value)

    @builtins.property
    @jsii.member(jsii_name="modelCardStatus")
    def model_card_status(self) -> builtins.str:
        '''The approval status of the model card within your organization.'''
        return typing.cast(builtins.str, jsii.get(self, "modelCardStatus"))

    @model_card_status.setter
    def model_card_status(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9ccc5c6c973f86f30180b2e7f8af4bb35118c6878fb5ee58dd4ce7f30713c6fd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelCardStatus", value)

    @builtins.property
    @jsii.member(jsii_name="createdBy")
    def created_by(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]]:
        '''Information about the user who created or modified one or more of the following:.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]], jsii.get(self, "createdBy"))

    @created_by.setter
    def created_by(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3200edebb36cb29038567788eb869413a6087864c22db112f4e396c0347e23d5)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "createdBy", value)

    @builtins.property
    @jsii.member(jsii_name="lastModifiedBy")
    def last_modified_by(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]]:
        '''Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]], jsii.get(self, "lastModifiedBy"))

    @last_modified_by.setter
    def last_modified_by(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.UserContextProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__980c80444f032b41b916e012ba6410d56d5b5f6ffbae3ba3ac29416576d8c48b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "lastModifiedBy", value)

    @builtins.property
    @jsii.member(jsii_name="securityConfig")
    def security_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.SecurityConfigProperty"]]:
        '''The security configuration used to protect model card data.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.SecurityConfigProperty"]], jsii.get(self, "securityConfig"))

    @security_config.setter
    def security_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.SecurityConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cd3e6b98665d602c4bc065357e599386796abc8ca8388dee986b130a4e6537c3)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "securityConfig", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Key-value pairs used to manage metadata for the model card.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__21ba0d4cc0226b207bf2ec8b60d2dec29d0e16f53ed13490a4eadd31adbf4717)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.AdditionalInformationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "caveats_and_recommendations": "caveatsAndRecommendations",
            "custom_details": "customDetails",
            "ethical_considerations": "ethicalConsiderations",
        },
    )
    class AdditionalInformationProperty:
        def __init__(
            self,
            *,
            caveats_and_recommendations: typing.Optional[builtins.str] = None,
            custom_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            ethical_considerations: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Additional information about the model.

            :param caveats_and_recommendations: Caveats and recommendations for those who might use this model in their applications.
            :param custom_details: Any additional information to document about the model.
            :param ethical_considerations: Any ethical considerations documented by the model card author.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-additionalinformation.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                additional_information_property = sagemaker.CfnModelCard.AdditionalInformationProperty(
                    caveats_and_recommendations="caveatsAndRecommendations",
                    custom_details={
                        "custom_details_key": "customDetails"
                    },
                    ethical_considerations="ethicalConsiderations"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bdc804b35b707b6b83db59dd5856c727f91c3eaf822ead69849965c8d835fb16)
                check_type(argname="argument caveats_and_recommendations", value=caveats_and_recommendations, expected_type=type_hints["caveats_and_recommendations"])
                check_type(argname="argument custom_details", value=custom_details, expected_type=type_hints["custom_details"])
                check_type(argname="argument ethical_considerations", value=ethical_considerations, expected_type=type_hints["ethical_considerations"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if caveats_and_recommendations is not None:
                self._values["caveats_and_recommendations"] = caveats_and_recommendations
            if custom_details is not None:
                self._values["custom_details"] = custom_details
            if ethical_considerations is not None:
                self._values["ethical_considerations"] = ethical_considerations

        @builtins.property
        def caveats_and_recommendations(self) -> typing.Optional[builtins.str]:
            '''Caveats and recommendations for those who might use this model in their applications.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-additionalinformation.html#cfn-sagemaker-modelcard-additionalinformation-caveatsandrecommendations
            '''
            result = self._values.get("caveats_and_recommendations")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def custom_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Any additional information to document about the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-additionalinformation.html#cfn-sagemaker-modelcard-additionalinformation-customdetails
            '''
            result = self._values.get("custom_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def ethical_considerations(self) -> typing.Optional[builtins.str]:
            '''Any ethical considerations documented by the model card author.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-additionalinformation.html#cfn-sagemaker-modelcard-additionalinformation-ethicalconsiderations
            '''
            result = self._values.get("ethical_considerations")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AdditionalInformationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.BusinessDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "business_problem": "businessProblem",
            "business_stakeholders": "businessStakeholders",
            "line_of_business": "lineOfBusiness",
        },
    )
    class BusinessDetailsProperty:
        def __init__(
            self,
            *,
            business_problem: typing.Optional[builtins.str] = None,
            business_stakeholders: typing.Optional[builtins.str] = None,
            line_of_business: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about how the model supports business goals.

            :param business_problem: The specific business problem that the model is trying to solve.
            :param business_stakeholders: The relevant stakeholders for the model.
            :param line_of_business: The broader business need that the model is serving.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-businessdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                business_details_property = sagemaker.CfnModelCard.BusinessDetailsProperty(
                    business_problem="businessProblem",
                    business_stakeholders="businessStakeholders",
                    line_of_business="lineOfBusiness"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c9648d55d580d4da7524caf1b1d303ad1894db6b202cb07f245c4a41363fae4b)
                check_type(argname="argument business_problem", value=business_problem, expected_type=type_hints["business_problem"])
                check_type(argname="argument business_stakeholders", value=business_stakeholders, expected_type=type_hints["business_stakeholders"])
                check_type(argname="argument line_of_business", value=line_of_business, expected_type=type_hints["line_of_business"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if business_problem is not None:
                self._values["business_problem"] = business_problem
            if business_stakeholders is not None:
                self._values["business_stakeholders"] = business_stakeholders
            if line_of_business is not None:
                self._values["line_of_business"] = line_of_business

        @builtins.property
        def business_problem(self) -> typing.Optional[builtins.str]:
            '''The specific business problem that the model is trying to solve.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-businessdetails.html#cfn-sagemaker-modelcard-businessdetails-businessproblem
            '''
            result = self._values.get("business_problem")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def business_stakeholders(self) -> typing.Optional[builtins.str]:
            '''The relevant stakeholders for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-businessdetails.html#cfn-sagemaker-modelcard-businessdetails-businessstakeholders
            '''
            result = self._values.get("business_stakeholders")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def line_of_business(self) -> typing.Optional[builtins.str]:
            '''The broader business need that the model is serving.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-businessdetails.html#cfn-sagemaker-modelcard-businessdetails-lineofbusiness
            '''
            result = self._values.get("line_of_business")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BusinessDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ContainerProperty",
        jsii_struct_bases=[],
        name_mapping={
            "image": "image",
            "model_data_url": "modelDataUrl",
            "nearest_model_name": "nearestModelName",
        },
    )
    class ContainerProperty:
        def __init__(
            self,
            *,
            image: builtins.str,
            model_data_url: typing.Optional[builtins.str] = None,
            nearest_model_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param image: Inference environment path. The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored.
            :param model_data_url: The Amazon S3 path where the model artifacts, which result from model training, are stored.
            :param nearest_model_name: The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-container.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                container_property = sagemaker.CfnModelCard.ContainerProperty(
                    image="image",
                
                    # the properties below are optional
                    model_data_url="modelDataUrl",
                    nearest_model_name="nearestModelName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__33e54e364df9af6954c3dcbfdce9460667559b7475acfc5fd430e99e93216bb9)
                check_type(argname="argument image", value=image, expected_type=type_hints["image"])
                check_type(argname="argument model_data_url", value=model_data_url, expected_type=type_hints["model_data_url"])
                check_type(argname="argument nearest_model_name", value=nearest_model_name, expected_type=type_hints["nearest_model_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "image": image,
            }
            if model_data_url is not None:
                self._values["model_data_url"] = model_data_url
            if nearest_model_name is not None:
                self._values["nearest_model_name"] = nearest_model_name

        @builtins.property
        def image(self) -> builtins.str:
            '''Inference environment path.

            The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-container.html#cfn-sagemaker-modelcard-container-image
            '''
            result = self._values.get("image")
            assert result is not None, "Required property 'image' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def model_data_url(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 path where the model artifacts, which result from model training, are stored.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-container.html#cfn-sagemaker-modelcard-container-modeldataurl
            '''
            result = self._values.get("model_data_url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def nearest_model_name(self) -> typing.Optional[builtins.str]:
            '''The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-container.html#cfn-sagemaker-modelcard-container-nearestmodelname
            '''
            result = self._values.get("nearest_model_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ContainerProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ContentProperty",
        jsii_struct_bases=[],
        name_mapping={
            "additional_information": "additionalInformation",
            "business_details": "businessDetails",
            "evaluation_details": "evaluationDetails",
            "intended_uses": "intendedUses",
            "model_overview": "modelOverview",
            "model_package_details": "modelPackageDetails",
            "training_details": "trainingDetails",
        },
    )
    class ContentProperty:
        def __init__(
            self,
            *,
            additional_information: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.AdditionalInformationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            business_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.BusinessDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            evaluation_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.EvaluationDetailProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            intended_uses: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.IntendedUsesProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_overview: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ModelOverviewProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_package_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ModelPackageDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            training_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The content of the model card.

            It follows the `model card json schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .

            :param additional_information: Additional information about the model.
            :param business_details: Information about how the model supports business goals.
            :param evaluation_details: An overview about the model's evaluation.
            :param intended_uses: The intended usage of the model.
            :param model_overview: An overview about the model.
            :param model_package_details: Metadata information related to model package version.
            :param training_details: An overview about model training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # value: Any
                
                content_property = sagemaker.CfnModelCard.ContentProperty(
                    additional_information=sagemaker.CfnModelCard.AdditionalInformationProperty(
                        caveats_and_recommendations="caveatsAndRecommendations",
                        custom_details={
                            "custom_details_key": "customDetails"
                        },
                        ethical_considerations="ethicalConsiderations"
                    ),
                    business_details=sagemaker.CfnModelCard.BusinessDetailsProperty(
                        business_problem="businessProblem",
                        business_stakeholders="businessStakeholders",
                        line_of_business="lineOfBusiness"
                    ),
                    evaluation_details=[sagemaker.CfnModelCard.EvaluationDetailProperty(
                        name="name",
                
                        # the properties below are optional
                        datasets=["datasets"],
                        evaluation_job_arn="evaluationJobArn",
                        evaluation_observation="evaluationObservation",
                        metadata={
                            "metadata_key": "metadata"
                        },
                        metric_groups=[sagemaker.CfnModelCard.MetricGroupProperty(
                            metric_data=[sagemaker.CfnModelCard.MetricDataItemsProperty(
                                name="name",
                                type="type",
                                value=value,
                
                                # the properties below are optional
                                notes="notes",
                                x_axis_name=["xAxisName"],
                                y_axis_name=["yAxisName"]
                            )],
                            name="name"
                        )]
                    )],
                    intended_uses=sagemaker.CfnModelCard.IntendedUsesProperty(
                        explanations_for_risk_rating="explanationsForRiskRating",
                        factors_affecting_model_efficiency="factorsAffectingModelEfficiency",
                        intended_uses="intendedUses",
                        purpose_of_model="purposeOfModel",
                        risk_rating="riskRating"
                    ),
                    model_overview=sagemaker.CfnModelCard.ModelOverviewProperty(
                        algorithm_type="algorithmType",
                        inference_environment=sagemaker.CfnModelCard.InferenceEnvironmentProperty(
                            container_image=["containerImage"]
                        ),
                        model_artifact=["modelArtifact"],
                        model_creator="modelCreator",
                        model_description="modelDescription",
                        model_id="modelId",
                        model_name="modelName",
                        model_owner="modelOwner",
                        model_version=123,
                        problem_type="problemType"
                    ),
                    model_package_details=sagemaker.CfnModelCard.ModelPackageDetailsProperty(
                        approval_description="approvalDescription",
                        created_by=sagemaker.CfnModelCard.ModelPackageCreatorProperty(
                            user_profile_name="userProfileName"
                        ),
                        domain="domain",
                        inference_specification=sagemaker.CfnModelCard.InferenceSpecificationProperty(
                            containers=[sagemaker.CfnModelCard.ContainerProperty(
                                image="image",
                
                                # the properties below are optional
                                model_data_url="modelDataUrl",
                                nearest_model_name="nearestModelName"
                            )]
                        ),
                        model_approval_status="modelApprovalStatus",
                        model_package_arn="modelPackageArn",
                        model_package_description="modelPackageDescription",
                        model_package_group_name="modelPackageGroupName",
                        model_package_name="modelPackageName",
                        model_package_status="modelPackageStatus",
                        model_package_version=123,
                        source_algorithms=[sagemaker.CfnModelCard.SourceAlgorithmProperty(
                            algorithm_name="algorithmName",
                
                            # the properties below are optional
                            model_data_url="modelDataUrl"
                        )],
                        task="task"
                    ),
                    training_details=sagemaker.CfnModelCard.TrainingDetailsProperty(
                        objective_function=sagemaker.CfnModelCard.ObjectiveFunctionProperty(
                            function=sagemaker.CfnModelCard.FunctionProperty(
                                condition="condition",
                                facet="facet",
                                function="function"
                            ),
                            notes="notes"
                        ),
                        training_job_details=sagemaker.CfnModelCard.TrainingJobDetailsProperty(
                            hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                                name="name",
                                value="value"
                            )],
                            training_arn="trainingArn",
                            training_datasets=["trainingDatasets"],
                            training_environment=sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                                container_image=["containerImage"]
                            ),
                            training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                                name="name",
                                value=123,
                
                                # the properties below are optional
                                notes="notes"
                            )],
                            user_provided_hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                                name="name",
                                value="value"
                            )],
                            user_provided_training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                                name="name",
                                value=123,
                
                                # the properties below are optional
                                notes="notes"
                            )]
                        ),
                        training_observations="trainingObservations"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2bdf1111a719ae9856d556b646aa8ed25948001df09f5d13ffdfa66d2c045e8a)
                check_type(argname="argument additional_information", value=additional_information, expected_type=type_hints["additional_information"])
                check_type(argname="argument business_details", value=business_details, expected_type=type_hints["business_details"])
                check_type(argname="argument evaluation_details", value=evaluation_details, expected_type=type_hints["evaluation_details"])
                check_type(argname="argument intended_uses", value=intended_uses, expected_type=type_hints["intended_uses"])
                check_type(argname="argument model_overview", value=model_overview, expected_type=type_hints["model_overview"])
                check_type(argname="argument model_package_details", value=model_package_details, expected_type=type_hints["model_package_details"])
                check_type(argname="argument training_details", value=training_details, expected_type=type_hints["training_details"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if additional_information is not None:
                self._values["additional_information"] = additional_information
            if business_details is not None:
                self._values["business_details"] = business_details
            if evaluation_details is not None:
                self._values["evaluation_details"] = evaluation_details
            if intended_uses is not None:
                self._values["intended_uses"] = intended_uses
            if model_overview is not None:
                self._values["model_overview"] = model_overview
            if model_package_details is not None:
                self._values["model_package_details"] = model_package_details
            if training_details is not None:
                self._values["training_details"] = training_details

        @builtins.property
        def additional_information(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.AdditionalInformationProperty"]]:
            '''Additional information about the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-additionalinformation
            '''
            result = self._values.get("additional_information")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.AdditionalInformationProperty"]], result)

        @builtins.property
        def business_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.BusinessDetailsProperty"]]:
            '''Information about how the model supports business goals.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-businessdetails
            '''
            result = self._values.get("business_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.BusinessDetailsProperty"]], result)

        @builtins.property
        def evaluation_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.EvaluationDetailProperty"]]]]:
            '''An overview about the model's evaluation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-evaluationdetails
            '''
            result = self._values.get("evaluation_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.EvaluationDetailProperty"]]]], result)

        @builtins.property
        def intended_uses(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.IntendedUsesProperty"]]:
            '''The intended usage of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-intendeduses
            '''
            result = self._values.get("intended_uses")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.IntendedUsesProperty"]], result)

        @builtins.property
        def model_overview(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelOverviewProperty"]]:
            '''An overview about the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-modeloverview
            '''
            result = self._values.get("model_overview")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelOverviewProperty"]], result)

        @builtins.property
        def model_package_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelPackageDetailsProperty"]]:
            '''Metadata information related to model package version.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-modelpackagedetails
            '''
            result = self._values.get("model_package_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelPackageDetailsProperty"]], result)

        @builtins.property
        def training_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingDetailsProperty"]]:
            '''An overview about model training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-content.html#cfn-sagemaker-modelcard-content-trainingdetails
            '''
            result = self._values.get("training_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingDetailsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ContentProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.EvaluationDetailProperty",
        jsii_struct_bases=[],
        name_mapping={
            "name": "name",
            "datasets": "datasets",
            "evaluation_job_arn": "evaluationJobArn",
            "evaluation_observation": "evaluationObservation",
            "metadata": "metadata",
            "metric_groups": "metricGroups",
        },
    )
    class EvaluationDetailProperty:
        def __init__(
            self,
            *,
            name: builtins.str,
            datasets: typing.Optional[typing.Sequence[builtins.str]] = None,
            evaluation_job_arn: typing.Optional[builtins.str] = None,
            evaluation_observation: typing.Optional[builtins.str] = None,
            metadata: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            metric_groups: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.MetricGroupProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''The evaluation details of the model.

            :param name: The evaluation job name.
            :param datasets: The location of the datasets used to evaluate the model.
            :param evaluation_job_arn: The Amazon Resource Name (ARN) of the evaluation job.
            :param evaluation_observation: Any observations made during the model evaluation.
            :param metadata: Additional attributes associated with the evaluation results.
            :param metric_groups: An evaluation Metric Group object.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # value: Any
                
                evaluation_detail_property = sagemaker.CfnModelCard.EvaluationDetailProperty(
                    name="name",
                
                    # the properties below are optional
                    datasets=["datasets"],
                    evaluation_job_arn="evaluationJobArn",
                    evaluation_observation="evaluationObservation",
                    metadata={
                        "metadata_key": "metadata"
                    },
                    metric_groups=[sagemaker.CfnModelCard.MetricGroupProperty(
                        metric_data=[sagemaker.CfnModelCard.MetricDataItemsProperty(
                            name="name",
                            type="type",
                            value=value,
                
                            # the properties below are optional
                            notes="notes",
                            x_axis_name=["xAxisName"],
                            y_axis_name=["yAxisName"]
                        )],
                        name="name"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__aea006f10e4b9e47fd972d6bbaf6414142d5740197c53c1291d43731d253b3df)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument datasets", value=datasets, expected_type=type_hints["datasets"])
                check_type(argname="argument evaluation_job_arn", value=evaluation_job_arn, expected_type=type_hints["evaluation_job_arn"])
                check_type(argname="argument evaluation_observation", value=evaluation_observation, expected_type=type_hints["evaluation_observation"])
                check_type(argname="argument metadata", value=metadata, expected_type=type_hints["metadata"])
                check_type(argname="argument metric_groups", value=metric_groups, expected_type=type_hints["metric_groups"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
            }
            if datasets is not None:
                self._values["datasets"] = datasets
            if evaluation_job_arn is not None:
                self._values["evaluation_job_arn"] = evaluation_job_arn
            if evaluation_observation is not None:
                self._values["evaluation_observation"] = evaluation_observation
            if metadata is not None:
                self._values["metadata"] = metadata
            if metric_groups is not None:
                self._values["metric_groups"] = metric_groups

        @builtins.property
        def name(self) -> builtins.str:
            '''The evaluation job name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def datasets(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The location of the datasets used to evaluate the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-datasets
            '''
            result = self._values.get("datasets")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def evaluation_job_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the evaluation job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-evaluationjobarn
            '''
            result = self._values.get("evaluation_job_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def evaluation_observation(self) -> typing.Optional[builtins.str]:
            '''Any observations made during the model evaluation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-evaluationobservation
            '''
            result = self._values.get("evaluation_observation")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def metadata(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Additional attributes associated with the evaluation results.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-metadata
            '''
            result = self._values.get("metadata")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def metric_groups(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.MetricGroupProperty"]]]]:
            '''An evaluation Metric Group object.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-evaluationdetail.html#cfn-sagemaker-modelcard-evaluationdetail-metricgroups
            '''
            result = self._values.get("metric_groups")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.MetricGroupProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EvaluationDetailProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.FunctionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "condition": "condition",
            "facet": "facet",
            "function": "function",
        },
    )
    class FunctionProperty:
        def __init__(
            self,
            *,
            condition: typing.Optional[builtins.str] = None,
            facet: typing.Optional[builtins.str] = None,
            function: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Function details.

            :param condition: An optional description of any conditions of your objective function metric.
            :param facet: The metric of the model's objective function. For example, *loss* or *rmse* . The following list shows examples of the values that you can specify for the metric: - ``ACCURACY`` - ``AUC`` - ``LOSS`` - ``MAE`` - ``RMSE``
            :param function: The optimization direction of the model's objective function. You must specify one of the following values:. - ``Maximize`` - ``Minimize``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-function.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                function_property = sagemaker.CfnModelCard.FunctionProperty(
                    condition="condition",
                    facet="facet",
                    function="function"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a7aabd7285b985f807b5b1aa8faffb16095b37fc0bbe3bfaaa2cd3ead56906ab)
                check_type(argname="argument condition", value=condition, expected_type=type_hints["condition"])
                check_type(argname="argument facet", value=facet, expected_type=type_hints["facet"])
                check_type(argname="argument function", value=function, expected_type=type_hints["function"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if condition is not None:
                self._values["condition"] = condition
            if facet is not None:
                self._values["facet"] = facet
            if function is not None:
                self._values["function"] = function

        @builtins.property
        def condition(self) -> typing.Optional[builtins.str]:
            '''An optional description of any conditions of your objective function metric.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-function.html#cfn-sagemaker-modelcard-function-condition
            '''
            result = self._values.get("condition")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def facet(self) -> typing.Optional[builtins.str]:
            '''The metric of the model's objective function.

            For example, *loss* or *rmse* . The following list shows examples of the values that you can specify for the metric:

            - ``ACCURACY``
            - ``AUC``
            - ``LOSS``
            - ``MAE``
            - ``RMSE``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-function.html#cfn-sagemaker-modelcard-function-facet
            '''
            result = self._values.get("facet")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def function(self) -> typing.Optional[builtins.str]:
            '''The optimization direction of the model's objective function. You must specify one of the following values:.

            - ``Maximize``
            - ``Minimize``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-function.html#cfn-sagemaker-modelcard-function-function
            '''
            result = self._values.get("function")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FunctionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.InferenceEnvironmentProperty",
        jsii_struct_bases=[],
        name_mapping={"container_image": "containerImage"},
    )
    class InferenceEnvironmentProperty:
        def __init__(
            self,
            *,
            container_image: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''An overview of a model's inference environment.

            :param container_image: The container used to run the inference environment.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-inferenceenvironment.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_environment_property = sagemaker.CfnModelCard.InferenceEnvironmentProperty(
                    container_image=["containerImage"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0b044f2503b369f970e26112957a10a0cc8e540ccb0d838071093af9f76573ae)
                check_type(argname="argument container_image", value=container_image, expected_type=type_hints["container_image"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if container_image is not None:
                self._values["container_image"] = container_image

        @builtins.property
        def container_image(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The container used to run the inference environment.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-inferenceenvironment.html#cfn-sagemaker-modelcard-inferenceenvironment-containerimage
            '''
            result = self._values.get("container_image")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceEnvironmentProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.InferenceSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={"containers": "containers"},
    )
    class InferenceSpecificationProperty:
        def __init__(
            self,
            *,
            containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ContainerProperty", typing.Dict[builtins.str, typing.Any]]]]],
        ) -> None:
            '''Defines how to perform inference generation after a training job is run.

            :param containers: The Amazon ECR registry path of the Docker image that contains the inference code.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-inferencespecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                inference_specification_property = sagemaker.CfnModelCard.InferenceSpecificationProperty(
                    containers=[sagemaker.CfnModelCard.ContainerProperty(
                        image="image",
                
                        # the properties below are optional
                        model_data_url="modelDataUrl",
                        nearest_model_name="nearestModelName"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__79ec272824fcd1d34bc3b7422cada21eafc70ab07f6510c7b4ae2c97b69be166)
                check_type(argname="argument containers", value=containers, expected_type=type_hints["containers"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "containers": containers,
            }

        @builtins.property
        def containers(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ContainerProperty"]]]:
            '''The Amazon ECR registry path of the Docker image that contains the inference code.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-inferencespecification.html#cfn-sagemaker-modelcard-inferencespecification-containers
            '''
            result = self._values.get("containers")
            assert result is not None, "Required property 'containers' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ContainerProperty"]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.IntendedUsesProperty",
        jsii_struct_bases=[],
        name_mapping={
            "explanations_for_risk_rating": "explanationsForRiskRating",
            "factors_affecting_model_efficiency": "factorsAffectingModelEfficiency",
            "intended_uses": "intendedUses",
            "purpose_of_model": "purposeOfModel",
            "risk_rating": "riskRating",
        },
    )
    class IntendedUsesProperty:
        def __init__(
            self,
            *,
            explanations_for_risk_rating: typing.Optional[builtins.str] = None,
            factors_affecting_model_efficiency: typing.Optional[builtins.str] = None,
            intended_uses: typing.Optional[builtins.str] = None,
            purpose_of_model: typing.Optional[builtins.str] = None,
            risk_rating: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The intended uses of a model.

            :param explanations_for_risk_rating: An explanation of why your organization categorizes the model with its risk rating.
            :param factors_affecting_model_efficiency: Factors affecting model efficacy.
            :param intended_uses: The intended use cases for the model.
            :param purpose_of_model: The general purpose of the model.
            :param risk_rating: Your organization's risk rating. You can specify one the following values as the risk rating:. - High - Medium - Low - Unknown

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                intended_uses_property = sagemaker.CfnModelCard.IntendedUsesProperty(
                    explanations_for_risk_rating="explanationsForRiskRating",
                    factors_affecting_model_efficiency="factorsAffectingModelEfficiency",
                    intended_uses="intendedUses",
                    purpose_of_model="purposeOfModel",
                    risk_rating="riskRating"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f50ebdc974dffa049d74b654ef1fe223a9f706231a2a26dc2cfd96e05a07bbe4)
                check_type(argname="argument explanations_for_risk_rating", value=explanations_for_risk_rating, expected_type=type_hints["explanations_for_risk_rating"])
                check_type(argname="argument factors_affecting_model_efficiency", value=factors_affecting_model_efficiency, expected_type=type_hints["factors_affecting_model_efficiency"])
                check_type(argname="argument intended_uses", value=intended_uses, expected_type=type_hints["intended_uses"])
                check_type(argname="argument purpose_of_model", value=purpose_of_model, expected_type=type_hints["purpose_of_model"])
                check_type(argname="argument risk_rating", value=risk_rating, expected_type=type_hints["risk_rating"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if explanations_for_risk_rating is not None:
                self._values["explanations_for_risk_rating"] = explanations_for_risk_rating
            if factors_affecting_model_efficiency is not None:
                self._values["factors_affecting_model_efficiency"] = factors_affecting_model_efficiency
            if intended_uses is not None:
                self._values["intended_uses"] = intended_uses
            if purpose_of_model is not None:
                self._values["purpose_of_model"] = purpose_of_model
            if risk_rating is not None:
                self._values["risk_rating"] = risk_rating

        @builtins.property
        def explanations_for_risk_rating(self) -> typing.Optional[builtins.str]:
            '''An explanation of why your organization categorizes the model with its risk rating.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html#cfn-sagemaker-modelcard-intendeduses-explanationsforriskrating
            '''
            result = self._values.get("explanations_for_risk_rating")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def factors_affecting_model_efficiency(self) -> typing.Optional[builtins.str]:
            '''Factors affecting model efficacy.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html#cfn-sagemaker-modelcard-intendeduses-factorsaffectingmodelefficiency
            '''
            result = self._values.get("factors_affecting_model_efficiency")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def intended_uses(self) -> typing.Optional[builtins.str]:
            '''The intended use cases for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html#cfn-sagemaker-modelcard-intendeduses-intendeduses
            '''
            result = self._values.get("intended_uses")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def purpose_of_model(self) -> typing.Optional[builtins.str]:
            '''The general purpose of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html#cfn-sagemaker-modelcard-intendeduses-purposeofmodel
            '''
            result = self._values.get("purpose_of_model")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def risk_rating(self) -> typing.Optional[builtins.str]:
            '''Your organization's risk rating. You can specify one the following values as the risk rating:.

            - High
            - Medium
            - Low
            - Unknown

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-intendeduses.html#cfn-sagemaker-modelcard-intendeduses-riskrating
            '''
            result = self._values.get("risk_rating")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "IntendedUsesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.MetricDataItemsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "name": "name",
            "type": "type",
            "value": "value",
            "notes": "notes",
            "x_axis_name": "xAxisName",
            "y_axis_name": "yAxisName",
        },
    )
    class MetricDataItemsProperty:
        def __init__(
            self,
            *,
            name: builtins.str,
            type: builtins.str,
            value: typing.Any,
            notes: typing.Optional[builtins.str] = None,
            x_axis_name: typing.Optional[typing.Sequence[builtins.str]] = None,
            y_axis_name: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Metric data.

            The ``type`` determines the data types that you specify for ``value`` , ``XAxisName`` and ``YAxisName`` . For information about specifying values for metrics, see `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .

            :param name: 
            :param type: 
            :param value: 
            :param notes: 
            :param x_axis_name: 
            :param y_axis_name: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # value: Any
                
                metric_data_items_property = sagemaker.CfnModelCard.MetricDataItemsProperty(
                    name="name",
                    type="type",
                    value=value,
                
                    # the properties below are optional
                    notes="notes",
                    x_axis_name=["xAxisName"],
                    y_axis_name=["yAxisName"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ecb1989d0f4614a1a03f5250829b332318f83777f4e0cce7afbbb5e846853d41)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument type", value=type, expected_type=type_hints["type"])
                check_type(argname="argument value", value=value, expected_type=type_hints["value"])
                check_type(argname="argument notes", value=notes, expected_type=type_hints["notes"])
                check_type(argname="argument x_axis_name", value=x_axis_name, expected_type=type_hints["x_axis_name"])
                check_type(argname="argument y_axis_name", value=y_axis_name, expected_type=type_hints["y_axis_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
                "type": type,
                "value": value,
            }
            if notes is not None:
                self._values["notes"] = notes
            if x_axis_name is not None:
                self._values["x_axis_name"] = x_axis_name
            if y_axis_name is not None:
                self._values["y_axis_name"] = y_axis_name

        @builtins.property
        def name(self) -> builtins.str:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def type(self) -> builtins.str:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-type
            '''
            result = self._values.get("type")
            assert result is not None, "Required property 'type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def value(self) -> typing.Any:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-value
            '''
            result = self._values.get("value")
            assert result is not None, "Required property 'value' is missing"
            return typing.cast(typing.Any, result)

        @builtins.property
        def notes(self) -> typing.Optional[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-notes
            '''
            result = self._values.get("notes")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def x_axis_name(self) -> typing.Optional[typing.List[builtins.str]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-xaxisname
            '''
            result = self._values.get("x_axis_name")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def y_axis_name(self) -> typing.Optional[typing.List[builtins.str]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricdataitems.html#cfn-sagemaker-modelcard-metricdataitems-yaxisname
            '''
            result = self._values.get("y_axis_name")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MetricDataItemsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.MetricGroupProperty",
        jsii_struct_bases=[],
        name_mapping={"metric_data": "metricData", "name": "name"},
    )
    class MetricGroupProperty:
        def __init__(
            self,
            *,
            metric_data: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.MetricDataItemsProperty", typing.Dict[builtins.str, typing.Any]]]]],
            name: builtins.str,
        ) -> None:
            '''A group of metric data that you use to initialize a metric group object.

            :param metric_data: A list of metric objects. The ``MetricDataItems`` list can have one of the following values:. - ``bar_chart_metric`` - ``matrix_metric`` - ``simple_metric`` - ``linear_graph_metric`` For more information about the metric schema, see the definition section of the `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .
            :param name: The metric group name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricgroup.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # value: Any
                
                metric_group_property = sagemaker.CfnModelCard.MetricGroupProperty(
                    metric_data=[sagemaker.CfnModelCard.MetricDataItemsProperty(
                        name="name",
                        type="type",
                        value=value,
                
                        # the properties below are optional
                        notes="notes",
                        x_axis_name=["xAxisName"],
                        y_axis_name=["yAxisName"]
                    )],
                    name="name"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__abc86db13c92aef1bc355cb20418fd5c65e7ccf20c339f71cb754378170ad258)
                check_type(argname="argument metric_data", value=metric_data, expected_type=type_hints["metric_data"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "metric_data": metric_data,
                "name": name,
            }

        @builtins.property
        def metric_data(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.MetricDataItemsProperty"]]]:
            '''A list of metric objects. The ``MetricDataItems`` list can have one of the following values:.

            - ``bar_chart_metric``
            - ``matrix_metric``
            - ``simple_metric``
            - ``linear_graph_metric``

            For more information about the metric schema, see the definition section of the `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricgroup.html#cfn-sagemaker-modelcard-metricgroup-metricdata
            '''
            result = self._values.get("metric_data")
            assert result is not None, "Required property 'metric_data' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.MetricDataItemsProperty"]]], result)

        @builtins.property
        def name(self) -> builtins.str:
            '''The metric group name.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-metricgroup.html#cfn-sagemaker-modelcard-metricgroup-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MetricGroupProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ModelOverviewProperty",
        jsii_struct_bases=[],
        name_mapping={
            "algorithm_type": "algorithmType",
            "inference_environment": "inferenceEnvironment",
            "model_artifact": "modelArtifact",
            "model_creator": "modelCreator",
            "model_description": "modelDescription",
            "model_id": "modelId",
            "model_name": "modelName",
            "model_owner": "modelOwner",
            "model_version": "modelVersion",
            "problem_type": "problemType",
        },
    )
    class ModelOverviewProperty:
        def __init__(
            self,
            *,
            algorithm_type: typing.Optional[builtins.str] = None,
            inference_environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.InferenceEnvironmentProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_artifact: typing.Optional[typing.Sequence[builtins.str]] = None,
            model_creator: typing.Optional[builtins.str] = None,
            model_description: typing.Optional[builtins.str] = None,
            model_id: typing.Optional[builtins.str] = None,
            model_name: typing.Optional[builtins.str] = None,
            model_owner: typing.Optional[builtins.str] = None,
            model_version: typing.Optional[jsii.Number] = None,
            problem_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''An overview about the model.

            :param algorithm_type: The algorithm used to solve the problem.
            :param inference_environment: An overview about model inference.
            :param model_artifact: The location of the model artifact.
            :param model_creator: The creator of the model.
            :param model_description: A description of the model.
            :param model_id: The SageMaker Model ARN or non- SageMaker Model ID.
            :param model_name: The name of the model.
            :param model_owner: The owner of the model.
            :param model_version: The version of the model.
            :param problem_type: The problem being solved with the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_overview_property = sagemaker.CfnModelCard.ModelOverviewProperty(
                    algorithm_type="algorithmType",
                    inference_environment=sagemaker.CfnModelCard.InferenceEnvironmentProperty(
                        container_image=["containerImage"]
                    ),
                    model_artifact=["modelArtifact"],
                    model_creator="modelCreator",
                    model_description="modelDescription",
                    model_id="modelId",
                    model_name="modelName",
                    model_owner="modelOwner",
                    model_version=123,
                    problem_type="problemType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9f242f13835a335efa0a9727dbf619720b86c97a351f84a0057feadc0910770b)
                check_type(argname="argument algorithm_type", value=algorithm_type, expected_type=type_hints["algorithm_type"])
                check_type(argname="argument inference_environment", value=inference_environment, expected_type=type_hints["inference_environment"])
                check_type(argname="argument model_artifact", value=model_artifact, expected_type=type_hints["model_artifact"])
                check_type(argname="argument model_creator", value=model_creator, expected_type=type_hints["model_creator"])
                check_type(argname="argument model_description", value=model_description, expected_type=type_hints["model_description"])
                check_type(argname="argument model_id", value=model_id, expected_type=type_hints["model_id"])
                check_type(argname="argument model_name", value=model_name, expected_type=type_hints["model_name"])
                check_type(argname="argument model_owner", value=model_owner, expected_type=type_hints["model_owner"])
                check_type(argname="argument model_version", value=model_version, expected_type=type_hints["model_version"])
                check_type(argname="argument problem_type", value=problem_type, expected_type=type_hints["problem_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if algorithm_type is not None:
                self._values["algorithm_type"] = algorithm_type
            if inference_environment is not None:
                self._values["inference_environment"] = inference_environment
            if model_artifact is not None:
                self._values["model_artifact"] = model_artifact
            if model_creator is not None:
                self._values["model_creator"] = model_creator
            if model_description is not None:
                self._values["model_description"] = model_description
            if model_id is not None:
                self._values["model_id"] = model_id
            if model_name is not None:
                self._values["model_name"] = model_name
            if model_owner is not None:
                self._values["model_owner"] = model_owner
            if model_version is not None:
                self._values["model_version"] = model_version
            if problem_type is not None:
                self._values["problem_type"] = problem_type

        @builtins.property
        def algorithm_type(self) -> typing.Optional[builtins.str]:
            '''The algorithm used to solve the problem.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-algorithmtype
            '''
            result = self._values.get("algorithm_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.InferenceEnvironmentProperty"]]:
            '''An overview about model inference.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-inferenceenvironment
            '''
            result = self._values.get("inference_environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.InferenceEnvironmentProperty"]], result)

        @builtins.property
        def model_artifact(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The location of the model artifact.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelartifact
            '''
            result = self._values.get("model_artifact")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def model_creator(self) -> typing.Optional[builtins.str]:
            '''The creator of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelcreator
            '''
            result = self._values.get("model_creator")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_description(self) -> typing.Optional[builtins.str]:
            '''A description of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modeldescription
            '''
            result = self._values.get("model_description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_id(self) -> typing.Optional[builtins.str]:
            '''The SageMaker Model ARN or non- SageMaker Model ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelid
            '''
            result = self._values.get("model_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_name(self) -> typing.Optional[builtins.str]:
            '''The name of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelname
            '''
            result = self._values.get("model_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_owner(self) -> typing.Optional[builtins.str]:
            '''The owner of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelowner
            '''
            result = self._values.get("model_owner")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_version(self) -> typing.Optional[jsii.Number]:
            '''The version of the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-modelversion
            '''
            result = self._values.get("model_version")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def problem_type(self) -> typing.Optional[builtins.str]:
            '''The problem being solved with the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modeloverview.html#cfn-sagemaker-modelcard-modeloverview-problemtype
            '''
            result = self._values.get("problem_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelOverviewProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ModelPackageCreatorProperty",
        jsii_struct_bases=[],
        name_mapping={"user_profile_name": "userProfileName"},
    )
    class ModelPackageCreatorProperty:
        def __init__(
            self,
            *,
            user_profile_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''
            :param user_profile_name: The name of the user's profile in Studio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagecreator.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_package_creator_property = sagemaker.CfnModelCard.ModelPackageCreatorProperty(
                    user_profile_name="userProfileName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d9d4b7ea360a07d0e3dec74eeaaa3b032a7fc06087e3fed5017c170c2846b72e)
                check_type(argname="argument user_profile_name", value=user_profile_name, expected_type=type_hints["user_profile_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if user_profile_name is not None:
                self._values["user_profile_name"] = user_profile_name

        @builtins.property
        def user_profile_name(self) -> typing.Optional[builtins.str]:
            '''The name of the user's profile in Studio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagecreator.html#cfn-sagemaker-modelcard-modelpackagecreator-userprofilename
            '''
            result = self._values.get("user_profile_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelPackageCreatorProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ModelPackageDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "approval_description": "approvalDescription",
            "created_by": "createdBy",
            "domain": "domain",
            "inference_specification": "inferenceSpecification",
            "model_approval_status": "modelApprovalStatus",
            "model_package_arn": "modelPackageArn",
            "model_package_description": "modelPackageDescription",
            "model_package_group_name": "modelPackageGroupName",
            "model_package_name": "modelPackageName",
            "model_package_status": "modelPackageStatus",
            "model_package_version": "modelPackageVersion",
            "source_algorithms": "sourceAlgorithms",
            "task": "task",
        },
    )
    class ModelPackageDetailsProperty:
        def __init__(
            self,
            *,
            approval_description: typing.Optional[builtins.str] = None,
            created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ModelPackageCreatorProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            domain: typing.Optional[builtins.str] = None,
            inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.InferenceSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_approval_status: typing.Optional[builtins.str] = None,
            model_package_arn: typing.Optional[builtins.str] = None,
            model_package_description: typing.Optional[builtins.str] = None,
            model_package_group_name: typing.Optional[builtins.str] = None,
            model_package_name: typing.Optional[builtins.str] = None,
            model_package_status: typing.Optional[builtins.str] = None,
            model_package_version: typing.Optional[jsii.Number] = None,
            source_algorithms: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.SourceAlgorithmProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            task: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Metadata information related to model package version.

            :param approval_description: A description provided for the model approval.
            :param created_by: 
            :param domain: The machine learning domain of the model package you specified. Common machine learning domains include computer vision and natural language processing.
            :param inference_specification: 
            :param model_approval_status: Current approval status of model package.
            :param model_package_arn: The Amazon Resource Name (ARN) of the model package.
            :param model_package_description: A brief summary of the model package.
            :param model_package_group_name: If the model is a versioned model, the name of the model group that the versioned model belongs to.
            :param model_package_name: Name of the model package.
            :param model_package_status: Current status of model package.
            :param model_package_version: Version of the model package.
            :param source_algorithms: 
            :param task: The machine learning task you specified that your model package accomplishes. Common machine learning tasks include object detection and image classification.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_package_details_property = sagemaker.CfnModelCard.ModelPackageDetailsProperty(
                    approval_description="approvalDescription",
                    created_by=sagemaker.CfnModelCard.ModelPackageCreatorProperty(
                        user_profile_name="userProfileName"
                    ),
                    domain="domain",
                    inference_specification=sagemaker.CfnModelCard.InferenceSpecificationProperty(
                        containers=[sagemaker.CfnModelCard.ContainerProperty(
                            image="image",
                
                            # the properties below are optional
                            model_data_url="modelDataUrl",
                            nearest_model_name="nearestModelName"
                        )]
                    ),
                    model_approval_status="modelApprovalStatus",
                    model_package_arn="modelPackageArn",
                    model_package_description="modelPackageDescription",
                    model_package_group_name="modelPackageGroupName",
                    model_package_name="modelPackageName",
                    model_package_status="modelPackageStatus",
                    model_package_version=123,
                    source_algorithms=[sagemaker.CfnModelCard.SourceAlgorithmProperty(
                        algorithm_name="algorithmName",
                
                        # the properties below are optional
                        model_data_url="modelDataUrl"
                    )],
                    task="task"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c9944d702a933de3043469707db635021beda0f9e96a67a17871870e8ee95109)
                check_type(argname="argument approval_description", value=approval_description, expected_type=type_hints["approval_description"])
                check_type(argname="argument created_by", value=created_by, expected_type=type_hints["created_by"])
                check_type(argname="argument domain", value=domain, expected_type=type_hints["domain"])
                check_type(argname="argument inference_specification", value=inference_specification, expected_type=type_hints["inference_specification"])
                check_type(argname="argument model_approval_status", value=model_approval_status, expected_type=type_hints["model_approval_status"])
                check_type(argname="argument model_package_arn", value=model_package_arn, expected_type=type_hints["model_package_arn"])
                check_type(argname="argument model_package_description", value=model_package_description, expected_type=type_hints["model_package_description"])
                check_type(argname="argument model_package_group_name", value=model_package_group_name, expected_type=type_hints["model_package_group_name"])
                check_type(argname="argument model_package_name", value=model_package_name, expected_type=type_hints["model_package_name"])
                check_type(argname="argument model_package_status", value=model_package_status, expected_type=type_hints["model_package_status"])
                check_type(argname="argument model_package_version", value=model_package_version, expected_type=type_hints["model_package_version"])
                check_type(argname="argument source_algorithms", value=source_algorithms, expected_type=type_hints["source_algorithms"])
                check_type(argname="argument task", value=task, expected_type=type_hints["task"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if approval_description is not None:
                self._values["approval_description"] = approval_description
            if created_by is not None:
                self._values["created_by"] = created_by
            if domain is not None:
                self._values["domain"] = domain
            if inference_specification is not None:
                self._values["inference_specification"] = inference_specification
            if model_approval_status is not None:
                self._values["model_approval_status"] = model_approval_status
            if model_package_arn is not None:
                self._values["model_package_arn"] = model_package_arn
            if model_package_description is not None:
                self._values["model_package_description"] = model_package_description
            if model_package_group_name is not None:
                self._values["model_package_group_name"] = model_package_group_name
            if model_package_name is not None:
                self._values["model_package_name"] = model_package_name
            if model_package_status is not None:
                self._values["model_package_status"] = model_package_status
            if model_package_version is not None:
                self._values["model_package_version"] = model_package_version
            if source_algorithms is not None:
                self._values["source_algorithms"] = source_algorithms
            if task is not None:
                self._values["task"] = task

        @builtins.property
        def approval_description(self) -> typing.Optional[builtins.str]:
            '''A description provided for the model approval.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-approvaldescription
            '''
            result = self._values.get("approval_description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def created_by(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelPackageCreatorProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-createdby
            '''
            result = self._values.get("created_by")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ModelPackageCreatorProperty"]], result)

        @builtins.property
        def domain(self) -> typing.Optional[builtins.str]:
            '''The machine learning domain of the model package you specified.

            Common machine learning domains include computer vision and natural language processing.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-domain
            '''
            result = self._values.get("domain")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_specification(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.InferenceSpecificationProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-inferencespecification
            '''
            result = self._values.get("inference_specification")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.InferenceSpecificationProperty"]], result)

        @builtins.property
        def model_approval_status(self) -> typing.Optional[builtins.str]:
            '''Current approval status of model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelapprovalstatus
            '''
            result = self._values.get("model_approval_status")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackagearn
            '''
            result = self._values.get("model_package_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_description(self) -> typing.Optional[builtins.str]:
            '''A brief summary of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackagedescription
            '''
            result = self._values.get("model_package_description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_group_name(self) -> typing.Optional[builtins.str]:
            '''If the model is a versioned model, the name of the model group that the versioned model belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackagegroupname
            '''
            result = self._values.get("model_package_group_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_name(self) -> typing.Optional[builtins.str]:
            '''Name of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackagename
            '''
            result = self._values.get("model_package_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_status(self) -> typing.Optional[builtins.str]:
            '''Current status of model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackagestatus
            '''
            result = self._values.get("model_package_status")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_package_version(self) -> typing.Optional[jsii.Number]:
            '''Version of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-modelpackageversion
            '''
            result = self._values.get("model_package_version")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def source_algorithms(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.SourceAlgorithmProperty"]]]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-sourcealgorithms
            '''
            result = self._values.get("source_algorithms")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.SourceAlgorithmProperty"]]]], result)

        @builtins.property
        def task(self) -> typing.Optional[builtins.str]:
            '''The machine learning task you specified that your model package accomplishes.

            Common machine learning tasks include object detection and image classification.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-modelpackagedetails.html#cfn-sagemaker-modelcard-modelpackagedetails-task
            '''
            result = self._values.get("task")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelPackageDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.ObjectiveFunctionProperty",
        jsii_struct_bases=[],
        name_mapping={"function": "function", "notes": "notes"},
    )
    class ObjectiveFunctionProperty:
        def __init__(
            self,
            *,
            function: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.FunctionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            notes: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The function that is optimized during model training.

            :param function: A function object that details optimization direction, metric, and additional descriptions.
            :param notes: Notes about the object function, including other considerations for possible objective functions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-objectivefunction.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                objective_function_property = sagemaker.CfnModelCard.ObjectiveFunctionProperty(
                    function=sagemaker.CfnModelCard.FunctionProperty(
                        condition="condition",
                        facet="facet",
                        function="function"
                    ),
                    notes="notes"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d68a09b949d0634250f1af2d54a41718dc5585bb122780708c9cbcd762e9acc2)
                check_type(argname="argument function", value=function, expected_type=type_hints["function"])
                check_type(argname="argument notes", value=notes, expected_type=type_hints["notes"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if function is not None:
                self._values["function"] = function
            if notes is not None:
                self._values["notes"] = notes

        @builtins.property
        def function(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.FunctionProperty"]]:
            '''A function object that details optimization direction, metric, and additional descriptions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-objectivefunction.html#cfn-sagemaker-modelcard-objectivefunction-function
            '''
            result = self._values.get("function")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.FunctionProperty"]], result)

        @builtins.property
        def notes(self) -> typing.Optional[builtins.str]:
            '''Notes about the object function, including other considerations for possible objective functions.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-objectivefunction.html#cfn-sagemaker-modelcard-objectivefunction-notes
            '''
            result = self._values.get("notes")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ObjectiveFunctionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.SecurityConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"kms_key_id": "kmsKeyId"},
    )
    class SecurityConfigProperty:
        def __init__(self, *, kms_key_id: typing.Optional[builtins.str] = None) -> None:
            '''The security configuration used to protect model card data.

            :param kms_key_id: A AWS Key Management Service `key ID <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id>`_ used to encrypt a model card.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-securityconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                security_config_property = sagemaker.CfnModelCard.SecurityConfigProperty(
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__436fb9977397a9132b1478696f5501d6215eec53d2cfcafb3e32026113739441)
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''A AWS Key Management Service `key ID <https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-key-id>`_ used to encrypt a model card.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-securityconfig.html#cfn-sagemaker-modelcard-securityconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SecurityConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.SourceAlgorithmProperty",
        jsii_struct_bases=[],
        name_mapping={
            "algorithm_name": "algorithmName",
            "model_data_url": "modelDataUrl",
        },
    )
    class SourceAlgorithmProperty:
        def __init__(
            self,
            *,
            algorithm_name: builtins.str,
            model_data_url: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies an algorithm that was used to create the model package.

            The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.

            :param algorithm_name: The name of an algorithm that was used to create the model package. The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.
            :param model_data_url: The Amazon S3 path where the model artifacts, which result from model training, are stored. This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix). .. epigraph:: The model artifacts must be in an S3 bucket that is in the same AWS region as the algorithm.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-sourcealgorithm.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                source_algorithm_property = sagemaker.CfnModelCard.SourceAlgorithmProperty(
                    algorithm_name="algorithmName",
                
                    # the properties below are optional
                    model_data_url="modelDataUrl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a82dfe1af245e6f9ba002f1c95940a73e0d9d16c15d4b13be69754241ae2160c)
                check_type(argname="argument algorithm_name", value=algorithm_name, expected_type=type_hints["algorithm_name"])
                check_type(argname="argument model_data_url", value=model_data_url, expected_type=type_hints["model_data_url"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "algorithm_name": algorithm_name,
            }
            if model_data_url is not None:
                self._values["model_data_url"] = model_data_url

        @builtins.property
        def algorithm_name(self) -> builtins.str:
            '''The name of an algorithm that was used to create the model package.

            The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-sourcealgorithm.html#cfn-sagemaker-modelcard-sourcealgorithm-algorithmname
            '''
            result = self._values.get("algorithm_name")
            assert result is not None, "Required property 'algorithm_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def model_data_url(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 path where the model artifacts, which result from model training, are stored.

            This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix).
            .. epigraph::

               The model artifacts must be in an S3 bucket that is in the same AWS region as the algorithm.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-sourcealgorithm.html#cfn-sagemaker-modelcard-sourcealgorithm-modeldataurl
            '''
            result = self._values.get("model_data_url")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SourceAlgorithmProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.TrainingDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "objective_function": "objectiveFunction",
            "training_job_details": "trainingJobDetails",
            "training_observations": "trainingObservations",
        },
    )
    class TrainingDetailsProperty:
        def __init__(
            self,
            *,
            objective_function: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.ObjectiveFunctionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            training_job_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingJobDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            training_observations: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The training details of the model.

            :param objective_function: The function that is optimized during model training.
            :param training_job_details: Details about any associated training jobs.
            :param training_observations: Any observations about training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                training_details_property = sagemaker.CfnModelCard.TrainingDetailsProperty(
                    objective_function=sagemaker.CfnModelCard.ObjectiveFunctionProperty(
                        function=sagemaker.CfnModelCard.FunctionProperty(
                            condition="condition",
                            facet="facet",
                            function="function"
                        ),
                        notes="notes"
                    ),
                    training_job_details=sagemaker.CfnModelCard.TrainingJobDetailsProperty(
                        hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                            name="name",
                            value="value"
                        )],
                        training_arn="trainingArn",
                        training_datasets=["trainingDatasets"],
                        training_environment=sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                            container_image=["containerImage"]
                        ),
                        training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                            name="name",
                            value=123,
                
                            # the properties below are optional
                            notes="notes"
                        )],
                        user_provided_hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                            name="name",
                            value="value"
                        )],
                        user_provided_training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                            name="name",
                            value=123,
                
                            # the properties below are optional
                            notes="notes"
                        )]
                    ),
                    training_observations="trainingObservations"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8fa87a55ef5c7309515a6bb1873506d752348929f085259127d5dca11d5a64bb)
                check_type(argname="argument objective_function", value=objective_function, expected_type=type_hints["objective_function"])
                check_type(argname="argument training_job_details", value=training_job_details, expected_type=type_hints["training_job_details"])
                check_type(argname="argument training_observations", value=training_observations, expected_type=type_hints["training_observations"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if objective_function is not None:
                self._values["objective_function"] = objective_function
            if training_job_details is not None:
                self._values["training_job_details"] = training_job_details
            if training_observations is not None:
                self._values["training_observations"] = training_observations

        @builtins.property
        def objective_function(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ObjectiveFunctionProperty"]]:
            '''The function that is optimized during model training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingdetails.html#cfn-sagemaker-modelcard-trainingdetails-objectivefunction
            '''
            result = self._values.get("objective_function")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.ObjectiveFunctionProperty"]], result)

        @builtins.property
        def training_job_details(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingJobDetailsProperty"]]:
            '''Details about any associated training jobs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingdetails.html#cfn-sagemaker-modelcard-trainingdetails-trainingjobdetails
            '''
            result = self._values.get("training_job_details")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingJobDetailsProperty"]], result)

        @builtins.property
        def training_observations(self) -> typing.Optional[builtins.str]:
            '''Any observations about training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingdetails.html#cfn-sagemaker-modelcard-trainingdetails-trainingobservations
            '''
            result = self._values.get("training_observations")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrainingDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.TrainingEnvironmentProperty",
        jsii_struct_bases=[],
        name_mapping={"container_image": "containerImage"},
    )
    class TrainingEnvironmentProperty:
        def __init__(
            self,
            *,
            container_image: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''SageMaker training image.

            :param container_image: SageMaker inference image URI.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingenvironment.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                training_environment_property = sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                    container_image=["containerImage"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__36cf1be04ac7692efda323a2decea8870c4985abe3f355b6321607e78c877d94)
                check_type(argname="argument container_image", value=container_image, expected_type=type_hints["container_image"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if container_image is not None:
                self._values["container_image"] = container_image

        @builtins.property
        def container_image(self) -> typing.Optional[typing.List[builtins.str]]:
            '''SageMaker inference image URI.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingenvironment.html#cfn-sagemaker-modelcard-trainingenvironment-containerimage
            '''
            result = self._values.get("container_image")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrainingEnvironmentProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.TrainingHyperParameterProperty",
        jsii_struct_bases=[],
        name_mapping={"name": "name", "value": "value"},
    )
    class TrainingHyperParameterProperty:
        def __init__(self, *, name: builtins.str, value: builtins.str) -> None:
            '''A hyper parameter that was configured in training the model.

            :param name: The name of the hyper parameter.
            :param value: The value specified for the hyper parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-traininghyperparameter.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                training_hyper_parameter_property = sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                    name="name",
                    value="value"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__340ea84885520e7f3ac3fc13c1f80cc9a491d24b5e63be5c2fc6288c49477fa3)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument value", value=value, expected_type=type_hints["value"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
                "value": value,
            }

        @builtins.property
        def name(self) -> builtins.str:
            '''The name of the hyper parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-traininghyperparameter.html#cfn-sagemaker-modelcard-traininghyperparameter-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def value(self) -> builtins.str:
            '''The value specified for the hyper parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-traininghyperparameter.html#cfn-sagemaker-modelcard-traininghyperparameter-value
            '''
            result = self._values.get("value")
            assert result is not None, "Required property 'value' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrainingHyperParameterProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.TrainingJobDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "hyper_parameters": "hyperParameters",
            "training_arn": "trainingArn",
            "training_datasets": "trainingDatasets",
            "training_environment": "trainingEnvironment",
            "training_metrics": "trainingMetrics",
            "user_provided_hyper_parameters": "userProvidedHyperParameters",
            "user_provided_training_metrics": "userProvidedTrainingMetrics",
        },
    )
    class TrainingJobDetailsProperty:
        def __init__(
            self,
            *,
            hyper_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingHyperParameterProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            training_arn: typing.Optional[builtins.str] = None,
            training_datasets: typing.Optional[typing.Sequence[builtins.str]] = None,
            training_environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingEnvironmentProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            training_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingMetricProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            user_provided_hyper_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingHyperParameterProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            user_provided_training_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelCard.TrainingMetricProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''The overview of a training job.

            :param hyper_parameters: The hyper parameters used in the training job.
            :param training_arn: The SageMaker training job Amazon Resource Name (ARN).
            :param training_datasets: The location of the datasets used to train the model.
            :param training_environment: The SageMaker training job image URI.
            :param training_metrics: The SageMaker training job results.
            :param user_provided_hyper_parameters: Additional hyper parameters that you've specified when training the model.
            :param user_provided_training_metrics: Custom training job results.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                training_job_details_property = sagemaker.CfnModelCard.TrainingJobDetailsProperty(
                    hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                        name="name",
                        value="value"
                    )],
                    training_arn="trainingArn",
                    training_datasets=["trainingDatasets"],
                    training_environment=sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                        container_image=["containerImage"]
                    ),
                    training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                        name="name",
                        value=123,
                
                        # the properties below are optional
                        notes="notes"
                    )],
                    user_provided_hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                        name="name",
                        value="value"
                    )],
                    user_provided_training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                        name="name",
                        value=123,
                
                        # the properties below are optional
                        notes="notes"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__75ea247ecc16590c4cfc79d2b560eebfb19102c2919dcf5b112542b017770812)
                check_type(argname="argument hyper_parameters", value=hyper_parameters, expected_type=type_hints["hyper_parameters"])
                check_type(argname="argument training_arn", value=training_arn, expected_type=type_hints["training_arn"])
                check_type(argname="argument training_datasets", value=training_datasets, expected_type=type_hints["training_datasets"])
                check_type(argname="argument training_environment", value=training_environment, expected_type=type_hints["training_environment"])
                check_type(argname="argument training_metrics", value=training_metrics, expected_type=type_hints["training_metrics"])
                check_type(argname="argument user_provided_hyper_parameters", value=user_provided_hyper_parameters, expected_type=type_hints["user_provided_hyper_parameters"])
                check_type(argname="argument user_provided_training_metrics", value=user_provided_training_metrics, expected_type=type_hints["user_provided_training_metrics"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if hyper_parameters is not None:
                self._values["hyper_parameters"] = hyper_parameters
            if training_arn is not None:
                self._values["training_arn"] = training_arn
            if training_datasets is not None:
                self._values["training_datasets"] = training_datasets
            if training_environment is not None:
                self._values["training_environment"] = training_environment
            if training_metrics is not None:
                self._values["training_metrics"] = training_metrics
            if user_provided_hyper_parameters is not None:
                self._values["user_provided_hyper_parameters"] = user_provided_hyper_parameters
            if user_provided_training_metrics is not None:
                self._values["user_provided_training_metrics"] = user_provided_training_metrics

        @builtins.property
        def hyper_parameters(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingHyperParameterProperty"]]]]:
            '''The hyper parameters used in the training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-hyperparameters
            '''
            result = self._values.get("hyper_parameters")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingHyperParameterProperty"]]]], result)

        @builtins.property
        def training_arn(self) -> typing.Optional[builtins.str]:
            '''The SageMaker training job Amazon Resource Name (ARN).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-trainingarn
            '''
            result = self._values.get("training_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def training_datasets(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The location of the datasets used to train the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-trainingdatasets
            '''
            result = self._values.get("training_datasets")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def training_environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingEnvironmentProperty"]]:
            '''The SageMaker training job image URI.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-trainingenvironment
            '''
            result = self._values.get("training_environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingEnvironmentProperty"]], result)

        @builtins.property
        def training_metrics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingMetricProperty"]]]]:
            '''The SageMaker training job results.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-trainingmetrics
            '''
            result = self._values.get("training_metrics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingMetricProperty"]]]], result)

        @builtins.property
        def user_provided_hyper_parameters(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingHyperParameterProperty"]]]]:
            '''Additional hyper parameters that you've specified when training the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-userprovidedhyperparameters
            '''
            result = self._values.get("user_provided_hyper_parameters")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingHyperParameterProperty"]]]], result)

        @builtins.property
        def user_provided_training_metrics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingMetricProperty"]]]]:
            '''Custom training job results.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingjobdetails.html#cfn-sagemaker-modelcard-trainingjobdetails-userprovidedtrainingmetrics
            '''
            result = self._values.get("user_provided_training_metrics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelCard.TrainingMetricProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrainingJobDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.TrainingMetricProperty",
        jsii_struct_bases=[],
        name_mapping={"name": "name", "value": "value", "notes": "notes"},
    )
    class TrainingMetricProperty:
        def __init__(
            self,
            *,
            name: builtins.str,
            value: jsii.Number,
            notes: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A result from a SageMaker training job.

            :param name: The name of the result from the SageMaker training job.
            :param value: The value of a result from the SageMaker training job.
            :param notes: Any additional notes describing the result of the training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingmetric.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                training_metric_property = sagemaker.CfnModelCard.TrainingMetricProperty(
                    name="name",
                    value=123,
                
                    # the properties below are optional
                    notes="notes"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__53a61afb1bf0b460c25b699fea9bd096e51bd1fe11849fe86fe9a9bde85312f7)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument value", value=value, expected_type=type_hints["value"])
                check_type(argname="argument notes", value=notes, expected_type=type_hints["notes"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
                "value": value,
            }
            if notes is not None:
                self._values["notes"] = notes

        @builtins.property
        def name(self) -> builtins.str:
            '''The name of the result from the SageMaker training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingmetric.html#cfn-sagemaker-modelcard-trainingmetric-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def value(self) -> jsii.Number:
            '''The value of a result from the SageMaker training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingmetric.html#cfn-sagemaker-modelcard-trainingmetric-value
            '''
            result = self._values.get("value")
            assert result is not None, "Required property 'value' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def notes(self) -> typing.Optional[builtins.str]:
            '''Any additional notes describing the result of the training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-trainingmetric.html#cfn-sagemaker-modelcard-trainingmetric-notes
            '''
            result = self._values.get("notes")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TrainingMetricProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCard.UserContextProperty",
        jsii_struct_bases=[],
        name_mapping={
            "domain_id": "domainId",
            "user_profile_arn": "userProfileArn",
            "user_profile_name": "userProfileName",
        },
    )
    class UserContextProperty:
        def __init__(
            self,
            *,
            domain_id: typing.Optional[builtins.str] = None,
            user_profile_arn: typing.Optional[builtins.str] = None,
            user_profile_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.

            :param domain_id: The domain associated with the user. Default: - "UnsetValue"
            :param user_profile_arn: The Amazon Resource Name (ARN) of the user's profile. Default: - "UnsetValue"
            :param user_profile_name: The name of the user's profile. Default: - "UnsetValue"

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-usercontext.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                user_context_property = sagemaker.CfnModelCard.UserContextProperty(
                    domain_id="domainId",
                    user_profile_arn="userProfileArn",
                    user_profile_name="userProfileName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__605653cc827c713b5c70a6fd0d29eadda991963ffa0099e26bf96b5bb361f029)
                check_type(argname="argument domain_id", value=domain_id, expected_type=type_hints["domain_id"])
                check_type(argname="argument user_profile_arn", value=user_profile_arn, expected_type=type_hints["user_profile_arn"])
                check_type(argname="argument user_profile_name", value=user_profile_name, expected_type=type_hints["user_profile_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if domain_id is not None:
                self._values["domain_id"] = domain_id
            if user_profile_arn is not None:
                self._values["user_profile_arn"] = user_profile_arn
            if user_profile_name is not None:
                self._values["user_profile_name"] = user_profile_name

        @builtins.property
        def domain_id(self) -> typing.Optional[builtins.str]:
            '''The domain associated with the user.

            :default: - "UnsetValue"

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-usercontext.html#cfn-sagemaker-modelcard-usercontext-domainid
            '''
            result = self._values.get("domain_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def user_profile_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the user's profile.

            :default: - "UnsetValue"

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-usercontext.html#cfn-sagemaker-modelcard-usercontext-userprofilearn
            '''
            result = self._values.get("user_profile_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def user_profile_name(self) -> typing.Optional[builtins.str]:
            '''The name of the user's profile.

            :default: - "UnsetValue"

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelcard-usercontext.html#cfn-sagemaker-modelcard-usercontext-userprofilename
            '''
            result = self._values.get("user_profile_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UserContextProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelCardProps",
    jsii_struct_bases=[],
    name_mapping={
        "content": "content",
        "model_card_name": "modelCardName",
        "model_card_status": "modelCardStatus",
        "created_by": "createdBy",
        "last_modified_by": "lastModifiedBy",
        "security_config": "securityConfig",
        "tags": "tags",
    },
)
class CfnModelCardProps:
    def __init__(
        self,
        *,
        content: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ContentProperty, typing.Dict[builtins.str, typing.Any]]],
        model_card_name: builtins.str,
        model_card_status: builtins.str,
        created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        last_modified_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.SecurityConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelCard``.

        :param content: The content of the model card. Content uses the `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .
        :param model_card_name: The unique name of the model card.
        :param model_card_status: The approval status of the model card within your organization. Different organizations might have different criteria for model card review and approval. - ``Draft`` : The model card is a work in progress. - ``PendingReview`` : The model card is pending review. - ``Approved`` : The model card is approved. - ``Archived`` : The model card is archived. No more updates should be made to the model card, but it can still be exported.
        :param created_by: Information about the user who created or modified one or more of the following:. - Experiment - Trial - Trial component - Lineage group - Project - Model Card
        :param last_modified_by: Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.
        :param security_config: The security configuration used to protect model card data.
        :param tags: Key-value pairs used to manage metadata for the model card.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # value: Any
            
            cfn_model_card_props = sagemaker.CfnModelCardProps(
                content=sagemaker.CfnModelCard.ContentProperty(
                    additional_information=sagemaker.CfnModelCard.AdditionalInformationProperty(
                        caveats_and_recommendations="caveatsAndRecommendations",
                        custom_details={
                            "custom_details_key": "customDetails"
                        },
                        ethical_considerations="ethicalConsiderations"
                    ),
                    business_details=sagemaker.CfnModelCard.BusinessDetailsProperty(
                        business_problem="businessProblem",
                        business_stakeholders="businessStakeholders",
                        line_of_business="lineOfBusiness"
                    ),
                    evaluation_details=[sagemaker.CfnModelCard.EvaluationDetailProperty(
                        name="name",
            
                        # the properties below are optional
                        datasets=["datasets"],
                        evaluation_job_arn="evaluationJobArn",
                        evaluation_observation="evaluationObservation",
                        metadata={
                            "metadata_key": "metadata"
                        },
                        metric_groups=[sagemaker.CfnModelCard.MetricGroupProperty(
                            metric_data=[sagemaker.CfnModelCard.MetricDataItemsProperty(
                                name="name",
                                type="type",
                                value=value,
            
                                # the properties below are optional
                                notes="notes",
                                x_axis_name=["xAxisName"],
                                y_axis_name=["yAxisName"]
                            )],
                            name="name"
                        )]
                    )],
                    intended_uses=sagemaker.CfnModelCard.IntendedUsesProperty(
                        explanations_for_risk_rating="explanationsForRiskRating",
                        factors_affecting_model_efficiency="factorsAffectingModelEfficiency",
                        intended_uses="intendedUses",
                        purpose_of_model="purposeOfModel",
                        risk_rating="riskRating"
                    ),
                    model_overview=sagemaker.CfnModelCard.ModelOverviewProperty(
                        algorithm_type="algorithmType",
                        inference_environment=sagemaker.CfnModelCard.InferenceEnvironmentProperty(
                            container_image=["containerImage"]
                        ),
                        model_artifact=["modelArtifact"],
                        model_creator="modelCreator",
                        model_description="modelDescription",
                        model_id="modelId",
                        model_name="modelName",
                        model_owner="modelOwner",
                        model_version=123,
                        problem_type="problemType"
                    ),
                    model_package_details=sagemaker.CfnModelCard.ModelPackageDetailsProperty(
                        approval_description="approvalDescription",
                        created_by=sagemaker.CfnModelCard.ModelPackageCreatorProperty(
                            user_profile_name="userProfileName"
                        ),
                        domain="domain",
                        inference_specification=sagemaker.CfnModelCard.InferenceSpecificationProperty(
                            containers=[sagemaker.CfnModelCard.ContainerProperty(
                                image="image",
            
                                # the properties below are optional
                                model_data_url="modelDataUrl",
                                nearest_model_name="nearestModelName"
                            )]
                        ),
                        model_approval_status="modelApprovalStatus",
                        model_package_arn="modelPackageArn",
                        model_package_description="modelPackageDescription",
                        model_package_group_name="modelPackageGroupName",
                        model_package_name="modelPackageName",
                        model_package_status="modelPackageStatus",
                        model_package_version=123,
                        source_algorithms=[sagemaker.CfnModelCard.SourceAlgorithmProperty(
                            algorithm_name="algorithmName",
            
                            # the properties below are optional
                            model_data_url="modelDataUrl"
                        )],
                        task="task"
                    ),
                    training_details=sagemaker.CfnModelCard.TrainingDetailsProperty(
                        objective_function=sagemaker.CfnModelCard.ObjectiveFunctionProperty(
                            function=sagemaker.CfnModelCard.FunctionProperty(
                                condition="condition",
                                facet="facet",
                                function="function"
                            ),
                            notes="notes"
                        ),
                        training_job_details=sagemaker.CfnModelCard.TrainingJobDetailsProperty(
                            hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                                name="name",
                                value="value"
                            )],
                            training_arn="trainingArn",
                            training_datasets=["trainingDatasets"],
                            training_environment=sagemaker.CfnModelCard.TrainingEnvironmentProperty(
                                container_image=["containerImage"]
                            ),
                            training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                                name="name",
                                value=123,
            
                                # the properties below are optional
                                notes="notes"
                            )],
                            user_provided_hyper_parameters=[sagemaker.CfnModelCard.TrainingHyperParameterProperty(
                                name="name",
                                value="value"
                            )],
                            user_provided_training_metrics=[sagemaker.CfnModelCard.TrainingMetricProperty(
                                name="name",
                                value=123,
            
                                # the properties below are optional
                                notes="notes"
                            )]
                        ),
                        training_observations="trainingObservations"
                    )
                ),
                model_card_name="modelCardName",
                model_card_status="modelCardStatus",
            
                # the properties below are optional
                created_by=sagemaker.CfnModelCard.UserContextProperty(
                    domain_id="domainId",
                    user_profile_arn="userProfileArn",
                    user_profile_name="userProfileName"
                ),
                last_modified_by=sagemaker.CfnModelCard.UserContextProperty(
                    domain_id="domainId",
                    user_profile_arn="userProfileArn",
                    user_profile_name="userProfileName"
                ),
                security_config=sagemaker.CfnModelCard.SecurityConfigProperty(
                    kms_key_id="kmsKeyId"
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e84d8f1626af99e65c0fe3f79473cc4957c66247c4c4c868dc9b89fcdd8356f2)
            check_type(argname="argument content", value=content, expected_type=type_hints["content"])
            check_type(argname="argument model_card_name", value=model_card_name, expected_type=type_hints["model_card_name"])
            check_type(argname="argument model_card_status", value=model_card_status, expected_type=type_hints["model_card_status"])
            check_type(argname="argument created_by", value=created_by, expected_type=type_hints["created_by"])
            check_type(argname="argument last_modified_by", value=last_modified_by, expected_type=type_hints["last_modified_by"])
            check_type(argname="argument security_config", value=security_config, expected_type=type_hints["security_config"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "content": content,
            "model_card_name": model_card_name,
            "model_card_status": model_card_status,
        }
        if created_by is not None:
            self._values["created_by"] = created_by
        if last_modified_by is not None:
            self._values["last_modified_by"] = last_modified_by
        if security_config is not None:
            self._values["security_config"] = security_config
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def content(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelCard.ContentProperty]:
        '''The content of the model card.

        Content uses the `model card JSON schema <https://docs.aws.amazon.com/sagemaker/latest/dg/model-cards.html#model-cards-json-schema>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-content
        '''
        result = self._values.get("content")
        assert result is not None, "Required property 'content' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelCard.ContentProperty], result)

    @builtins.property
    def model_card_name(self) -> builtins.str:
        '''The unique name of the model card.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-modelcardname
        '''
        result = self._values.get("model_card_name")
        assert result is not None, "Required property 'model_card_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def model_card_status(self) -> builtins.str:
        '''The approval status of the model card within your organization.

        Different organizations might have different criteria for model card review and approval.

        - ``Draft`` : The model card is a work in progress.
        - ``PendingReview`` : The model card is pending review.
        - ``Approved`` : The model card is approved.
        - ``Archived`` : The model card is archived. No more updates should be made to the model card, but it can still be exported.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-modelcardstatus
        '''
        result = self._values.get("model_card_status")
        assert result is not None, "Required property 'model_card_status' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def created_by(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]]:
        '''Information about the user who created or modified one or more of the following:.

        - Experiment
        - Trial
        - Trial component
        - Lineage group
        - Project
        - Model Card

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-createdby
        '''
        result = self._values.get("created_by")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]], result)

    @builtins.property
    def last_modified_by(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]]:
        '''Information about the user who created or modified an experiment, trial, trial component, lineage group, project, or model card.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-lastmodifiedby
        '''
        result = self._values.get("last_modified_by")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]], result)

    @builtins.property
    def security_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.SecurityConfigProperty]]:
        '''The security configuration used to protect model card data.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-securityconfig
        '''
        result = self._values.get("security_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.SecurityConfigProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''Key-value pairs used to manage metadata for the model card.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelcard.html#cfn-sagemaker-modelcard-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelCardProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelExplainabilityJobDefinition(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition",
):
    '''Creates the definition for a model explainability job.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html
    :cloudformationResource: AWS::SageMaker::ModelExplainabilityJobDefinition
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_model_explainability_job_definition = sagemaker.CfnModelExplainabilityJobDefinition(self, "MyCfnModelExplainabilityJobDefinition",
            job_resources=sagemaker.CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty(
                cluster_config=sagemaker.CfnModelExplainabilityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
        
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            ),
            model_explainability_app_specification=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty(
                config_uri="configUri",
                image_uri="imageUri",
        
                # the properties below are optional
                environment={
                    "environment_key": "environment"
                }
            ),
            model_explainability_job_input=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty(
                batch_transform_input=sagemaker.CfnModelExplainabilityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
        
                    # the properties below are optional
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                ),
                endpoint_input=sagemaker.CfnModelExplainabilityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
        
                    # the properties below are optional
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            ),
            model_explainability_job_output_config=sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty(
                monitoring_outputs=[sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )],
        
                # the properties below are optional
                kms_key_id="kmsKeyId"
            ),
            role_arn="roleArn",
        
            # the properties below are optional
            endpoint_name="endpointName",
            job_definition_name="jobDefinitionName",
            model_explainability_baseline_config=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty(
                baselining_job_name="baseliningJobName",
                constraints_resource=sagemaker.CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            ),
            network_config=sagemaker.CfnModelExplainabilityJobDefinition.NetworkConfigProperty(
                enable_inter_container_traffic_encryption=False,
                enable_network_isolation=False,
                vpc_config=sagemaker.CfnModelExplainabilityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            ),
            stopping_condition=sagemaker.CfnModelExplainabilityJobDefinition.StoppingConditionProperty(
                max_runtime_in_seconds=123
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
        model_explainability_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
        model_explainability_job_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty", typing.Dict[builtins.str, typing.Any]]],
        model_explainability_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_explainability_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.NetworkConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.StoppingConditionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_explainability_app_specification: Configures the model explainability job to run a specified Docker container image.
        :param model_explainability_job_input: Inputs for the model explainability job.
        :param model_explainability_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the model explainability job definition. The name must be unique within an AWS Region in the AWS account.
        :param model_explainability_baseline_config: The baseline configuration for a model explainability job.
        :param network_config: Networking options for a model explainability job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__954f804ffa3bf5dd33695ee00ecfe5ce08b7adb2e74010525ccd32a9adddcd69)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelExplainabilityJobDefinitionProps(
            job_resources=job_resources,
            model_explainability_app_specification=model_explainability_app_specification,
            model_explainability_job_input=model_explainability_job_input,
            model_explainability_job_output_config=model_explainability_job_output_config,
            role_arn=role_arn,
            endpoint_name=endpoint_name,
            job_definition_name=job_definition_name,
            model_explainability_baseline_config=model_explainability_baseline_config,
            network_config=network_config,
            stopping_condition=stopping_condition,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c25a399ce592da6a5aeb991c645f16759378b64e7c90954e06b0eb766bc5a5cb)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fd0a694b7405e01fc3f479a1027ecd0f46e2eb937bf9a7d602cc4087cc4330b4)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the job definition was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrJobDefinitionArn")
    def attr_job_definition_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the job definition.

        :cloudformationAttribute: JobDefinitionArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrJobDefinitionArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="jobResources")
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty"]:
        '''Identifies the resources to deploy for a monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty"], jsii.get(self, "jobResources"))

    @job_resources.setter
    def job_resources(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d422a30d126970915cc8495b869e3c7db9f854b2fcd87490df348c194d343674)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobResources", value)

    @builtins.property
    @jsii.member(jsii_name="modelExplainabilityAppSpecification")
    def model_explainability_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty"]:
        '''Configures the model explainability job to run a specified Docker container image.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty"], jsii.get(self, "modelExplainabilityAppSpecification"))

    @model_explainability_app_specification.setter
    def model_explainability_app_specification(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1c53a969e652e0136399ec80002f2f198c1c63f8456011292205d745721bdd19)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelExplainabilityAppSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="modelExplainabilityJobInput")
    def model_explainability_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty"]:
        '''Inputs for the model explainability job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty"], jsii.get(self, "modelExplainabilityJobInput"))

    @model_explainability_job_input.setter
    def model_explainability_job_input(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__495b555b30d3846f827f09b73319ed59fbb50d2039de4e07d0ec4b9b8ce0b87f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelExplainabilityJobInput", value)

    @builtins.property
    @jsii.member(jsii_name="modelExplainabilityJobOutputConfig")
    def model_explainability_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty"]:
        '''The output configuration for monitoring jobs.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty"], jsii.get(self, "modelExplainabilityJobOutputConfig"))

    @model_explainability_job_output_config.setter
    def model_explainability_job_output_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__48717f82211b0a11f9a35b96843a92efbbe71ee32e9d7d31903f5c34e705610a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelExplainabilityJobOutputConfig", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__34cd6301c5f2aba6124abd00d8e55f0b8ed289663fb014bec3e35dac788be599)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cfcce096a35b2a2381a07fbf9aabf14e9e8b4e5539c0e0638d2763e9c9a42fcd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="jobDefinitionName")
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the model explainability job definition.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "jobDefinitionName"))

    @job_definition_name.setter
    def job_definition_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1aceb538ddf688359c0113b1c64532ed2070090d48001c2d98a0bdf0effd9ddd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobDefinitionName", value)

    @builtins.property
    @jsii.member(jsii_name="modelExplainabilityBaselineConfig")
    def model_explainability_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty"]]:
        '''The baseline configuration for a model explainability job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty"]], jsii.get(self, "modelExplainabilityBaselineConfig"))

    @model_explainability_baseline_config.setter
    def model_explainability_baseline_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7debfb1ae612fdf60913a86f4ea3623c716789b8ef1f916075b874acd2f1de62)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelExplainabilityBaselineConfig", value)

    @builtins.property
    @jsii.member(jsii_name="networkConfig")
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.NetworkConfigProperty"]]:
        '''Networking options for a model explainability job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.NetworkConfigProperty"]], jsii.get(self, "networkConfig"))

    @network_config.setter
    def network_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.NetworkConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__afa96e4656847146085057ee89dab45a0b2cecfdec800174134362c052297ab3)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "networkConfig", value)

    @builtins.property
    @jsii.member(jsii_name="stoppingCondition")
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.StoppingConditionProperty"]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.StoppingConditionProperty"]], jsii.get(self, "stoppingCondition"))

    @stopping_condition.setter
    def stopping_condition(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.StoppingConditionProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__649e4179282387b41e32c8808582ab74538c1896479e37a25481f36866965a15)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "stoppingCondition", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__facad0e976368bc105b0f8e5e34cf9f70ef7605e04337f4152c90a7228db0a40)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.BatchTransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_captured_destination_s3_uri": "dataCapturedDestinationS3Uri",
            "dataset_format": "datasetFormat",
            "local_path": "localPath",
            "features_attribute": "featuresAttribute",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class BatchTransformInputProperty:
        def __init__(
            self,
            *,
            data_captured_destination_s3_uri: builtins.str,
            dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.DatasetFormatProperty", typing.Dict[builtins.str, typing.Any]]],
            local_path: builtins.str,
            features_attribute: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the batch transform job.

            :param data_captured_destination_s3_uri: The Amazon S3 location being used to capture the data.
            :param dataset_format: The dataset format for your batch transform job.
            :param local_path: Path to the filesystem where the batch transform data is available to the container.
            :param features_attribute: The attributes of the input data that are the input features.
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                batch_transform_input_property = sagemaker.CfnModelExplainabilityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
                
                    # the properties below are optional
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8218381f975f9dbb2a35661c10f212426a9fef5379d65f67da44ff55366283cf)
                check_type(argname="argument data_captured_destination_s3_uri", value=data_captured_destination_s3_uri, expected_type=type_hints["data_captured_destination_s3_uri"])
                check_type(argname="argument dataset_format", value=dataset_format, expected_type=type_hints["dataset_format"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument features_attribute", value=features_attribute, expected_type=type_hints["features_attribute"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_captured_destination_s3_uri": data_captured_destination_s3_uri,
                "dataset_format": dataset_format,
                "local_path": local_path,
            }
            if features_attribute is not None:
                self._values["features_attribute"] = features_attribute
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def data_captured_destination_s3_uri(self) -> builtins.str:
            '''The Amazon S3 location being used to capture the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-datacaptureddestinations3uri
            '''
            result = self._values.get("data_captured_destination_s3_uri")
            assert result is not None, "Required property 'data_captured_destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def dataset_format(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.DatasetFormatProperty"]:
            '''The dataset format for your batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-datasetformat
            '''
            result = self._values.get("dataset_format")
            assert result is not None, "Required property 'dataset_format' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.DatasetFormatProperty"], result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the batch transform data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data that are the input features.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-featuresattribute
            '''
            result = self._values.get("features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelexplainabilityjobdefinition-batchtransforminput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BatchTransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.ClusterConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_size_in_gb": "volumeSizeInGb",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class ClusterConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_size_in_gb: jsii.Number,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration for the cluster resources used to run the processing job.

            :param instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
            :param instance_type: The ML compute instance type for the processing job.
            :param volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-clusterconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cluster_config_property = sagemaker.CfnModelExplainabilityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__85690b811ee480a36a146a23f4711dd339cec30e74fa9c234ae3c74d41f22c9c)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
                "volume_size_in_gb": volume_size_in_gb,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the model monitoring job.

            For distributed processing jobs, specify a value greater than 1. The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-clusterconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-clusterconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-clusterconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-clusterconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_size_in_gb(self) -> jsii.Number:
            '''The size of the ML storage volume, in gigabytes, that you want to provision.

            You must specify sufficient ML storage for your scenario.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-clusterconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-clusterconfig-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            assert result is not None, "Required property 'volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-clusterconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-clusterconfig-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClusterConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class ConstraintsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''Input object for the endpoint.

            :param s3_uri: The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-constraintsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                constraints_resource_property = sagemaker.CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7e81d907a778bcaa00742819afd8f88e9e64e5d100c67d9b1af174fcac54910d)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-constraintsresource.html#cfn-sagemaker-modelexplainabilityjobdefinition-constraintsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ConstraintsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty",
        jsii_struct_bases=[],
        name_mapping={"header": "header"},
    )
    class CsvProperty:
        def __init__(
            self,
            *,
            header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The CSV format.

            :param header: A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-csv.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                csv_property = sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                    header=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b224b814f09b7de391271c7d3c38ace86d32a9e32c9fde79e9880308342a62cf)
                check_type(argname="argument header", value=header, expected_type=type_hints["header"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if header is not None:
                self._values["header"] = header

        @builtins.property
        def header(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-csv.html#cfn-sagemaker-modelexplainabilityjobdefinition-csv-header
            '''
            result = self._values.get("header")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CsvProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty",
        jsii_struct_bases=[],
        name_mapping={"csv": "csv", "json": "json", "parquet": "parquet"},
    )
    class DatasetFormatProperty:
        def __init__(
            self,
            *,
            csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.CsvProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.JsonProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The dataset format of the data to monitor.

            :param csv: The CSV format.
            :param json: The Json format.
            :param parquet: A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-datasetformat.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                dataset_format_property = sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty(
                    csv=sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                        header=False
                    ),
                    json=sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                        line=False
                    ),
                    parquet=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e8225ff3c21f764842746be62d4c9ddb589b217c3c3b8494ef295043743c687c)
                check_type(argname="argument csv", value=csv, expected_type=type_hints["csv"])
                check_type(argname="argument json", value=json, expected_type=type_hints["json"])
                check_type(argname="argument parquet", value=parquet, expected_type=type_hints["parquet"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv is not None:
                self._values["csv"] = csv
            if json is not None:
                self._values["json"] = json
            if parquet is not None:
                self._values["parquet"] = parquet

        @builtins.property
        def csv(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.CsvProperty"]]:
            '''The CSV format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-datasetformat.html#cfn-sagemaker-modelexplainabilityjobdefinition-datasetformat-csv
            '''
            result = self._values.get("csv")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.CsvProperty"]], result)

        @builtins.property
        def json(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.JsonProperty"]]:
            '''The Json format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-datasetformat.html#cfn-sagemaker-modelexplainabilityjobdefinition-datasetformat-json
            '''
            result = self._values.get("json")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.JsonProperty"]], result)

        @builtins.property
        def parquet(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-datasetformat.html#cfn-sagemaker-modelexplainabilityjobdefinition-datasetformat-parquet
            '''
            result = self._values.get("parquet")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DatasetFormatProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.EndpointInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "local_path": "localPath",
            "features_attribute": "featuresAttribute",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class EndpointInputProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            local_path: builtins.str,
            features_attribute: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the endpoint.

            :param endpoint_name: An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.
            :param local_path: Path to the filesystem where the endpoint data is available to the container.
            :param features_attribute: The attributes of the input data that are the input features.
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_input_property = sagemaker.CfnModelExplainabilityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
                
                    # the properties below are optional
                    features_attribute="featuresAttribute",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e788b79725844f1b9887b062e539eadcfe401306e596af606536f4dc291ecb8c)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument features_attribute", value=features_attribute, expected_type=type_hints["features_attribute"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
                "local_path": local_path,
            }
            if features_attribute is not None:
                self._values["features_attribute"] = features_attribute
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the endpoint data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data that are the input features.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-featuresattribute
            '''
            result = self._values.get("features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-endpointinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointinput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty",
        jsii_struct_bases=[],
        name_mapping={"line": "line"},
    )
    class JsonProperty:
        def __init__(
            self,
            *,
            line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The Json format.

            :param line: A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-json.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                json_property = sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                    line=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b47a2b0d32eade841fbc5b0707a694aac661eb8c8ef69552afbc6cb6513f7991)
                check_type(argname="argument line", value=line, expected_type=type_hints["line"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if line is not None:
                self._values["line"] = line

        @builtins.property
        def line(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-json.html#cfn-sagemaker-modelexplainabilityjobdefinition-json-line
            '''
            result = self._values.get("line")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JsonProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "config_uri": "configUri",
            "image_uri": "imageUri",
            "environment": "environment",
        },
    )
    class ModelExplainabilityAppSpecificationProperty:
        def __init__(
            self,
            *,
            config_uri: builtins.str,
            image_uri: builtins.str,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
        ) -> None:
            '''Docker container image configuration object for the model explainability job.

            :param config_uri: JSON formatted Amazon S3 file that defines explainability parameters. For more information on this JSON configuration file, see `Configure model explainability parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-config-json-monitor-model-explainability-parameters.html>`_ .
            :param image_uri: The container image to be run by the model explainability job.
            :param environment: Sets the environment variables in the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_explainability_app_specification_property = sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty(
                    config_uri="configUri",
                    image_uri="imageUri",
                
                    # the properties below are optional
                    environment={
                        "environment_key": "environment"
                    }
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ebe56328bde0b850895826fabfc7bc3442ae0788e844a26866e772ad10e87bed)
                check_type(argname="argument config_uri", value=config_uri, expected_type=type_hints["config_uri"])
                check_type(argname="argument image_uri", value=image_uri, expected_type=type_hints["image_uri"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "config_uri": config_uri,
                "image_uri": image_uri,
            }
            if environment is not None:
                self._values["environment"] = environment

        @builtins.property
        def config_uri(self) -> builtins.str:
            '''JSON formatted Amazon S3 file that defines explainability parameters.

            For more information on this JSON configuration file, see `Configure model explainability parameters <https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-config-json-monitor-model-explainability-parameters.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification-configuri
            '''
            result = self._values.get("config_uri")
            assert result is not None, "Required property 'config_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_uri(self) -> builtins.str:
            '''The container image to be run by the model explainability job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification-imageuri
            '''
            result = self._values.get("image_uri")
            assert result is not None, "Required property 'image_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Sets the environment variables in the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelExplainabilityAppSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "baselining_job_name": "baseliningJobName",
            "constraints_resource": "constraintsResource",
        },
    )
    class ModelExplainabilityBaselineConfigProperty:
        def __init__(
            self,
            *,
            baselining_job_name: typing.Optional[builtins.str] = None,
            constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The configuration for a baseline model explainability job.

            :param baselining_job_name: The name of the baseline model explainability job.
            :param constraints_resource: The constraints resource for a model explainability job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_explainability_baseline_config_property = sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0d793a8a58a92604079c005aa4a444a5a9902a1522777576bfdaac23f93b5af6)
                check_type(argname="argument baselining_job_name", value=baselining_job_name, expected_type=type_hints["baselining_job_name"])
                check_type(argname="argument constraints_resource", value=constraints_resource, expected_type=type_hints["constraints_resource"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if baselining_job_name is not None:
                self._values["baselining_job_name"] = baselining_job_name
            if constraints_resource is not None:
                self._values["constraints_resource"] = constraints_resource

        @builtins.property
        def baselining_job_name(self) -> typing.Optional[builtins.str]:
            '''The name of the baseline model explainability job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig-baseliningjobname
            '''
            result = self._values.get("baselining_job_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def constraints_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty"]]:
            '''The constraints resource for a model explainability job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig-constraintsresource
            '''
            result = self._values.get("constraints_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelExplainabilityBaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "batch_transform_input": "batchTransformInput",
            "endpoint_input": "endpointInput",
        },
    )
    class ModelExplainabilityJobInputProperty:
        def __init__(
            self,
            *,
            batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.BatchTransformInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.EndpointInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Inputs for the model explainability job.

            :param batch_transform_input: Input object for the batch transform job.
            :param endpoint_input: The endpoint for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_explainability_job_input_property = sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty(
                    batch_transform_input=sagemaker.CfnModelExplainabilityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
                
                        # the properties below are optional
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    ),
                    endpoint_input=sagemaker.CfnModelExplainabilityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
                
                        # the properties below are optional
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ec8ac85f23fa2862e6cf2eea8002ceb01087e83cbff878162f950b699546e63e)
                check_type(argname="argument batch_transform_input", value=batch_transform_input, expected_type=type_hints["batch_transform_input"])
                check_type(argname="argument endpoint_input", value=endpoint_input, expected_type=type_hints["endpoint_input"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if batch_transform_input is not None:
                self._values["batch_transform_input"] = batch_transform_input
            if endpoint_input is not None:
                self._values["endpoint_input"] = endpoint_input

        @builtins.property
        def batch_transform_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.BatchTransformInputProperty"]]:
            '''Input object for the batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput-batchtransforminput
            '''
            result = self._values.get("batch_transform_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.BatchTransformInputProperty"]], result)

        @builtins.property
        def endpoint_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.EndpointInputProperty"]]:
            '''The endpoint for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput-endpointinput
            '''
            result = self._values.get("endpoint_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.EndpointInputProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelExplainabilityJobInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_outputs": "monitoringOutputs",
            "kms_key_id": "kmsKeyId",
        },
    )
    class MonitoringOutputConfigProperty:
        def __init__(
            self,
            *,
            monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.MonitoringOutputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for monitoring jobs.

            :param monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_config_property = sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__be4739ae54c1d57b6f9fb64c4b95f53c3a48b9163da7afb568e8e265dd0da14c)
                check_type(argname="argument monitoring_outputs", value=monitoring_outputs, expected_type=type_hints["monitoring_outputs"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_outputs": monitoring_outputs,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def monitoring_outputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringOutputProperty"]]]:
            '''Monitoring outputs for monitoring jobs.

            This is where the output of the periodic monitoring jobs is uploaded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig-monitoringoutputs
            '''
            result = self._values.get("monitoring_outputs")
            assert result is not None, "Required property 'monitoring_outputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.MonitoringOutputProperty"]]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-monitoringoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_output": "s3Output"},
    )
    class MonitoringOutputProperty:
        def __init__(
            self,
            *,
            s3_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.S3OutputProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The output object for a monitoring job.

            :param s3_output: The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_property = sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__476b34dde6767c9a7214e0b1005a08a9c9a01b9f60950463f0b2ce06d82b9516)
                check_type(argname="argument s3_output", value=s3_output, expected_type=type_hints["s3_output"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output": s3_output,
            }

        @builtins.property
        def s3_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.S3OutputProperty"]:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringoutput.html#cfn-sagemaker-modelexplainabilityjobdefinition-monitoringoutput-s3output
            '''
            result = self._values.get("s3_output")
            assert result is not None, "Required property 's3_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.S3OutputProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={"cluster_config": "clusterConfig"},
    )
    class MonitoringResourcesProperty:
        def __init__(
            self,
            *,
            cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.ClusterConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Identifies the resources to deploy for a monitoring job.

            :param cluster_config: The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_resources_property = sagemaker.CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelExplainabilityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__746a6e34a89d9945c840ac5a16e5065dd324516966b022991fd0019731e310ac)
                check_type(argname="argument cluster_config", value=cluster_config, expected_type=type_hints["cluster_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cluster_config": cluster_config,
            }

        @builtins.property
        def cluster_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ClusterConfigProperty"]:
            '''The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-monitoringresources.html#cfn-sagemaker-modelexplainabilityjobdefinition-monitoringresources-clusterconfig
            '''
            result = self._values.get("cluster_config")
            assert result is not None, "Required property 'cluster_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.ClusterConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.NetworkConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_inter_container_traffic_encryption": "enableInterContainerTrafficEncryption",
            "enable_network_isolation": "enableNetworkIsolation",
            "vpc_config": "vpcConfig",
        },
    )
    class NetworkConfigProperty:
        def __init__(
            self,
            *,
            enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelExplainabilityJobDefinition.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.

            :param enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
            :param enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
            :param vpc_config: Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-networkconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                network_config_property = sagemaker.CfnModelExplainabilityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelExplainabilityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__736183198ba84e84c1a7ddfa17d7c6e762d3957b37957afa955cf7ec27128bce)
                check_type(argname="argument enable_inter_container_traffic_encryption", value=enable_inter_container_traffic_encryption, expected_type=type_hints["enable_inter_container_traffic_encryption"])
                check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
                check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_inter_container_traffic_encryption is not None:
                self._values["enable_inter_container_traffic_encryption"] = enable_inter_container_traffic_encryption
            if enable_network_isolation is not None:
                self._values["enable_network_isolation"] = enable_network_isolation
            if vpc_config is not None:
                self._values["vpc_config"] = vpc_config

        @builtins.property
        def enable_inter_container_traffic_encryption(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to encrypt all communications between distributed processing jobs.

            Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-networkconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-networkconfig-enableintercontainertrafficencryption
            '''
            result = self._values.get("enable_inter_container_traffic_encryption")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def enable_network_isolation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to allow inbound and outbound network calls to and from the containers used for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-networkconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-networkconfig-enablenetworkisolation
            '''
            result = self._values.get("enable_network_isolation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def vpc_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.VpcConfigProperty"]]:
            '''Specifies a VPC that your training jobs and hosted models have access to.

            Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-networkconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-networkconfig-vpcconfig
            '''
            result = self._values.get("vpc_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelExplainabilityJobDefinition.VpcConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "local_path": "localPath",
            "s3_uri": "s3Uri",
            "s3_upload_mode": "s3UploadMode",
        },
    )
    class S3OutputProperty:
        def __init__(
            self,
            *,
            local_path: builtins.str,
            s3_uri: builtins.str,
            s3_upload_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :param local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
            :param s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
            :param s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-s3output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_output_property = sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty(
                    local_path="localPath",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    s3_upload_mode="s3UploadMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__77475b02c889e323dca3d42aa4b3334fb85c2226ab3c3f1c29b6329113a04d5c)
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument s3_upload_mode", value=s3_upload_mode, expected_type=type_hints["s3_upload_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "local_path": local_path,
                "s3_uri": s3_uri,
            }
            if s3_upload_mode is not None:
                self._values["s3_upload_mode"] = s3_upload_mode

        @builtins.property
        def local_path(self) -> builtins.str:
            '''The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            LocalPath is an absolute path for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-s3output.html#cfn-sagemaker-modelexplainabilityjobdefinition-s3output-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-s3output.html#cfn-sagemaker-modelexplainabilityjobdefinition-s3output-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_upload_mode(self) -> typing.Optional[builtins.str]:
            '''Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-s3output.html#cfn-sagemaker-modelexplainabilityjobdefinition-s3output-s3uploadmode
            '''
            result = self._values.get("s3_upload_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.StoppingConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"max_runtime_in_seconds": "maxRuntimeInSeconds"},
    )
    class StoppingConditionProperty:
        def __init__(self, *, max_runtime_in_seconds: jsii.Number) -> None:
            '''Specifies a limit to how long a model training job or model compilation job can run.

            It also specifies how long a managed spot training job has to complete. When the job reaches the time limit, SageMaker ends the training or compilation job. Use this API to cap model training costs.

            To stop a training job, SageMaker sends the algorithm the ``SIGTERM`` signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost.

            The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with ``CreateModel`` .
            .. epigraph::

               The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.

            :param max_runtime_in_seconds: The maximum length of time, in seconds, that a training or compilation job can run before it is stopped. For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model. For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days. The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-stoppingcondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                stopping_condition_property = sagemaker.CfnModelExplainabilityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__852d4ce521ce847d2331b9653cc463aa4376aabf5b9b41a11c2bd46874051dd7)
                check_type(argname="argument max_runtime_in_seconds", value=max_runtime_in_seconds, expected_type=type_hints["max_runtime_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_runtime_in_seconds": max_runtime_in_seconds,
            }

        @builtins.property
        def max_runtime_in_seconds(self) -> jsii.Number:
            '''The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.

            For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.

            For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.

            The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-stoppingcondition.html#cfn-sagemaker-modelexplainabilityjobdefinition-stoppingcondition-maxruntimeinseconds
            '''
            result = self._values.get("max_runtime_in_seconds")
            assert result is not None, "Required property 'max_runtime_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StoppingConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinition.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnModelExplainabilityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1cac621fb0bd5a10ec8f30283eafe7ac219e52c35b2436b2978d5500afe05e2f)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-vpcconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelexplainabilityjobdefinition-vpcconfig.html#cfn-sagemaker-modelexplainabilityjobdefinition-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelExplainabilityJobDefinitionProps",
    jsii_struct_bases=[],
    name_mapping={
        "job_resources": "jobResources",
        "model_explainability_app_specification": "modelExplainabilityAppSpecification",
        "model_explainability_job_input": "modelExplainabilityJobInput",
        "model_explainability_job_output_config": "modelExplainabilityJobOutputConfig",
        "role_arn": "roleArn",
        "endpoint_name": "endpointName",
        "job_definition_name": "jobDefinitionName",
        "model_explainability_baseline_config": "modelExplainabilityBaselineConfig",
        "network_config": "networkConfig",
        "stopping_condition": "stoppingCondition",
        "tags": "tags",
    },
)
class CfnModelExplainabilityJobDefinitionProps:
    def __init__(
        self,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
        model_explainability_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
        model_explainability_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
        model_explainability_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_explainability_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelExplainabilityJobDefinition``.

        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_explainability_app_specification: Configures the model explainability job to run a specified Docker container image.
        :param model_explainability_job_input: Inputs for the model explainability job.
        :param model_explainability_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the model explainability job definition. The name must be unique within an AWS Region in the AWS account.
        :param model_explainability_baseline_config: The baseline configuration for a model explainability job.
        :param network_config: Networking options for a model explainability job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_model_explainability_job_definition_props = sagemaker.CfnModelExplainabilityJobDefinitionProps(
                job_resources=sagemaker.CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelExplainabilityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
            
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                ),
                model_explainability_app_specification=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty(
                    config_uri="configUri",
                    image_uri="imageUri",
            
                    # the properties below are optional
                    environment={
                        "environment_key": "environment"
                    }
                ),
                model_explainability_job_input=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty(
                    batch_transform_input=sagemaker.CfnModelExplainabilityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelExplainabilityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelExplainabilityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelExplainabilityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
            
                        # the properties below are optional
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    ),
                    endpoint_input=sagemaker.CfnModelExplainabilityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
            
                        # the properties below are optional
                        features_attribute="featuresAttribute",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    )
                ),
                model_explainability_job_output_config=sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelExplainabilityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelExplainabilityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
            
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                ),
                role_arn="roleArn",
            
                # the properties below are optional
                endpoint_name="endpointName",
                job_definition_name="jobDefinitionName",
                model_explainability_baseline_config=sagemaker.CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                ),
                network_config=sagemaker.CfnModelExplainabilityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelExplainabilityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                ),
                stopping_condition=sagemaker.CfnModelExplainabilityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__362e56df80f87db6e76a20cfa99a7869ba12eb909ceb3dc9c80aa0c6f74f099a)
            check_type(argname="argument job_resources", value=job_resources, expected_type=type_hints["job_resources"])
            check_type(argname="argument model_explainability_app_specification", value=model_explainability_app_specification, expected_type=type_hints["model_explainability_app_specification"])
            check_type(argname="argument model_explainability_job_input", value=model_explainability_job_input, expected_type=type_hints["model_explainability_job_input"])
            check_type(argname="argument model_explainability_job_output_config", value=model_explainability_job_output_config, expected_type=type_hints["model_explainability_job_output_config"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument job_definition_name", value=job_definition_name, expected_type=type_hints["job_definition_name"])
            check_type(argname="argument model_explainability_baseline_config", value=model_explainability_baseline_config, expected_type=type_hints["model_explainability_baseline_config"])
            check_type(argname="argument network_config", value=network_config, expected_type=type_hints["network_config"])
            check_type(argname="argument stopping_condition", value=stopping_condition, expected_type=type_hints["stopping_condition"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "job_resources": job_resources,
            "model_explainability_app_specification": model_explainability_app_specification,
            "model_explainability_job_input": model_explainability_job_input,
            "model_explainability_job_output_config": model_explainability_job_output_config,
            "role_arn": role_arn,
        }
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if job_definition_name is not None:
            self._values["job_definition_name"] = job_definition_name
        if model_explainability_baseline_config is not None:
            self._values["model_explainability_baseline_config"] = model_explainability_baseline_config
        if network_config is not None:
            self._values["network_config"] = network_config
        if stopping_condition is not None:
            self._values["stopping_condition"] = stopping_condition
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty]:
        '''Identifies the resources to deploy for a monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-jobresources
        '''
        result = self._values.get("job_resources")
        assert result is not None, "Required property 'job_resources' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty], result)

    @builtins.property
    def model_explainability_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty]:
        '''Configures the model explainability job to run a specified Docker container image.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityappspecification
        '''
        result = self._values.get("model_explainability_app_specification")
        assert result is not None, "Required property 'model_explainability_app_specification' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty], result)

    @builtins.property
    def model_explainability_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty]:
        '''Inputs for the model explainability job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjobinput
        '''
        result = self._values.get("model_explainability_job_input")
        assert result is not None, "Required property 'model_explainability_job_input' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty], result)

    @builtins.property
    def model_explainability_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty]:
        '''The output configuration for monitoring jobs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilityjoboutputconfig
        '''
        result = self._values.get("model_explainability_job_output_config")
        assert result is not None, "Required property 'model_explainability_job_output_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty], result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the model explainability job definition.

        The name must be unique within an AWS Region in the AWS account.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-jobdefinitionname
        '''
        result = self._values.get("job_definition_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_explainability_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty]]:
        '''The baseline configuration for a model explainability job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-modelexplainabilitybaselineconfig
        '''
        result = self._values.get("model_explainability_baseline_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty]], result)

    @builtins.property
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.NetworkConfigProperty]]:
        '''Networking options for a model explainability job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-networkconfig
        '''
        result = self._values.get("network_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.NetworkConfigProperty]], result)

    @builtins.property
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.StoppingConditionProperty]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-stoppingcondition
        '''
        result = self._values.get("stopping_condition")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.StoppingConditionProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelexplainabilityjobdefinition.html#cfn-sagemaker-modelexplainabilityjobdefinition-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelExplainabilityJobDefinitionProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelPackage(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage",
):
    '''A versioned model that can be deployed for SageMaker inference.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html
    :cloudformationResource: AWS::SageMaker::ModelPackage
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # model_input: Any
        
        cfn_model_package = sagemaker.CfnModelPackage(self, "MyCfnModelPackage",
            additional_inference_specifications=[sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty(
                containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                    image="image",
        
                    # the properties below are optional
                    container_hostname="containerHostname",
                    environment={
                        "environment_key": "environment"
                    },
                    framework="framework",
                    framework_version="frameworkVersion",
                    image_digest="imageDigest",
                    model_data_url="modelDataUrl",
                    model_input=model_input,
                    nearest_model_name="nearestModelName"
                )],
                name="name",
        
                # the properties below are optional
                description="description",
                supported_content_types=["supportedContentTypes"],
                supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                supported_response_mime_types=["supportedResponseMimeTypes"],
                supported_transform_instance_types=["supportedTransformInstanceTypes"]
            )],
            additional_inference_specifications_to_add=[sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty(
                containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                    image="image",
        
                    # the properties below are optional
                    container_hostname="containerHostname",
                    environment={
                        "environment_key": "environment"
                    },
                    framework="framework",
                    framework_version="frameworkVersion",
                    image_digest="imageDigest",
                    model_data_url="modelDataUrl",
                    model_input=model_input,
                    nearest_model_name="nearestModelName"
                )],
                name="name",
        
                # the properties below are optional
                description="description",
                supported_content_types=["supportedContentTypes"],
                supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                supported_response_mime_types=["supportedResponseMimeTypes"],
                supported_transform_instance_types=["supportedTransformInstanceTypes"]
            )],
            approval_description="approvalDescription",
            certify_for_marketplace=False,
            client_token="clientToken",
            customer_metadata_properties={
                "customer_metadata_properties_key": "customerMetadataProperties"
            },
            domain="domain",
            drift_check_baselines=sagemaker.CfnModelPackage.DriftCheckBaselinesProperty(
                bias=sagemaker.CfnModelPackage.DriftCheckBiasProperty(
                    config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest",
                        content_type="contentType"
                    ),
                    post_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    pre_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                explainability=sagemaker.CfnModelPackage.DriftCheckExplainabilityProperty(
                    config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest",
                        content_type="contentType"
                    ),
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                model_data_quality=sagemaker.CfnModelPackage.DriftCheckModelDataQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                model_quality=sagemaker.CfnModelPackage.DriftCheckModelQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            ),
            inference_specification=sagemaker.CfnModelPackage.InferenceSpecificationProperty(
                containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                    image="image",
        
                    # the properties below are optional
                    container_hostname="containerHostname",
                    environment={
                        "environment_key": "environment"
                    },
                    framework="framework",
                    framework_version="frameworkVersion",
                    image_digest="imageDigest",
                    model_data_url="modelDataUrl",
                    model_input=model_input,
                    nearest_model_name="nearestModelName"
                )],
                supported_content_types=["supportedContentTypes"],
                supported_response_mime_types=["supportedResponseMimeTypes"],
        
                # the properties below are optional
                supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                supported_transform_instance_types=["supportedTransformInstanceTypes"]
            ),
            last_modified_time="lastModifiedTime",
            metadata_properties=sagemaker.CfnModelPackage.MetadataPropertiesProperty(
                commit_id="commitId",
                generated_by="generatedBy",
                project_id="projectId",
                repository="repository"
            ),
            model_approval_status="modelApprovalStatus",
            model_metrics=sagemaker.CfnModelPackage.ModelMetricsProperty(
                bias=sagemaker.CfnModelPackage.BiasProperty(
                    post_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    pre_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                explainability=sagemaker.CfnModelPackage.ExplainabilityProperty(
                    report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                model_data_quality=sagemaker.CfnModelPackage.ModelDataQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                ),
                model_quality=sagemaker.CfnModelPackage.ModelQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            ),
            model_package_description="modelPackageDescription",
            model_package_group_name="modelPackageGroupName",
            model_package_name="modelPackageName",
            model_package_status_details=sagemaker.CfnModelPackage.ModelPackageStatusDetailsProperty(
                validation_statuses=[sagemaker.CfnModelPackage.ModelPackageStatusItemProperty(
                    name="name",
                    status="status",
        
                    # the properties below are optional
                    failure_reason="failureReason"
                )]
            ),
            model_package_version=123,
            sample_payload_url="samplePayloadUrl",
            skip_model_validation="skipModelValidation",
            source_algorithm_specification=sagemaker.CfnModelPackage.SourceAlgorithmSpecificationProperty(
                source_algorithms=[sagemaker.CfnModelPackage.SourceAlgorithmProperty(
                    algorithm_name="algorithmName",
        
                    # the properties below are optional
                    model_data_url="modelDataUrl"
                )]
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            task="task",
            validation_specification=sagemaker.CfnModelPackage.ValidationSpecificationProperty(
                validation_profiles=[sagemaker.CfnModelPackage.ValidationProfileProperty(
                    profile_name="profileName",
                    transform_job_definition=sagemaker.CfnModelPackage.TransformJobDefinitionProperty(
                        transform_input=sagemaker.CfnModelPackage.TransformInputProperty(
                            data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                                s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                                    s3_data_type="s3DataType",
                                    s3_uri="s3Uri"
                                )
                            ),
        
                            # the properties below are optional
                            compression_type="compressionType",
                            content_type="contentType",
                            split_type="splitType"
                        ),
                        transform_output=sagemaker.CfnModelPackage.TransformOutputProperty(
                            s3_output_path="s3OutputPath",
        
                            # the properties below are optional
                            accept="accept",
                            assemble_with="assembleWith",
                            kms_key_id="kmsKeyId"
                        ),
                        transform_resources=sagemaker.CfnModelPackage.TransformResourcesProperty(
                            instance_count=123,
                            instance_type="instanceType",
        
                            # the properties below are optional
                            volume_kms_key_id="volumeKmsKeyId"
                        ),
        
                        # the properties below are optional
                        batch_strategy="batchStrategy",
                        environment={
                            "environment_key": "environment"
                        },
                        max_concurrent_transforms=123,
                        max_payload_in_mb=123
                    )
                )],
                validation_role="validationRole"
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        additional_inference_specifications: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        additional_inference_specifications_to_add: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        approval_description: typing.Optional[builtins.str] = None,
        certify_for_marketplace: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        client_token: typing.Optional[builtins.str] = None,
        customer_metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
        domain: typing.Optional[builtins.str] = None,
        drift_check_baselines: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DriftCheckBaselinesProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.InferenceSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        last_modified_time: typing.Optional[builtins.str] = None,
        metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetadataPropertiesProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        model_approval_status: typing.Optional[builtins.str] = None,
        model_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelMetricsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        model_package_description: typing.Optional[builtins.str] = None,
        model_package_group_name: typing.Optional[builtins.str] = None,
        model_package_name: typing.Optional[builtins.str] = None,
        model_package_status_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelPackageStatusDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        model_package_version: typing.Optional[jsii.Number] = None,
        sample_payload_url: typing.Optional[builtins.str] = None,
        skip_model_validation: typing.Optional[builtins.str] = None,
        source_algorithm_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.SourceAlgorithmSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        task: typing.Optional[builtins.str] = None,
        validation_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ValidationSpecificationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param additional_inference_specifications: An array of additional Inference Specification objects.
        :param additional_inference_specifications_to_add: An array of additional Inference Specification objects to be added to the existing array. The total number of additional Inference Specification objects cannot exceed 15. Each additional Inference Specification object specifies artifacts based on this model package that can be used on inference endpoints. Generally used with SageMaker Neo to store the compiled artifacts.
        :param approval_description: A description provided when the model approval is set.
        :param certify_for_marketplace: Whether the model package is to be certified to be listed on AWS Marketplace. For information about listing model packages on AWS Marketplace, see `List Your Algorithm or Model Package on AWS Marketplace <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-list.html>`_ .
        :param client_token: A unique token that guarantees that the call to this API is idempotent.
        :param customer_metadata_properties: The metadata properties for the model package.
        :param domain: The machine learning domain of your model package and its components. Common machine learning domains include computer vision and natural language processing.
        :param drift_check_baselines: Represents the drift check baselines that can be used when the model monitor is set using the model package.
        :param inference_specification: Defines how to perform inference generation after a training job is run.
        :param last_modified_time: The last time the model package was modified.
        :param metadata_properties: Metadata properties of the tracking entity, trial, or trial component.
        :param model_approval_status: The approval status of the model. This can be one of the following values. - ``APPROVED`` - The model is approved - ``REJECTED`` - The model is rejected. - ``PENDING_MANUAL_APPROVAL`` - The model is waiting for manual approval.
        :param model_metrics: Metrics for the model.
        :param model_package_description: The description of the model package.
        :param model_package_group_name: The model group to which the model belongs.
        :param model_package_name: The name of the model.
        :param model_package_status_details: Specifies the validation and image scan statuses of the model package.
        :param model_package_version: The version number of a versioned model.
        :param sample_payload_url: The Amazon Simple Storage Service path where the sample payload are stored. This path must point to a single gzip compressed tar archive (.tar.gz suffix).
        :param skip_model_validation: Indicates if you want to skip model validation.
        :param source_algorithm_specification: A list of algorithms that were used to create a model package.
        :param tags: A list of the tags associated with the model package. For more information, see `Tagging AWS resources <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html>`_ in the *AWS General Reference Guide* .
        :param task: The machine learning task your model package accomplishes. Common machine learning tasks include object detection and image classification.
        :param validation_specification: Specifies batch transform jobs that SageMaker runs to validate your model package.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dd16b0de7cecf20a90c23d8d97096e81424f40b485b97eeee13cb706dbb76728)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelPackageProps(
            additional_inference_specifications=additional_inference_specifications,
            additional_inference_specifications_to_add=additional_inference_specifications_to_add,
            approval_description=approval_description,
            certify_for_marketplace=certify_for_marketplace,
            client_token=client_token,
            customer_metadata_properties=customer_metadata_properties,
            domain=domain,
            drift_check_baselines=drift_check_baselines,
            inference_specification=inference_specification,
            last_modified_time=last_modified_time,
            metadata_properties=metadata_properties,
            model_approval_status=model_approval_status,
            model_metrics=model_metrics,
            model_package_description=model_package_description,
            model_package_group_name=model_package_group_name,
            model_package_name=model_package_name,
            model_package_status_details=model_package_status_details,
            model_package_version=model_package_version,
            sample_payload_url=sample_payload_url,
            skip_model_validation=skip_model_validation,
            source_algorithm_specification=source_algorithm_specification,
            tags=tags,
            task=task,
            validation_specification=validation_specification,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8edbf8f079b2f57815bbba7490bc2f89d0b9856f086c31930ddf1b632d1fa269)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ea484fb5ecdd1ea0942bd80167d6e21953fa2e4466aac5d7d5918ab2dc5a5d07)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time that the model package was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrModelPackageArn")
    def attr_model_package_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the model package.

        :cloudformationAttribute: ModelPackageArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelPackageArn"))

    @builtins.property
    @jsii.member(jsii_name="attrModelPackageStatus")
    def attr_model_package_status(self) -> builtins.str:
        '''The status of the model package. This can be one of the following values.

        - ``PENDING`` - The model package creation is pending.
        - ``IN_PROGRESS`` - The model package is in the process of being created.
        - ``COMPLETED`` - The model package was successfully created.
        - ``FAILED`` - The model package creation failed.
        - ``DELETING`` - The model package is in the process of being deleted.

        :cloudformationAttribute: ModelPackageStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelPackageStatus"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="additionalInferenceSpecifications")
    def additional_inference_specifications(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]]:
        '''An array of additional Inference Specification objects.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]], jsii.get(self, "additionalInferenceSpecifications"))

    @additional_inference_specifications.setter
    def additional_inference_specifications(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__075221b403e1bd04dce9e65c7eef0a255fe8afac094e66b6cf7557829d830aec)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "additionalInferenceSpecifications", value)

    @builtins.property
    @jsii.member(jsii_name="additionalInferenceSpecificationsToAdd")
    def additional_inference_specifications_to_add(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]]:
        '''An array of additional Inference Specification objects to be added to the existing array.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]], jsii.get(self, "additionalInferenceSpecificationsToAdd"))

    @additional_inference_specifications_to_add.setter
    def additional_inference_specifications_to_add(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5b461d20ca494efd31c8128f746c5693a32b1ba1d8411791c563be38576aefb2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "additionalInferenceSpecificationsToAdd", value)

    @builtins.property
    @jsii.member(jsii_name="approvalDescription")
    def approval_description(self) -> typing.Optional[builtins.str]:
        '''A description provided when the model approval is set.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "approvalDescription"))

    @approval_description.setter
    def approval_description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2d8be72c53544ec18143c7d8b4e3f6561e9f4ae160853fe202af250b1fc24387)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "approvalDescription", value)

    @builtins.property
    @jsii.member(jsii_name="certifyForMarketplace")
    def certify_for_marketplace(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Whether the model package is to be certified to be listed on AWS Marketplace.'''
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], jsii.get(self, "certifyForMarketplace"))

    @certify_for_marketplace.setter
    def certify_for_marketplace(
        self,
        value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4d338a29b9223337cbcfb02828d950d011002db9b5fcb7c0b1c4795e3dbaa4cd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "certifyForMarketplace", value)

    @builtins.property
    @jsii.member(jsii_name="clientToken")
    def client_token(self) -> typing.Optional[builtins.str]:
        '''A unique token that guarantees that the call to this API is idempotent.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "clientToken"))

    @client_token.setter
    def client_token(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__89d64f853866a4eba94f202d8d78bafb1c880d82debc68888016437a91c64212)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "clientToken", value)

    @builtins.property
    @jsii.member(jsii_name="customerMetadataProperties")
    def customer_metadata_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
        '''The metadata properties for the model package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], jsii.get(self, "customerMetadataProperties"))

    @customer_metadata_properties.setter
    def customer_metadata_properties(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dd585f917b3f9ab436b00b5bec7661845c3d88a37a2a6e7b37c3e2c851fd45b4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "customerMetadataProperties", value)

    @builtins.property
    @jsii.member(jsii_name="domain")
    def domain(self) -> typing.Optional[builtins.str]:
        '''The machine learning domain of your model package and its components.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "domain"))

    @domain.setter
    def domain(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7ee3bcd6747b2923622b324c3674ca7c1cdbefda33a982aa0a7d7019f6918e46)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domain", value)

    @builtins.property
    @jsii.member(jsii_name="driftCheckBaselines")
    def drift_check_baselines(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckBaselinesProperty"]]:
        '''Represents the drift check baselines that can be used when the model monitor is set using the model package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckBaselinesProperty"]], jsii.get(self, "driftCheckBaselines"))

    @drift_check_baselines.setter
    def drift_check_baselines(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckBaselinesProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b96847febd4b1671c589f437d336ecb2b62d8dc82ef997b49d294d28a57d524e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "driftCheckBaselines", value)

    @builtins.property
    @jsii.member(jsii_name="inferenceSpecification")
    def inference_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.InferenceSpecificationProperty"]]:
        '''Defines how to perform inference generation after a training job is run.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.InferenceSpecificationProperty"]], jsii.get(self, "inferenceSpecification"))

    @inference_specification.setter
    def inference_specification(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.InferenceSpecificationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bd3be90e6308c9d1cc8b7932f6c1557f259e44b46f4b43050fd3923068d98e07)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "inferenceSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="lastModifiedTime")
    def last_modified_time(self) -> typing.Optional[builtins.str]:
        '''The last time the model package was modified.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "lastModifiedTime"))

    @last_modified_time.setter
    def last_modified_time(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__684bf78747598ba069c515ad2d890a67e1845d83ecbc1827b4f4e15098b5a74f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "lastModifiedTime", value)

    @builtins.property
    @jsii.member(jsii_name="metadataProperties")
    def metadata_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetadataPropertiesProperty"]]:
        '''Metadata properties of the tracking entity, trial, or trial component.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetadataPropertiesProperty"]], jsii.get(self, "metadataProperties"))

    @metadata_properties.setter
    def metadata_properties(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetadataPropertiesProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__17175b72aaf79878a46845fa43368d531e9d0b4752c90c98ddf2883583e4d9a4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "metadataProperties", value)

    @builtins.property
    @jsii.member(jsii_name="modelApprovalStatus")
    def model_approval_status(self) -> typing.Optional[builtins.str]:
        '''The approval status of the model.

        This can be one of the following values.
        '''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelApprovalStatus"))

    @model_approval_status.setter
    def model_approval_status(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b33fe284883372d31c13f9366c036f03c2ed537d9d266e483195c50194f9782f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelApprovalStatus", value)

    @builtins.property
    @jsii.member(jsii_name="modelMetrics")
    def model_metrics(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelMetricsProperty"]]:
        '''Metrics for the model.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelMetricsProperty"]], jsii.get(self, "modelMetrics"))

    @model_metrics.setter
    def model_metrics(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelMetricsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ec9081cd8dc5e445a8aa5c3fd36e3dc6e49087f8b99a90cc28b0f0a9251f0490)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelMetrics", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageDescription")
    def model_package_description(self) -> typing.Optional[builtins.str]:
        '''The description of the model package.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelPackageDescription"))

    @model_package_description.setter
    def model_package_description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bceb97f7255e1e849196348f2d7db19a40e666af4ab46aa2c7f885347bede597)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageDescription", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageGroupName")
    def model_package_group_name(self) -> typing.Optional[builtins.str]:
        '''The model group to which the model belongs.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelPackageGroupName"))

    @model_package_group_name.setter
    def model_package_group_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1edd4411cc4529355fa85c7cab74264665aa9c6599ebef1cc47cc870c99f2e9b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageGroupName", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageName")
    def model_package_name(self) -> typing.Optional[builtins.str]:
        '''The name of the model.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelPackageName"))

    @model_package_name.setter
    def model_package_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__502cacb26733d3c73379ab561efbd11238a4f0b7671c6fa037fe1b624a81b441)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageName", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageStatusDetails")
    def model_package_status_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageStatusDetailsProperty"]]:
        '''Specifies the validation and image scan statuses of the model package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageStatusDetailsProperty"]], jsii.get(self, "modelPackageStatusDetails"))

    @model_package_status_details.setter
    def model_package_status_details(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageStatusDetailsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c9b01787a5b5fcf7a24152f7fd4d7ac5b6854f8ad53b125ba9cbf58c5029c649)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageStatusDetails", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageVersion")
    def model_package_version(self) -> typing.Optional[jsii.Number]:
        '''The version number of a versioned model.'''
        return typing.cast(typing.Optional[jsii.Number], jsii.get(self, "modelPackageVersion"))

    @model_package_version.setter
    def model_package_version(self, value: typing.Optional[jsii.Number]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3a1fb6ad36914a71b782730295cf9731fbaa376719e3777571688ab057e2ac17)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageVersion", value)

    @builtins.property
    @jsii.member(jsii_name="samplePayloadUrl")
    def sample_payload_url(self) -> typing.Optional[builtins.str]:
        '''The Amazon Simple Storage Service path where the sample payload are stored.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "samplePayloadUrl"))

    @sample_payload_url.setter
    def sample_payload_url(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__362c1ab777eb981ffa248716181e5be9f735633741d191ec395bf5af29686d60)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "samplePayloadUrl", value)

    @builtins.property
    @jsii.member(jsii_name="skipModelValidation")
    def skip_model_validation(self) -> typing.Optional[builtins.str]:
        '''Indicates if you want to skip model validation.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "skipModelValidation"))

    @skip_model_validation.setter
    def skip_model_validation(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b52a517af33f00f15dfe417154cb22ae2bdafd5824fc8cb4317c1431bccf34e4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "skipModelValidation", value)

    @builtins.property
    @jsii.member(jsii_name="sourceAlgorithmSpecification")
    def source_algorithm_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.SourceAlgorithmSpecificationProperty"]]:
        '''A list of algorithms that were used to create a model package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.SourceAlgorithmSpecificationProperty"]], jsii.get(self, "sourceAlgorithmSpecification"))

    @source_algorithm_specification.setter
    def source_algorithm_specification(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.SourceAlgorithmSpecificationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6b338156669d00889f2939dd8fca9eb99030bb6dd511049c3272d4c3c76bc917)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "sourceAlgorithmSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of the tags associated with the model package.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__749212874a1c34f665c626fb22503a80ec4df93233dc2255b602d8c751c09ec2)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="task")
    def task(self) -> typing.Optional[builtins.str]:
        '''The machine learning task your model package accomplishes.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "task"))

    @task.setter
    def task(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5dbf6e1cc064ea9e19d1b079e934c67fa9a60b07813df3b1c715e5bedac7e5fe)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "task", value)

    @builtins.property
    @jsii.member(jsii_name="validationSpecification")
    def validation_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ValidationSpecificationProperty"]]:
        '''Specifies batch transform jobs that SageMaker runs to validate your model package.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ValidationSpecificationProperty"]], jsii.get(self, "validationSpecification"))

    @validation_specification.setter
    def validation_specification(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ValidationSpecificationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4e8178f30e36acade6c5e7d9f3341487df7db2bd7601045647bcc8b06675978c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "validationSpecification", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "containers": "containers",
            "name": "name",
            "description": "description",
            "supported_content_types": "supportedContentTypes",
            "supported_realtime_inference_instance_types": "supportedRealtimeInferenceInstanceTypes",
            "supported_response_mime_types": "supportedResponseMimeTypes",
            "supported_transform_instance_types": "supportedTransformInstanceTypes",
        },
    )
    class AdditionalInferenceSpecificationDefinitionProperty:
        def __init__(
            self,
            *,
            containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelPackageContainerDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]],
            name: builtins.str,
            description: typing.Optional[builtins.str] = None,
            supported_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            supported_realtime_inference_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            supported_response_mime_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            supported_transform_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''A structure of additional Inference Specification.

            Additional Inference Specification specifies details about inference jobs that can be run with models based on this model package

            :param containers: The Amazon ECR registry path of the Docker image that contains the inference code.
            :param name: A unique name to identify the additional inference specification. The name must be unique within the list of your additional inference specifications for a particular model package.
            :param description: A description of the additional Inference specification.
            :param supported_content_types: The supported MIME types for the input data.
            :param supported_realtime_inference_instance_types: A list of the instance types that are used to generate inferences in real-time.
            :param supported_response_mime_types: The supported MIME types for the output data.
            :param supported_transform_instance_types: A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # model_input: Any
                
                additional_inference_specification_definition_property = sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty(
                    containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                        image="image",
                
                        # the properties below are optional
                        container_hostname="containerHostname",
                        environment={
                            "environment_key": "environment"
                        },
                        framework="framework",
                        framework_version="frameworkVersion",
                        image_digest="imageDigest",
                        model_data_url="modelDataUrl",
                        model_input=model_input,
                        nearest_model_name="nearestModelName"
                    )],
                    name="name",
                
                    # the properties below are optional
                    description="description",
                    supported_content_types=["supportedContentTypes"],
                    supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                    supported_response_mime_types=["supportedResponseMimeTypes"],
                    supported_transform_instance_types=["supportedTransformInstanceTypes"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a4e54ce850fcef1c7045aaf25b173c9d98c47f74292ef85b6da006e1cb34f159)
                check_type(argname="argument containers", value=containers, expected_type=type_hints["containers"])
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument description", value=description, expected_type=type_hints["description"])
                check_type(argname="argument supported_content_types", value=supported_content_types, expected_type=type_hints["supported_content_types"])
                check_type(argname="argument supported_realtime_inference_instance_types", value=supported_realtime_inference_instance_types, expected_type=type_hints["supported_realtime_inference_instance_types"])
                check_type(argname="argument supported_response_mime_types", value=supported_response_mime_types, expected_type=type_hints["supported_response_mime_types"])
                check_type(argname="argument supported_transform_instance_types", value=supported_transform_instance_types, expected_type=type_hints["supported_transform_instance_types"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "containers": containers,
                "name": name,
            }
            if description is not None:
                self._values["description"] = description
            if supported_content_types is not None:
                self._values["supported_content_types"] = supported_content_types
            if supported_realtime_inference_instance_types is not None:
                self._values["supported_realtime_inference_instance_types"] = supported_realtime_inference_instance_types
            if supported_response_mime_types is not None:
                self._values["supported_response_mime_types"] = supported_response_mime_types
            if supported_transform_instance_types is not None:
                self._values["supported_transform_instance_types"] = supported_transform_instance_types

        @builtins.property
        def containers(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageContainerDefinitionProperty"]]]:
            '''The Amazon ECR registry path of the Docker image that contains the inference code.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-containers
            '''
            result = self._values.get("containers")
            assert result is not None, "Required property 'containers' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageContainerDefinitionProperty"]]], result)

        @builtins.property
        def name(self) -> builtins.str:
            '''A unique name to identify the additional inference specification.

            The name must be unique within the list of your additional inference specifications for a particular model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def description(self) -> typing.Optional[builtins.str]:
            '''A description of the additional Inference specification.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-description
            '''
            result = self._values.get("description")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def supported_content_types(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The supported MIME types for the input data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedcontenttypes
            '''
            result = self._values.get("supported_content_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def supported_realtime_inference_instance_types(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the instance types that are used to generate inferences in real-time.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedrealtimeinferenceinstancetypes
            '''
            result = self._values.get("supported_realtime_inference_instance_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def supported_response_mime_types(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''The supported MIME types for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedresponsemimetypes
            '''
            result = self._values.get("supported_response_mime_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def supported_transform_instance_types(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-additionalinferencespecificationdefinition.html#cfn-sagemaker-modelpackage-additionalinferencespecificationdefinition-supportedtransforminstancetypes
            '''
            result = self._values.get("supported_transform_instance_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "AdditionalInferenceSpecificationDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.BiasProperty",
        jsii_struct_bases=[],
        name_mapping={
            "post_training_report": "postTrainingReport",
            "pre_training_report": "preTrainingReport",
            "report": "report",
        },
    )
    class BiasProperty:
        def __init__(
            self,
            *,
            post_training_report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            pre_training_report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Contains bias metrics for a model.

            :param post_training_report: The post-training bias report for a model.
            :param pre_training_report: The pre-training bias report for a model.
            :param report: The bias report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-bias.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                bias_property = sagemaker.CfnModelPackage.BiasProperty(
                    post_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    pre_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__07b438066510c291923fe47937fcf82d4bd967e789cb9641271bc715eb76ab40)
                check_type(argname="argument post_training_report", value=post_training_report, expected_type=type_hints["post_training_report"])
                check_type(argname="argument pre_training_report", value=pre_training_report, expected_type=type_hints["pre_training_report"])
                check_type(argname="argument report", value=report, expected_type=type_hints["report"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if post_training_report is not None:
                self._values["post_training_report"] = post_training_report
            if pre_training_report is not None:
                self._values["pre_training_report"] = pre_training_report
            if report is not None:
                self._values["report"] = report

        @builtins.property
        def post_training_report(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The post-training bias report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-bias.html#cfn-sagemaker-modelpackage-bias-posttrainingreport
            '''
            result = self._values.get("post_training_report")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def pre_training_report(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The pre-training bias report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-bias.html#cfn-sagemaker-modelpackage-bias-pretrainingreport
            '''
            result = self._values.get("pre_training_report")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def report(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The bias report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-bias.html#cfn-sagemaker-modelpackage-bias-report
            '''
            result = self._values.get("report")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BiasProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DataSourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_data_source": "s3DataSource"},
    )
    class DataSourceProperty:
        def __init__(
            self,
            *,
            s3_data_source: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.S3DataSourceProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Describes the location of the channel data.

            :param s3_data_source: The S3 location of the data source that is associated with a channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-datasource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                data_source_property = sagemaker.CfnModelPackage.DataSourceProperty(
                    s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                        s3_data_type="s3DataType",
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8cc0e7c2f16e8c16fe23b47279a3995936f2f5566926c6f3cfb3e0ecfc7c2e16)
                check_type(argname="argument s3_data_source", value=s3_data_source, expected_type=type_hints["s3_data_source"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_data_source": s3_data_source,
            }

        @builtins.property
        def s3_data_source(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.S3DataSourceProperty"]:
            '''The S3 location of the data source that is associated with a channel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-datasource.html#cfn-sagemaker-modelpackage-datasource-s3datasource
            '''
            result = self._values.get("s3_data_source")
            assert result is not None, "Required property 's3_data_source' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.S3DataSourceProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DataSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DriftCheckBaselinesProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bias": "bias",
            "explainability": "explainability",
            "model_data_quality": "modelDataQuality",
            "model_quality": "modelQuality",
        },
    )
    class DriftCheckBaselinesProperty:
        def __init__(
            self,
            *,
            bias: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DriftCheckBiasProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            explainability: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DriftCheckExplainabilityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_data_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DriftCheckModelDataQualityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DriftCheckModelQualityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Represents the drift check baselines that can be used when the model monitor is set using the model package.

            :param bias: Represents the drift check bias baselines that can be used when the model monitor is set using the model package.
            :param explainability: Represents the drift check explainability baselines that can be used when the model monitor is set using the model package.
            :param model_data_quality: Represents the drift check model data quality baselines that can be used when the model monitor is set using the model package.
            :param model_quality: Represents the drift check model quality baselines that can be used when the model monitor is set using the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbaselines.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                drift_check_baselines_property = sagemaker.CfnModelPackage.DriftCheckBaselinesProperty(
                    bias=sagemaker.CfnModelPackage.DriftCheckBiasProperty(
                        config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest",
                            content_type="contentType"
                        ),
                        post_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        pre_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    explainability=sagemaker.CfnModelPackage.DriftCheckExplainabilityProperty(
                        config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest",
                            content_type="contentType"
                        ),
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_data_quality=sagemaker.CfnModelPackage.DriftCheckModelDataQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_quality=sagemaker.CfnModelPackage.DriftCheckModelQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__57f2b3022a8539f928307f101ccf71acb9c23242064cdf4d51d77cf68bf22c10)
                check_type(argname="argument bias", value=bias, expected_type=type_hints["bias"])
                check_type(argname="argument explainability", value=explainability, expected_type=type_hints["explainability"])
                check_type(argname="argument model_data_quality", value=model_data_quality, expected_type=type_hints["model_data_quality"])
                check_type(argname="argument model_quality", value=model_quality, expected_type=type_hints["model_quality"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bias is not None:
                self._values["bias"] = bias
            if explainability is not None:
                self._values["explainability"] = explainability
            if model_data_quality is not None:
                self._values["model_data_quality"] = model_data_quality
            if model_quality is not None:
                self._values["model_quality"] = model_quality

        @builtins.property
        def bias(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckBiasProperty"]]:
            '''Represents the drift check bias baselines that can be used when the model monitor is set using the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbaselines.html#cfn-sagemaker-modelpackage-driftcheckbaselines-bias
            '''
            result = self._values.get("bias")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckBiasProperty"]], result)

        @builtins.property
        def explainability(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckExplainabilityProperty"]]:
            '''Represents the drift check explainability baselines that can be used when the model monitor is set using the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbaselines.html#cfn-sagemaker-modelpackage-driftcheckbaselines-explainability
            '''
            result = self._values.get("explainability")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckExplainabilityProperty"]], result)

        @builtins.property
        def model_data_quality(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckModelDataQualityProperty"]]:
            '''Represents the drift check model data quality baselines that can be used when the model monitor is set using the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbaselines.html#cfn-sagemaker-modelpackage-driftcheckbaselines-modeldataquality
            '''
            result = self._values.get("model_data_quality")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckModelDataQualityProperty"]], result)

        @builtins.property
        def model_quality(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckModelQualityProperty"]]:
            '''Represents the drift check model quality baselines that can be used when the model monitor is set using the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbaselines.html#cfn-sagemaker-modelpackage-driftcheckbaselines-modelquality
            '''
            result = self._values.get("model_quality")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DriftCheckModelQualityProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DriftCheckBaselinesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DriftCheckBiasProperty",
        jsii_struct_bases=[],
        name_mapping={
            "config_file": "configFile",
            "post_training_constraints": "postTrainingConstraints",
            "pre_training_constraints": "preTrainingConstraints",
        },
    )
    class DriftCheckBiasProperty:
        def __init__(
            self,
            *,
            config_file: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.FileSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            post_training_constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            pre_training_constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Represents the drift check bias baselines that can be used when the model monitor is set using the model package.

            :param config_file: The bias config file for a model.
            :param post_training_constraints: The post-training constraints.
            :param pre_training_constraints: The pre-training constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbias.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                drift_check_bias_property = sagemaker.CfnModelPackage.DriftCheckBiasProperty(
                    config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest",
                        content_type="contentType"
                    ),
                    post_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    pre_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4b8a641c6d4e4621ce311e102952307a3b8049fca60bbcfadbe2069f92df1b84)
                check_type(argname="argument config_file", value=config_file, expected_type=type_hints["config_file"])
                check_type(argname="argument post_training_constraints", value=post_training_constraints, expected_type=type_hints["post_training_constraints"])
                check_type(argname="argument pre_training_constraints", value=pre_training_constraints, expected_type=type_hints["pre_training_constraints"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if config_file is not None:
                self._values["config_file"] = config_file
            if post_training_constraints is not None:
                self._values["post_training_constraints"] = post_training_constraints
            if pre_training_constraints is not None:
                self._values["pre_training_constraints"] = pre_training_constraints

        @builtins.property
        def config_file(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.FileSourceProperty"]]:
            '''The bias config file for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbias.html#cfn-sagemaker-modelpackage-driftcheckbias-configfile
            '''
            result = self._values.get("config_file")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.FileSourceProperty"]], result)

        @builtins.property
        def post_training_constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The post-training constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbias.html#cfn-sagemaker-modelpackage-driftcheckbias-posttrainingconstraints
            '''
            result = self._values.get("post_training_constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def pre_training_constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The pre-training constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckbias.html#cfn-sagemaker-modelpackage-driftcheckbias-pretrainingconstraints
            '''
            result = self._values.get("pre_training_constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DriftCheckBiasProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DriftCheckExplainabilityProperty",
        jsii_struct_bases=[],
        name_mapping={"config_file": "configFile", "constraints": "constraints"},
    )
    class DriftCheckExplainabilityProperty:
        def __init__(
            self,
            *,
            config_file: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.FileSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Represents the drift check explainability baselines that can be used when the model monitor is set using the model package.

            :param config_file: The explainability config file for the model.
            :param constraints: The drift check explainability constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckexplainability.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                drift_check_explainability_property = sagemaker.CfnModelPackage.DriftCheckExplainabilityProperty(
                    config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest",
                        content_type="contentType"
                    ),
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__99e35c0ba2d8f1981bc57cb471e309f2b088456f827360ae98c87c065c6d5cbd)
                check_type(argname="argument config_file", value=config_file, expected_type=type_hints["config_file"])
                check_type(argname="argument constraints", value=constraints, expected_type=type_hints["constraints"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if config_file is not None:
                self._values["config_file"] = config_file
            if constraints is not None:
                self._values["constraints"] = constraints

        @builtins.property
        def config_file(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.FileSourceProperty"]]:
            '''The explainability config file for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckexplainability.html#cfn-sagemaker-modelpackage-driftcheckexplainability-configfile
            '''
            result = self._values.get("config_file")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.FileSourceProperty"]], result)

        @builtins.property
        def constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The drift check explainability constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckexplainability.html#cfn-sagemaker-modelpackage-driftcheckexplainability-constraints
            '''
            result = self._values.get("constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DriftCheckExplainabilityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DriftCheckModelDataQualityProperty",
        jsii_struct_bases=[],
        name_mapping={"constraints": "constraints", "statistics": "statistics"},
    )
    class DriftCheckModelDataQualityProperty:
        def __init__(
            self,
            *,
            constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Represents the drift check data quality baselines that can be used when the model monitor is set using the model package.

            :param constraints: The drift check model data quality constraints.
            :param statistics: The drift check model data quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodeldataquality.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                drift_check_model_data_quality_property = sagemaker.CfnModelPackage.DriftCheckModelDataQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e365cd64dca91817a43deaf063c804eb4ba2ed277fa880da49581e3544ecc022)
                check_type(argname="argument constraints", value=constraints, expected_type=type_hints["constraints"])
                check_type(argname="argument statistics", value=statistics, expected_type=type_hints["statistics"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constraints is not None:
                self._values["constraints"] = constraints
            if statistics is not None:
                self._values["statistics"] = statistics

        @builtins.property
        def constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The drift check model data quality constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodeldataquality.html#cfn-sagemaker-modelpackage-driftcheckmodeldataquality-constraints
            '''
            result = self._values.get("constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def statistics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The drift check model data quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodeldataquality.html#cfn-sagemaker-modelpackage-driftcheckmodeldataquality-statistics
            '''
            result = self._values.get("statistics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DriftCheckModelDataQualityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.DriftCheckModelQualityProperty",
        jsii_struct_bases=[],
        name_mapping={"constraints": "constraints", "statistics": "statistics"},
    )
    class DriftCheckModelQualityProperty:
        def __init__(
            self,
            *,
            constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Represents the drift check model quality baselines that can be used when the model monitor is set using the model package.

            :param constraints: The drift check model quality constraints.
            :param statistics: The drift check model quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodelquality.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                drift_check_model_quality_property = sagemaker.CfnModelPackage.DriftCheckModelQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fb79072e66ead1df334e93f158b5c6de19458bf6f48b7750ca7fff90851c7342)
                check_type(argname="argument constraints", value=constraints, expected_type=type_hints["constraints"])
                check_type(argname="argument statistics", value=statistics, expected_type=type_hints["statistics"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constraints is not None:
                self._values["constraints"] = constraints
            if statistics is not None:
                self._values["statistics"] = statistics

        @builtins.property
        def constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The drift check model quality constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodelquality.html#cfn-sagemaker-modelpackage-driftcheckmodelquality-constraints
            '''
            result = self._values.get("constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def statistics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The drift check model quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-driftcheckmodelquality.html#cfn-sagemaker-modelpackage-driftcheckmodelquality-statistics
            '''
            result = self._values.get("statistics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DriftCheckModelQualityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ExplainabilityProperty",
        jsii_struct_bases=[],
        name_mapping={"report": "report"},
    )
    class ExplainabilityProperty:
        def __init__(
            self,
            *,
            report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Contains explainability metrics for a model.

            :param report: The explainability report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-explainability.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                explainability_property = sagemaker.CfnModelPackage.ExplainabilityProperty(
                    report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2b51b8e13aac7ce66f0d1b576a1ceffce4b0be2ec72798403c5fee94531748f8)
                check_type(argname="argument report", value=report, expected_type=type_hints["report"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if report is not None:
                self._values["report"] = report

        @builtins.property
        def report(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''The explainability report for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-explainability.html#cfn-sagemaker-modelpackage-explainability-report
            '''
            result = self._values.get("report")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ExplainabilityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.FileSourceProperty",
        jsii_struct_bases=[],
        name_mapping={
            "s3_uri": "s3Uri",
            "content_digest": "contentDigest",
            "content_type": "contentType",
        },
    )
    class FileSourceProperty:
        def __init__(
            self,
            *,
            s3_uri: builtins.str,
            content_digest: typing.Optional[builtins.str] = None,
            content_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Contains details regarding the file source.

            :param s3_uri: The Amazon S3 URI for the file source.
            :param content_digest: The digest of the file source.
            :param content_type: The type of content stored in the file source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-filesource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                file_source_property = sagemaker.CfnModelPackage.FileSourceProperty(
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    content_digest="contentDigest",
                    content_type="contentType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__db7763cb6b9815303d198e89e9aeadcab55ce59532300264f5c3dc766041fc78)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument content_digest", value=content_digest, expected_type=type_hints["content_digest"])
                check_type(argname="argument content_type", value=content_type, expected_type=type_hints["content_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_uri": s3_uri,
            }
            if content_digest is not None:
                self._values["content_digest"] = content_digest
            if content_type is not None:
                self._values["content_type"] = content_type

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''The Amazon S3 URI for the file source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-filesource.html#cfn-sagemaker-modelpackage-filesource-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def content_digest(self) -> typing.Optional[builtins.str]:
            '''The digest of the file source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-filesource.html#cfn-sagemaker-modelpackage-filesource-contentdigest
            '''
            result = self._values.get("content_digest")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def content_type(self) -> typing.Optional[builtins.str]:
            '''The type of content stored in the file source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-filesource.html#cfn-sagemaker-modelpackage-filesource-contenttype
            '''
            result = self._values.get("content_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "FileSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.InferenceSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "containers": "containers",
            "supported_content_types": "supportedContentTypes",
            "supported_response_mime_types": "supportedResponseMimeTypes",
            "supported_realtime_inference_instance_types": "supportedRealtimeInferenceInstanceTypes",
            "supported_transform_instance_types": "supportedTransformInstanceTypes",
        },
    )
    class InferenceSpecificationProperty:
        def __init__(
            self,
            *,
            containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelPackageContainerDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]],
            supported_content_types: typing.Sequence[builtins.str],
            supported_response_mime_types: typing.Sequence[builtins.str],
            supported_realtime_inference_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
            supported_transform_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''Defines how to perform inference generation after a training job is run.

            :param containers: The Amazon ECR registry path of the Docker image that contains the inference code.
            :param supported_content_types: The supported MIME types for the input data.
            :param supported_response_mime_types: The supported MIME types for the output data.
            :param supported_realtime_inference_instance_types: A list of the instance types that are used to generate inferences in real-time. This parameter is required for unversioned models, and optional for versioned models.
            :param supported_transform_instance_types: A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed. This parameter is required for unversioned models, and optional for versioned models.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # model_input: Any
                
                inference_specification_property = sagemaker.CfnModelPackage.InferenceSpecificationProperty(
                    containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                        image="image",
                
                        # the properties below are optional
                        container_hostname="containerHostname",
                        environment={
                            "environment_key": "environment"
                        },
                        framework="framework",
                        framework_version="frameworkVersion",
                        image_digest="imageDigest",
                        model_data_url="modelDataUrl",
                        model_input=model_input,
                        nearest_model_name="nearestModelName"
                    )],
                    supported_content_types=["supportedContentTypes"],
                    supported_response_mime_types=["supportedResponseMimeTypes"],
                
                    # the properties below are optional
                    supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                    supported_transform_instance_types=["supportedTransformInstanceTypes"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a5782aaf7ec3b905b60c1ab277de71c6af3306c86a75621889fb2cedcdf3f421)
                check_type(argname="argument containers", value=containers, expected_type=type_hints["containers"])
                check_type(argname="argument supported_content_types", value=supported_content_types, expected_type=type_hints["supported_content_types"])
                check_type(argname="argument supported_response_mime_types", value=supported_response_mime_types, expected_type=type_hints["supported_response_mime_types"])
                check_type(argname="argument supported_realtime_inference_instance_types", value=supported_realtime_inference_instance_types, expected_type=type_hints["supported_realtime_inference_instance_types"])
                check_type(argname="argument supported_transform_instance_types", value=supported_transform_instance_types, expected_type=type_hints["supported_transform_instance_types"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "containers": containers,
                "supported_content_types": supported_content_types,
                "supported_response_mime_types": supported_response_mime_types,
            }
            if supported_realtime_inference_instance_types is not None:
                self._values["supported_realtime_inference_instance_types"] = supported_realtime_inference_instance_types
            if supported_transform_instance_types is not None:
                self._values["supported_transform_instance_types"] = supported_transform_instance_types

        @builtins.property
        def containers(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageContainerDefinitionProperty"]]]:
            '''The Amazon ECR registry path of the Docker image that contains the inference code.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-containers
            '''
            result = self._values.get("containers")
            assert result is not None, "Required property 'containers' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageContainerDefinitionProperty"]]], result)

        @builtins.property
        def supported_content_types(self) -> typing.List[builtins.str]:
            '''The supported MIME types for the input data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedcontenttypes
            '''
            result = self._values.get("supported_content_types")
            assert result is not None, "Required property 'supported_content_types' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def supported_response_mime_types(self) -> typing.List[builtins.str]:
            '''The supported MIME types for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedresponsemimetypes
            '''
            result = self._values.get("supported_response_mime_types")
            assert result is not None, "Required property 'supported_response_mime_types' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def supported_realtime_inference_instance_types(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the instance types that are used to generate inferences in real-time.

            This parameter is required for unversioned models, and optional for versioned models.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedrealtimeinferenceinstancetypes
            '''
            result = self._values.get("supported_realtime_inference_instance_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def supported_transform_instance_types(
            self,
        ) -> typing.Optional[typing.List[builtins.str]]:
            '''A list of the instance types on which a transformation job can be run or on which an endpoint can be deployed.

            This parameter is required for unversioned models, and optional for versioned models.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-inferencespecification.html#cfn-sagemaker-modelpackage-inferencespecification-supportedtransforminstancetypes
            '''
            result = self._values.get("supported_transform_instance_types")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InferenceSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.MetadataPropertiesProperty",
        jsii_struct_bases=[],
        name_mapping={
            "commit_id": "commitId",
            "generated_by": "generatedBy",
            "project_id": "projectId",
            "repository": "repository",
        },
    )
    class MetadataPropertiesProperty:
        def __init__(
            self,
            *,
            commit_id: typing.Optional[builtins.str] = None,
            generated_by: typing.Optional[builtins.str] = None,
            project_id: typing.Optional[builtins.str] = None,
            repository: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Metadata properties of the tracking entity, trial, or trial component.

            :param commit_id: The commit ID.
            :param generated_by: The entity this entity was generated by.
            :param project_id: The project ID.
            :param repository: The repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metadataproperties.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                metadata_properties_property = sagemaker.CfnModelPackage.MetadataPropertiesProperty(
                    commit_id="commitId",
                    generated_by="generatedBy",
                    project_id="projectId",
                    repository="repository"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__10e5e7dccf00943bacebd630ff15f15f68b73b25f626a3a10fdb6970b2323a29)
                check_type(argname="argument commit_id", value=commit_id, expected_type=type_hints["commit_id"])
                check_type(argname="argument generated_by", value=generated_by, expected_type=type_hints["generated_by"])
                check_type(argname="argument project_id", value=project_id, expected_type=type_hints["project_id"])
                check_type(argname="argument repository", value=repository, expected_type=type_hints["repository"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if commit_id is not None:
                self._values["commit_id"] = commit_id
            if generated_by is not None:
                self._values["generated_by"] = generated_by
            if project_id is not None:
                self._values["project_id"] = project_id
            if repository is not None:
                self._values["repository"] = repository

        @builtins.property
        def commit_id(self) -> typing.Optional[builtins.str]:
            '''The commit ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metadataproperties.html#cfn-sagemaker-modelpackage-metadataproperties-commitid
            '''
            result = self._values.get("commit_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def generated_by(self) -> typing.Optional[builtins.str]:
            '''The entity this entity was generated by.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metadataproperties.html#cfn-sagemaker-modelpackage-metadataproperties-generatedby
            '''
            result = self._values.get("generated_by")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def project_id(self) -> typing.Optional[builtins.str]:
            '''The project ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metadataproperties.html#cfn-sagemaker-modelpackage-metadataproperties-projectid
            '''
            result = self._values.get("project_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def repository(self) -> typing.Optional[builtins.str]:
            '''The repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metadataproperties.html#cfn-sagemaker-modelpackage-metadataproperties-repository
            '''
            result = self._values.get("repository")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MetadataPropertiesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.MetricsSourceProperty",
        jsii_struct_bases=[],
        name_mapping={
            "content_type": "contentType",
            "s3_uri": "s3Uri",
            "content_digest": "contentDigest",
        },
    )
    class MetricsSourceProperty:
        def __init__(
            self,
            *,
            content_type: builtins.str,
            s3_uri: builtins.str,
            content_digest: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Details about the metrics source.

            :param content_type: The metric source content type.
            :param s3_uri: The S3 URI for the metrics source.
            :param content_digest: The hash key used for the metrics source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metricssource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                metrics_source_property = sagemaker.CfnModelPackage.MetricsSourceProperty(
                    content_type="contentType",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    content_digest="contentDigest"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9d8c5e1ca778f0bd848c7c4565bd984ba948e6f822a430874a2a9194af1fef79)
                check_type(argname="argument content_type", value=content_type, expected_type=type_hints["content_type"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument content_digest", value=content_digest, expected_type=type_hints["content_digest"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "content_type": content_type,
                "s3_uri": s3_uri,
            }
            if content_digest is not None:
                self._values["content_digest"] = content_digest

        @builtins.property
        def content_type(self) -> builtins.str:
            '''The metric source content type.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metricssource.html#cfn-sagemaker-modelpackage-metricssource-contenttype
            '''
            result = self._values.get("content_type")
            assert result is not None, "Required property 'content_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''The S3 URI for the metrics source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metricssource.html#cfn-sagemaker-modelpackage-metricssource-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def content_digest(self) -> typing.Optional[builtins.str]:
            '''The hash key used for the metrics source.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-metricssource.html#cfn-sagemaker-modelpackage-metricssource-contentdigest
            '''
            result = self._values.get("content_digest")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MetricsSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelDataQualityProperty",
        jsii_struct_bases=[],
        name_mapping={"constraints": "constraints", "statistics": "statistics"},
    )
    class ModelDataQualityProperty:
        def __init__(
            self,
            *,
            constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Data quality constraints and statistics for a model.

            :param constraints: Data quality constraints for a model.
            :param statistics: Data quality statistics for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modeldataquality.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_data_quality_property = sagemaker.CfnModelPackage.ModelDataQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3a6d9495df9d7becc3db8b76b810b451cce56bcf5a3b857f132acc8df35a20ea)
                check_type(argname="argument constraints", value=constraints, expected_type=type_hints["constraints"])
                check_type(argname="argument statistics", value=statistics, expected_type=type_hints["statistics"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constraints is not None:
                self._values["constraints"] = constraints
            if statistics is not None:
                self._values["statistics"] = statistics

        @builtins.property
        def constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''Data quality constraints for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modeldataquality.html#cfn-sagemaker-modelpackage-modeldataquality-constraints
            '''
            result = self._values.get("constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def statistics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''Data quality statistics for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modeldataquality.html#cfn-sagemaker-modelpackage-modeldataquality-statistics
            '''
            result = self._values.get("statistics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelDataQualityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelInputProperty",
        jsii_struct_bases=[],
        name_mapping={"data_input_config": "dataInputConfig"},
    )
    class ModelInputProperty:
        def __init__(self, *, data_input_config: builtins.str) -> None:
            '''Input object for the model.

            :param data_input_config: The input configuration object for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_input_property = sagemaker.CfnModelPackage.ModelInputProperty(
                    data_input_config="dataInputConfig"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__dbc6728c5d1c7a15254c2bd668450b7eaeb7b8c388c8f9b330e053c407c25e01)
                check_type(argname="argument data_input_config", value=data_input_config, expected_type=type_hints["data_input_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_input_config": data_input_config,
            }

        @builtins.property
        def data_input_config(self) -> builtins.str:
            '''The input configuration object for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelinput.html#cfn-sagemaker-modelpackage-modelinput-datainputconfig
            '''
            result = self._values.get("data_input_config")
            assert result is not None, "Required property 'data_input_config' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelMetricsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bias": "bias",
            "explainability": "explainability",
            "model_data_quality": "modelDataQuality",
            "model_quality": "modelQuality",
        },
    )
    class ModelMetricsProperty:
        def __init__(
            self,
            *,
            bias: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.BiasProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            explainability: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ExplainabilityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_data_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelDataQualityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            model_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelQualityProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Contains metrics captured from a model.

            :param bias: Metrics that measure bais in a model.
            :param explainability: Metrics that help explain a model.
            :param model_data_quality: Metrics that measure the quality of the input data for a model.
            :param model_quality: Metrics that measure the quality of a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_metrics_property = sagemaker.CfnModelPackage.ModelMetricsProperty(
                    bias=sagemaker.CfnModelPackage.BiasProperty(
                        post_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        pre_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    explainability=sagemaker.CfnModelPackage.ExplainabilityProperty(
                        report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_data_quality=sagemaker.CfnModelPackage.ModelDataQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_quality=sagemaker.CfnModelPackage.ModelQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2a4038e64653047e711218c6a79f61b3488bf0ea3ec72e295b93aca185bfd2bd)
                check_type(argname="argument bias", value=bias, expected_type=type_hints["bias"])
                check_type(argname="argument explainability", value=explainability, expected_type=type_hints["explainability"])
                check_type(argname="argument model_data_quality", value=model_data_quality, expected_type=type_hints["model_data_quality"])
                check_type(argname="argument model_quality", value=model_quality, expected_type=type_hints["model_quality"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if bias is not None:
                self._values["bias"] = bias
            if explainability is not None:
                self._values["explainability"] = explainability
            if model_data_quality is not None:
                self._values["model_data_quality"] = model_data_quality
            if model_quality is not None:
                self._values["model_quality"] = model_quality

        @builtins.property
        def bias(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.BiasProperty"]]:
            '''Metrics that measure bais in a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html#cfn-sagemaker-modelpackage-modelmetrics-bias
            '''
            result = self._values.get("bias")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.BiasProperty"]], result)

        @builtins.property
        def explainability(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ExplainabilityProperty"]]:
            '''Metrics that help explain a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html#cfn-sagemaker-modelpackage-modelmetrics-explainability
            '''
            result = self._values.get("explainability")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ExplainabilityProperty"]], result)

        @builtins.property
        def model_data_quality(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelDataQualityProperty"]]:
            '''Metrics that measure the quality of the input data for a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html#cfn-sagemaker-modelpackage-modelmetrics-modeldataquality
            '''
            result = self._values.get("model_data_quality")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelDataQualityProperty"]], result)

        @builtins.property
        def model_quality(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelQualityProperty"]]:
            '''Metrics that measure the quality of a model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelmetrics.html#cfn-sagemaker-modelpackage-modelmetrics-modelquality
            '''
            result = self._values.get("model_quality")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelQualityProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelMetricsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "image": "image",
            "container_hostname": "containerHostname",
            "environment": "environment",
            "framework": "framework",
            "framework_version": "frameworkVersion",
            "image_digest": "imageDigest",
            "model_data_url": "modelDataUrl",
            "model_input": "modelInput",
            "nearest_model_name": "nearestModelName",
        },
    )
    class ModelPackageContainerDefinitionProperty:
        def __init__(
            self,
            *,
            image: builtins.str,
            container_hostname: typing.Optional[builtins.str] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            framework: typing.Optional[builtins.str] = None,
            framework_version: typing.Optional[builtins.str] = None,
            image_digest: typing.Optional[builtins.str] = None,
            model_data_url: typing.Optional[builtins.str] = None,
            model_input: typing.Any = None,
            nearest_model_name: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Describes the Docker container for the model package.

            :param image: The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored. If you are using your own custom algorithm instead of an algorithm provided by SageMaker, the inference code must meet SageMaker requirements. SageMaker supports both ``registry/repository[:tag]`` and ``registry/repository[@digest]`` image path formats. For more information, see `Using Your Own Algorithms with Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html>`_ .
            :param container_hostname: The DNS host name for the Docker container.
            :param environment: The environment variables to set in the Docker container. Each key and value in the ``Environment`` string to string map can have length of up to 1024. We support up to 16 entries in the map.
            :param framework: The machine learning framework of the model package container image.
            :param framework_version: The framework version of the Model Package Container Image.
            :param image_digest: An MD5 hash of the training algorithm that identifies the Docker image used for training.
            :param model_data_url: The Amazon S3 path where the model artifacts, which result from model training, are stored. This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix). .. epigraph:: The model artifacts must be in an S3 bucket that is in the same region as the model package.
            :param model_input: A structure with Model Input details.
            :param nearest_model_name: The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model. You can find a list of benchmarked models by calling ``ListModelMetadata`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                # model_input: Any
                
                model_package_container_definition_property = sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                    image="image",
                
                    # the properties below are optional
                    container_hostname="containerHostname",
                    environment={
                        "environment_key": "environment"
                    },
                    framework="framework",
                    framework_version="frameworkVersion",
                    image_digest="imageDigest",
                    model_data_url="modelDataUrl",
                    model_input=model_input,
                    nearest_model_name="nearestModelName"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__863ee4313d8978810e469a123f1fc9cf3a202aa7d038afc51cd8fa6100b9b505)
                check_type(argname="argument image", value=image, expected_type=type_hints["image"])
                check_type(argname="argument container_hostname", value=container_hostname, expected_type=type_hints["container_hostname"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument framework", value=framework, expected_type=type_hints["framework"])
                check_type(argname="argument framework_version", value=framework_version, expected_type=type_hints["framework_version"])
                check_type(argname="argument image_digest", value=image_digest, expected_type=type_hints["image_digest"])
                check_type(argname="argument model_data_url", value=model_data_url, expected_type=type_hints["model_data_url"])
                check_type(argname="argument model_input", value=model_input, expected_type=type_hints["model_input"])
                check_type(argname="argument nearest_model_name", value=nearest_model_name, expected_type=type_hints["nearest_model_name"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "image": image,
            }
            if container_hostname is not None:
                self._values["container_hostname"] = container_hostname
            if environment is not None:
                self._values["environment"] = environment
            if framework is not None:
                self._values["framework"] = framework
            if framework_version is not None:
                self._values["framework_version"] = framework_version
            if image_digest is not None:
                self._values["image_digest"] = image_digest
            if model_data_url is not None:
                self._values["model_data_url"] = model_data_url
            if model_input is not None:
                self._values["model_input"] = model_input
            if nearest_model_name is not None:
                self._values["nearest_model_name"] = nearest_model_name

        @builtins.property
        def image(self) -> builtins.str:
            '''The Amazon EC2 Container Registry (Amazon ECR) path where inference code is stored.

            If you are using your own custom algorithm instead of an algorithm provided by SageMaker, the inference code must meet SageMaker requirements. SageMaker supports both ``registry/repository[:tag]`` and ``registry/repository[@digest]`` image path formats. For more information, see `Using Your Own Algorithms with Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-image
            '''
            result = self._values.get("image")
            assert result is not None, "Required property 'image' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def container_hostname(self) -> typing.Optional[builtins.str]:
            '''The DNS host name for the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-containerhostname
            '''
            result = self._values.get("container_hostname")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''The environment variables to set in the Docker container.

            Each key and value in the ``Environment`` string to string map can have length of up to 1024. We support up to 16 entries in the map.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def framework(self) -> typing.Optional[builtins.str]:
            '''The machine learning framework of the model package container image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-framework
            '''
            result = self._values.get("framework")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def framework_version(self) -> typing.Optional[builtins.str]:
            '''The framework version of the Model Package Container Image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-frameworkversion
            '''
            result = self._values.get("framework_version")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def image_digest(self) -> typing.Optional[builtins.str]:
            '''An MD5 hash of the training algorithm that identifies the Docker image used for training.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-imagedigest
            '''
            result = self._values.get("image_digest")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_data_url(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 path where the model artifacts, which result from model training, are stored.

            This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix).
            .. epigraph::

               The model artifacts must be in an S3 bucket that is in the same region as the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-modeldataurl
            '''
            result = self._values.get("model_data_url")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def model_input(self) -> typing.Any:
            '''A structure with Model Input details.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-modelinput
            '''
            result = self._values.get("model_input")
            return typing.cast(typing.Any, result)

        @builtins.property
        def nearest_model_name(self) -> typing.Optional[builtins.str]:
            '''The name of a pre-trained machine learning benchmarked by Amazon SageMaker Inference Recommender model that matches your model.

            You can find a list of benchmarked models by calling ``ListModelMetadata`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagecontainerdefinition.html#cfn-sagemaker-modelpackage-modelpackagecontainerdefinition-nearestmodelname
            '''
            result = self._values.get("nearest_model_name")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelPackageContainerDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelPackageStatusDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={"validation_statuses": "validationStatuses"},
    )
    class ModelPackageStatusDetailsProperty:
        def __init__(
            self,
            *,
            validation_statuses: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ModelPackageStatusItemProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''Specifies the validation and image scan statuses of the model package.

            :param validation_statuses: The validation status of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_package_status_details_property = sagemaker.CfnModelPackage.ModelPackageStatusDetailsProperty(
                    validation_statuses=[sagemaker.CfnModelPackage.ModelPackageStatusItemProperty(
                        name="name",
                        status="status",
                
                        # the properties below are optional
                        failure_reason="failureReason"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9368151f814de756031d15d98423c4f626ecab7772bbc450c61220269d51ba72)
                check_type(argname="argument validation_statuses", value=validation_statuses, expected_type=type_hints["validation_statuses"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if validation_statuses is not None:
                self._values["validation_statuses"] = validation_statuses

        @builtins.property
        def validation_statuses(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageStatusItemProperty"]]]]:
            '''The validation status of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusdetails.html#cfn-sagemaker-modelpackage-modelpackagestatusdetails-validationstatuses
            '''
            result = self._values.get("validation_statuses")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ModelPackageStatusItemProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelPackageStatusDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelPackageStatusItemProperty",
        jsii_struct_bases=[],
        name_mapping={
            "name": "name",
            "status": "status",
            "failure_reason": "failureReason",
        },
    )
    class ModelPackageStatusItemProperty:
        def __init__(
            self,
            *,
            name: builtins.str,
            status: builtins.str,
            failure_reason: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Represents the overall status of a model package.

            :param name: The name of the model package for which the overall status is being reported.
            :param status: The current status.
            :param failure_reason: if the overall status is ``Failed`` , the reason for the failure.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusitem.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_package_status_item_property = sagemaker.CfnModelPackage.ModelPackageStatusItemProperty(
                    name="name",
                    status="status",
                
                    # the properties below are optional
                    failure_reason="failureReason"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__925abde7b5bc45209854382ec8f11eef2ac8c1008579d5eea27a923d43839619)
                check_type(argname="argument name", value=name, expected_type=type_hints["name"])
                check_type(argname="argument status", value=status, expected_type=type_hints["status"])
                check_type(argname="argument failure_reason", value=failure_reason, expected_type=type_hints["failure_reason"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "name": name,
                "status": status,
            }
            if failure_reason is not None:
                self._values["failure_reason"] = failure_reason

        @builtins.property
        def name(self) -> builtins.str:
            '''The name of the model package for which the overall status is being reported.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusitem.html#cfn-sagemaker-modelpackage-modelpackagestatusitem-name
            '''
            result = self._values.get("name")
            assert result is not None, "Required property 'name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def status(self) -> builtins.str:
            '''The current status.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusitem.html#cfn-sagemaker-modelpackage-modelpackagestatusitem-status
            '''
            result = self._values.get("status")
            assert result is not None, "Required property 'status' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def failure_reason(self) -> typing.Optional[builtins.str]:
            '''if the overall status is ``Failed`` , the reason for the failure.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelpackagestatusitem.html#cfn-sagemaker-modelpackage-modelpackagestatusitem-failurereason
            '''
            result = self._values.get("failure_reason")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelPackageStatusItemProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ModelQualityProperty",
        jsii_struct_bases=[],
        name_mapping={"constraints": "constraints", "statistics": "statistics"},
    )
    class ModelQualityProperty:
        def __init__(
            self,
            *,
            constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.MetricsSourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Model quality statistics and constraints.

            :param constraints: Model quality constraints.
            :param statistics: Model quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelquality.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_quality_property = sagemaker.CfnModelPackage.ModelQualityProperty(
                    constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    ),
                    statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                        content_type="contentType",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        content_digest="contentDigest"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d70460b42f50b69dd9179d1065515c0653bf645b82333cac9f935bb46ad24039)
                check_type(argname="argument constraints", value=constraints, expected_type=type_hints["constraints"])
                check_type(argname="argument statistics", value=statistics, expected_type=type_hints["statistics"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constraints is not None:
                self._values["constraints"] = constraints
            if statistics is not None:
                self._values["statistics"] = statistics

        @builtins.property
        def constraints(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''Model quality constraints.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelquality.html#cfn-sagemaker-modelpackage-modelquality-constraints
            '''
            result = self._values.get("constraints")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        @builtins.property
        def statistics(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]]:
            '''Model quality statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-modelquality.html#cfn-sagemaker-modelpackage-modelquality-statistics
            '''
            result = self._values.get("statistics")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.MetricsSourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelQualityProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.S3DataSourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_data_type": "s3DataType", "s3_uri": "s3Uri"},
    )
    class S3DataSourceProperty:
        def __init__(self, *, s3_data_type: builtins.str, s3_uri: builtins.str) -> None:
            '''Describes the S3 data source.

            Your input bucket must be in the same AWS region as your training job.

            :param s3_data_type: If you choose ``S3Prefix`` , ``S3Uri`` identifies a key name prefix. SageMaker uses all objects that match the specified key name prefix for model training. If you choose ``ManifestFile`` , ``S3Uri`` identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training. If you choose ``AugmentedManifestFile`` , S3Uri identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. ``AugmentedManifestFile`` can only be used if the Channel's input mode is ``Pipe`` .
            :param s3_uri: Depending on the value specified for the ``S3DataType`` , identifies either a key name prefix or a manifest. For example: - A key name prefix might look like this: ``s3://bucketname/exampleprefix/`` - A manifest might look like this: ``s3://bucketname/example.manifest`` A manifest is an S3 object which is a JSON file consisting of an array of elements. The first element is a prefix which is followed by one or more suffixes. SageMaker appends the suffix elements to the prefix to get a full set of ``S3Uri`` . Note that the prefix must be a valid non-empty ``S3Uri`` that precludes users from specifying a manifest whose individual ``S3Uri`` is sourced from different S3 buckets. The following code example shows a valid manifest format: ``[ {"prefix": "s3://customer_bucket/some/prefix/"},`` ``"relative/path/to/custdata-1",`` ``"relative/path/custdata-2",`` ``...`` ``"relative/path/custdata-N"`` ``]`` This JSON is equivalent to the following ``S3Uri`` list: ``s3://customer_bucket/some/prefix/relative/path/to/custdata-1`` ``s3://customer_bucket/some/prefix/relative/path/custdata-2`` ``...`` ``s3://customer_bucket/some/prefix/relative/path/custdata-N`` The complete set of ``S3Uri`` in this manifest is the input data for the channel for this data source. The object that each ``S3Uri`` points to must be readable by the IAM role that SageMaker uses to perform tasks on your behalf. Your input bucket must be located in same AWS region as your training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-s3datasource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_data_source_property = sagemaker.CfnModelPackage.S3DataSourceProperty(
                    s3_data_type="s3DataType",
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__95a8628c262dbb4d0d7dc94b9b71e1fee54370555330c2e596d5180c978a0f5c)
                check_type(argname="argument s3_data_type", value=s3_data_type, expected_type=type_hints["s3_data_type"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_data_type": s3_data_type,
                "s3_uri": s3_uri,
            }

        @builtins.property
        def s3_data_type(self) -> builtins.str:
            '''If you choose ``S3Prefix`` , ``S3Uri`` identifies a key name prefix.

            SageMaker uses all objects that match the specified key name prefix for model training.

            If you choose ``ManifestFile`` , ``S3Uri`` identifies an object that is a manifest file containing a list of object keys that you want SageMaker to use for model training.

            If you choose ``AugmentedManifestFile`` , S3Uri identifies an object that is an augmented manifest file in JSON lines format. This file contains the data you want to use for model training. ``AugmentedManifestFile`` can only be used if the Channel's input mode is ``Pipe`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-s3datasource.html#cfn-sagemaker-modelpackage-s3datasource-s3datatype
            '''
            result = self._values.get("s3_data_type")
            assert result is not None, "Required property 's3_data_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''Depending on the value specified for the ``S3DataType`` , identifies either a key name prefix or a manifest.

            For example:

            - A key name prefix might look like this: ``s3://bucketname/exampleprefix/``
            - A manifest might look like this: ``s3://bucketname/example.manifest``

            A manifest is an S3 object which is a JSON file consisting of an array of elements. The first element is a prefix which is followed by one or more suffixes. SageMaker appends the suffix elements to the prefix to get a full set of ``S3Uri`` . Note that the prefix must be a valid non-empty ``S3Uri`` that precludes users from specifying a manifest whose individual ``S3Uri`` is sourced from different S3 buckets.

            The following code example shows a valid manifest format:

            ``[ {"prefix": "s3://customer_bucket/some/prefix/"},``

            ``"relative/path/to/custdata-1",``

            ``"relative/path/custdata-2",``

            ``...``

            ``"relative/path/custdata-N"``

            ``]``

            This JSON is equivalent to the following ``S3Uri`` list:

            ``s3://customer_bucket/some/prefix/relative/path/to/custdata-1``

            ``s3://customer_bucket/some/prefix/relative/path/custdata-2``

            ``...``

            ``s3://customer_bucket/some/prefix/relative/path/custdata-N``

            The complete set of ``S3Uri`` in this manifest is the input data for the channel for this data source. The object that each ``S3Uri`` points to must be readable by the IAM role that SageMaker uses to perform tasks on your behalf.

            Your input bucket must be located in same AWS region as your training job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-s3datasource.html#cfn-sagemaker-modelpackage-s3datasource-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3DataSourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.SourceAlgorithmProperty",
        jsii_struct_bases=[],
        name_mapping={
            "algorithm_name": "algorithmName",
            "model_data_url": "modelDataUrl",
        },
    )
    class SourceAlgorithmProperty:
        def __init__(
            self,
            *,
            algorithm_name: builtins.str,
            model_data_url: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies an algorithm that was used to create the model package.

            The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.

            :param algorithm_name: The name of an algorithm that was used to create the model package. The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.
            :param model_data_url: The Amazon S3 path where the model artifacts, which result from model training, are stored. This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix). .. epigraph:: The model artifacts must be in an S3 bucket that is in the same AWS region as the algorithm.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithm.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                source_algorithm_property = sagemaker.CfnModelPackage.SourceAlgorithmProperty(
                    algorithm_name="algorithmName",
                
                    # the properties below are optional
                    model_data_url="modelDataUrl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c7370e044241d5015ba4487bc95be9e2da1ab701d951eb96050e9f7187993173)
                check_type(argname="argument algorithm_name", value=algorithm_name, expected_type=type_hints["algorithm_name"])
                check_type(argname="argument model_data_url", value=model_data_url, expected_type=type_hints["model_data_url"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "algorithm_name": algorithm_name,
            }
            if model_data_url is not None:
                self._values["model_data_url"] = model_data_url

        @builtins.property
        def algorithm_name(self) -> builtins.str:
            '''The name of an algorithm that was used to create the model package.

            The algorithm must be either an algorithm resource in your SageMaker account or an algorithm in AWS Marketplace that you are subscribed to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithm.html#cfn-sagemaker-modelpackage-sourcealgorithm-algorithmname
            '''
            result = self._values.get("algorithm_name")
            assert result is not None, "Required property 'algorithm_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def model_data_url(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 path where the model artifacts, which result from model training, are stored.

            This path must point to a single ``gzip`` compressed tar archive ( ``.tar.gz`` suffix).
            .. epigraph::

               The model artifacts must be in an S3 bucket that is in the same AWS region as the algorithm.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithm.html#cfn-sagemaker-modelpackage-sourcealgorithm-modeldataurl
            '''
            result = self._values.get("model_data_url")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SourceAlgorithmProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.SourceAlgorithmSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={"source_algorithms": "sourceAlgorithms"},
    )
    class SourceAlgorithmSpecificationProperty:
        def __init__(
            self,
            *,
            source_algorithms: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.SourceAlgorithmProperty", typing.Dict[builtins.str, typing.Any]]]]],
        ) -> None:
            '''A list of algorithms that were used to create a model package.

            :param source_algorithms: A list of the algorithms that were used to create a model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithmspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                source_algorithm_specification_property = sagemaker.CfnModelPackage.SourceAlgorithmSpecificationProperty(
                    source_algorithms=[sagemaker.CfnModelPackage.SourceAlgorithmProperty(
                        algorithm_name="algorithmName",
                
                        # the properties below are optional
                        model_data_url="modelDataUrl"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5fa6f5a981cdfc9624808cae76285d5b200712bd6a58978ab2126f4f18f91ccc)
                check_type(argname="argument source_algorithms", value=source_algorithms, expected_type=type_hints["source_algorithms"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "source_algorithms": source_algorithms,
            }

        @builtins.property
        def source_algorithms(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.SourceAlgorithmProperty"]]]:
            '''A list of the algorithms that were used to create a model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-sourcealgorithmspecification.html#cfn-sagemaker-modelpackage-sourcealgorithmspecification-sourcealgorithms
            '''
            result = self._values.get("source_algorithms")
            assert result is not None, "Required property 'source_algorithms' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.SourceAlgorithmProperty"]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SourceAlgorithmSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.TransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_source": "dataSource",
            "compression_type": "compressionType",
            "content_type": "contentType",
            "split_type": "splitType",
        },
    )
    class TransformInputProperty:
        def __init__(
            self,
            *,
            data_source: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.DataSourceProperty", typing.Dict[builtins.str, typing.Any]]],
            compression_type: typing.Optional[builtins.str] = None,
            content_type: typing.Optional[builtins.str] = None,
            split_type: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Describes the input source of a transform job and the way the transform job consumes it.

            :param data_source: Describes the location of the channel data, which is, the S3 location of the input data that the model can consume.
            :param compression_type: If your transform data is compressed, specify the compression type. Amazon SageMaker automatically decompresses the data for the transform job accordingly. The default value is ``None`` .
            :param content_type: The multipurpose internet mail extension (MIME) type of the data. Amazon SageMaker uses the MIME type with each http call to transfer data to the transform job.
            :param split_type: The method to use to split the transform job's data files into smaller batches. Splitting is necessary when the total size of each object is too large to fit in a single request. You can also use data splitting to improve performance by processing multiple concurrent mini-batches. The default value for ``SplitType`` is ``None`` , which indicates that input data files are not split, and request payloads contain the entire contents of an input object. Set the value of this parameter to ``Line`` to split records on a newline character boundary. ``SplitType`` also supports a number of record-oriented binary data formats. Currently, the supported record formats are: - RecordIO - TFRecord When splitting is enabled, the size of a mini-batch depends on the values of the ``BatchStrategy`` and ``MaxPayloadInMB`` parameters. When the value of ``BatchStrategy`` is ``MultiRecord`` , Amazon SageMaker sends the maximum number of records in each request, up to the ``MaxPayloadInMB`` limit. If the value of ``BatchStrategy`` is ``SingleRecord`` , Amazon SageMaker sends individual records in each request. .. epigraph:: Some data formats represent a record as a binary payload wrapped with extra padding bytes. When splitting is applied to a binary data format, padding is removed if the value of ``BatchStrategy`` is set to ``SingleRecord`` . Padding is not removed if the value of ``BatchStrategy`` is set to ``MultiRecord`` . For more information about ``RecordIO`` , see `Create a Dataset Using RecordIO <https://docs.aws.amazon.com/https://mxnet.apache.org/api/faq/recordio>`_ in the MXNet documentation. For more information about ``TFRecord`` , see `Consuming TFRecord data <https://docs.aws.amazon.com/https://www.tensorflow.org/guide/data#consuming_tfrecord_data>`_ in the TensorFlow documentation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                transform_input_property = sagemaker.CfnModelPackage.TransformInputProperty(
                    data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                        s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                            s3_data_type="s3DataType",
                            s3_uri="s3Uri"
                        )
                    ),
                
                    # the properties below are optional
                    compression_type="compressionType",
                    content_type="contentType",
                    split_type="splitType"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a5ac59639bea94c11b27589b4aa48a1c45071db76f2cc6339f6dbca031854143)
                check_type(argname="argument data_source", value=data_source, expected_type=type_hints["data_source"])
                check_type(argname="argument compression_type", value=compression_type, expected_type=type_hints["compression_type"])
                check_type(argname="argument content_type", value=content_type, expected_type=type_hints["content_type"])
                check_type(argname="argument split_type", value=split_type, expected_type=type_hints["split_type"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_source": data_source,
            }
            if compression_type is not None:
                self._values["compression_type"] = compression_type
            if content_type is not None:
                self._values["content_type"] = content_type
            if split_type is not None:
                self._values["split_type"] = split_type

        @builtins.property
        def data_source(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DataSourceProperty"]:
            '''Describes the location of the channel data, which is, the S3 location of the input data that the model can consume.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transforminput.html#cfn-sagemaker-modelpackage-transforminput-datasource
            '''
            result = self._values.get("data_source")
            assert result is not None, "Required property 'data_source' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.DataSourceProperty"], result)

        @builtins.property
        def compression_type(self) -> typing.Optional[builtins.str]:
            '''If your transform data is compressed, specify the compression type.

            Amazon SageMaker automatically decompresses the data for the transform job accordingly. The default value is ``None`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transforminput.html#cfn-sagemaker-modelpackage-transforminput-compressiontype
            '''
            result = self._values.get("compression_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def content_type(self) -> typing.Optional[builtins.str]:
            '''The multipurpose internet mail extension (MIME) type of the data.

            Amazon SageMaker uses the MIME type with each http call to transfer data to the transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transforminput.html#cfn-sagemaker-modelpackage-transforminput-contenttype
            '''
            result = self._values.get("content_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def split_type(self) -> typing.Optional[builtins.str]:
            '''The method to use to split the transform job's data files into smaller batches.

            Splitting is necessary when the total size of each object is too large to fit in a single request. You can also use data splitting to improve performance by processing multiple concurrent mini-batches. The default value for ``SplitType`` is ``None`` , which indicates that input data files are not split, and request payloads contain the entire contents of an input object. Set the value of this parameter to ``Line`` to split records on a newline character boundary. ``SplitType`` also supports a number of record-oriented binary data formats. Currently, the supported record formats are:

            - RecordIO
            - TFRecord

            When splitting is enabled, the size of a mini-batch depends on the values of the ``BatchStrategy`` and ``MaxPayloadInMB`` parameters. When the value of ``BatchStrategy`` is ``MultiRecord`` , Amazon SageMaker sends the maximum number of records in each request, up to the ``MaxPayloadInMB`` limit. If the value of ``BatchStrategy`` is ``SingleRecord`` , Amazon SageMaker sends individual records in each request.
            .. epigraph::

               Some data formats represent a record as a binary payload wrapped with extra padding bytes. When splitting is applied to a binary data format, padding is removed if the value of ``BatchStrategy`` is set to ``SingleRecord`` . Padding is not removed if the value of ``BatchStrategy`` is set to ``MultiRecord`` .

               For more information about ``RecordIO`` , see `Create a Dataset Using RecordIO <https://docs.aws.amazon.com/https://mxnet.apache.org/api/faq/recordio>`_ in the MXNet documentation. For more information about ``TFRecord`` , see `Consuming TFRecord data <https://docs.aws.amazon.com/https://www.tensorflow.org/guide/data#consuming_tfrecord_data>`_ in the TensorFlow documentation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transforminput.html#cfn-sagemaker-modelpackage-transforminput-splittype
            '''
            result = self._values.get("split_type")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.TransformJobDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "transform_input": "transformInput",
            "transform_output": "transformOutput",
            "transform_resources": "transformResources",
            "batch_strategy": "batchStrategy",
            "environment": "environment",
            "max_concurrent_transforms": "maxConcurrentTransforms",
            "max_payload_in_mb": "maxPayloadInMb",
        },
    )
    class TransformJobDefinitionProperty:
        def __init__(
            self,
            *,
            transform_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.TransformInputProperty", typing.Dict[builtins.str, typing.Any]]],
            transform_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.TransformOutputProperty", typing.Dict[builtins.str, typing.Any]]],
            transform_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.TransformResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
            batch_strategy: typing.Optional[builtins.str] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            max_concurrent_transforms: typing.Optional[jsii.Number] = None,
            max_payload_in_mb: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''Defines the input needed to run a transform job using the inference specification specified in the algorithm.

            :param transform_input: A description of the input source and the way the transform job consumes it.
            :param transform_output: Identifies the Amazon S3 location where you want Amazon SageMaker to save the results from the transform job.
            :param transform_resources: Identifies the ML compute instances for the transform job.
            :param batch_strategy: A string that determines the number of records included in a single mini-batch. ``SingleRecord`` means only one record is used per mini-batch. ``MultiRecord`` means a mini-batch is set to contain as many records that can fit within the ``MaxPayloadInMB`` limit.
            :param environment: The environment variables to set in the Docker container. We support up to 16 key and values entries in the map.
            :param max_concurrent_transforms: The maximum number of parallel requests that can be sent to each instance in a transform job. The default value is 1.
            :param max_payload_in_mb: The maximum payload size allowed, in MB. A payload is the data portion of a record (without metadata).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                transform_job_definition_property = sagemaker.CfnModelPackage.TransformJobDefinitionProperty(
                    transform_input=sagemaker.CfnModelPackage.TransformInputProperty(
                        data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                            s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                                s3_data_type="s3DataType",
                                s3_uri="s3Uri"
                            )
                        ),
                
                        # the properties below are optional
                        compression_type="compressionType",
                        content_type="contentType",
                        split_type="splitType"
                    ),
                    transform_output=sagemaker.CfnModelPackage.TransformOutputProperty(
                        s3_output_path="s3OutputPath",
                
                        # the properties below are optional
                        accept="accept",
                        assemble_with="assembleWith",
                        kms_key_id="kmsKeyId"
                    ),
                    transform_resources=sagemaker.CfnModelPackage.TransformResourcesProperty(
                        instance_count=123,
                        instance_type="instanceType",
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    ),
                
                    # the properties below are optional
                    batch_strategy="batchStrategy",
                    environment={
                        "environment_key": "environment"
                    },
                    max_concurrent_transforms=123,
                    max_payload_in_mb=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ad90453f586dca988e2139c0764adcc4e222e4f795136ffe7266e6b1a31a4f9f)
                check_type(argname="argument transform_input", value=transform_input, expected_type=type_hints["transform_input"])
                check_type(argname="argument transform_output", value=transform_output, expected_type=type_hints["transform_output"])
                check_type(argname="argument transform_resources", value=transform_resources, expected_type=type_hints["transform_resources"])
                check_type(argname="argument batch_strategy", value=batch_strategy, expected_type=type_hints["batch_strategy"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument max_concurrent_transforms", value=max_concurrent_transforms, expected_type=type_hints["max_concurrent_transforms"])
                check_type(argname="argument max_payload_in_mb", value=max_payload_in_mb, expected_type=type_hints["max_payload_in_mb"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "transform_input": transform_input,
                "transform_output": transform_output,
                "transform_resources": transform_resources,
            }
            if batch_strategy is not None:
                self._values["batch_strategy"] = batch_strategy
            if environment is not None:
                self._values["environment"] = environment
            if max_concurrent_transforms is not None:
                self._values["max_concurrent_transforms"] = max_concurrent_transforms
            if max_payload_in_mb is not None:
                self._values["max_payload_in_mb"] = max_payload_in_mb

        @builtins.property
        def transform_input(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformInputProperty"]:
            '''A description of the input source and the way the transform job consumes it.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-transforminput
            '''
            result = self._values.get("transform_input")
            assert result is not None, "Required property 'transform_input' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformInputProperty"], result)

        @builtins.property
        def transform_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformOutputProperty"]:
            '''Identifies the Amazon S3 location where you want Amazon SageMaker to save the results from the transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-transformoutput
            '''
            result = self._values.get("transform_output")
            assert result is not None, "Required property 'transform_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformOutputProperty"], result)

        @builtins.property
        def transform_resources(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformResourcesProperty"]:
            '''Identifies the ML compute instances for the transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-transformresources
            '''
            result = self._values.get("transform_resources")
            assert result is not None, "Required property 'transform_resources' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformResourcesProperty"], result)

        @builtins.property
        def batch_strategy(self) -> typing.Optional[builtins.str]:
            '''A string that determines the number of records included in a single mini-batch.

            ``SingleRecord`` means only one record is used per mini-batch. ``MultiRecord`` means a mini-batch is set to contain as many records that can fit within the ``MaxPayloadInMB`` limit.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-batchstrategy
            '''
            result = self._values.get("batch_strategy")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''The environment variables to set in the Docker container.

            We support up to 16 key and values entries in the map.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def max_concurrent_transforms(self) -> typing.Optional[jsii.Number]:
            '''The maximum number of parallel requests that can be sent to each instance in a transform job.

            The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-maxconcurrenttransforms
            '''
            result = self._values.get("max_concurrent_transforms")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def max_payload_in_mb(self) -> typing.Optional[jsii.Number]:
            '''The maximum payload size allowed, in MB.

            A payload is the data portion of a record (without metadata).

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformjobdefinition.html#cfn-sagemaker-modelpackage-transformjobdefinition-maxpayloadinmb
            '''
            result = self._values.get("max_payload_in_mb")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TransformJobDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.TransformOutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "s3_output_path": "s3OutputPath",
            "accept": "accept",
            "assemble_with": "assembleWith",
            "kms_key_id": "kmsKeyId",
        },
    )
    class TransformOutputProperty:
        def __init__(
            self,
            *,
            s3_output_path: builtins.str,
            accept: typing.Optional[builtins.str] = None,
            assemble_with: typing.Optional[builtins.str] = None,
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Describes the results of a transform job.

            :param s3_output_path: The Amazon S3 path where you want Amazon SageMaker to store the results of the transform job. For example, ``s3://bucket-name/key-name-prefix`` . For every S3 object used as input for the transform job, batch transform stores the transformed data with an . ``out`` suffix in a corresponding subfolder in the location in the output prefix. For example, for the input data stored at ``s3://bucket-name/input-name-prefix/dataset01/data.csv`` , batch transform stores the transformed data at ``s3://bucket-name/output-name-prefix/input-name-prefix/data.csv.out`` . Batch transform doesn't upload partially processed objects. For an input S3 object that contains multiple records, it creates an . ``out`` file only if the transform job succeeds on the entire file. When the input contains multiple S3 objects, the batch transform job processes the listed S3 objects and uploads only the output for successfully processed objects. If any object fails in the transform job batch transform marks the job as failed to prompt investigation.
            :param accept: The MIME type used to specify the output data. Amazon SageMaker uses the MIME type with each http call to transfer data from the transform job.
            :param assemble_with: Defines how to assemble the results of the transform job as a single S3 object. Choose a format that is most convenient to you. To concatenate the results in binary format, specify ``None`` . To add a newline character at the end of every transformed record, specify ``Line`` .
            :param kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption. The ``KmsKeyId`` can be any of the following formats: - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` - Alias name: ``alias/ExampleAlias`` - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias`` If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account. For more information, see `KMS-Managed Encryption Keys <https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html>`_ in the *Amazon Simple Storage Service Developer Guide.* The KMS key policy must grant permission to the IAM role that you specify in your `CreateModel <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html>`_ request. For more information, see `Using Key Policies in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html>`_ in the *AWS Key Management Service Developer Guide* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                transform_output_property = sagemaker.CfnModelPackage.TransformOutputProperty(
                    s3_output_path="s3OutputPath",
                
                    # the properties below are optional
                    accept="accept",
                    assemble_with="assembleWith",
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e3de08fae1bf76b0f8e8964ef8f9704de012d1a8ea97211690dbfab05c3cf737)
                check_type(argname="argument s3_output_path", value=s3_output_path, expected_type=type_hints["s3_output_path"])
                check_type(argname="argument accept", value=accept, expected_type=type_hints["accept"])
                check_type(argname="argument assemble_with", value=assemble_with, expected_type=type_hints["assemble_with"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output_path": s3_output_path,
            }
            if accept is not None:
                self._values["accept"] = accept
            if assemble_with is not None:
                self._values["assemble_with"] = assemble_with
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def s3_output_path(self) -> builtins.str:
            '''The Amazon S3 path where you want Amazon SageMaker to store the results of the transform job.

            For example, ``s3://bucket-name/key-name-prefix`` .

            For every S3 object used as input for the transform job, batch transform stores the transformed data with an . ``out`` suffix in a corresponding subfolder in the location in the output prefix. For example, for the input data stored at ``s3://bucket-name/input-name-prefix/dataset01/data.csv`` , batch transform stores the transformed data at ``s3://bucket-name/output-name-prefix/input-name-prefix/data.csv.out`` . Batch transform doesn't upload partially processed objects. For an input S3 object that contains multiple records, it creates an . ``out`` file only if the transform job succeeds on the entire file. When the input contains multiple S3 objects, the batch transform job processes the listed S3 objects and uploads only the output for successfully processed objects. If any object fails in the transform job batch transform marks the job as failed to prompt investigation.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformoutput.html#cfn-sagemaker-modelpackage-transformoutput-s3outputpath
            '''
            result = self._values.get("s3_output_path")
            assert result is not None, "Required property 's3_output_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def accept(self) -> typing.Optional[builtins.str]:
            '''The MIME type used to specify the output data.

            Amazon SageMaker uses the MIME type with each http call to transfer data from the transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformoutput.html#cfn-sagemaker-modelpackage-transformoutput-accept
            '''
            result = self._values.get("accept")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def assemble_with(self) -> typing.Optional[builtins.str]:
            '''Defines how to assemble the results of the transform job as a single S3 object.

            Choose a format that is most convenient to you. To concatenate the results in binary format, specify ``None`` . To add a newline character at the end of every transformed record, specify ``Line`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformoutput.html#cfn-sagemaker-modelpackage-transformoutput-assemblewith
            '''
            result = self._values.get("assemble_with")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            The ``KmsKeyId`` can be any of the following formats:

            - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab``
            - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab``
            - Alias name: ``alias/ExampleAlias``
            - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias``

            If you don't provide a KMS key ID, Amazon SageMaker uses the default KMS key for Amazon S3 for your role's account. For more information, see `KMS-Managed Encryption Keys <https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html>`_ in the *Amazon Simple Storage Service Developer Guide.*

            The KMS key policy must grant permission to the IAM role that you specify in your `CreateModel <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html>`_ request. For more information, see `Using Key Policies in AWS KMS <https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html>`_ in the *AWS Key Management Service Developer Guide* .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformoutput.html#cfn-sagemaker-modelpackage-transformoutput-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TransformOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.TransformResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class TransformResourcesProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Describes the resources, including ML instance types and ML instance count, to use for transform job.

            :param instance_count: The number of ML compute instances to use in the transform job. The default value is ``1`` , and the maximum is ``100`` . For distributed transform jobs, specify a value greater than ``1`` .
            :param instance_type: The ML compute instance type for the transform job. If you are using built-in algorithms to transform moderately sized datasets, we recommend using ml.m4.xlarge or ``ml.m5.large`` instance types.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt model data on the storage volume attached to the ML compute instance(s) that run the batch transform job. .. epigraph:: Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a ``VolumeKmsKeyId`` when using an instance type with local storage. For a list of instance types that support local instance storage, see `Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes>`_ . For more information about local instance storage encryption, see `SSD Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html>`_ . The ``VolumeKmsKeyId`` can be any of the following formats: - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab`` - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`` - Alias name: ``alias/ExampleAlias`` - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                transform_resources_property = sagemaker.CfnModelPackage.TransformResourcesProperty(
                    instance_count=123,
                    instance_type="instanceType",
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ac6699f069de1ccf42c0ea72d604adc94c9b7b18a2ffd98f5018d313bc15dacd)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the transform job.

            The default value is ``1`` , and the maximum is ``100`` . For distributed transform jobs, specify a value greater than ``1`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformresources.html#cfn-sagemaker-modelpackage-transformresources-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the transform job.

            If you are using built-in algorithms to transform moderately sized datasets, we recommend using ml.m4.xlarge or ``ml.m5.large`` instance types.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformresources.html#cfn-sagemaker-modelpackage-transformresources-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt model data on the storage volume attached to the ML compute instance(s) that run the batch transform job.

            .. epigraph::

               Certain Nitro-based instances include local storage, dependent on the instance type. Local storage volumes are encrypted using a hardware module on the instance. You can't request a ``VolumeKmsKeyId`` when using an instance type with local storage.

               For a list of instance types that support local instance storage, see `Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes>`_ .

               For more information about local instance storage encryption, see `SSD Instance Store Volumes <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html>`_ .

            The ``VolumeKmsKeyId`` can be any of the following formats:

            - Key ID: ``1234abcd-12ab-34cd-56ef-1234567890ab``
            - Key ARN: ``arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab``
            - Alias name: ``alias/ExampleAlias``
            - Alias name ARN: ``arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-transformresources.html#cfn-sagemaker-modelpackage-transformresources-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "TransformResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ValidationProfileProperty",
        jsii_struct_bases=[],
        name_mapping={
            "profile_name": "profileName",
            "transform_job_definition": "transformJobDefinition",
        },
    )
    class ValidationProfileProperty:
        def __init__(
            self,
            *,
            profile_name: builtins.str,
            transform_job_definition: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.TransformJobDefinitionProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Contains data, such as the inputs and targeted instance types that are used in the process of validating the model package.

            The data provided in the validation profile is made available to your buyers on AWS Marketplace.

            :param profile_name: The name of the profile for the model package.
            :param transform_job_definition: The ``TransformJobDefinition`` object that describes the transform job used for the validation of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationprofile.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                validation_profile_property = sagemaker.CfnModelPackage.ValidationProfileProperty(
                    profile_name="profileName",
                    transform_job_definition=sagemaker.CfnModelPackage.TransformJobDefinitionProperty(
                        transform_input=sagemaker.CfnModelPackage.TransformInputProperty(
                            data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                                s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                                    s3_data_type="s3DataType",
                                    s3_uri="s3Uri"
                                )
                            ),
                
                            # the properties below are optional
                            compression_type="compressionType",
                            content_type="contentType",
                            split_type="splitType"
                        ),
                        transform_output=sagemaker.CfnModelPackage.TransformOutputProperty(
                            s3_output_path="s3OutputPath",
                
                            # the properties below are optional
                            accept="accept",
                            assemble_with="assembleWith",
                            kms_key_id="kmsKeyId"
                        ),
                        transform_resources=sagemaker.CfnModelPackage.TransformResourcesProperty(
                            instance_count=123,
                            instance_type="instanceType",
                
                            # the properties below are optional
                            volume_kms_key_id="volumeKmsKeyId"
                        ),
                
                        # the properties below are optional
                        batch_strategy="batchStrategy",
                        environment={
                            "environment_key": "environment"
                        },
                        max_concurrent_transforms=123,
                        max_payload_in_mb=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c8a338f1264abd227b969108f413a5f2179b62ece8e669747e97af5c10fe68ff)
                check_type(argname="argument profile_name", value=profile_name, expected_type=type_hints["profile_name"])
                check_type(argname="argument transform_job_definition", value=transform_job_definition, expected_type=type_hints["transform_job_definition"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "profile_name": profile_name,
                "transform_job_definition": transform_job_definition,
            }

        @builtins.property
        def profile_name(self) -> builtins.str:
            '''The name of the profile for the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationprofile.html#cfn-sagemaker-modelpackage-validationprofile-profilename
            '''
            result = self._values.get("profile_name")
            assert result is not None, "Required property 'profile_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def transform_job_definition(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformJobDefinitionProperty"]:
            '''The ``TransformJobDefinition`` object that describes the transform job used for the validation of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationprofile.html#cfn-sagemaker-modelpackage-validationprofile-transformjobdefinition
            '''
            result = self._values.get("transform_job_definition")
            assert result is not None, "Required property 'transform_job_definition' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelPackage.TransformJobDefinitionProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ValidationProfileProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackage.ValidationSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "validation_profiles": "validationProfiles",
            "validation_role": "validationRole",
        },
    )
    class ValidationSpecificationProperty:
        def __init__(
            self,
            *,
            validation_profiles: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelPackage.ValidationProfileProperty", typing.Dict[builtins.str, typing.Any]]]]],
            validation_role: builtins.str,
        ) -> None:
            '''Specifies batch transform jobs that SageMaker runs to validate your model package.

            :param validation_profiles: An array of ``ModelPackageValidationProfile`` objects, each of which specifies a batch transform job that SageMaker runs to validate your model package.
            :param validation_role: The IAM roles to be used for the validation of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                validation_specification_property = sagemaker.CfnModelPackage.ValidationSpecificationProperty(
                    validation_profiles=[sagemaker.CfnModelPackage.ValidationProfileProperty(
                        profile_name="profileName",
                        transform_job_definition=sagemaker.CfnModelPackage.TransformJobDefinitionProperty(
                            transform_input=sagemaker.CfnModelPackage.TransformInputProperty(
                                data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                                    s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                                        s3_data_type="s3DataType",
                                        s3_uri="s3Uri"
                                    )
                                ),
                
                                # the properties below are optional
                                compression_type="compressionType",
                                content_type="contentType",
                                split_type="splitType"
                            ),
                            transform_output=sagemaker.CfnModelPackage.TransformOutputProperty(
                                s3_output_path="s3OutputPath",
                
                                # the properties below are optional
                                accept="accept",
                                assemble_with="assembleWith",
                                kms_key_id="kmsKeyId"
                            ),
                            transform_resources=sagemaker.CfnModelPackage.TransformResourcesProperty(
                                instance_count=123,
                                instance_type="instanceType",
                
                                # the properties below are optional
                                volume_kms_key_id="volumeKmsKeyId"
                            ),
                
                            # the properties below are optional
                            batch_strategy="batchStrategy",
                            environment={
                                "environment_key": "environment"
                            },
                            max_concurrent_transforms=123,
                            max_payload_in_mb=123
                        )
                    )],
                    validation_role="validationRole"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__56a5474f3a19bb692e24e54841bfef2e353ba442fa47b9254c761c240adf8a3c)
                check_type(argname="argument validation_profiles", value=validation_profiles, expected_type=type_hints["validation_profiles"])
                check_type(argname="argument validation_role", value=validation_role, expected_type=type_hints["validation_role"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "validation_profiles": validation_profiles,
                "validation_role": validation_role,
            }

        @builtins.property
        def validation_profiles(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ValidationProfileProperty"]]]:
            '''An array of ``ModelPackageValidationProfile`` objects, each of which specifies a batch transform job that SageMaker runs to validate your model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationspecification.html#cfn-sagemaker-modelpackage-validationspecification-validationprofiles
            '''
            result = self._values.get("validation_profiles")
            assert result is not None, "Required property 'validation_profiles' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelPackage.ValidationProfileProperty"]]], result)

        @builtins.property
        def validation_role(self) -> builtins.str:
            '''The IAM roles to be used for the validation of the model package.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelpackage-validationspecification.html#cfn-sagemaker-modelpackage-validationspecification-validationrole
            '''
            result = self._values.get("validation_role")
            assert result is not None, "Required property 'validation_role' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ValidationSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelPackageGroup(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackageGroup",
):
    '''A group of versioned models in the model registry.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html
    :cloudformationResource: AWS::SageMaker::ModelPackageGroup
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # model_package_group_policy: Any
        
        cfn_model_package_group = sagemaker.CfnModelPackageGroup(self, "MyCfnModelPackageGroup",
            model_package_group_name="modelPackageGroupName",
        
            # the properties below are optional
            model_package_group_description="modelPackageGroupDescription",
            model_package_group_policy=model_package_group_policy,
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        model_package_group_name: builtins.str,
        model_package_group_description: typing.Optional[builtins.str] = None,
        model_package_group_policy: typing.Any = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param model_package_group_name: The name of the model group.
        :param model_package_group_description: The description for the model group.
        :param model_package_group_policy: A resouce policy to control access to a model group. For information about resoure policies, see `Identity-based policies and resource-based policies <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html>`_ in the *AWS Identity and Access Management User Guide.* .
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__746607cd1f1d8be2c0e4762ebd80bdfab4d2d86299bd55c14b011cbec5b77ad3)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelPackageGroupProps(
            model_package_group_name=model_package_group_name,
            model_package_group_description=model_package_group_description,
            model_package_group_policy=model_package_group_policy,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8ce67476f97f7f11bbbe25ff1a7e5f540c17f1614cfa9671655bdc488c4309ba)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9b28ac0ff821de88f31a1297f9a364882f035bc6e46eb2403fd1075f8f43f5b9)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the model group was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrModelPackageGroupArn")
    def attr_model_package_group_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the model group.

        :cloudformationAttribute: ModelPackageGroupArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelPackageGroupArn"))

    @builtins.property
    @jsii.member(jsii_name="attrModelPackageGroupStatus")
    def attr_model_package_group_status(self) -> builtins.str:
        '''The status of the model group.

        :cloudformationAttribute: ModelPackageGroupStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrModelPackageGroupStatus"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="modelPackageGroupName")
    def model_package_group_name(self) -> builtins.str:
        '''The name of the model group.'''
        return typing.cast(builtins.str, jsii.get(self, "modelPackageGroupName"))

    @model_package_group_name.setter
    def model_package_group_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f733d2395a5b964f60911bc23f1df2182dfade19e251f7d463a9b030d03f5f22)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageGroupName", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageGroupDescription")
    def model_package_group_description(self) -> typing.Optional[builtins.str]:
        '''The description for the model group.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "modelPackageGroupDescription"))

    @model_package_group_description.setter
    def model_package_group_description(
        self,
        value: typing.Optional[builtins.str],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4355427f5a6cfe7448fead52d53481adcb15a61d6238fd6aa476aec9b29dd90a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageGroupDescription", value)

    @builtins.property
    @jsii.member(jsii_name="modelPackageGroupPolicy")
    def model_package_group_policy(self) -> typing.Any:
        '''A resouce policy to control access to a model group.'''
        return typing.cast(typing.Any, jsii.get(self, "modelPackageGroupPolicy"))

    @model_package_group_policy.setter
    def model_package_group_policy(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cf026534ccea2b3126cb94af5d3a36a2aedfe86f89479e5b10e0cc06eb20d7dd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelPackageGroupPolicy", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c750adabdf97b4466938740af401939b05ced410bbf8a5029e1914386d825a26)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackageGroupProps",
    jsii_struct_bases=[],
    name_mapping={
        "model_package_group_name": "modelPackageGroupName",
        "model_package_group_description": "modelPackageGroupDescription",
        "model_package_group_policy": "modelPackageGroupPolicy",
        "tags": "tags",
    },
)
class CfnModelPackageGroupProps:
    def __init__(
        self,
        *,
        model_package_group_name: builtins.str,
        model_package_group_description: typing.Optional[builtins.str] = None,
        model_package_group_policy: typing.Any = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelPackageGroup``.

        :param model_package_group_name: The name of the model group.
        :param model_package_group_description: The description for the model group.
        :param model_package_group_policy: A resouce policy to control access to a model group. For information about resoure policies, see `Identity-based policies and resource-based policies <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html>`_ in the *AWS Identity and Access Management User Guide.* .
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # model_package_group_policy: Any
            
            cfn_model_package_group_props = sagemaker.CfnModelPackageGroupProps(
                model_package_group_name="modelPackageGroupName",
            
                # the properties below are optional
                model_package_group_description="modelPackageGroupDescription",
                model_package_group_policy=model_package_group_policy,
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b32e5fb078258552a5762ac3209c1aecb6cedaa59fc46f2a8e220c3c17e26340)
            check_type(argname="argument model_package_group_name", value=model_package_group_name, expected_type=type_hints["model_package_group_name"])
            check_type(argname="argument model_package_group_description", value=model_package_group_description, expected_type=type_hints["model_package_group_description"])
            check_type(argname="argument model_package_group_policy", value=model_package_group_policy, expected_type=type_hints["model_package_group_policy"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "model_package_group_name": model_package_group_name,
        }
        if model_package_group_description is not None:
            self._values["model_package_group_description"] = model_package_group_description
        if model_package_group_policy is not None:
            self._values["model_package_group_policy"] = model_package_group_policy
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def model_package_group_name(self) -> builtins.str:
        '''The name of the model group.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-modelpackagegroupname
        '''
        result = self._values.get("model_package_group_name")
        assert result is not None, "Required property 'model_package_group_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def model_package_group_description(self) -> typing.Optional[builtins.str]:
        '''The description for the model group.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-modelpackagegroupdescription
        '''
        result = self._values.get("model_package_group_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_package_group_policy(self) -> typing.Any:
        '''A resouce policy to control access to a model group.

        For information about resoure policies, see `Identity-based policies and resource-based policies <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html>`_ in the *AWS Identity and Access Management User Guide.* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-modelpackagegrouppolicy
        '''
        result = self._values.get("model_package_group_policy")
        return typing.cast(typing.Any, result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackagegroup.html#cfn-sagemaker-modelpackagegroup-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelPackageGroupProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelPackageProps",
    jsii_struct_bases=[],
    name_mapping={
        "additional_inference_specifications": "additionalInferenceSpecifications",
        "additional_inference_specifications_to_add": "additionalInferenceSpecificationsToAdd",
        "approval_description": "approvalDescription",
        "certify_for_marketplace": "certifyForMarketplace",
        "client_token": "clientToken",
        "customer_metadata_properties": "customerMetadataProperties",
        "domain": "domain",
        "drift_check_baselines": "driftCheckBaselines",
        "inference_specification": "inferenceSpecification",
        "last_modified_time": "lastModifiedTime",
        "metadata_properties": "metadataProperties",
        "model_approval_status": "modelApprovalStatus",
        "model_metrics": "modelMetrics",
        "model_package_description": "modelPackageDescription",
        "model_package_group_name": "modelPackageGroupName",
        "model_package_name": "modelPackageName",
        "model_package_status_details": "modelPackageStatusDetails",
        "model_package_version": "modelPackageVersion",
        "sample_payload_url": "samplePayloadUrl",
        "skip_model_validation": "skipModelValidation",
        "source_algorithm_specification": "sourceAlgorithmSpecification",
        "tags": "tags",
        "task": "task",
        "validation_specification": "validationSpecification",
    },
)
class CfnModelPackageProps:
    def __init__(
        self,
        *,
        additional_inference_specifications: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        additional_inference_specifications_to_add: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        approval_description: typing.Optional[builtins.str] = None,
        certify_for_marketplace: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        client_token: typing.Optional[builtins.str] = None,
        customer_metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
        domain: typing.Optional[builtins.str] = None,
        drift_check_baselines: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckBaselinesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.InferenceSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        last_modified_time: typing.Optional[builtins.str] = None,
        metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetadataPropertiesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        model_approval_status: typing.Optional[builtins.str] = None,
        model_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelMetricsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        model_package_description: typing.Optional[builtins.str] = None,
        model_package_group_name: typing.Optional[builtins.str] = None,
        model_package_name: typing.Optional[builtins.str] = None,
        model_package_status_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageStatusDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        model_package_version: typing.Optional[jsii.Number] = None,
        sample_payload_url: typing.Optional[builtins.str] = None,
        skip_model_validation: typing.Optional[builtins.str] = None,
        source_algorithm_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.SourceAlgorithmSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        task: typing.Optional[builtins.str] = None,
        validation_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ValidationSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelPackage``.

        :param additional_inference_specifications: An array of additional Inference Specification objects.
        :param additional_inference_specifications_to_add: An array of additional Inference Specification objects to be added to the existing array. The total number of additional Inference Specification objects cannot exceed 15. Each additional Inference Specification object specifies artifacts based on this model package that can be used on inference endpoints. Generally used with SageMaker Neo to store the compiled artifacts.
        :param approval_description: A description provided when the model approval is set.
        :param certify_for_marketplace: Whether the model package is to be certified to be listed on AWS Marketplace. For information about listing model packages on AWS Marketplace, see `List Your Algorithm or Model Package on AWS Marketplace <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-list.html>`_ .
        :param client_token: A unique token that guarantees that the call to this API is idempotent.
        :param customer_metadata_properties: The metadata properties for the model package.
        :param domain: The machine learning domain of your model package and its components. Common machine learning domains include computer vision and natural language processing.
        :param drift_check_baselines: Represents the drift check baselines that can be used when the model monitor is set using the model package.
        :param inference_specification: Defines how to perform inference generation after a training job is run.
        :param last_modified_time: The last time the model package was modified.
        :param metadata_properties: Metadata properties of the tracking entity, trial, or trial component.
        :param model_approval_status: The approval status of the model. This can be one of the following values. - ``APPROVED`` - The model is approved - ``REJECTED`` - The model is rejected. - ``PENDING_MANUAL_APPROVAL`` - The model is waiting for manual approval.
        :param model_metrics: Metrics for the model.
        :param model_package_description: The description of the model package.
        :param model_package_group_name: The model group to which the model belongs.
        :param model_package_name: The name of the model.
        :param model_package_status_details: Specifies the validation and image scan statuses of the model package.
        :param model_package_version: The version number of a versioned model.
        :param sample_payload_url: The Amazon Simple Storage Service path where the sample payload are stored. This path must point to a single gzip compressed tar archive (.tar.gz suffix).
        :param skip_model_validation: Indicates if you want to skip model validation.
        :param source_algorithm_specification: A list of algorithms that were used to create a model package.
        :param tags: A list of the tags associated with the model package. For more information, see `Tagging AWS resources <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html>`_ in the *AWS General Reference Guide* .
        :param task: The machine learning task your model package accomplishes. Common machine learning tasks include object detection and image classification.
        :param validation_specification: Specifies batch transform jobs that SageMaker runs to validate your model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # model_input: Any
            
            cfn_model_package_props = sagemaker.CfnModelPackageProps(
                additional_inference_specifications=[sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty(
                    containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                        image="image",
            
                        # the properties below are optional
                        container_hostname="containerHostname",
                        environment={
                            "environment_key": "environment"
                        },
                        framework="framework",
                        framework_version="frameworkVersion",
                        image_digest="imageDigest",
                        model_data_url="modelDataUrl",
                        model_input=model_input,
                        nearest_model_name="nearestModelName"
                    )],
                    name="name",
            
                    # the properties below are optional
                    description="description",
                    supported_content_types=["supportedContentTypes"],
                    supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                    supported_response_mime_types=["supportedResponseMimeTypes"],
                    supported_transform_instance_types=["supportedTransformInstanceTypes"]
                )],
                additional_inference_specifications_to_add=[sagemaker.CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty(
                    containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                        image="image",
            
                        # the properties below are optional
                        container_hostname="containerHostname",
                        environment={
                            "environment_key": "environment"
                        },
                        framework="framework",
                        framework_version="frameworkVersion",
                        image_digest="imageDigest",
                        model_data_url="modelDataUrl",
                        model_input=model_input,
                        nearest_model_name="nearestModelName"
                    )],
                    name="name",
            
                    # the properties below are optional
                    description="description",
                    supported_content_types=["supportedContentTypes"],
                    supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                    supported_response_mime_types=["supportedResponseMimeTypes"],
                    supported_transform_instance_types=["supportedTransformInstanceTypes"]
                )],
                approval_description="approvalDescription",
                certify_for_marketplace=False,
                client_token="clientToken",
                customer_metadata_properties={
                    "customer_metadata_properties_key": "customerMetadataProperties"
                },
                domain="domain",
                drift_check_baselines=sagemaker.CfnModelPackage.DriftCheckBaselinesProperty(
                    bias=sagemaker.CfnModelPackage.DriftCheckBiasProperty(
                        config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest",
                            content_type="contentType"
                        ),
                        post_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        pre_training_constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    explainability=sagemaker.CfnModelPackage.DriftCheckExplainabilityProperty(
                        config_file=sagemaker.CfnModelPackage.FileSourceProperty(
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest",
                            content_type="contentType"
                        ),
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_data_quality=sagemaker.CfnModelPackage.DriftCheckModelDataQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_quality=sagemaker.CfnModelPackage.DriftCheckModelQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    )
                ),
                inference_specification=sagemaker.CfnModelPackage.InferenceSpecificationProperty(
                    containers=[sagemaker.CfnModelPackage.ModelPackageContainerDefinitionProperty(
                        image="image",
            
                        # the properties below are optional
                        container_hostname="containerHostname",
                        environment={
                            "environment_key": "environment"
                        },
                        framework="framework",
                        framework_version="frameworkVersion",
                        image_digest="imageDigest",
                        model_data_url="modelDataUrl",
                        model_input=model_input,
                        nearest_model_name="nearestModelName"
                    )],
                    supported_content_types=["supportedContentTypes"],
                    supported_response_mime_types=["supportedResponseMimeTypes"],
            
                    # the properties below are optional
                    supported_realtime_inference_instance_types=["supportedRealtimeInferenceInstanceTypes"],
                    supported_transform_instance_types=["supportedTransformInstanceTypes"]
                ),
                last_modified_time="lastModifiedTime",
                metadata_properties=sagemaker.CfnModelPackage.MetadataPropertiesProperty(
                    commit_id="commitId",
                    generated_by="generatedBy",
                    project_id="projectId",
                    repository="repository"
                ),
                model_approval_status="modelApprovalStatus",
                model_metrics=sagemaker.CfnModelPackage.ModelMetricsProperty(
                    bias=sagemaker.CfnModelPackage.BiasProperty(
                        post_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        pre_training_report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    explainability=sagemaker.CfnModelPackage.ExplainabilityProperty(
                        report=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_data_quality=sagemaker.CfnModelPackage.ModelDataQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    ),
                    model_quality=sagemaker.CfnModelPackage.ModelQualityProperty(
                        constraints=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        ),
                        statistics=sagemaker.CfnModelPackage.MetricsSourceProperty(
                            content_type="contentType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            content_digest="contentDigest"
                        )
                    )
                ),
                model_package_description="modelPackageDescription",
                model_package_group_name="modelPackageGroupName",
                model_package_name="modelPackageName",
                model_package_status_details=sagemaker.CfnModelPackage.ModelPackageStatusDetailsProperty(
                    validation_statuses=[sagemaker.CfnModelPackage.ModelPackageStatusItemProperty(
                        name="name",
                        status="status",
            
                        # the properties below are optional
                        failure_reason="failureReason"
                    )]
                ),
                model_package_version=123,
                sample_payload_url="samplePayloadUrl",
                skip_model_validation="skipModelValidation",
                source_algorithm_specification=sagemaker.CfnModelPackage.SourceAlgorithmSpecificationProperty(
                    source_algorithms=[sagemaker.CfnModelPackage.SourceAlgorithmProperty(
                        algorithm_name="algorithmName",
            
                        # the properties below are optional
                        model_data_url="modelDataUrl"
                    )]
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                task="task",
                validation_specification=sagemaker.CfnModelPackage.ValidationSpecificationProperty(
                    validation_profiles=[sagemaker.CfnModelPackage.ValidationProfileProperty(
                        profile_name="profileName",
                        transform_job_definition=sagemaker.CfnModelPackage.TransformJobDefinitionProperty(
                            transform_input=sagemaker.CfnModelPackage.TransformInputProperty(
                                data_source=sagemaker.CfnModelPackage.DataSourceProperty(
                                    s3_data_source=sagemaker.CfnModelPackage.S3DataSourceProperty(
                                        s3_data_type="s3DataType",
                                        s3_uri="s3Uri"
                                    )
                                ),
            
                                # the properties below are optional
                                compression_type="compressionType",
                                content_type="contentType",
                                split_type="splitType"
                            ),
                            transform_output=sagemaker.CfnModelPackage.TransformOutputProperty(
                                s3_output_path="s3OutputPath",
            
                                # the properties below are optional
                                accept="accept",
                                assemble_with="assembleWith",
                                kms_key_id="kmsKeyId"
                            ),
                            transform_resources=sagemaker.CfnModelPackage.TransformResourcesProperty(
                                instance_count=123,
                                instance_type="instanceType",
            
                                # the properties below are optional
                                volume_kms_key_id="volumeKmsKeyId"
                            ),
            
                            # the properties below are optional
                            batch_strategy="batchStrategy",
                            environment={
                                "environment_key": "environment"
                            },
                            max_concurrent_transforms=123,
                            max_payload_in_mb=123
                        )
                    )],
                    validation_role="validationRole"
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__378bde633f0e72c03caed7fddbf9a121418d898f476e84e86c7b4d379a50ee6e)
            check_type(argname="argument additional_inference_specifications", value=additional_inference_specifications, expected_type=type_hints["additional_inference_specifications"])
            check_type(argname="argument additional_inference_specifications_to_add", value=additional_inference_specifications_to_add, expected_type=type_hints["additional_inference_specifications_to_add"])
            check_type(argname="argument approval_description", value=approval_description, expected_type=type_hints["approval_description"])
            check_type(argname="argument certify_for_marketplace", value=certify_for_marketplace, expected_type=type_hints["certify_for_marketplace"])
            check_type(argname="argument client_token", value=client_token, expected_type=type_hints["client_token"])
            check_type(argname="argument customer_metadata_properties", value=customer_metadata_properties, expected_type=type_hints["customer_metadata_properties"])
            check_type(argname="argument domain", value=domain, expected_type=type_hints["domain"])
            check_type(argname="argument drift_check_baselines", value=drift_check_baselines, expected_type=type_hints["drift_check_baselines"])
            check_type(argname="argument inference_specification", value=inference_specification, expected_type=type_hints["inference_specification"])
            check_type(argname="argument last_modified_time", value=last_modified_time, expected_type=type_hints["last_modified_time"])
            check_type(argname="argument metadata_properties", value=metadata_properties, expected_type=type_hints["metadata_properties"])
            check_type(argname="argument model_approval_status", value=model_approval_status, expected_type=type_hints["model_approval_status"])
            check_type(argname="argument model_metrics", value=model_metrics, expected_type=type_hints["model_metrics"])
            check_type(argname="argument model_package_description", value=model_package_description, expected_type=type_hints["model_package_description"])
            check_type(argname="argument model_package_group_name", value=model_package_group_name, expected_type=type_hints["model_package_group_name"])
            check_type(argname="argument model_package_name", value=model_package_name, expected_type=type_hints["model_package_name"])
            check_type(argname="argument model_package_status_details", value=model_package_status_details, expected_type=type_hints["model_package_status_details"])
            check_type(argname="argument model_package_version", value=model_package_version, expected_type=type_hints["model_package_version"])
            check_type(argname="argument sample_payload_url", value=sample_payload_url, expected_type=type_hints["sample_payload_url"])
            check_type(argname="argument skip_model_validation", value=skip_model_validation, expected_type=type_hints["skip_model_validation"])
            check_type(argname="argument source_algorithm_specification", value=source_algorithm_specification, expected_type=type_hints["source_algorithm_specification"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument task", value=task, expected_type=type_hints["task"])
            check_type(argname="argument validation_specification", value=validation_specification, expected_type=type_hints["validation_specification"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if additional_inference_specifications is not None:
            self._values["additional_inference_specifications"] = additional_inference_specifications
        if additional_inference_specifications_to_add is not None:
            self._values["additional_inference_specifications_to_add"] = additional_inference_specifications_to_add
        if approval_description is not None:
            self._values["approval_description"] = approval_description
        if certify_for_marketplace is not None:
            self._values["certify_for_marketplace"] = certify_for_marketplace
        if client_token is not None:
            self._values["client_token"] = client_token
        if customer_metadata_properties is not None:
            self._values["customer_metadata_properties"] = customer_metadata_properties
        if domain is not None:
            self._values["domain"] = domain
        if drift_check_baselines is not None:
            self._values["drift_check_baselines"] = drift_check_baselines
        if inference_specification is not None:
            self._values["inference_specification"] = inference_specification
        if last_modified_time is not None:
            self._values["last_modified_time"] = last_modified_time
        if metadata_properties is not None:
            self._values["metadata_properties"] = metadata_properties
        if model_approval_status is not None:
            self._values["model_approval_status"] = model_approval_status
        if model_metrics is not None:
            self._values["model_metrics"] = model_metrics
        if model_package_description is not None:
            self._values["model_package_description"] = model_package_description
        if model_package_group_name is not None:
            self._values["model_package_group_name"] = model_package_group_name
        if model_package_name is not None:
            self._values["model_package_name"] = model_package_name
        if model_package_status_details is not None:
            self._values["model_package_status_details"] = model_package_status_details
        if model_package_version is not None:
            self._values["model_package_version"] = model_package_version
        if sample_payload_url is not None:
            self._values["sample_payload_url"] = sample_payload_url
        if skip_model_validation is not None:
            self._values["skip_model_validation"] = skip_model_validation
        if source_algorithm_specification is not None:
            self._values["source_algorithm_specification"] = source_algorithm_specification
        if tags is not None:
            self._values["tags"] = tags
        if task is not None:
            self._values["task"] = task
        if validation_specification is not None:
            self._values["validation_specification"] = validation_specification

    @builtins.property
    def additional_inference_specifications(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]]:
        '''An array of additional Inference Specification objects.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-additionalinferencespecifications
        '''
        result = self._values.get("additional_inference_specifications")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]], result)

    @builtins.property
    def additional_inference_specifications_to_add(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]]:
        '''An array of additional Inference Specification objects to be added to the existing array.

        The total number of additional Inference Specification objects cannot exceed 15. Each additional Inference Specification object specifies artifacts based on this model package that can be used on inference endpoints. Generally used with SageMaker Neo to store the compiled artifacts.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-additionalinferencespecificationstoadd
        '''
        result = self._values.get("additional_inference_specifications_to_add")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]], result)

    @builtins.property
    def approval_description(self) -> typing.Optional[builtins.str]:
        '''A description provided when the model approval is set.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-approvaldescription
        '''
        result = self._values.get("approval_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def certify_for_marketplace(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Whether the model package is to be certified to be listed on AWS Marketplace.

        For information about listing model packages on AWS Marketplace, see `List Your Algorithm or Model Package on AWS Marketplace <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-mkt-list.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-certifyformarketplace
        '''
        result = self._values.get("certify_for_marketplace")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def client_token(self) -> typing.Optional[builtins.str]:
        '''A unique token that guarantees that the call to this API is idempotent.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-clienttoken
        '''
        result = self._values.get("client_token")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def customer_metadata_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
        '''The metadata properties for the model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-customermetadataproperties
        '''
        result = self._values.get("customer_metadata_properties")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

    @builtins.property
    def domain(self) -> typing.Optional[builtins.str]:
        '''The machine learning domain of your model package and its components.

        Common machine learning domains include computer vision and natural language processing.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-domain
        '''
        result = self._values.get("domain")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def drift_check_baselines(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.DriftCheckBaselinesProperty]]:
        '''Represents the drift check baselines that can be used when the model monitor is set using the model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-driftcheckbaselines
        '''
        result = self._values.get("drift_check_baselines")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.DriftCheckBaselinesProperty]], result)

    @builtins.property
    def inference_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.InferenceSpecificationProperty]]:
        '''Defines how to perform inference generation after a training job is run.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-inferencespecification
        '''
        result = self._values.get("inference_specification")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.InferenceSpecificationProperty]], result)

    @builtins.property
    def last_modified_time(self) -> typing.Optional[builtins.str]:
        '''The last time the model package was modified.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-lastmodifiedtime
        '''
        result = self._values.get("last_modified_time")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def metadata_properties(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.MetadataPropertiesProperty]]:
        '''Metadata properties of the tracking entity, trial, or trial component.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-metadataproperties
        '''
        result = self._values.get("metadata_properties")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.MetadataPropertiesProperty]], result)

    @builtins.property
    def model_approval_status(self) -> typing.Optional[builtins.str]:
        '''The approval status of the model. This can be one of the following values.

        - ``APPROVED`` - The model is approved
        - ``REJECTED`` - The model is rejected.
        - ``PENDING_MANUAL_APPROVAL`` - The model is waiting for manual approval.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelapprovalstatus
        '''
        result = self._values.get("model_approval_status")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_metrics(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelMetricsProperty]]:
        '''Metrics for the model.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelmetrics
        '''
        result = self._values.get("model_metrics")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelMetricsProperty]], result)

    @builtins.property
    def model_package_description(self) -> typing.Optional[builtins.str]:
        '''The description of the model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelpackagedescription
        '''
        result = self._values.get("model_package_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_package_group_name(self) -> typing.Optional[builtins.str]:
        '''The model group to which the model belongs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelpackagegroupname
        '''
        result = self._values.get("model_package_group_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_package_name(self) -> typing.Optional[builtins.str]:
        '''The name of the model.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelpackagename
        '''
        result = self._values.get("model_package_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_package_status_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelPackageStatusDetailsProperty]]:
        '''Specifies the validation and image scan statuses of the model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelpackagestatusdetails
        '''
        result = self._values.get("model_package_status_details")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelPackageStatusDetailsProperty]], result)

    @builtins.property
    def model_package_version(self) -> typing.Optional[jsii.Number]:
        '''The version number of a versioned model.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-modelpackageversion
        '''
        result = self._values.get("model_package_version")
        return typing.cast(typing.Optional[jsii.Number], result)

    @builtins.property
    def sample_payload_url(self) -> typing.Optional[builtins.str]:
        '''The Amazon Simple Storage Service path where the sample payload are stored.

        This path must point to a single gzip compressed tar archive (.tar.gz suffix).

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-samplepayloadurl
        '''
        result = self._values.get("sample_payload_url")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def skip_model_validation(self) -> typing.Optional[builtins.str]:
        '''Indicates if you want to skip model validation.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-skipmodelvalidation
        '''
        result = self._values.get("skip_model_validation")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def source_algorithm_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.SourceAlgorithmSpecificationProperty]]:
        '''A list of algorithms that were used to create a model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-sourcealgorithmspecification
        '''
        result = self._values.get("source_algorithm_specification")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.SourceAlgorithmSpecificationProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of the tags associated with the model package.

        For more information, see `Tagging AWS resources <https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html>`_ in the *AWS General Reference Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def task(self) -> typing.Optional[builtins.str]:
        '''The machine learning task your model package accomplishes.

        Common machine learning tasks include object detection and image classification.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-task
        '''
        result = self._values.get("task")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def validation_specification(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ValidationSpecificationProperty]]:
        '''Specifies batch transform jobs that SageMaker runs to validate your model package.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelpackage.html#cfn-sagemaker-modelpackage-validationspecification
        '''
        result = self._values.get("validation_specification")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ValidationSpecificationProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelPackageProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelProps",
    jsii_struct_bases=[],
    name_mapping={
        "containers": "containers",
        "enable_network_isolation": "enableNetworkIsolation",
        "execution_role_arn": "executionRoleArn",
        "inference_execution_config": "inferenceExecutionConfig",
        "model_name": "modelName",
        "primary_container": "primaryContainer",
        "tags": "tags",
        "vpc_config": "vpcConfig",
    },
)
class CfnModelProps:
    def __init__(
        self,
        *,
        containers: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        execution_role_arn: typing.Optional[builtins.str] = None,
        inference_execution_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.InferenceExecutionConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        model_name: typing.Optional[builtins.str] = None,
        primary_container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModel``.

        :param containers: Specifies the containers in the inference pipeline.
        :param enable_network_isolation: Isolates the model container. No inbound or outbound network calls can be made to or from the model container.
        :param execution_role_arn: The Amazon Resource Name (ARN) of the IAM role that SageMaker can assume to access model artifacts and docker image for deployment on ML compute instances or for batch transform jobs. Deploying on ML compute instances is part of model hosting. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ . .. epigraph:: To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.
        :param inference_execution_config: Specifies details of how containers in a multi-container endpoint are called.
        :param model_name: The name of the new model.
        :param primary_container: The location of the primary docker image containing inference code, associated artifacts, and custom environment map that the inference code uses when the model is deployed for predictions.
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .
        :param vpc_config: A `VpcConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_VpcConfig.html>`_ object that specifies the VPC that you want your model to connect to. Control access to and from your model container by configuring the VPC. ``VpcConfig`` is used in hosting services and in batch transform. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Data in Batch Transform Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/batch-vpc.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # environment: Any
            
            cfn_model_props = sagemaker.CfnModelProps(
                containers=[sagemaker.CfnModel.ContainerDefinitionProperty(
                    container_hostname="containerHostname",
                    environment=environment,
                    image="image",
                    image_config=sagemaker.CfnModel.ImageConfigProperty(
                        repository_access_mode="repositoryAccessMode",
            
                        # the properties below are optional
                        repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                            repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                        )
                    ),
                    inference_specification_name="inferenceSpecificationName",
                    mode="mode",
                    model_data_source=sagemaker.CfnModel.ModelDataSourceProperty(
                        s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                            compression_type="compressionType",
                            s3_data_type="s3DataType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                                accept_eula=False
                            )
                        )
                    ),
                    model_data_url="modelDataUrl",
                    model_package_name="modelPackageName",
                    multi_model_config=sagemaker.CfnModel.MultiModelConfigProperty(
                        model_cache_setting="modelCacheSetting"
                    )
                )],
                enable_network_isolation=False,
                execution_role_arn="executionRoleArn",
                inference_execution_config=sagemaker.CfnModel.InferenceExecutionConfigProperty(
                    mode="mode"
                ),
                model_name="modelName",
                primary_container=sagemaker.CfnModel.ContainerDefinitionProperty(
                    container_hostname="containerHostname",
                    environment=environment,
                    image="image",
                    image_config=sagemaker.CfnModel.ImageConfigProperty(
                        repository_access_mode="repositoryAccessMode",
            
                        # the properties below are optional
                        repository_auth_config=sagemaker.CfnModel.RepositoryAuthConfigProperty(
                            repository_credentials_provider_arn="repositoryCredentialsProviderArn"
                        )
                    ),
                    inference_specification_name="inferenceSpecificationName",
                    mode="mode",
                    model_data_source=sagemaker.CfnModel.ModelDataSourceProperty(
                        s3_data_source=sagemaker.CfnModel.S3DataSourceProperty(
                            compression_type="compressionType",
                            s3_data_type="s3DataType",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            model_access_config=sagemaker.CfnModel.ModelAccessConfigProperty(
                                accept_eula=False
                            )
                        )
                    ),
                    model_data_url="modelDataUrl",
                    model_package_name="modelPackageName",
                    multi_model_config=sagemaker.CfnModel.MultiModelConfigProperty(
                        model_cache_setting="modelCacheSetting"
                    )
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                vpc_config=sagemaker.CfnModel.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f9e4a9cb7efeda6a3740140ab3ba480ae3174948753988331ff9187b0bbaf5c5)
            check_type(argname="argument containers", value=containers, expected_type=type_hints["containers"])
            check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
            check_type(argname="argument execution_role_arn", value=execution_role_arn, expected_type=type_hints["execution_role_arn"])
            check_type(argname="argument inference_execution_config", value=inference_execution_config, expected_type=type_hints["inference_execution_config"])
            check_type(argname="argument model_name", value=model_name, expected_type=type_hints["model_name"])
            check_type(argname="argument primary_container", value=primary_container, expected_type=type_hints["primary_container"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if containers is not None:
            self._values["containers"] = containers
        if enable_network_isolation is not None:
            self._values["enable_network_isolation"] = enable_network_isolation
        if execution_role_arn is not None:
            self._values["execution_role_arn"] = execution_role_arn
        if inference_execution_config is not None:
            self._values["inference_execution_config"] = inference_execution_config
        if model_name is not None:
            self._values["model_name"] = model_name
        if primary_container is not None:
            self._values["primary_container"] = primary_container
        if tags is not None:
            self._values["tags"] = tags
        if vpc_config is not None:
            self._values["vpc_config"] = vpc_config

    @builtins.property
    def containers(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]]]]:
        '''Specifies the containers in the inference pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-containers
        '''
        result = self._values.get("containers")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]]]], result)

    @builtins.property
    def enable_network_isolation(
        self,
    ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
        '''Isolates the model container.

        No inbound or outbound network calls can be made to or from the model container.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-enablenetworkisolation
        '''
        result = self._values.get("enable_network_isolation")
        return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

    @builtins.property
    def execution_role_arn(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of the IAM role that SageMaker can assume to access model artifacts and docker image for deployment on ML compute instances or for batch transform jobs.

        Deploying on ML compute instances is part of model hosting. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ .
        .. epigraph::

           To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-executionrolearn
        '''
        result = self._values.get("execution_role_arn")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def inference_execution_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.InferenceExecutionConfigProperty]]:
        '''Specifies details of how containers in a multi-container endpoint are called.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-inferenceexecutionconfig
        '''
        result = self._values.get("inference_execution_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.InferenceExecutionConfigProperty]], result)

    @builtins.property
    def model_name(self) -> typing.Optional[builtins.str]:
        '''The name of the new model.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-modelname
        '''
        result = self._values.get("model_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def primary_container(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]]:
        '''The location of the primary docker image containing inference code, associated artifacts, and custom environment map that the inference code uses when the model is deployed for predictions.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-primarycontainer
        '''
        result = self._values.get("primary_container")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def vpc_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.VpcConfigProperty]]:
        '''A `VpcConfig <https://docs.aws.amazon.com/sagemaker/latest/dg/API_VpcConfig.html>`_ object that specifies the VPC that you want your model to connect to. Control access to and from your model container by configuring the VPC. ``VpcConfig`` is used in hosting services and in batch transform. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Data in Batch Transform Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/batch-vpc.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-model.html#cfn-sagemaker-model-vpcconfig
        '''
        result = self._values.get("vpc_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.VpcConfigProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnModelQualityJobDefinition(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition",
):
    '''Creates a definition for a job that monitors model quality and drift.

    For information about model monitor, see `Amazon SageMaker Model Monitor <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html
    :cloudformationResource: AWS::SageMaker::ModelQualityJobDefinition
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_model_quality_job_definition = sagemaker.CfnModelQualityJobDefinition(self, "MyCfnModelQualityJobDefinition",
            job_resources=sagemaker.CfnModelQualityJobDefinition.MonitoringResourcesProperty(
                cluster_config=sagemaker.CfnModelQualityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
        
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            ),
            model_quality_app_specification=sagemaker.CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty(
                image_uri="imageUri",
                problem_type="problemType",
        
                # the properties below are optional
                container_arguments=["containerArguments"],
                container_entrypoint=["containerEntrypoint"],
                environment={
                    "environment_key": "environment"
                },
                post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                record_preprocessor_source_uri="recordPreprocessorSourceUri"
            ),
            model_quality_job_input=sagemaker.CfnModelQualityJobDefinition.ModelQualityJobInputProperty(
                ground_truth_s3_input=sagemaker.CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty(
                    s3_uri="s3Uri"
                ),
        
                # the properties below are optional
                batch_transform_input=sagemaker.CfnModelQualityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
        
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                ),
                endpoint_input=sagemaker.CfnModelQualityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
        
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            ),
            model_quality_job_output_config=sagemaker.CfnModelQualityJobDefinition.MonitoringOutputConfigProperty(
                monitoring_outputs=[sagemaker.CfnModelQualityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelQualityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
        
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )],
        
                # the properties below are optional
                kms_key_id="kmsKeyId"
            ),
            role_arn="roleArn",
        
            # the properties below are optional
            endpoint_name="endpointName",
            job_definition_name="jobDefinitionName",
            model_quality_baseline_config=sagemaker.CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty(
                baselining_job_name="baseliningJobName",
                constraints_resource=sagemaker.CfnModelQualityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            ),
            network_config=sagemaker.CfnModelQualityJobDefinition.NetworkConfigProperty(
                enable_inter_container_traffic_encryption=False,
                enable_network_isolation=False,
                vpc_config=sagemaker.CfnModelQualityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            ),
            stopping_condition=sagemaker.CfnModelQualityJobDefinition.StoppingConditionProperty(
                max_runtime_in_seconds=123
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.MonitoringResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
        model_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
        model_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.ModelQualityJobInputProperty", typing.Dict[builtins.str, typing.Any]]],
        model_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.MonitoringOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.NetworkConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.StoppingConditionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_quality_app_specification: Container image configuration object for the monitoring job.
        :param model_quality_job_input: A list of the inputs that are monitored. Currently endpoints are supported.
        :param model_quality_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the monitoring job definition.
        :param model_quality_baseline_config: Specifies the constraints and baselines for the monitoring job.
        :param network_config: Specifies the network configuration for the monitoring job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__42e31b56fc0144a98a714f239264ddf7afe0fd9daf080a15f45b2586010cb014)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnModelQualityJobDefinitionProps(
            job_resources=job_resources,
            model_quality_app_specification=model_quality_app_specification,
            model_quality_job_input=model_quality_job_input,
            model_quality_job_output_config=model_quality_job_output_config,
            role_arn=role_arn,
            endpoint_name=endpoint_name,
            job_definition_name=job_definition_name,
            model_quality_baseline_config=model_quality_baseline_config,
            network_config=network_config,
            stopping_condition=stopping_condition,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5503d455cdcb9812cece439cb77fdddf4e25cb7742b2f60ef989ad78d070dbd1)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f7c7f7156ff8b8f4e38ccadac8d610f3077158c93355fbc0b8ab6785dc687256)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the job definition was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrJobDefinitionArn")
    def attr_job_definition_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the job definition.

        :cloudformationAttribute: JobDefinitionArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrJobDefinitionArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="jobResources")
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringResourcesProperty"]:
        '''Identifies the resources to deploy for a monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringResourcesProperty"], jsii.get(self, "jobResources"))

    @job_resources.setter
    def job_resources(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringResourcesProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0c89aeb966220e928121f7c0a8748a5def40c7dcc3b435297521a1b4de3e5d99)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobResources", value)

    @builtins.property
    @jsii.member(jsii_name="modelQualityAppSpecification")
    def model_quality_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty"]:
        '''Container image configuration object for the monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty"], jsii.get(self, "modelQualityAppSpecification"))

    @model_quality_app_specification.setter
    def model_quality_app_specification(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__361aafd1c3d6434c939b643523515899a17f34f4c84bc9460385008f952ff5ce)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelQualityAppSpecification", value)

    @builtins.property
    @jsii.member(jsii_name="modelQualityJobInput")
    def model_quality_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityJobInputProperty"]:
        '''A list of the inputs that are monitored.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityJobInputProperty"], jsii.get(self, "modelQualityJobInput"))

    @model_quality_job_input.setter
    def model_quality_job_input(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityJobInputProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8ee098487f097c297f5b6dcf676b8ff6b93d2a776d26b5d89d40d17e3666dd40)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelQualityJobInput", value)

    @builtins.property
    @jsii.member(jsii_name="modelQualityJobOutputConfig")
    def model_quality_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringOutputConfigProperty"]:
        '''The output configuration for monitoring jobs.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringOutputConfigProperty"], jsii.get(self, "modelQualityJobOutputConfig"))

    @model_quality_job_output_config.setter
    def model_quality_job_output_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringOutputConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__dfcb1455e248274cfd0464147cfe165813fcb97079fdf063d25d7d843d3a2c9a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelQualityJobOutputConfig", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__345b07978ff3e5c3459c9f145b0997567018db993cb1893fddb5d51bca038716)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__95c7270eda7753d64f7ee2f671976026489fb015ddfe6237fa1e6beb73cc13da)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="jobDefinitionName")
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the monitoring job definition.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "jobDefinitionName"))

    @job_definition_name.setter
    def job_definition_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0204032476e8f5b124b5d8af10f340c97ced99290a2f46302a62e61462affbec)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "jobDefinitionName", value)

    @builtins.property
    @jsii.member(jsii_name="modelQualityBaselineConfig")
    def model_quality_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty"]]:
        '''Specifies the constraints and baselines for the monitoring job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty"]], jsii.get(self, "modelQualityBaselineConfig"))

    @model_quality_baseline_config.setter
    def model_quality_baseline_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__59ef09dd29bc147058594ea65458aacc4b4e4c5b2aedf059726f333d30c4caab)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "modelQualityBaselineConfig", value)

    @builtins.property
    @jsii.member(jsii_name="networkConfig")
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.NetworkConfigProperty"]]:
        '''Specifies the network configuration for the monitoring job.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.NetworkConfigProperty"]], jsii.get(self, "networkConfig"))

    @network_config.setter
    def network_config(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.NetworkConfigProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2b2071d5ef448c0e1935d23747178084b1846093280a3ead5e38f29c337da5fb)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "networkConfig", value)

    @builtins.property
    @jsii.member(jsii_name="stoppingCondition")
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.StoppingConditionProperty"]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.StoppingConditionProperty"]], jsii.get(self, "stoppingCondition"))

    @stopping_condition.setter
    def stopping_condition(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.StoppingConditionProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3ec1ebbaae725cb274030b8eb63c06ffb5c9248e0a7949abcc5cc012a5bc198f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "stoppingCondition", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__04773e5acb2d4d524f631f45d6648e805d07158e007fe0577458761258f555c8)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.BatchTransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_captured_destination_s3_uri": "dataCapturedDestinationS3Uri",
            "dataset_format": "datasetFormat",
            "local_path": "localPath",
            "end_time_offset": "endTimeOffset",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "probability_threshold_attribute": "probabilityThresholdAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
            "start_time_offset": "startTimeOffset",
        },
    )
    class BatchTransformInputProperty:
        def __init__(
            self,
            *,
            data_captured_destination_s3_uri: builtins.str,
            dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.DatasetFormatProperty", typing.Dict[builtins.str, typing.Any]]],
            local_path: builtins.str,
            end_time_offset: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            probability_threshold_attribute: typing.Optional[jsii.Number] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
            start_time_offset: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the batch transform job.

            :param data_captured_destination_s3_uri: The Amazon S3 location being used to capture the data.
            :param dataset_format: The dataset format for your batch transform job.
            :param local_path: Path to the filesystem where the batch transform data is available to the container.
            :param end_time_offset: If specified, monitoring jobs subtract this time from the end time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param probability_threshold_attribute: The threshold for the class probability to be evaluated as a positive result.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .
            :param start_time_offset: If specified, monitoring jobs substract this time from the start time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                batch_transform_input_property = sagemaker.CfnModelQualityJobDefinition.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty(
                        csv=sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
                
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__08a0fc421c170b7116c059e1c803034b1e1d2e4f3d1139e96d86868b4acce580)
                check_type(argname="argument data_captured_destination_s3_uri", value=data_captured_destination_s3_uri, expected_type=type_hints["data_captured_destination_s3_uri"])
                check_type(argname="argument dataset_format", value=dataset_format, expected_type=type_hints["dataset_format"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument end_time_offset", value=end_time_offset, expected_type=type_hints["end_time_offset"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument probability_threshold_attribute", value=probability_threshold_attribute, expected_type=type_hints["probability_threshold_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
                check_type(argname="argument start_time_offset", value=start_time_offset, expected_type=type_hints["start_time_offset"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_captured_destination_s3_uri": data_captured_destination_s3_uri,
                "dataset_format": dataset_format,
                "local_path": local_path,
            }
            if end_time_offset is not None:
                self._values["end_time_offset"] = end_time_offset
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if probability_threshold_attribute is not None:
                self._values["probability_threshold_attribute"] = probability_threshold_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode
            if start_time_offset is not None:
                self._values["start_time_offset"] = start_time_offset

        @builtins.property
        def data_captured_destination_s3_uri(self) -> builtins.str:
            '''The Amazon S3 location being used to capture the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-datacaptureddestinations3uri
            '''
            result = self._values.get("data_captured_destination_s3_uri")
            assert result is not None, "Required property 'data_captured_destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def dataset_format(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.DatasetFormatProperty"]:
            '''The dataset format for your batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-datasetformat
            '''
            result = self._values.get("dataset_format")
            assert result is not None, "Required property 'dataset_format' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.DatasetFormatProperty"], result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the batch transform data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def end_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs subtract this time from the end time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-endtimeoffset
            '''
            result = self._values.get("end_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_threshold_attribute(self) -> typing.Optional[jsii.Number]:
            '''The threshold for the class probability to be evaluated as a positive result.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-probabilitythresholdattribute
            '''
            result = self._values.get("probability_threshold_attribute")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def start_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the start time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-batchtransforminput.html#cfn-sagemaker-modelqualityjobdefinition-batchtransforminput-starttimeoffset
            '''
            result = self._values.get("start_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BatchTransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.ClusterConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_size_in_gb": "volumeSizeInGb",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class ClusterConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_size_in_gb: jsii.Number,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The configuration for the cluster of resources used to run the processing job.

            :param instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
            :param instance_type: The ML compute instance type for the processing job.
            :param volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-clusterconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cluster_config_property = sagemaker.CfnModelQualityJobDefinition.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__65137d3044a71a264599fe61cb48d2ecd3a19e17ce611b27e552921b3929e2c8)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
                "volume_size_in_gb": volume_size_in_gb,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the model monitoring job.

            For distributed processing jobs, specify a value greater than 1. The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-clusterconfig.html#cfn-sagemaker-modelqualityjobdefinition-clusterconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-clusterconfig.html#cfn-sagemaker-modelqualityjobdefinition-clusterconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_size_in_gb(self) -> jsii.Number:
            '''The size of the ML storage volume, in gigabytes, that you want to provision.

            You must specify sufficient ML storage for your scenario.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-clusterconfig.html#cfn-sagemaker-modelqualityjobdefinition-clusterconfig-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            assert result is not None, "Required property 'volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-clusterconfig.html#cfn-sagemaker-modelqualityjobdefinition-clusterconfig-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClusterConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.ConstraintsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class ConstraintsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The constraints resource for a monitoring job.

            :param s3_uri: The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-constraintsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                constraints_resource_property = sagemaker.CfnModelQualityJobDefinition.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__831137b4f29fc79af094bc52ba211600ac5596a9e2b88be8384db4afd89f1ab0)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-constraintsresource.html#cfn-sagemaker-modelqualityjobdefinition-constraintsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ConstraintsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.CsvProperty",
        jsii_struct_bases=[],
        name_mapping={"header": "header"},
    )
    class CsvProperty:
        def __init__(
            self,
            *,
            header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The CSV format.

            :param header: A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-csv.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                csv_property = sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                    header=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e06c255a8eff9cdc34bdfd9605eea9a628bde3715b3ed99ed9981db9be8c87d2)
                check_type(argname="argument header", value=header, expected_type=type_hints["header"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if header is not None:
                self._values["header"] = header

        @builtins.property
        def header(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-csv.html#cfn-sagemaker-modelqualityjobdefinition-csv-header
            '''
            result = self._values.get("header")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CsvProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty",
        jsii_struct_bases=[],
        name_mapping={"csv": "csv", "json": "json", "parquet": "parquet"},
    )
    class DatasetFormatProperty:
        def __init__(
            self,
            *,
            csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.CsvProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.JsonProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The dataset format of the data to monitor.

            :param csv: The CSV format.
            :param json: The Json format.
            :param parquet: A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-datasetformat.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                dataset_format_property = sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty(
                    csv=sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                        header=False
                    ),
                    json=sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                        line=False
                    ),
                    parquet=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3b2c1b1f6d0fb2a52da1f70b4528ffb40b39f674d57bdc6bfcfc0a4f4614054c)
                check_type(argname="argument csv", value=csv, expected_type=type_hints["csv"])
                check_type(argname="argument json", value=json, expected_type=type_hints["json"])
                check_type(argname="argument parquet", value=parquet, expected_type=type_hints["parquet"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv is not None:
                self._values["csv"] = csv
            if json is not None:
                self._values["json"] = json
            if parquet is not None:
                self._values["parquet"] = parquet

        @builtins.property
        def csv(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.CsvProperty"]]:
            '''The CSV format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-datasetformat.html#cfn-sagemaker-modelqualityjobdefinition-datasetformat-csv
            '''
            result = self._values.get("csv")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.CsvProperty"]], result)

        @builtins.property
        def json(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.JsonProperty"]]:
            '''The Json format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-datasetformat.html#cfn-sagemaker-modelqualityjobdefinition-datasetformat-json
            '''
            result = self._values.get("json")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.JsonProperty"]], result)

        @builtins.property
        def parquet(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-datasetformat.html#cfn-sagemaker-modelqualityjobdefinition-datasetformat-parquet
            '''
            result = self._values.get("parquet")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DatasetFormatProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.EndpointInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "local_path": "localPath",
            "end_time_offset": "endTimeOffset",
            "inference_attribute": "inferenceAttribute",
            "probability_attribute": "probabilityAttribute",
            "probability_threshold_attribute": "probabilityThresholdAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
            "start_time_offset": "startTimeOffset",
        },
    )
    class EndpointInputProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            local_path: builtins.str,
            end_time_offset: typing.Optional[builtins.str] = None,
            inference_attribute: typing.Optional[builtins.str] = None,
            probability_attribute: typing.Optional[builtins.str] = None,
            probability_threshold_attribute: typing.Optional[jsii.Number] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
            start_time_offset: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the endpoint.

            :param endpoint_name: An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.
            :param local_path: Path to the filesystem where the endpoint data is available to the container.
            :param end_time_offset: If specified, monitoring jobs substract this time from the end time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .
            :param inference_attribute: The attribute of the input data that represents the ground truth label.
            :param probability_attribute: In a classification problem, the attribute that represents the class probability.
            :param probability_threshold_attribute: The threshold for the class probability to be evaluated as a positive result.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .
            :param start_time_offset: If specified, monitoring jobs substract this time from the start time. For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_input_property = sagemaker.CfnModelQualityJobDefinition.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
                
                    # the properties below are optional
                    end_time_offset="endTimeOffset",
                    inference_attribute="inferenceAttribute",
                    probability_attribute="probabilityAttribute",
                    probability_threshold_attribute=123,
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode",
                    start_time_offset="startTimeOffset"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a942217acda5bca59aa7b51165d72d3988a006aa82eec958130cf1a49037049e)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument end_time_offset", value=end_time_offset, expected_type=type_hints["end_time_offset"])
                check_type(argname="argument inference_attribute", value=inference_attribute, expected_type=type_hints["inference_attribute"])
                check_type(argname="argument probability_attribute", value=probability_attribute, expected_type=type_hints["probability_attribute"])
                check_type(argname="argument probability_threshold_attribute", value=probability_threshold_attribute, expected_type=type_hints["probability_threshold_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
                check_type(argname="argument start_time_offset", value=start_time_offset, expected_type=type_hints["start_time_offset"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
                "local_path": local_path,
            }
            if end_time_offset is not None:
                self._values["end_time_offset"] = end_time_offset
            if inference_attribute is not None:
                self._values["inference_attribute"] = inference_attribute
            if probability_attribute is not None:
                self._values["probability_attribute"] = probability_attribute
            if probability_threshold_attribute is not None:
                self._values["probability_threshold_attribute"] = probability_threshold_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode
            if start_time_offset is not None:
                self._values["start_time_offset"] = start_time_offset

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the endpoint data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def end_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the end time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-endtimeoffset
            '''
            result = self._values.get("end_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def inference_attribute(self) -> typing.Optional[builtins.str]:
            '''The attribute of the input data that represents the ground truth label.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-inferenceattribute
            '''
            result = self._values.get("inference_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_attribute(self) -> typing.Optional[builtins.str]:
            '''In a classification problem, the attribute that represents the class probability.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-probabilityattribute
            '''
            result = self._values.get("probability_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def probability_threshold_attribute(self) -> typing.Optional[jsii.Number]:
            '''The threshold for the class probability to be evaluated as a positive result.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-probabilitythresholdattribute
            '''
            result = self._values.get("probability_threshold_attribute")
            return typing.cast(typing.Optional[jsii.Number], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def start_time_offset(self) -> typing.Optional[builtins.str]:
            '''If specified, monitoring jobs substract this time from the start time.

            For information about using offsets for scheduling monitoring jobs, see `Schedule Model Quality Monitoring Jobs <https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor-model-quality-schedule.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-endpointinput.html#cfn-sagemaker-modelqualityjobdefinition-endpointinput-starttimeoffset
            '''
            result = self._values.get("start_time_offset")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.JsonProperty",
        jsii_struct_bases=[],
        name_mapping={"line": "line"},
    )
    class JsonProperty:
        def __init__(
            self,
            *,
            line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The Json format.

            :param line: A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-json.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                json_property = sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                    line=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f4c9d7a354f28cfb41f9918c7c6907d3508e9834a1d0608cd7054de85da8a86e)
                check_type(argname="argument line", value=line, expected_type=type_hints["line"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if line is not None:
                self._values["line"] = line

        @builtins.property
        def line(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-json.html#cfn-sagemaker-modelqualityjobdefinition-json-line
            '''
            result = self._values.get("line")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JsonProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "image_uri": "imageUri",
            "problem_type": "problemType",
            "container_arguments": "containerArguments",
            "container_entrypoint": "containerEntrypoint",
            "environment": "environment",
            "post_analytics_processor_source_uri": "postAnalyticsProcessorSourceUri",
            "record_preprocessor_source_uri": "recordPreprocessorSourceUri",
        },
    )
    class ModelQualityAppSpecificationProperty:
        def __init__(
            self,
            *,
            image_uri: builtins.str,
            problem_type: builtins.str,
            container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
            container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
            record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Container image configuration object for the monitoring job.

            :param image_uri: The address of the container image that the monitoring job runs.
            :param problem_type: The machine learning problem type of the model that the monitoring job monitors.
            :param container_arguments: An array of arguments for the container used to run the monitoring job.
            :param container_entrypoint: Specifies the entrypoint for a container that the monitoring job runs.
            :param environment: Sets the environment variables in the container that the monitoring job runs.
            :param post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
            :param record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_quality_app_specification_property = sagemaker.CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty(
                    image_uri="imageUri",
                    problem_type="problemType",
                
                    # the properties below are optional
                    container_arguments=["containerArguments"],
                    container_entrypoint=["containerEntrypoint"],
                    environment={
                        "environment_key": "environment"
                    },
                    post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                    record_preprocessor_source_uri="recordPreprocessorSourceUri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__be45c2268dae58e29dd4db030dc1f3380067168548e1d2ff4e0a4642b76662a4)
                check_type(argname="argument image_uri", value=image_uri, expected_type=type_hints["image_uri"])
                check_type(argname="argument problem_type", value=problem_type, expected_type=type_hints["problem_type"])
                check_type(argname="argument container_arguments", value=container_arguments, expected_type=type_hints["container_arguments"])
                check_type(argname="argument container_entrypoint", value=container_entrypoint, expected_type=type_hints["container_entrypoint"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument post_analytics_processor_source_uri", value=post_analytics_processor_source_uri, expected_type=type_hints["post_analytics_processor_source_uri"])
                check_type(argname="argument record_preprocessor_source_uri", value=record_preprocessor_source_uri, expected_type=type_hints["record_preprocessor_source_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "image_uri": image_uri,
                "problem_type": problem_type,
            }
            if container_arguments is not None:
                self._values["container_arguments"] = container_arguments
            if container_entrypoint is not None:
                self._values["container_entrypoint"] = container_entrypoint
            if environment is not None:
                self._values["environment"] = environment
            if post_analytics_processor_source_uri is not None:
                self._values["post_analytics_processor_source_uri"] = post_analytics_processor_source_uri
            if record_preprocessor_source_uri is not None:
                self._values["record_preprocessor_source_uri"] = record_preprocessor_source_uri

        @builtins.property
        def image_uri(self) -> builtins.str:
            '''The address of the container image that the monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-imageuri
            '''
            result = self._values.get("image_uri")
            assert result is not None, "Required property 'image_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def problem_type(self) -> builtins.str:
            '''The machine learning problem type of the model that the monitoring job monitors.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-problemtype
            '''
            result = self._values.get("problem_type")
            assert result is not None, "Required property 'problem_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def container_arguments(self) -> typing.Optional[typing.List[builtins.str]]:
            '''An array of arguments for the container used to run the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-containerarguments
            '''
            result = self._values.get("container_arguments")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def container_entrypoint(self) -> typing.Optional[typing.List[builtins.str]]:
            '''Specifies the entrypoint for a container that the monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-containerentrypoint
            '''
            result = self._values.get("container_entrypoint")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Sets the environment variables in the container that the monitoring job runs.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def post_analytics_processor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called after analysis has been performed.

            Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-postanalyticsprocessorsourceuri
            '''
            result = self._values.get("post_analytics_processor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def record_preprocessor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called per row prior to running analysis.

            It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityappspecification.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification-recordpreprocessorsourceuri
            '''
            result = self._values.get("record_preprocessor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelQualityAppSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "baselining_job_name": "baseliningJobName",
            "constraints_resource": "constraintsResource",
        },
    )
    class ModelQualityBaselineConfigProperty:
        def __init__(
            self,
            *,
            baselining_job_name: typing.Optional[builtins.str] = None,
            constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.ConstraintsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Configuration for monitoring constraints and monitoring statistics.

            These baseline resources are compared against the results of the current job from the series of jobs scheduled to collect data periodically.

            :param baselining_job_name: The name of the job that performs baselining for the monitoring job.
            :param constraints_resource: The constraints resource for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_quality_baseline_config_property = sagemaker.CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelQualityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e1e56b4d0dd7476adfd42a62d02c9575a93870102c8ffc441542ea5cf61694aa)
                check_type(argname="argument baselining_job_name", value=baselining_job_name, expected_type=type_hints["baselining_job_name"])
                check_type(argname="argument constraints_resource", value=constraints_resource, expected_type=type_hints["constraints_resource"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if baselining_job_name is not None:
                self._values["baselining_job_name"] = baselining_job_name
            if constraints_resource is not None:
                self._values["constraints_resource"] = constraints_resource

        @builtins.property
        def baselining_job_name(self) -> typing.Optional[builtins.str]:
            '''The name of the job that performs baselining for the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig.html#cfn-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig-baseliningjobname
            '''
            result = self._values.get("baselining_job_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def constraints_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ConstraintsResourceProperty"]]:
            '''The constraints resource for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig.html#cfn-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig-constraintsresource
            '''
            result = self._values.get("constraints_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ConstraintsResourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelQualityBaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.ModelQualityJobInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "ground_truth_s3_input": "groundTruthS3Input",
            "batch_transform_input": "batchTransformInput",
            "endpoint_input": "endpointInput",
        },
    )
    class ModelQualityJobInputProperty:
        def __init__(
            self,
            *,
            ground_truth_s3_input: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty", typing.Dict[builtins.str, typing.Any]]],
            batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.BatchTransformInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.EndpointInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The input for the model quality monitoring job.

            Currently endpoints are supported for input for model quality monitoring jobs.

            :param ground_truth_s3_input: The ground truth label provided for the model.
            :param batch_transform_input: Input object for the batch transform job.
            :param endpoint_input: Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityjobinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                model_quality_job_input_property = sagemaker.CfnModelQualityJobDefinition.ModelQualityJobInputProperty(
                    ground_truth_s3_input=sagemaker.CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty(
                        s3_uri="s3Uri"
                    ),
                
                    # the properties below are optional
                    batch_transform_input=sagemaker.CfnModelQualityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
                
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    ),
                    endpoint_input=sagemaker.CfnModelQualityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
                
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__16e71c34e479607a3391fe5072ed831b7d3a10839360dcabd7f8a221200dd9c9)
                check_type(argname="argument ground_truth_s3_input", value=ground_truth_s3_input, expected_type=type_hints["ground_truth_s3_input"])
                check_type(argname="argument batch_transform_input", value=batch_transform_input, expected_type=type_hints["batch_transform_input"])
                check_type(argname="argument endpoint_input", value=endpoint_input, expected_type=type_hints["endpoint_input"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "ground_truth_s3_input": ground_truth_s3_input,
            }
            if batch_transform_input is not None:
                self._values["batch_transform_input"] = batch_transform_input
            if endpoint_input is not None:
                self._values["endpoint_input"] = endpoint_input

        @builtins.property
        def ground_truth_s3_input(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty"]:
            '''The ground truth label provided for the model.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityjobinput.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityjobinput-groundtruths3input
            '''
            result = self._values.get("ground_truth_s3_input")
            assert result is not None, "Required property 'ground_truth_s3_input' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty"], result)

        @builtins.property
        def batch_transform_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.BatchTransformInputProperty"]]:
            '''Input object for the batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityjobinput.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityjobinput-batchtransforminput
            '''
            result = self._values.get("batch_transform_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.BatchTransformInputProperty"]], result)

        @builtins.property
        def endpoint_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.EndpointInputProperty"]]:
            '''Input object for the endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-modelqualityjobinput.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityjobinput-endpointinput
            '''
            result = self._values.get("endpoint_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.EndpointInputProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ModelQualityJobInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class MonitoringGroundTruthS3InputProperty:
        def __init__(self, *, s3_uri: builtins.str) -> None:
            '''The ground truth labels for the dataset used for the monitoring job.

            :param s3_uri: The address of the Amazon S3 location of the ground truth labels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringgroundtruths3input.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_ground_truth_s3_input_property = sagemaker.CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__32e1bb7f2fb6bb11efc18e84bfaa6d1ce56292b04d8d5d9b419c725ca85acc2f)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_uri": s3_uri,
            }

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''The address of the Amazon S3 location of the ground truth labels.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringgroundtruths3input.html#cfn-sagemaker-modelqualityjobdefinition-monitoringgroundtruths3input-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringGroundTruthS3InputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.MonitoringOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_outputs": "monitoringOutputs",
            "kms_key_id": "kmsKeyId",
        },
    )
    class MonitoringOutputConfigProperty:
        def __init__(
            self,
            *,
            monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.MonitoringOutputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for monitoring jobs.

            :param monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_config_property = sagemaker.CfnModelQualityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelQualityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelQualityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3f94b93c16af4cc55122a6f5114a7037e797a961a2cf10a42a9fdcba768abf74)
                check_type(argname="argument monitoring_outputs", value=monitoring_outputs, expected_type=type_hints["monitoring_outputs"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_outputs": monitoring_outputs,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def monitoring_outputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringOutputProperty"]]]:
            '''Monitoring outputs for monitoring jobs.

            This is where the output of the periodic monitoring jobs is uploaded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelqualityjobdefinition-monitoringoutputconfig-monitoringoutputs
            '''
            result = self._values.get("monitoring_outputs")
            assert result is not None, "Required property 'monitoring_outputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.MonitoringOutputProperty"]]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutputconfig.html#cfn-sagemaker-modelqualityjobdefinition-monitoringoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.MonitoringOutputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_output": "s3Output"},
    )
    class MonitoringOutputProperty:
        def __init__(
            self,
            *,
            s3_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.S3OutputProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The output object for a monitoring job.

            :param s3_output: The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_property = sagemaker.CfnModelQualityJobDefinition.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnModelQualityJobDefinition.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__fc23b18a491249f83a88060541a95cccef4c10aebb744102fe808bfaf8be98da)
                check_type(argname="argument s3_output", value=s3_output, expected_type=type_hints["s3_output"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output": s3_output,
            }

        @builtins.property
        def s3_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.S3OutputProperty"]:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringoutput.html#cfn-sagemaker-modelqualityjobdefinition-monitoringoutput-s3output
            '''
            result = self._values.get("s3_output")
            assert result is not None, "Required property 's3_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.S3OutputProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.MonitoringResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={"cluster_config": "clusterConfig"},
    )
    class MonitoringResourcesProperty:
        def __init__(
            self,
            *,
            cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.ClusterConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Identifies the resources to deploy for a monitoring job.

            :param cluster_config: The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_resources_property = sagemaker.CfnModelQualityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelQualityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__998fe11493b9f1ead5f9991d1f87e7759bd9de540d146859ec3cbac48ea8de47)
                check_type(argname="argument cluster_config", value=cluster_config, expected_type=type_hints["cluster_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cluster_config": cluster_config,
            }

        @builtins.property
        def cluster_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ClusterConfigProperty"]:
            '''The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-monitoringresources.html#cfn-sagemaker-modelqualityjobdefinition-monitoringresources-clusterconfig
            '''
            result = self._values.get("cluster_config")
            assert result is not None, "Required property 'cluster_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.ClusterConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.NetworkConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_inter_container_traffic_encryption": "enableInterContainerTrafficEncryption",
            "enable_network_isolation": "enableNetworkIsolation",
            "vpc_config": "vpcConfig",
        },
    )
    class NetworkConfigProperty:
        def __init__(
            self,
            *,
            enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnModelQualityJobDefinition.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.

            :param enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
            :param enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
            :param vpc_config: Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-networkconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                network_config_property = sagemaker.CfnModelQualityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelQualityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__aa9c313eacfc2297a7cd0cf18d952580f385ca3ad8c91dafd75a2f0f9140df4a)
                check_type(argname="argument enable_inter_container_traffic_encryption", value=enable_inter_container_traffic_encryption, expected_type=type_hints["enable_inter_container_traffic_encryption"])
                check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
                check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_inter_container_traffic_encryption is not None:
                self._values["enable_inter_container_traffic_encryption"] = enable_inter_container_traffic_encryption
            if enable_network_isolation is not None:
                self._values["enable_network_isolation"] = enable_network_isolation
            if vpc_config is not None:
                self._values["vpc_config"] = vpc_config

        @builtins.property
        def enable_inter_container_traffic_encryption(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to encrypt all communications between distributed processing jobs.

            Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-networkconfig.html#cfn-sagemaker-modelqualityjobdefinition-networkconfig-enableintercontainertrafficencryption
            '''
            result = self._values.get("enable_inter_container_traffic_encryption")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def enable_network_isolation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to allow inbound and outbound network calls to and from the containers used for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-networkconfig.html#cfn-sagemaker-modelqualityjobdefinition-networkconfig-enablenetworkisolation
            '''
            result = self._values.get("enable_network_isolation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def vpc_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.VpcConfigProperty"]]:
            '''Specifies a VPC that your training jobs and hosted models have access to.

            Control access to and from your training and model containers by configuring the VPC.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-networkconfig.html#cfn-sagemaker-modelqualityjobdefinition-networkconfig-vpcconfig
            '''
            result = self._values.get("vpc_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnModelQualityJobDefinition.VpcConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.S3OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "local_path": "localPath",
            "s3_uri": "s3Uri",
            "s3_upload_mode": "s3UploadMode",
        },
    )
    class S3OutputProperty:
        def __init__(
            self,
            *,
            local_path: builtins.str,
            s3_uri: builtins.str,
            s3_upload_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :param local_path: The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
            :param s3_uri: A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.
            :param s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-s3output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_output_property = sagemaker.CfnModelQualityJobDefinition.S3OutputProperty(
                    local_path="localPath",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    s3_upload_mode="s3UploadMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5576387ed8cd9e4a7326c42b6f705f7d012c7bcdfb9ee1f677ce0e28ea68342f)
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument s3_upload_mode", value=s3_upload_mode, expected_type=type_hints["s3_upload_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "local_path": local_path,
                "s3_uri": s3_uri,
            }
            if s3_upload_mode is not None:
                self._values["s3_upload_mode"] = s3_upload_mode

        @builtins.property
        def local_path(self) -> builtins.str:
            '''The local path to the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            LocalPath is an absolute path for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-s3output.html#cfn-sagemaker-modelqualityjobdefinition-s3output-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''A URI that identifies the Amazon S3 storage location where Amazon SageMaker saves the results of a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-s3output.html#cfn-sagemaker-modelqualityjobdefinition-s3output-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_upload_mode(self) -> typing.Optional[builtins.str]:
            '''Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-s3output.html#cfn-sagemaker-modelqualityjobdefinition-s3output-s3uploadmode
            '''
            result = self._values.get("s3_upload_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.StoppingConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"max_runtime_in_seconds": "maxRuntimeInSeconds"},
    )
    class StoppingConditionProperty:
        def __init__(self, *, max_runtime_in_seconds: jsii.Number) -> None:
            '''Specifies a limit to how long a model training job or model compilation job can run.

            It also specifies how long a managed spot training job has to complete. When the job reaches the time limit, SageMaker ends the training or compilation job. Use this API to cap model training costs.

            To stop a training job, SageMaker sends the algorithm the ``SIGTERM`` signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost.

            The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with ``CreateModel`` .
            .. epigraph::

               The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.

            :param max_runtime_in_seconds: The maximum length of time, in seconds, that a training or compilation job can run before it is stopped. For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model. For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days. The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-stoppingcondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                stopping_condition_property = sagemaker.CfnModelQualityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__95461f0570a72c179f83ce352039af066f11d84f1d8289a48d5906f0c571a72a)
                check_type(argname="argument max_runtime_in_seconds", value=max_runtime_in_seconds, expected_type=type_hints["max_runtime_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_runtime_in_seconds": max_runtime_in_seconds,
            }

        @builtins.property
        def max_runtime_in_seconds(self) -> jsii.Number:
            '''The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.

            For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.

            For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.

            The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-stoppingcondition.html#cfn-sagemaker-modelqualityjobdefinition-stoppingcondition-maxruntimeinseconds
            '''
            result = self._values.get("max_runtime_in_seconds")
            assert result is not None, "Required property 'max_runtime_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StoppingConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinition.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnModelQualityJobDefinition.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ede33ea9a3e3bcffc42f51b799a3a341ef58031e42a63662c818424188ead4e4)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-vpcconfig.html#cfn-sagemaker-modelqualityjobdefinition-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-modelqualityjobdefinition-vpcconfig.html#cfn-sagemaker-modelqualityjobdefinition-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnModelQualityJobDefinitionProps",
    jsii_struct_bases=[],
    name_mapping={
        "job_resources": "jobResources",
        "model_quality_app_specification": "modelQualityAppSpecification",
        "model_quality_job_input": "modelQualityJobInput",
        "model_quality_job_output_config": "modelQualityJobOutputConfig",
        "role_arn": "roleArn",
        "endpoint_name": "endpointName",
        "job_definition_name": "jobDefinitionName",
        "model_quality_baseline_config": "modelQualityBaselineConfig",
        "network_config": "networkConfig",
        "stopping_condition": "stoppingCondition",
        "tags": "tags",
    },
)
class CfnModelQualityJobDefinitionProps:
    def __init__(
        self,
        *,
        job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
        model_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
        model_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
        model_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        role_arn: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        job_definition_name: typing.Optional[builtins.str] = None,
        model_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnModelQualityJobDefinition``.

        :param job_resources: Identifies the resources to deploy for a monitoring job.
        :param model_quality_app_specification: Container image configuration object for the monitoring job.
        :param model_quality_job_input: A list of the inputs that are monitored. Currently endpoints are supported.
        :param model_quality_job_output_config: The output configuration for monitoring jobs.
        :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
        :param endpoint_name: The name of the endpoint used to run the monitoring job.
        :param job_definition_name: The name of the monitoring job definition.
        :param model_quality_baseline_config: Specifies the constraints and baselines for the monitoring job.
        :param network_config: Specifies the network configuration for the monitoring job.
        :param stopping_condition: A time limit for how long the monitoring job is allowed to run before stopping.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_model_quality_job_definition_props = sagemaker.CfnModelQualityJobDefinitionProps(
                job_resources=sagemaker.CfnModelQualityJobDefinition.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnModelQualityJobDefinition.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
            
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                ),
                model_quality_app_specification=sagemaker.CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty(
                    image_uri="imageUri",
                    problem_type="problemType",
            
                    # the properties below are optional
                    container_arguments=["containerArguments"],
                    container_entrypoint=["containerEntrypoint"],
                    environment={
                        "environment_key": "environment"
                    },
                    post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                    record_preprocessor_source_uri="recordPreprocessorSourceUri"
                ),
                model_quality_job_input=sagemaker.CfnModelQualityJobDefinition.ModelQualityJobInputProperty(
                    ground_truth_s3_input=sagemaker.CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty(
                        s3_uri="s3Uri"
                    ),
            
                    # the properties below are optional
                    batch_transform_input=sagemaker.CfnModelQualityJobDefinition.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnModelQualityJobDefinition.DatasetFormatProperty(
                            csv=sagemaker.CfnModelQualityJobDefinition.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnModelQualityJobDefinition.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
            
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    ),
                    endpoint_input=sagemaker.CfnModelQualityJobDefinition.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
            
                        # the properties below are optional
                        end_time_offset="endTimeOffset",
                        inference_attribute="inferenceAttribute",
                        probability_attribute="probabilityAttribute",
                        probability_threshold_attribute=123,
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode",
                        start_time_offset="startTimeOffset"
                    )
                ),
                model_quality_job_output_config=sagemaker.CfnModelQualityJobDefinition.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnModelQualityJobDefinition.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnModelQualityJobDefinition.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
            
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
            
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                ),
                role_arn="roleArn",
            
                # the properties below are optional
                endpoint_name="endpointName",
                job_definition_name="jobDefinitionName",
                model_quality_baseline_config=sagemaker.CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty(
                    baselining_job_name="baseliningJobName",
                    constraints_resource=sagemaker.CfnModelQualityJobDefinition.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    )
                ),
                network_config=sagemaker.CfnModelQualityJobDefinition.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnModelQualityJobDefinition.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                ),
                stopping_condition=sagemaker.CfnModelQualityJobDefinition.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0f10e098db055e6a84ca2addf51239dd57eff36806af7627bac7fe001acf6efa)
            check_type(argname="argument job_resources", value=job_resources, expected_type=type_hints["job_resources"])
            check_type(argname="argument model_quality_app_specification", value=model_quality_app_specification, expected_type=type_hints["model_quality_app_specification"])
            check_type(argname="argument model_quality_job_input", value=model_quality_job_input, expected_type=type_hints["model_quality_job_input"])
            check_type(argname="argument model_quality_job_output_config", value=model_quality_job_output_config, expected_type=type_hints["model_quality_job_output_config"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument job_definition_name", value=job_definition_name, expected_type=type_hints["job_definition_name"])
            check_type(argname="argument model_quality_baseline_config", value=model_quality_baseline_config, expected_type=type_hints["model_quality_baseline_config"])
            check_type(argname="argument network_config", value=network_config, expected_type=type_hints["network_config"])
            check_type(argname="argument stopping_condition", value=stopping_condition, expected_type=type_hints["stopping_condition"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "job_resources": job_resources,
            "model_quality_app_specification": model_quality_app_specification,
            "model_quality_job_input": model_quality_job_input,
            "model_quality_job_output_config": model_quality_job_output_config,
            "role_arn": role_arn,
        }
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if job_definition_name is not None:
            self._values["job_definition_name"] = job_definition_name
        if model_quality_baseline_config is not None:
            self._values["model_quality_baseline_config"] = model_quality_baseline_config
        if network_config is not None:
            self._values["network_config"] = network_config
        if stopping_condition is not None:
            self._values["stopping_condition"] = stopping_condition
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def job_resources(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringResourcesProperty]:
        '''Identifies the resources to deploy for a monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-jobresources
        '''
        result = self._values.get("job_resources")
        assert result is not None, "Required property 'job_resources' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringResourcesProperty], result)

    @builtins.property
    def model_quality_app_specification(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty]:
        '''Container image configuration object for the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityappspecification
        '''
        result = self._values.get("model_quality_app_specification")
        assert result is not None, "Required property 'model_quality_app_specification' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty], result)

    @builtins.property
    def model_quality_job_input(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityJobInputProperty]:
        '''A list of the inputs that are monitored.

        Currently endpoints are supported.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityjobinput
        '''
        result = self._values.get("model_quality_job_input")
        assert result is not None, "Required property 'model_quality_job_input' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityJobInputProperty], result)

    @builtins.property
    def model_quality_job_output_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringOutputConfigProperty]:
        '''The output configuration for monitoring jobs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-modelqualityjoboutputconfig
        '''
        result = self._values.get("model_quality_job_output_config")
        assert result is not None, "Required property 'model_quality_job_output_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringOutputConfigProperty], result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint used to run the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def job_definition_name(self) -> typing.Optional[builtins.str]:
        '''The name of the monitoring job definition.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-jobdefinitionname
        '''
        result = self._values.get("job_definition_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def model_quality_baseline_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty]]:
        '''Specifies the constraints and baselines for the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-modelqualitybaselineconfig
        '''
        result = self._values.get("model_quality_baseline_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty]], result)

    @builtins.property
    def network_config(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.NetworkConfigProperty]]:
        '''Specifies the network configuration for the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-networkconfig
        '''
        result = self._values.get("network_config")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.NetworkConfigProperty]], result)

    @builtins.property
    def stopping_condition(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.StoppingConditionProperty]]:
        '''A time limit for how long the monitoring job is allowed to run before stopping.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-stoppingcondition
        '''
        result = self._values.get("stopping_condition")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.StoppingConditionProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-modelqualityjobdefinition.html#cfn-sagemaker-modelqualityjobdefinition-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnModelQualityJobDefinitionProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnMonitoringSchedule(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule",
):
    '''The ``AWS::SageMaker::MonitoringSchedule`` resource is an Amazon SageMaker resource type that regularly starts SageMaker processing Jobs to monitor the data captured for a SageMaker endpoint.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html
    :cloudformationResource: AWS::SageMaker::MonitoringSchedule
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_monitoring_schedule = sagemaker.CfnMonitoringSchedule(self, "MyCfnMonitoringSchedule",
            monitoring_schedule_config=sagemaker.CfnMonitoringSchedule.MonitoringScheduleConfigProperty(
                monitoring_job_definition=sagemaker.CfnMonitoringSchedule.MonitoringJobDefinitionProperty(
                    monitoring_app_specification=sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty(
                        image_uri="imageUri",
        
                        # the properties below are optional
                        container_arguments=["containerArguments"],
                        container_entrypoint=["containerEntrypoint"],
                        post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                        record_preprocessor_source_uri="recordPreprocessorSourceUri"
                    ),
                    monitoring_inputs=[sagemaker.CfnMonitoringSchedule.MonitoringInputProperty(
                        batch_transform_input=sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                            data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                            dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                                csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                                    header=False
                                ),
                                json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                                    line=False
                                ),
                                parquet=False
                            ),
                            local_path="localPath",
        
                            # the properties below are optional
                            exclude_features_attribute="excludeFeaturesAttribute",
                            s3_data_distribution_type="s3DataDistributionType",
                            s3_input_mode="s3InputMode"
                        ),
                        endpoint_input=sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                            endpoint_name="endpointName",
                            local_path="localPath",
        
                            # the properties below are optional
                            exclude_features_attribute="excludeFeaturesAttribute",
                            s3_data_distribution_type="s3DataDistributionType",
                            s3_input_mode="s3InputMode"
                        )
                    )],
                    monitoring_output_config=sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty(
                        monitoring_outputs=[sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                            s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                                local_path="localPath",
                                s3_uri="s3Uri",
        
                                # the properties below are optional
                                s3_upload_mode="s3UploadMode"
                            )
                        )],
        
                        # the properties below are optional
                        kms_key_id="kmsKeyId"
                    ),
                    monitoring_resources=sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty(
                        cluster_config=sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                            instance_count=123,
                            instance_type="instanceType",
                            volume_size_in_gb=123,
        
                            # the properties below are optional
                            volume_kms_key_id="volumeKmsKeyId"
                        )
                    ),
                    role_arn="roleArn",
        
                    # the properties below are optional
                    baseline_config=sagemaker.CfnMonitoringSchedule.BaselineConfigProperty(
                        constraints_resource=sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                            s3_uri="s3Uri"
                        ),
                        statistics_resource=sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                            s3_uri="s3Uri"
                        )
                    ),
                    environment={
                        "environment_key": "environment"
                    },
                    network_config=sagemaker.CfnMonitoringSchedule.NetworkConfigProperty(
                        enable_inter_container_traffic_encryption=False,
                        enable_network_isolation=False,
                        vpc_config=sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                            security_group_ids=["securityGroupIds"],
                            subnets=["subnets"]
                        )
                    ),
                    stopping_condition=sagemaker.CfnMonitoringSchedule.StoppingConditionProperty(
                        max_runtime_in_seconds=123
                    )
                ),
                monitoring_job_definition_name="monitoringJobDefinitionName",
                monitoring_type="monitoringType",
                schedule_config=sagemaker.CfnMonitoringSchedule.ScheduleConfigProperty(
                    schedule_expression="scheduleExpression",
        
                    # the properties below are optional
                    data_analysis_end_time="dataAnalysisEndTime",
                    data_analysis_start_time="dataAnalysisStartTime"
                )
            ),
            monitoring_schedule_name="monitoringScheduleName",
        
            # the properties below are optional
            endpoint_name="endpointName",
            failure_reason="failureReason",
            last_monitoring_execution_summary=sagemaker.CfnMonitoringSchedule.MonitoringExecutionSummaryProperty(
                creation_time="creationTime",
                last_modified_time="lastModifiedTime",
                monitoring_execution_status="monitoringExecutionStatus",
                monitoring_schedule_name="monitoringScheduleName",
                scheduled_time="scheduledTime",
        
                # the properties below are optional
                endpoint_name="endpointName",
                failure_reason="failureReason",
                processing_job_arn="processingJobArn"
            ),
            monitoring_schedule_status="monitoringScheduleStatus",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        monitoring_schedule_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringScheduleConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        monitoring_schedule_name: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        failure_reason: typing.Optional[builtins.str] = None,
        last_monitoring_execution_summary: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringExecutionSummaryProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        monitoring_schedule_status: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param monitoring_schedule_config: The configuration object that specifies the monitoring schedule and defines the monitoring job.
        :param monitoring_schedule_name: The name of the monitoring schedule.
        :param endpoint_name: The name of the endpoint using the monitoring schedule.
        :param failure_reason: Contains the reason a monitoring job failed, if it failed.
        :param last_monitoring_execution_summary: Describes metadata on the last execution to run, if there was one.
        :param monitoring_schedule_status: The status of the monitoring schedule.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ca5a38a8da7fe54fa09469575d3375d9a6aa233ff46d22e0e0de6efcaa04aadc)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnMonitoringScheduleProps(
            monitoring_schedule_config=monitoring_schedule_config,
            monitoring_schedule_name=monitoring_schedule_name,
            endpoint_name=endpoint_name,
            failure_reason=failure_reason,
            last_monitoring_execution_summary=last_monitoring_execution_summary,
            monitoring_schedule_status=monitoring_schedule_status,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__126a088c6330d84b4cd9bd7423be2b5230dba858e3db1ea6cac01426a2ff9e86)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8902d7946e4e13058066ee547a2c9868532aa43c8025ee0fd71de41402682d7a)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time when the monitoring schedule was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrLastModifiedTime")
    def attr_last_modified_time(self) -> builtins.str:
        '''The last time that the monitoring schedule was modified.

        :cloudformationAttribute: LastModifiedTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrLastModifiedTime"))

    @builtins.property
    @jsii.member(jsii_name="attrMonitoringScheduleArn")
    def attr_monitoring_schedule_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the monitoring schedule.

        :cloudformationAttribute: MonitoringScheduleArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrMonitoringScheduleArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="monitoringScheduleConfig")
    def monitoring_schedule_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringScheduleConfigProperty"]:
        '''The configuration object that specifies the monitoring schedule and defines the monitoring job.'''
        return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringScheduleConfigProperty"], jsii.get(self, "monitoringScheduleConfig"))

    @monitoring_schedule_config.setter
    def monitoring_schedule_config(
        self,
        value: typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringScheduleConfigProperty"],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__96720df3106409612248d7344ad7ae7186b8abecd3bd05e517ffcf09a8c86a65)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "monitoringScheduleConfig", value)

    @builtins.property
    @jsii.member(jsii_name="monitoringScheduleName")
    def monitoring_schedule_name(self) -> builtins.str:
        '''The name of the monitoring schedule.'''
        return typing.cast(builtins.str, jsii.get(self, "monitoringScheduleName"))

    @monitoring_schedule_name.setter
    def monitoring_schedule_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d86ed63100984532d11aee6d5998f5ecee52e8433ba25fdb25c7b106c771da31)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "monitoringScheduleName", value)

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint using the monitoring schedule.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "endpointName"))

    @endpoint_name.setter
    def endpoint_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a54598e019b9c4853ef5ce7f27446ddd31e8f8004f095b484f7657b89bed2115)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "endpointName", value)

    @builtins.property
    @jsii.member(jsii_name="failureReason")
    def failure_reason(self) -> typing.Optional[builtins.str]:
        '''Contains the reason a monitoring job failed, if it failed.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "failureReason"))

    @failure_reason.setter
    def failure_reason(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d9e06f257c6452ada6adfc5929b62eed4fd9e5befe1cdb66608a7762953043ef)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "failureReason", value)

    @builtins.property
    @jsii.member(jsii_name="lastMonitoringExecutionSummary")
    def last_monitoring_execution_summary(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringExecutionSummaryProperty"]]:
        '''Describes metadata on the last execution to run, if there was one.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringExecutionSummaryProperty"]], jsii.get(self, "lastMonitoringExecutionSummary"))

    @last_monitoring_execution_summary.setter
    def last_monitoring_execution_summary(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringExecutionSummaryProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__21d4f57e3558ee13daf2e78b3d2b7789074a397568a9f915ff84ad16828b14a6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "lastMonitoringExecutionSummary", value)

    @builtins.property
    @jsii.member(jsii_name="monitoringScheduleStatus")
    def monitoring_schedule_status(self) -> typing.Optional[builtins.str]:
        '''The status of the monitoring schedule.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "monitoringScheduleStatus"))

    @monitoring_schedule_status.setter
    def monitoring_schedule_status(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ca21323324de2cfa944b92e83cbca8a400e2315fd8053984e87cbb53a7e724e6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "monitoringScheduleStatus", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__705853eb754b81ba432bb4f34184384e8b9b8ecd6371672e6fd0d54466cf04ee)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.BaselineConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "constraints_resource": "constraintsResource",
            "statistics_resource": "statisticsResource",
        },
    )
    class BaselineConfigProperty:
        def __init__(
            self,
            *,
            constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.ConstraintsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            statistics_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.StatisticsResourceProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Baseline configuration used to validate that the data conforms to the specified constraints and statistics.

            :param constraints_resource: The Amazon S3 URI for the constraints resource.
            :param statistics_resource: The baseline statistics file in Amazon S3 that the current monitoring job should be validated against.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-baselineconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                baseline_config_property = sagemaker.CfnMonitoringSchedule.BaselineConfigProperty(
                    constraints_resource=sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                        s3_uri="s3Uri"
                    ),
                    statistics_resource=sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                        s3_uri="s3Uri"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0ce194d45dca8ccf39b5ae84a3282a7fc7985302038c0fc714ebb53fd294d3cc)
                check_type(argname="argument constraints_resource", value=constraints_resource, expected_type=type_hints["constraints_resource"])
                check_type(argname="argument statistics_resource", value=statistics_resource, expected_type=type_hints["statistics_resource"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if constraints_resource is not None:
                self._values["constraints_resource"] = constraints_resource
            if statistics_resource is not None:
                self._values["statistics_resource"] = statistics_resource

        @builtins.property
        def constraints_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ConstraintsResourceProperty"]]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-baselineconfig.html#cfn-sagemaker-monitoringschedule-baselineconfig-constraintsresource
            '''
            result = self._values.get("constraints_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ConstraintsResourceProperty"]], result)

        @builtins.property
        def statistics_resource(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.StatisticsResourceProperty"]]:
            '''The baseline statistics file in Amazon S3 that the current monitoring job should be validated against.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-baselineconfig.html#cfn-sagemaker-monitoringschedule-baselineconfig-statisticsresource
            '''
            result = self._values.get("statistics_resource")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.StatisticsResourceProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BaselineConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "data_captured_destination_s3_uri": "dataCapturedDestinationS3Uri",
            "dataset_format": "datasetFormat",
            "local_path": "localPath",
            "exclude_features_attribute": "excludeFeaturesAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class BatchTransformInputProperty:
        def __init__(
            self,
            *,
            data_captured_destination_s3_uri: builtins.str,
            dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.DatasetFormatProperty", typing.Dict[builtins.str, typing.Any]]],
            local_path: builtins.str,
            exclude_features_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the batch transform job.

            :param data_captured_destination_s3_uri: The Amazon S3 location being used to capture the data.
            :param dataset_format: The dataset format for your batch transform job.
            :param local_path: Path to the filesystem where the batch transform data is available to the container.
            :param exclude_features_attribute: The attributes of the input data to exclude from the analysis.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                batch_transform_input_property = sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                    data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                    dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                        csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                            header=False
                        ),
                        json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                            line=False
                        ),
                        parquet=False
                    ),
                    local_path="localPath",
                
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__eedba47561ccd78a9b98fed7f927738ee65a856721f279e9c8a39a52b44e3241)
                check_type(argname="argument data_captured_destination_s3_uri", value=data_captured_destination_s3_uri, expected_type=type_hints["data_captured_destination_s3_uri"])
                check_type(argname="argument dataset_format", value=dataset_format, expected_type=type_hints["dataset_format"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument exclude_features_attribute", value=exclude_features_attribute, expected_type=type_hints["exclude_features_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "data_captured_destination_s3_uri": data_captured_destination_s3_uri,
                "dataset_format": dataset_format,
                "local_path": local_path,
            }
            if exclude_features_attribute is not None:
                self._values["exclude_features_attribute"] = exclude_features_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def data_captured_destination_s3_uri(self) -> builtins.str:
            '''The Amazon S3 location being used to capture the data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-datacaptureddestinations3uri
            '''
            result = self._values.get("data_captured_destination_s3_uri")
            assert result is not None, "Required property 'data_captured_destination_s3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def dataset_format(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.DatasetFormatProperty"]:
            '''The dataset format for your batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-datasetformat
            '''
            result = self._values.get("dataset_format")
            assert result is not None, "Required property 'dataset_format' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.DatasetFormatProperty"], result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the batch transform data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def exclude_features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data to exclude from the analysis.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-excludefeaturesattribute
            '''
            result = self._values.get("exclude_features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-batchtransforminput.html#cfn-sagemaker-monitoringschedule-batchtransforminput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "BatchTransformInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.ClusterConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_count": "instanceCount",
            "instance_type": "instanceType",
            "volume_size_in_gb": "volumeSizeInGb",
            "volume_kms_key_id": "volumeKmsKeyId",
        },
    )
    class ClusterConfigProperty:
        def __init__(
            self,
            *,
            instance_count: jsii.Number,
            instance_type: builtins.str,
            volume_size_in_gb: jsii.Number,
            volume_kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Configuration for the cluster used to run model monitoring jobs.

            :param instance_count: The number of ML compute instances to use in the model monitoring job. For distributed processing jobs, specify a value greater than 1. The default value is 1.
            :param instance_type: The ML compute instance type for the processing job.
            :param volume_size_in_gb: The size of the ML storage volume, in gigabytes, that you want to provision. You must specify sufficient ML storage for your scenario.
            :param volume_kms_key_id: The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-clusterconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cluster_config_property = sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                    instance_count=123,
                    instance_type="instanceType",
                    volume_size_in_gb=123,
                
                    # the properties below are optional
                    volume_kms_key_id="volumeKmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__929e18c0e7ad9bf3ca25178c420d84fdf0ba8ef328dee1b3cb869fd9a093e61c)
                check_type(argname="argument instance_count", value=instance_count, expected_type=type_hints["instance_count"])
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
                check_type(argname="argument volume_kms_key_id", value=volume_kms_key_id, expected_type=type_hints["volume_kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "instance_count": instance_count,
                "instance_type": instance_type,
                "volume_size_in_gb": volume_size_in_gb,
            }
            if volume_kms_key_id is not None:
                self._values["volume_kms_key_id"] = volume_kms_key_id

        @builtins.property
        def instance_count(self) -> jsii.Number:
            '''The number of ML compute instances to use in the model monitoring job.

            For distributed processing jobs, specify a value greater than 1. The default value is 1.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-clusterconfig.html#cfn-sagemaker-monitoringschedule-clusterconfig-instancecount
            '''
            result = self._values.get("instance_count")
            assert result is not None, "Required property 'instance_count' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def instance_type(self) -> builtins.str:
            '''The ML compute instance type for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-clusterconfig.html#cfn-sagemaker-monitoringschedule-clusterconfig-instancetype
            '''
            result = self._values.get("instance_type")
            assert result is not None, "Required property 'instance_type' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def volume_size_in_gb(self) -> jsii.Number:
            '''The size of the ML storage volume, in gigabytes, that you want to provision.

            You must specify sufficient ML storage for your scenario.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-clusterconfig.html#cfn-sagemaker-monitoringschedule-clusterconfig-volumesizeingb
            '''
            result = self._values.get("volume_size_in_gb")
            assert result is not None, "Required property 'volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def volume_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS) key that Amazon SageMaker uses to encrypt data on the storage volume attached to the ML compute instance(s) that run the model monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-clusterconfig.html#cfn-sagemaker-monitoringschedule-clusterconfig-volumekmskeyid
            '''
            result = self._values.get("volume_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ClusterConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class ConstraintsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The Amazon S3 URI for the constraints resource.

            :param s3_uri: The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-constraintsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                constraints_resource_property = sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2caa81822304ad652e60a0e510b5304088fb5b1ef4e1401a20a4d08f04e35400)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The Amazon S3 URI for the constraints resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-constraintsresource.html#cfn-sagemaker-monitoringschedule-constraintsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ConstraintsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.CsvProperty",
        jsii_struct_bases=[],
        name_mapping={"header": "header"},
    )
    class CsvProperty:
        def __init__(
            self,
            *,
            header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The CSV format.

            :param header: A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-csv.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                csv_property = sagemaker.CfnMonitoringSchedule.CsvProperty(
                    header=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d45116cd59cb386954acf6d44a6f0cc293bb273c742160854144a528ef29794d)
                check_type(argname="argument header", value=header, expected_type=type_hints["header"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if header is not None:
                self._values["header"] = header

        @builtins.property
        def header(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if given CSV has header.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-csv.html#cfn-sagemaker-monitoringschedule-csv-header
            '''
            result = self._values.get("header")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CsvProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.DatasetFormatProperty",
        jsii_struct_bases=[],
        name_mapping={"csv": "csv", "json": "json", "parquet": "parquet"},
    )
    class DatasetFormatProperty:
        def __init__(
            self,
            *,
            csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.CsvProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.JsonProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The dataset format of the data to monitor.

            :param csv: The CSV format.
            :param json: The Json format.
            :param parquet: A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-datasetformat.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                dataset_format_property = sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                    csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                        header=False
                    ),
                    json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                        line=False
                    ),
                    parquet=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__7661bc4fdc1f4bc63f3a98cdda3172a8d07459f192e8de328102129b3b2f5582)
                check_type(argname="argument csv", value=csv, expected_type=type_hints["csv"])
                check_type(argname="argument json", value=json, expected_type=type_hints["json"])
                check_type(argname="argument parquet", value=parquet, expected_type=type_hints["parquet"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if csv is not None:
                self._values["csv"] = csv
            if json is not None:
                self._values["json"] = json
            if parquet is not None:
                self._values["parquet"] = parquet

        @builtins.property
        def csv(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.CsvProperty"]]:
            '''The CSV format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-datasetformat.html#cfn-sagemaker-monitoringschedule-datasetformat-csv
            '''
            result = self._values.get("csv")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.CsvProperty"]], result)

        @builtins.property
        def json(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.JsonProperty"]]:
            '''The Json format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-datasetformat.html#cfn-sagemaker-monitoringschedule-datasetformat-json
            '''
            result = self._values.get("json")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.JsonProperty"]], result)

        @builtins.property
        def parquet(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A flag indicating if the dataset format is Parquet.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-datasetformat.html#cfn-sagemaker-monitoringschedule-datasetformat-parquet
            '''
            result = self._values.get("parquet")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DatasetFormatProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.EndpointInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "endpoint_name": "endpointName",
            "local_path": "localPath",
            "exclude_features_attribute": "excludeFeaturesAttribute",
            "s3_data_distribution_type": "s3DataDistributionType",
            "s3_input_mode": "s3InputMode",
        },
    )
    class EndpointInputProperty:
        def __init__(
            self,
            *,
            endpoint_name: builtins.str,
            local_path: builtins.str,
            exclude_features_attribute: typing.Optional[builtins.str] = None,
            s3_data_distribution_type: typing.Optional[builtins.str] = None,
            s3_input_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Input object for the endpoint.

            :param endpoint_name: An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.
            :param local_path: Path to the filesystem where the endpoint data is available to the container.
            :param exclude_features_attribute: The attributes of the input data to exclude from the analysis.
            :param s3_data_distribution_type: Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key. Defaults to ``FullyReplicated``
            :param s3_input_mode: Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job. ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                endpoint_input_property = sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                    endpoint_name="endpointName",
                    local_path="localPath",
                
                    # the properties below are optional
                    exclude_features_attribute="excludeFeaturesAttribute",
                    s3_data_distribution_type="s3DataDistributionType",
                    s3_input_mode="s3InputMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__2c39d68d5dfd7639ec6547197fd64e012cbb28a35a29caa52c34f3746d539b66)
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument exclude_features_attribute", value=exclude_features_attribute, expected_type=type_hints["exclude_features_attribute"])
                check_type(argname="argument s3_data_distribution_type", value=s3_data_distribution_type, expected_type=type_hints["s3_data_distribution_type"])
                check_type(argname="argument s3_input_mode", value=s3_input_mode, expected_type=type_hints["s3_input_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "endpoint_name": endpoint_name,
                "local_path": local_path,
            }
            if exclude_features_attribute is not None:
                self._values["exclude_features_attribute"] = exclude_features_attribute
            if s3_data_distribution_type is not None:
                self._values["s3_data_distribution_type"] = s3_data_distribution_type
            if s3_input_mode is not None:
                self._values["s3_input_mode"] = s3_input_mode

        @builtins.property
        def endpoint_name(self) -> builtins.str:
            '''An endpoint in customer's account which has enabled ``DataCaptureConfig`` enabled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html#cfn-sagemaker-monitoringschedule-endpointinput-endpointname
            '''
            result = self._values.get("endpoint_name")
            assert result is not None, "Required property 'endpoint_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def local_path(self) -> builtins.str:
            '''Path to the filesystem where the endpoint data is available to the container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html#cfn-sagemaker-monitoringschedule-endpointinput-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def exclude_features_attribute(self) -> typing.Optional[builtins.str]:
            '''The attributes of the input data to exclude from the analysis.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html#cfn-sagemaker-monitoringschedule-endpointinput-excludefeaturesattribute
            '''
            result = self._values.get("exclude_features_attribute")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_data_distribution_type(self) -> typing.Optional[builtins.str]:
            '''Whether input data distributed in Amazon S3 is fully replicated or sharded by an Amazon S3 key.

            Defaults to ``FullyReplicated``

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html#cfn-sagemaker-monitoringschedule-endpointinput-s3datadistributiontype
            '''
            result = self._values.get("s3_data_distribution_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_input_mode(self) -> typing.Optional[builtins.str]:
            '''Whether the ``Pipe`` or ``File`` is used as the input mode for transferring data for the monitoring job.

            ``Pipe`` mode is recommended for large datasets. ``File`` mode is useful for small files that fit in memory. Defaults to ``File`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-endpointinput.html#cfn-sagemaker-monitoringschedule-endpointinput-s3inputmode
            '''
            result = self._values.get("s3_input_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EndpointInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.JsonProperty",
        jsii_struct_bases=[],
        name_mapping={"line": "line"},
    )
    class JsonProperty:
        def __init__(
            self,
            *,
            line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
        ) -> None:
            '''The Json format.

            :param line: A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-json.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                json_property = sagemaker.CfnMonitoringSchedule.JsonProperty(
                    line=False
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a8afa28f544cd3df1d0316feaf8abbe78c4e01de2bc12c6f8e867e9106450abc)
                check_type(argname="argument line", value=line, expected_type=type_hints["line"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if line is not None:
                self._values["line"] = line

        @builtins.property
        def line(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''A boolean flag indicating if it is JSON line format.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-json.html#cfn-sagemaker-monitoringschedule-json-line
            '''
            result = self._values.get("line")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JsonProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "image_uri": "imageUri",
            "container_arguments": "containerArguments",
            "container_entrypoint": "containerEntrypoint",
            "post_analytics_processor_source_uri": "postAnalyticsProcessorSourceUri",
            "record_preprocessor_source_uri": "recordPreprocessorSourceUri",
        },
    )
    class MonitoringAppSpecificationProperty:
        def __init__(
            self,
            *,
            image_uri: builtins.str,
            container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
            container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
            post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
            record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Container image configuration object for the monitoring job.

            :param image_uri: The container image to be run by the monitoring job.
            :param container_arguments: An array of arguments for the container used to run the monitoring job.
            :param container_entrypoint: Specifies the entrypoint for a container used to run the monitoring job.
            :param post_analytics_processor_source_uri: An Amazon S3 URI to a script that is called after analysis has been performed. Applicable only for the built-in (first party) containers.
            :param record_preprocessor_source_uri: An Amazon S3 URI to a script that is called per row prior to running analysis. It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_app_specification_property = sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty(
                    image_uri="imageUri",
                
                    # the properties below are optional
                    container_arguments=["containerArguments"],
                    container_entrypoint=["containerEntrypoint"],
                    post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                    record_preprocessor_source_uri="recordPreprocessorSourceUri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__005040f13e21d59e3d26250e2d3f7b29b6b4999d51eac7d7752141b09056dcc5)
                check_type(argname="argument image_uri", value=image_uri, expected_type=type_hints["image_uri"])
                check_type(argname="argument container_arguments", value=container_arguments, expected_type=type_hints["container_arguments"])
                check_type(argname="argument container_entrypoint", value=container_entrypoint, expected_type=type_hints["container_entrypoint"])
                check_type(argname="argument post_analytics_processor_source_uri", value=post_analytics_processor_source_uri, expected_type=type_hints["post_analytics_processor_source_uri"])
                check_type(argname="argument record_preprocessor_source_uri", value=record_preprocessor_source_uri, expected_type=type_hints["record_preprocessor_source_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "image_uri": image_uri,
            }
            if container_arguments is not None:
                self._values["container_arguments"] = container_arguments
            if container_entrypoint is not None:
                self._values["container_entrypoint"] = container_entrypoint
            if post_analytics_processor_source_uri is not None:
                self._values["post_analytics_processor_source_uri"] = post_analytics_processor_source_uri
            if record_preprocessor_source_uri is not None:
                self._values["record_preprocessor_source_uri"] = record_preprocessor_source_uri

        @builtins.property
        def image_uri(self) -> builtins.str:
            '''The container image to be run by the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-imageuri
            '''
            result = self._values.get("image_uri")
            assert result is not None, "Required property 'image_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def container_arguments(self) -> typing.Optional[typing.List[builtins.str]]:
            '''An array of arguments for the container used to run the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-containerarguments
            '''
            result = self._values.get("container_arguments")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def container_entrypoint(self) -> typing.Optional[typing.List[builtins.str]]:
            '''Specifies the entrypoint for a container used to run the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-containerentrypoint
            '''
            result = self._values.get("container_entrypoint")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def post_analytics_processor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called after analysis has been performed.

            Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-postanalyticsprocessorsourceuri
            '''
            result = self._values.get("post_analytics_processor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def record_preprocessor_source_uri(self) -> typing.Optional[builtins.str]:
            '''An Amazon S3 URI to a script that is called per row prior to running analysis.

            It can base64 decode the payload and convert it into a flattened JSON so that the built-in container can use the converted data. Applicable only for the built-in (first party) containers.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringappspecification.html#cfn-sagemaker-monitoringschedule-monitoringappspecification-recordpreprocessorsourceuri
            '''
            result = self._values.get("record_preprocessor_source_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringAppSpecificationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringExecutionSummaryProperty",
        jsii_struct_bases=[],
        name_mapping={
            "creation_time": "creationTime",
            "last_modified_time": "lastModifiedTime",
            "monitoring_execution_status": "monitoringExecutionStatus",
            "monitoring_schedule_name": "monitoringScheduleName",
            "scheduled_time": "scheduledTime",
            "endpoint_name": "endpointName",
            "failure_reason": "failureReason",
            "processing_job_arn": "processingJobArn",
        },
    )
    class MonitoringExecutionSummaryProperty:
        def __init__(
            self,
            *,
            creation_time: builtins.str,
            last_modified_time: builtins.str,
            monitoring_execution_status: builtins.str,
            monitoring_schedule_name: builtins.str,
            scheduled_time: builtins.str,
            endpoint_name: typing.Optional[builtins.str] = None,
            failure_reason: typing.Optional[builtins.str] = None,
            processing_job_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Summary of information about the last monitoring job to run.

            :param creation_time: The time at which the monitoring job was created.
            :param last_modified_time: A timestamp that indicates the last time the monitoring job was modified.
            :param monitoring_execution_status: The status of the monitoring job.
            :param monitoring_schedule_name: The name of the monitoring schedule.
            :param scheduled_time: The time the monitoring job was scheduled.
            :param endpoint_name: The name of the endpoint used to run the monitoring job.
            :param failure_reason: Contains the reason a monitoring job failed, if it failed.
            :param processing_job_arn: The Amazon Resource Name (ARN) of the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_execution_summary_property = sagemaker.CfnMonitoringSchedule.MonitoringExecutionSummaryProperty(
                    creation_time="creationTime",
                    last_modified_time="lastModifiedTime",
                    monitoring_execution_status="monitoringExecutionStatus",
                    monitoring_schedule_name="monitoringScheduleName",
                    scheduled_time="scheduledTime",
                
                    # the properties below are optional
                    endpoint_name="endpointName",
                    failure_reason="failureReason",
                    processing_job_arn="processingJobArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bd490448650454b6dd63c86d10f1d5a048e5c5ed8122132f650622306f3b621d)
                check_type(argname="argument creation_time", value=creation_time, expected_type=type_hints["creation_time"])
                check_type(argname="argument last_modified_time", value=last_modified_time, expected_type=type_hints["last_modified_time"])
                check_type(argname="argument monitoring_execution_status", value=monitoring_execution_status, expected_type=type_hints["monitoring_execution_status"])
                check_type(argname="argument monitoring_schedule_name", value=monitoring_schedule_name, expected_type=type_hints["monitoring_schedule_name"])
                check_type(argname="argument scheduled_time", value=scheduled_time, expected_type=type_hints["scheduled_time"])
                check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
                check_type(argname="argument failure_reason", value=failure_reason, expected_type=type_hints["failure_reason"])
                check_type(argname="argument processing_job_arn", value=processing_job_arn, expected_type=type_hints["processing_job_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "creation_time": creation_time,
                "last_modified_time": last_modified_time,
                "monitoring_execution_status": monitoring_execution_status,
                "monitoring_schedule_name": monitoring_schedule_name,
                "scheduled_time": scheduled_time,
            }
            if endpoint_name is not None:
                self._values["endpoint_name"] = endpoint_name
            if failure_reason is not None:
                self._values["failure_reason"] = failure_reason
            if processing_job_arn is not None:
                self._values["processing_job_arn"] = processing_job_arn

        @builtins.property
        def creation_time(self) -> builtins.str:
            '''The time at which the monitoring job was created.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-creationtime
            '''
            result = self._values.get("creation_time")
            assert result is not None, "Required property 'creation_time' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def last_modified_time(self) -> builtins.str:
            '''A timestamp that indicates the last time the monitoring job was modified.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-lastmodifiedtime
            '''
            result = self._values.get("last_modified_time")
            assert result is not None, "Required property 'last_modified_time' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def monitoring_execution_status(self) -> builtins.str:
            '''The status of the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-monitoringexecutionstatus
            '''
            result = self._values.get("monitoring_execution_status")
            assert result is not None, "Required property 'monitoring_execution_status' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def monitoring_schedule_name(self) -> builtins.str:
            '''The name of the monitoring schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-monitoringschedulename
            '''
            result = self._values.get("monitoring_schedule_name")
            assert result is not None, "Required property 'monitoring_schedule_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def scheduled_time(self) -> builtins.str:
            '''The time the monitoring job was scheduled.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-scheduledtime
            '''
            result = self._values.get("scheduled_time")
            assert result is not None, "Required property 'scheduled_time' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def endpoint_name(self) -> typing.Optional[builtins.str]:
            '''The name of the endpoint used to run the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-endpointname
            '''
            result = self._values.get("endpoint_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def failure_reason(self) -> typing.Optional[builtins.str]:
            '''Contains the reason a monitoring job failed, if it failed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-failurereason
            '''
            result = self._values.get("failure_reason")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def processing_job_arn(self) -> typing.Optional[builtins.str]:
            '''The Amazon Resource Name (ARN) of the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringexecutionsummary.html#cfn-sagemaker-monitoringschedule-monitoringexecutionsummary-processingjobarn
            '''
            result = self._values.get("processing_job_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringExecutionSummaryProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringInputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "batch_transform_input": "batchTransformInput",
            "endpoint_input": "endpointInput",
        },
    )
    class MonitoringInputProperty:
        def __init__(
            self,
            *,
            batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.BatchTransformInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.EndpointInputProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The inputs for a monitoring job.

            :param batch_transform_input: Input object for the batch transform job.
            :param endpoint_input: The endpoint for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringinput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_input_property = sagemaker.CfnMonitoringSchedule.MonitoringInputProperty(
                    batch_transform_input=sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                        data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                        dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                            csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                                header=False
                            ),
                            json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                                line=False
                            ),
                            parquet=False
                        ),
                        local_path="localPath",
                
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    ),
                    endpoint_input=sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                        endpoint_name="endpointName",
                        local_path="localPath",
                
                        # the properties below are optional
                        exclude_features_attribute="excludeFeaturesAttribute",
                        s3_data_distribution_type="s3DataDistributionType",
                        s3_input_mode="s3InputMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d4168c0367a28b1cfe3e6543b3df6e71358f88a1ffdfa88d2ed02691e0b6b39a)
                check_type(argname="argument batch_transform_input", value=batch_transform_input, expected_type=type_hints["batch_transform_input"])
                check_type(argname="argument endpoint_input", value=endpoint_input, expected_type=type_hints["endpoint_input"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if batch_transform_input is not None:
                self._values["batch_transform_input"] = batch_transform_input
            if endpoint_input is not None:
                self._values["endpoint_input"] = endpoint_input

        @builtins.property
        def batch_transform_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.BatchTransformInputProperty"]]:
            '''Input object for the batch transform job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringinput.html#cfn-sagemaker-monitoringschedule-monitoringinput-batchtransforminput
            '''
            result = self._values.get("batch_transform_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.BatchTransformInputProperty"]], result)

        @builtins.property
        def endpoint_input(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.EndpointInputProperty"]]:
            '''The endpoint for a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringinput.html#cfn-sagemaker-monitoringschedule-monitoringinput-endpointinput
            '''
            result = self._values.get("endpoint_input")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.EndpointInputProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringInputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringJobDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_app_specification": "monitoringAppSpecification",
            "monitoring_inputs": "monitoringInputs",
            "monitoring_output_config": "monitoringOutputConfig",
            "monitoring_resources": "monitoringResources",
            "role_arn": "roleArn",
            "baseline_config": "baselineConfig",
            "environment": "environment",
            "network_config": "networkConfig",
            "stopping_condition": "stoppingCondition",
        },
    )
    class MonitoringJobDefinitionProperty:
        def __init__(
            self,
            *,
            monitoring_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringAppSpecificationProperty", typing.Dict[builtins.str, typing.Any]]],
            monitoring_inputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringInputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            monitoring_output_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringOutputConfigProperty", typing.Dict[builtins.str, typing.Any]]],
            monitoring_resources: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringResourcesProperty", typing.Dict[builtins.str, typing.Any]]],
            role_arn: builtins.str,
            baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.BaselineConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
            network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.NetworkConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.StoppingConditionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Defines the monitoring job.

            :param monitoring_app_specification: Configures the monitoring job to run a specified Docker container image.
            :param monitoring_inputs: The array of inputs for the monitoring job. Currently we support monitoring an Amazon SageMaker Endpoint.
            :param monitoring_output_config: The array of outputs from the monitoring job to be uploaded to Amazon S3.
            :param monitoring_resources: Identifies the resources, ML compute instances, and ML storage volumes to deploy for a monitoring job. In distributed processing, you specify more than one instance.
            :param role_arn: The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.
            :param baseline_config: Baseline configuration used to validate that the data conforms to the specified constraints and statistics.
            :param environment: Sets the environment variables in the Docker container.
            :param network_config: Specifies networking options for an monitoring job.
            :param stopping_condition: Specifies a time limit for how long the monitoring job is allowed to run.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_job_definition_property = sagemaker.CfnMonitoringSchedule.MonitoringJobDefinitionProperty(
                    monitoring_app_specification=sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty(
                        image_uri="imageUri",
                
                        # the properties below are optional
                        container_arguments=["containerArguments"],
                        container_entrypoint=["containerEntrypoint"],
                        post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                        record_preprocessor_source_uri="recordPreprocessorSourceUri"
                    ),
                    monitoring_inputs=[sagemaker.CfnMonitoringSchedule.MonitoringInputProperty(
                        batch_transform_input=sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                            data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                            dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                                csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                                    header=False
                                ),
                                json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                                    line=False
                                ),
                                parquet=False
                            ),
                            local_path="localPath",
                
                            # the properties below are optional
                            exclude_features_attribute="excludeFeaturesAttribute",
                            s3_data_distribution_type="s3DataDistributionType",
                            s3_input_mode="s3InputMode"
                        ),
                        endpoint_input=sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                            endpoint_name="endpointName",
                            local_path="localPath",
                
                            # the properties below are optional
                            exclude_features_attribute="excludeFeaturesAttribute",
                            s3_data_distribution_type="s3DataDistributionType",
                            s3_input_mode="s3InputMode"
                        )
                    )],
                    monitoring_output_config=sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty(
                        monitoring_outputs=[sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                            s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                                local_path="localPath",
                                s3_uri="s3Uri",
                
                                # the properties below are optional
                                s3_upload_mode="s3UploadMode"
                            )
                        )],
                
                        # the properties below are optional
                        kms_key_id="kmsKeyId"
                    ),
                    monitoring_resources=sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty(
                        cluster_config=sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                            instance_count=123,
                            instance_type="instanceType",
                            volume_size_in_gb=123,
                
                            # the properties below are optional
                            volume_kms_key_id="volumeKmsKeyId"
                        )
                    ),
                    role_arn="roleArn",
                
                    # the properties below are optional
                    baseline_config=sagemaker.CfnMonitoringSchedule.BaselineConfigProperty(
                        constraints_resource=sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                            s3_uri="s3Uri"
                        ),
                        statistics_resource=sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                            s3_uri="s3Uri"
                        )
                    ),
                    environment={
                        "environment_key": "environment"
                    },
                    network_config=sagemaker.CfnMonitoringSchedule.NetworkConfigProperty(
                        enable_inter_container_traffic_encryption=False,
                        enable_network_isolation=False,
                        vpc_config=sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                            security_group_ids=["securityGroupIds"],
                            subnets=["subnets"]
                        )
                    ),
                    stopping_condition=sagemaker.CfnMonitoringSchedule.StoppingConditionProperty(
                        max_runtime_in_seconds=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b910b71aa0bd7c4735c78fd94a919ccf37569efb82cd95f526e9b54a3fce538d)
                check_type(argname="argument monitoring_app_specification", value=monitoring_app_specification, expected_type=type_hints["monitoring_app_specification"])
                check_type(argname="argument monitoring_inputs", value=monitoring_inputs, expected_type=type_hints["monitoring_inputs"])
                check_type(argname="argument monitoring_output_config", value=monitoring_output_config, expected_type=type_hints["monitoring_output_config"])
                check_type(argname="argument monitoring_resources", value=monitoring_resources, expected_type=type_hints["monitoring_resources"])
                check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
                check_type(argname="argument baseline_config", value=baseline_config, expected_type=type_hints["baseline_config"])
                check_type(argname="argument environment", value=environment, expected_type=type_hints["environment"])
                check_type(argname="argument network_config", value=network_config, expected_type=type_hints["network_config"])
                check_type(argname="argument stopping_condition", value=stopping_condition, expected_type=type_hints["stopping_condition"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_app_specification": monitoring_app_specification,
                "monitoring_inputs": monitoring_inputs,
                "monitoring_output_config": monitoring_output_config,
                "monitoring_resources": monitoring_resources,
                "role_arn": role_arn,
            }
            if baseline_config is not None:
                self._values["baseline_config"] = baseline_config
            if environment is not None:
                self._values["environment"] = environment
            if network_config is not None:
                self._values["network_config"] = network_config
            if stopping_condition is not None:
                self._values["stopping_condition"] = stopping_condition

        @builtins.property
        def monitoring_app_specification(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringAppSpecificationProperty"]:
            '''Configures the monitoring job to run a specified Docker container image.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-monitoringappspecification
            '''
            result = self._values.get("monitoring_app_specification")
            assert result is not None, "Required property 'monitoring_app_specification' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringAppSpecificationProperty"], result)

        @builtins.property
        def monitoring_inputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringInputProperty"]]]:
            '''The array of inputs for the monitoring job.

            Currently we support monitoring an Amazon SageMaker Endpoint.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-monitoringinputs
            '''
            result = self._values.get("monitoring_inputs")
            assert result is not None, "Required property 'monitoring_inputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringInputProperty"]]], result)

        @builtins.property
        def monitoring_output_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringOutputConfigProperty"]:
            '''The array of outputs from the monitoring job to be uploaded to Amazon S3.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-monitoringoutputconfig
            '''
            result = self._values.get("monitoring_output_config")
            assert result is not None, "Required property 'monitoring_output_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringOutputConfigProperty"], result)

        @builtins.property
        def monitoring_resources(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringResourcesProperty"]:
            '''Identifies the resources, ML compute instances, and ML storage volumes to deploy for a monitoring job.

            In distributed processing, you specify more than one instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-monitoringresources
            '''
            result = self._values.get("monitoring_resources")
            assert result is not None, "Required property 'monitoring_resources' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringResourcesProperty"], result)

        @builtins.property
        def role_arn(self) -> builtins.str:
            '''The Amazon Resource Name (ARN) of an IAM role that Amazon SageMaker can assume to perform tasks on your behalf.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-rolearn
            '''
            result = self._values.get("role_arn")
            assert result is not None, "Required property 'role_arn' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def baseline_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.BaselineConfigProperty"]]:
            '''Baseline configuration used to validate that the data conforms to the specified constraints and statistics.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-baselineconfig
            '''
            result = self._values.get("baseline_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.BaselineConfigProperty"]], result)

        @builtins.property
        def environment(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]]:
            '''Sets the environment variables in the Docker container.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-environment
            '''
            result = self._values.get("environment")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]], result)

        @builtins.property
        def network_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.NetworkConfigProperty"]]:
            '''Specifies networking options for an monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-networkconfig
            '''
            result = self._values.get("network_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.NetworkConfigProperty"]], result)

        @builtins.property
        def stopping_condition(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.StoppingConditionProperty"]]:
            '''Specifies a time limit for how long the monitoring job is allowed to run.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringjobdefinition.html#cfn-sagemaker-monitoringschedule-monitoringjobdefinition-stoppingcondition
            '''
            result = self._values.get("stopping_condition")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.StoppingConditionProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringJobDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_outputs": "monitoringOutputs",
            "kms_key_id": "kmsKeyId",
        },
    )
    class MonitoringOutputConfigProperty:
        def __init__(
            self,
            *,
            monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringOutputProperty", typing.Dict[builtins.str, typing.Any]]]]],
            kms_key_id: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The output configuration for monitoring jobs.

            :param monitoring_outputs: Monitoring outputs for monitoring jobs. This is where the output of the periodic monitoring jobs is uploaded.
            :param kms_key_id: The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutputconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_config_property = sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty(
                    monitoring_outputs=[sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                        s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                            local_path="localPath",
                            s3_uri="s3Uri",
                
                            # the properties below are optional
                            s3_upload_mode="s3UploadMode"
                        )
                    )],
                
                    # the properties below are optional
                    kms_key_id="kmsKeyId"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f36ec71d3aa6aba322b9fe403cfbedc006af93d645d3197a1c5d389261a50e7f)
                check_type(argname="argument monitoring_outputs", value=monitoring_outputs, expected_type=type_hints["monitoring_outputs"])
                check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "monitoring_outputs": monitoring_outputs,
            }
            if kms_key_id is not None:
                self._values["kms_key_id"] = kms_key_id

        @builtins.property
        def monitoring_outputs(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringOutputProperty"]]]:
            '''Monitoring outputs for monitoring jobs.

            This is where the output of the periodic monitoring jobs is uploaded.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutputconfig.html#cfn-sagemaker-monitoringschedule-monitoringoutputconfig-monitoringoutputs
            '''
            result = self._values.get("monitoring_outputs")
            assert result is not None, "Required property 'monitoring_outputs' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringOutputProperty"]]], result)

        @builtins.property
        def kms_key_id(self) -> typing.Optional[builtins.str]:
            '''The AWS Key Management Service ( AWS KMS ) key that Amazon SageMaker uses to encrypt the model artifacts at rest using Amazon S3 server-side encryption.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutputconfig.html#cfn-sagemaker-monitoringschedule-monitoringoutputconfig-kmskeyid
            '''
            result = self._values.get("kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_output": "s3Output"},
    )
    class MonitoringOutputProperty:
        def __init__(
            self,
            *,
            s3_output: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.S3OutputProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''The output object for a monitoring job.

            :param s3_output: The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutput.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_output_property = sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                    s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                        local_path="localPath",
                        s3_uri="s3Uri",
                
                        # the properties below are optional
                        s3_upload_mode="s3UploadMode"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__03c47c608b328ee8edc6adac4a7427d35274a35b4b31fd1c5a1a3e0f9e3f0631)
                check_type(argname="argument s3_output", value=s3_output, expected_type=type_hints["s3_output"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "s3_output": s3_output,
            }

        @builtins.property
        def s3_output(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.S3OutputProperty"]:
            '''The Amazon S3 storage location where the results of a monitoring job are saved.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringoutput.html#cfn-sagemaker-monitoringschedule-monitoringoutput-s3output
            '''
            result = self._values.get("s3_output")
            assert result is not None, "Required property 's3_output' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.S3OutputProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringOutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty",
        jsii_struct_bases=[],
        name_mapping={"cluster_config": "clusterConfig"},
    )
    class MonitoringResourcesProperty:
        def __init__(
            self,
            *,
            cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.ClusterConfigProperty", typing.Dict[builtins.str, typing.Any]]],
        ) -> None:
            '''Identifies the resources to deploy for a monitoring job.

            :param cluster_config: The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringresources.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_resources_property = sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty(
                    cluster_config=sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                        instance_count=123,
                        instance_type="instanceType",
                        volume_size_in_gb=123,
                
                        # the properties below are optional
                        volume_kms_key_id="volumeKmsKeyId"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__23e858a126c37ebcb3c444065dd1b417db9eca966f7ee05fca6d54759a2ede79)
                check_type(argname="argument cluster_config", value=cluster_config, expected_type=type_hints["cluster_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cluster_config": cluster_config,
            }

        @builtins.property
        def cluster_config(
            self,
        ) -> typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ClusterConfigProperty"]:
            '''The configuration for the cluster resources used to run the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringresources.html#cfn-sagemaker-monitoringschedule-monitoringresources-clusterconfig
            '''
            result = self._values.get("cluster_config")
            assert result is not None, "Required property 'cluster_config' is missing"
            return typing.cast(typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ClusterConfigProperty"], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringResourcesProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.MonitoringScheduleConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "monitoring_job_definition": "monitoringJobDefinition",
            "monitoring_job_definition_name": "monitoringJobDefinitionName",
            "monitoring_type": "monitoringType",
            "schedule_config": "scheduleConfig",
        },
    )
    class MonitoringScheduleConfigProperty:
        def __init__(
            self,
            *,
            monitoring_job_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.MonitoringJobDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            monitoring_job_definition_name: typing.Optional[builtins.str] = None,
            monitoring_type: typing.Optional[builtins.str] = None,
            schedule_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.ScheduleConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Configures the monitoring schedule and defines the monitoring job.

            :param monitoring_job_definition: Defines the monitoring job.
            :param monitoring_job_definition_name: The name of the monitoring job definition to schedule.
            :param monitoring_type: The type of the monitoring job definition to schedule.
            :param schedule_config: Configures the monitoring schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringscheduleconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                monitoring_schedule_config_property = sagemaker.CfnMonitoringSchedule.MonitoringScheduleConfigProperty(
                    monitoring_job_definition=sagemaker.CfnMonitoringSchedule.MonitoringJobDefinitionProperty(
                        monitoring_app_specification=sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty(
                            image_uri="imageUri",
                
                            # the properties below are optional
                            container_arguments=["containerArguments"],
                            container_entrypoint=["containerEntrypoint"],
                            post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                            record_preprocessor_source_uri="recordPreprocessorSourceUri"
                        ),
                        monitoring_inputs=[sagemaker.CfnMonitoringSchedule.MonitoringInputProperty(
                            batch_transform_input=sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                                data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                                dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                                    csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                                        header=False
                                    ),
                                    json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                                        line=False
                                    ),
                                    parquet=False
                                ),
                                local_path="localPath",
                
                                # the properties below are optional
                                exclude_features_attribute="excludeFeaturesAttribute",
                                s3_data_distribution_type="s3DataDistributionType",
                                s3_input_mode="s3InputMode"
                            ),
                            endpoint_input=sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                                endpoint_name="endpointName",
                                local_path="localPath",
                
                                # the properties below are optional
                                exclude_features_attribute="excludeFeaturesAttribute",
                                s3_data_distribution_type="s3DataDistributionType",
                                s3_input_mode="s3InputMode"
                            )
                        )],
                        monitoring_output_config=sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty(
                            monitoring_outputs=[sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                                s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                                    local_path="localPath",
                                    s3_uri="s3Uri",
                
                                    # the properties below are optional
                                    s3_upload_mode="s3UploadMode"
                                )
                            )],
                
                            # the properties below are optional
                            kms_key_id="kmsKeyId"
                        ),
                        monitoring_resources=sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty(
                            cluster_config=sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                                instance_count=123,
                                instance_type="instanceType",
                                volume_size_in_gb=123,
                
                                # the properties below are optional
                                volume_kms_key_id="volumeKmsKeyId"
                            )
                        ),
                        role_arn="roleArn",
                
                        # the properties below are optional
                        baseline_config=sagemaker.CfnMonitoringSchedule.BaselineConfigProperty(
                            constraints_resource=sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                                s3_uri="s3Uri"
                            ),
                            statistics_resource=sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                                s3_uri="s3Uri"
                            )
                        ),
                        environment={
                            "environment_key": "environment"
                        },
                        network_config=sagemaker.CfnMonitoringSchedule.NetworkConfigProperty(
                            enable_inter_container_traffic_encryption=False,
                            enable_network_isolation=False,
                            vpc_config=sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                                security_group_ids=["securityGroupIds"],
                                subnets=["subnets"]
                            )
                        ),
                        stopping_condition=sagemaker.CfnMonitoringSchedule.StoppingConditionProperty(
                            max_runtime_in_seconds=123
                        )
                    ),
                    monitoring_job_definition_name="monitoringJobDefinitionName",
                    monitoring_type="monitoringType",
                    schedule_config=sagemaker.CfnMonitoringSchedule.ScheduleConfigProperty(
                        schedule_expression="scheduleExpression",
                
                        # the properties below are optional
                        data_analysis_end_time="dataAnalysisEndTime",
                        data_analysis_start_time="dataAnalysisStartTime"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ae563bf5eb284341308fd66319d82963a1d60dd20f020fe537e320ab2264b5b6)
                check_type(argname="argument monitoring_job_definition", value=monitoring_job_definition, expected_type=type_hints["monitoring_job_definition"])
                check_type(argname="argument monitoring_job_definition_name", value=monitoring_job_definition_name, expected_type=type_hints["monitoring_job_definition_name"])
                check_type(argname="argument monitoring_type", value=monitoring_type, expected_type=type_hints["monitoring_type"])
                check_type(argname="argument schedule_config", value=schedule_config, expected_type=type_hints["schedule_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if monitoring_job_definition is not None:
                self._values["monitoring_job_definition"] = monitoring_job_definition
            if monitoring_job_definition_name is not None:
                self._values["monitoring_job_definition_name"] = monitoring_job_definition_name
            if monitoring_type is not None:
                self._values["monitoring_type"] = monitoring_type
            if schedule_config is not None:
                self._values["schedule_config"] = schedule_config

        @builtins.property
        def monitoring_job_definition(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringJobDefinitionProperty"]]:
            '''Defines the monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringscheduleconfig.html#cfn-sagemaker-monitoringschedule-monitoringscheduleconfig-monitoringjobdefinition
            '''
            result = self._values.get("monitoring_job_definition")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.MonitoringJobDefinitionProperty"]], result)

        @builtins.property
        def monitoring_job_definition_name(self) -> typing.Optional[builtins.str]:
            '''The name of the monitoring job definition to schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringscheduleconfig.html#cfn-sagemaker-monitoringschedule-monitoringscheduleconfig-monitoringjobdefinitionname
            '''
            result = self._values.get("monitoring_job_definition_name")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def monitoring_type(self) -> typing.Optional[builtins.str]:
            '''The type of the monitoring job definition to schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringscheduleconfig.html#cfn-sagemaker-monitoringschedule-monitoringscheduleconfig-monitoringtype
            '''
            result = self._values.get("monitoring_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def schedule_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ScheduleConfigProperty"]]:
            '''Configures the monitoring schedule.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-monitoringscheduleconfig.html#cfn-sagemaker-monitoringschedule-monitoringscheduleconfig-scheduleconfig
            '''
            result = self._values.get("schedule_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.ScheduleConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MonitoringScheduleConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.NetworkConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "enable_inter_container_traffic_encryption": "enableInterContainerTrafficEncryption",
            "enable_network_isolation": "enableNetworkIsolation",
            "vpc_config": "vpcConfig",
        },
    )
    class NetworkConfigProperty:
        def __init__(
            self,
            *,
            enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
            vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnMonitoringSchedule.VpcConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Networking options for a job, such as network traffic encryption between containers, whether to allow inbound and outbound network calls to and from containers, and the VPC subnets and security groups to use for VPC-enabled jobs.

            :param enable_inter_container_traffic_encryption: Whether to encrypt all communications between distributed processing jobs. Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.
            :param enable_network_isolation: Whether to allow inbound and outbound network calls to and from the containers used for the processing job.
            :param vpc_config: Specifies a VPC that your training jobs and hosted models have access to. Control access to and from your training and model containers by configuring the VPC. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Training Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-networkconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                network_config_property = sagemaker.CfnMonitoringSchedule.NetworkConfigProperty(
                    enable_inter_container_traffic_encryption=False,
                    enable_network_isolation=False,
                    vpc_config=sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                        security_group_ids=["securityGroupIds"],
                        subnets=["subnets"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__bd8da2edb05f524a8cec2645431357a23e90518457adf8b1cceb5c2c836212e5)
                check_type(argname="argument enable_inter_container_traffic_encryption", value=enable_inter_container_traffic_encryption, expected_type=type_hints["enable_inter_container_traffic_encryption"])
                check_type(argname="argument enable_network_isolation", value=enable_network_isolation, expected_type=type_hints["enable_network_isolation"])
                check_type(argname="argument vpc_config", value=vpc_config, expected_type=type_hints["vpc_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if enable_inter_container_traffic_encryption is not None:
                self._values["enable_inter_container_traffic_encryption"] = enable_inter_container_traffic_encryption
            if enable_network_isolation is not None:
                self._values["enable_network_isolation"] = enable_network_isolation
            if vpc_config is not None:
                self._values["vpc_config"] = vpc_config

        @builtins.property
        def enable_inter_container_traffic_encryption(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to encrypt all communications between distributed processing jobs.

            Choose ``True`` to encrypt communications. Encryption provides greater security for distributed processing jobs, but the processing might take longer.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-networkconfig.html#cfn-sagemaker-monitoringschedule-networkconfig-enableintercontainertrafficencryption
            '''
            result = self._values.get("enable_inter_container_traffic_encryption")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def enable_network_isolation(
            self,
        ) -> typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]]:
            '''Whether to allow inbound and outbound network calls to and from the containers used for the processing job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-networkconfig.html#cfn-sagemaker-monitoringschedule-networkconfig-enablenetworkisolation
            '''
            result = self._values.get("enable_network_isolation")
            return typing.cast(typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]], result)

        @builtins.property
        def vpc_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.VpcConfigProperty"]]:
            '''Specifies a VPC that your training jobs and hosted models have access to.

            Control access to and from your training and model containers by configuring the VPC. For more information, see `Protect Endpoints by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/host-vpc.html>`_ and `Protect Training Jobs by Using an Amazon Virtual Private Cloud <https://docs.aws.amazon.com/sagemaker/latest/dg/train-vpc.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-networkconfig.html#cfn-sagemaker-monitoringschedule-networkconfig-vpcconfig
            '''
            result = self._values.get("vpc_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnMonitoringSchedule.VpcConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NetworkConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.S3OutputProperty",
        jsii_struct_bases=[],
        name_mapping={
            "local_path": "localPath",
            "s3_uri": "s3Uri",
            "s3_upload_mode": "s3UploadMode",
        },
    )
    class S3OutputProperty:
        def __init__(
            self,
            *,
            local_path: builtins.str,
            s3_uri: builtins.str,
            s3_upload_mode: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Information about where and how you want to store the results of a monitoring job.

            :param local_path: The local path to the S3 storage location where SageMaker saves the results of a monitoring job. LocalPath is an absolute path for the output data.
            :param s3_uri: A URI that identifies the S3 storage location where SageMaker saves the results of a monitoring job.
            :param s3_upload_mode: Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-s3output.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_output_property = sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                    local_path="localPath",
                    s3_uri="s3Uri",
                
                    # the properties below are optional
                    s3_upload_mode="s3UploadMode"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__71badfaff04b4305f0c3c62a5f1df2e5ce110caa1b5d47fbea5ed441052115e3)
                check_type(argname="argument local_path", value=local_path, expected_type=type_hints["local_path"])
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
                check_type(argname="argument s3_upload_mode", value=s3_upload_mode, expected_type=type_hints["s3_upload_mode"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "local_path": local_path,
                "s3_uri": s3_uri,
            }
            if s3_upload_mode is not None:
                self._values["s3_upload_mode"] = s3_upload_mode

        @builtins.property
        def local_path(self) -> builtins.str:
            '''The local path to the S3 storage location where SageMaker saves the results of a monitoring job.

            LocalPath is an absolute path for the output data.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-s3output.html#cfn-sagemaker-monitoringschedule-s3output-localpath
            '''
            result = self._values.get("local_path")
            assert result is not None, "Required property 'local_path' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_uri(self) -> builtins.str:
            '''A URI that identifies the S3 storage location where SageMaker saves the results of a monitoring job.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-s3output.html#cfn-sagemaker-monitoringschedule-s3output-s3uri
            '''
            result = self._values.get("s3_uri")
            assert result is not None, "Required property 's3_uri' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def s3_upload_mode(self) -> typing.Optional[builtins.str]:
            '''Whether to upload the results of the monitoring job continuously or after the job completes.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-s3output.html#cfn-sagemaker-monitoringschedule-s3output-s3uploadmode
            '''
            result = self._values.get("s3_upload_mode")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3OutputProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.ScheduleConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "schedule_expression": "scheduleExpression",
            "data_analysis_end_time": "dataAnalysisEndTime",
            "data_analysis_start_time": "dataAnalysisStartTime",
        },
    )
    class ScheduleConfigProperty:
        def __init__(
            self,
            *,
            schedule_expression: builtins.str,
            data_analysis_end_time: typing.Optional[builtins.str] = None,
            data_analysis_start_time: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Configuration details about the monitoring schedule.

            :param schedule_expression: A cron expression that describes details about the monitoring schedule. The supported cron expressions are: - If you want to set the job to start every hour, use the following: ``Hourly: cron(0 * ? * * *)`` - If you want to start the job daily: ``cron(0 [00-23] ? * * *)`` - If you want to run the job one time, immediately, use the following keyword: ``NOW`` For example, the following are valid cron expressions: - Daily at noon UTC: ``cron(0 12 ? * * *)`` - Daily at midnight UTC: ``cron(0 0 ? * * *)`` To support running every 6, 12 hours, the following are also supported: ``cron(0 [00-23]/[01-24] ? * * *)`` For example, the following are valid cron expressions: - Every 12 hours, starting at 5pm UTC: ``cron(0 17/12 ? * * *)`` - Every two hours starting at midnight: ``cron(0 0/2 ? * * *)`` .. epigraph:: - Even though the cron expression is set to start at 5PM UTC, note that there could be a delay of 0-20 minutes from the actual requested time to run the execution. - We recommend that if you would like a daily schedule, you do not provide this parameter. Amazon SageMaker will pick a time for running every day. You can also specify the keyword ``NOW`` to run the monitoring job immediately, one time, without recurring.
            :param data_analysis_end_time: Sets the end time for a monitoring job window. Express this time as an offset to the times that you schedule your monitoring jobs to run. You schedule monitoring jobs with the ``ScheduleExpression`` parameter. Specify this offset in ISO 8601 duration format. For example, if you want to end the window one hour before the start of each monitoring job, you would specify: ``"-PT1H"`` . The end time that you specify must not follow the start time that you specify by more than 24 hours. You specify the start time with the ``DataAnalysisStartTime`` parameter. If you set ``ScheduleExpression`` to ``NOW`` , this parameter is required.
            :param data_analysis_start_time: Sets the start time for a monitoring job window. Express this time as an offset to the times that you schedule your monitoring jobs to run. You schedule monitoring jobs with the ``ScheduleExpression`` parameter. Specify this offset in ISO 8601 duration format. For example, if you want to monitor the five hours of data in your dataset that precede the start of each monitoring job, you would specify: ``"-PT5H"`` . The start time that you specify must not precede the end time that you specify by more than 24 hours. You specify the end time with the ``DataAnalysisEndTime`` parameter. If you set ``ScheduleExpression`` to ``NOW`` , this parameter is required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-scheduleconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                schedule_config_property = sagemaker.CfnMonitoringSchedule.ScheduleConfigProperty(
                    schedule_expression="scheduleExpression",
                
                    # the properties below are optional
                    data_analysis_end_time="dataAnalysisEndTime",
                    data_analysis_start_time="dataAnalysisStartTime"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__6cd4009cfbe7205d7eb8eb550b2eb82816cdff6947fb3049a36efb431cd8bdf6)
                check_type(argname="argument schedule_expression", value=schedule_expression, expected_type=type_hints["schedule_expression"])
                check_type(argname="argument data_analysis_end_time", value=data_analysis_end_time, expected_type=type_hints["data_analysis_end_time"])
                check_type(argname="argument data_analysis_start_time", value=data_analysis_start_time, expected_type=type_hints["data_analysis_start_time"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "schedule_expression": schedule_expression,
            }
            if data_analysis_end_time is not None:
                self._values["data_analysis_end_time"] = data_analysis_end_time
            if data_analysis_start_time is not None:
                self._values["data_analysis_start_time"] = data_analysis_start_time

        @builtins.property
        def schedule_expression(self) -> builtins.str:
            '''A cron expression that describes details about the monitoring schedule.

            The supported cron expressions are:

            - If you want to set the job to start every hour, use the following:

            ``Hourly: cron(0 * ? * * *)``

            - If you want to start the job daily:

            ``cron(0 [00-23] ? * * *)``

            - If you want to run the job one time, immediately, use the following keyword:

            ``NOW``

            For example, the following are valid cron expressions:

            - Daily at noon UTC: ``cron(0 12 ? * * *)``
            - Daily at midnight UTC: ``cron(0 0 ? * * *)``

            To support running every 6, 12 hours, the following are also supported:

            ``cron(0 [00-23]/[01-24] ? * * *)``

            For example, the following are valid cron expressions:

            - Every 12 hours, starting at 5pm UTC: ``cron(0 17/12 ? * * *)``
            - Every two hours starting at midnight: ``cron(0 0/2 ? * * *)``

            .. epigraph::

               - Even though the cron expression is set to start at 5PM UTC, note that there could be a delay of 0-20 minutes from the actual requested time to run the execution.
               - We recommend that if you would like a daily schedule, you do not provide this parameter. Amazon SageMaker will pick a time for running every day.

            You can also specify the keyword ``NOW`` to run the monitoring job immediately, one time, without recurring.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-scheduleconfig.html#cfn-sagemaker-monitoringschedule-scheduleconfig-scheduleexpression
            '''
            result = self._values.get("schedule_expression")
            assert result is not None, "Required property 'schedule_expression' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def data_analysis_end_time(self) -> typing.Optional[builtins.str]:
            '''Sets the end time for a monitoring job window.

            Express this time as an offset to the times that you schedule your monitoring jobs to run. You schedule monitoring jobs with the ``ScheduleExpression`` parameter. Specify this offset in ISO 8601 duration format. For example, if you want to end the window one hour before the start of each monitoring job, you would specify: ``"-PT1H"`` .

            The end time that you specify must not follow the start time that you specify by more than 24 hours. You specify the start time with the ``DataAnalysisStartTime`` parameter.

            If you set ``ScheduleExpression`` to ``NOW`` , this parameter is required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-scheduleconfig.html#cfn-sagemaker-monitoringschedule-scheduleconfig-dataanalysisendtime
            '''
            result = self._values.get("data_analysis_end_time")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def data_analysis_start_time(self) -> typing.Optional[builtins.str]:
            '''Sets the start time for a monitoring job window.

            Express this time as an offset to the times that you schedule your monitoring jobs to run. You schedule monitoring jobs with the ``ScheduleExpression`` parameter. Specify this offset in ISO 8601 duration format. For example, if you want to monitor the five hours of data in your dataset that precede the start of each monitoring job, you would specify: ``"-PT5H"`` .

            The start time that you specify must not precede the end time that you specify by more than 24 hours. You specify the end time with the ``DataAnalysisEndTime`` parameter.

            If you set ``ScheduleExpression`` to ``NOW`` , this parameter is required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-scheduleconfig.html#cfn-sagemaker-monitoringschedule-scheduleconfig-dataanalysisstarttime
            '''
            result = self._values.get("data_analysis_start_time")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ScheduleConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty",
        jsii_struct_bases=[],
        name_mapping={"s3_uri": "s3Uri"},
    )
    class StatisticsResourceProperty:
        def __init__(self, *, s3_uri: typing.Optional[builtins.str] = None) -> None:
            '''The baseline statistics file in Amazon S3 that the current monitoring job should be validated against.

            :param s3_uri: The S3 URI for the statistics resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-statisticsresource.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                statistics_resource_property = sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                    s3_uri="s3Uri"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__cfb3dbff0a3f394b0718ae50ab787bcb66a449535f458dec42b2c32646cb9b74)
                check_type(argname="argument s3_uri", value=s3_uri, expected_type=type_hints["s3_uri"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if s3_uri is not None:
                self._values["s3_uri"] = s3_uri

        @builtins.property
        def s3_uri(self) -> typing.Optional[builtins.str]:
            '''The S3 URI for the statistics resource.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-statisticsresource.html#cfn-sagemaker-monitoringschedule-statisticsresource-s3uri
            '''
            result = self._values.get("s3_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StatisticsResourceProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.StoppingConditionProperty",
        jsii_struct_bases=[],
        name_mapping={"max_runtime_in_seconds": "maxRuntimeInSeconds"},
    )
    class StoppingConditionProperty:
        def __init__(self, *, max_runtime_in_seconds: jsii.Number) -> None:
            '''Specifies a limit to how long a model training job or model compilation job can run.

            It also specifies how long a managed spot training job has to complete. When the job reaches the time limit, SageMaker ends the training or compilation job. Use this API to cap model training costs.

            To stop a training job, SageMaker sends the algorithm the ``SIGTERM`` signal, which delays job termination for 120 seconds. Algorithms can use this 120-second window to save the model artifacts, so the results of training are not lost.

            The training algorithms provided by SageMaker automatically save the intermediate results of a model training job when possible. This attempt to save artifacts is only a best effort case as model might not be in a state from which it can be saved. For example, if training has just started, the model might not be ready to save. When saved, this intermediate data is a valid model artifact. You can use it to create a model with ``CreateModel`` .
            .. epigraph::

               The Neural Topic Model (NTM) currently does not support saving intermediate model artifacts. When training NTMs, make sure that the maximum runtime is sufficient for the training job to complete.

            :param max_runtime_in_seconds: The maximum length of time, in seconds, that a training or compilation job can run before it is stopped. For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model. For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days. The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-stoppingcondition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                stopping_condition_property = sagemaker.CfnMonitoringSchedule.StoppingConditionProperty(
                    max_runtime_in_seconds=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__c7e5bb0fc01d568d2f801c28a2a25d61c124468fe75ef26f71c064475b087d29)
                check_type(argname="argument max_runtime_in_seconds", value=max_runtime_in_seconds, expected_type=type_hints["max_runtime_in_seconds"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_runtime_in_seconds": max_runtime_in_seconds,
            }

        @builtins.property
        def max_runtime_in_seconds(self) -> jsii.Number:
            '''The maximum length of time, in seconds, that a training or compilation job can run before it is stopped.

            For compilation jobs, if the job does not complete during this time, a ``TimeOut`` error is generated. We recommend starting with 900 seconds and increasing as necessary based on your model.

            For all other jobs, if the job does not complete during this time, SageMaker ends the job. When ``RetryStrategy`` is specified in the job request, ``MaxRuntimeInSeconds`` specifies the maximum time for all of the attempts in total, not each individual attempt. The default value is 1 day. The maximum value is 28 days.

            The maximum time that a ``TrainingJob`` can run in total, including any time spent publishing metrics or archiving and uploading models after it has been stopped, is 30 days.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-stoppingcondition.html#cfn-sagemaker-monitoringschedule-stoppingcondition-maxruntimeinseconds
            '''
            result = self._values.get("max_runtime_in_seconds")
            assert result is not None, "Required property 'max_runtime_in_seconds' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "StoppingConditionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringSchedule.VpcConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"security_group_ids": "securityGroupIds", "subnets": "subnets"},
    )
    class VpcConfigProperty:
        def __init__(
            self,
            *,
            security_group_ids: typing.Sequence[builtins.str],
            subnets: typing.Sequence[builtins.str],
        ) -> None:
            '''Specifies an Amazon Virtual Private Cloud (VPC) that your SageMaker jobs, hosted models, and compute resources have access to.

            You can control access to and from your resources by configuring a VPC. For more information, see `Give SageMaker Access to Resources in your Amazon VPC <https://docs.aws.amazon.com/sagemaker/latest/dg/infrastructure-give-access.html>`_ .

            :param security_group_ids: The VPC security group IDs, in the form ``sg-xxxxxxxx`` . Specify the security groups for the VPC that is specified in the ``Subnets`` field.
            :param subnets: The ID of the subnets in the VPC to which you want to connect your training job or model. For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-vpcconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                vpc_config_property = sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                    security_group_ids=["securityGroupIds"],
                    subnets=["subnets"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__5443f2ae1a6b1327f14c81943da48e1b6fbb092c8467ad6b5e44facb1c07b8a7)
                check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
                check_type(argname="argument subnets", value=subnets, expected_type=type_hints["subnets"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "security_group_ids": security_group_ids,
                "subnets": subnets,
            }

        @builtins.property
        def security_group_ids(self) -> typing.List[builtins.str]:
            '''The VPC security group IDs, in the form ``sg-xxxxxxxx`` .

            Specify the security groups for the VPC that is specified in the ``Subnets`` field.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-vpcconfig.html#cfn-sagemaker-monitoringschedule-vpcconfig-securitygroupids
            '''
            result = self._values.get("security_group_ids")
            assert result is not None, "Required property 'security_group_ids' is missing"
            return typing.cast(typing.List[builtins.str], result)

        @builtins.property
        def subnets(self) -> typing.List[builtins.str]:
            '''The ID of the subnets in the VPC to which you want to connect your training job or model.

            For information about the availability of specific instance types, see `Supported Instance Types and Availability Zones <https://docs.aws.amazon.com/sagemaker/latest/dg/instance-types-az.html>`_ .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-monitoringschedule-vpcconfig.html#cfn-sagemaker-monitoringschedule-vpcconfig-subnets
            '''
            result = self._values.get("subnets")
            assert result is not None, "Required property 'subnets' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "VpcConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnMonitoringScheduleProps",
    jsii_struct_bases=[],
    name_mapping={
        "monitoring_schedule_config": "monitoringScheduleConfig",
        "monitoring_schedule_name": "monitoringScheduleName",
        "endpoint_name": "endpointName",
        "failure_reason": "failureReason",
        "last_monitoring_execution_summary": "lastMonitoringExecutionSummary",
        "monitoring_schedule_status": "monitoringScheduleStatus",
        "tags": "tags",
    },
)
class CfnMonitoringScheduleProps:
    def __init__(
        self,
        *,
        monitoring_schedule_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringScheduleConfigProperty, typing.Dict[builtins.str, typing.Any]]],
        monitoring_schedule_name: builtins.str,
        endpoint_name: typing.Optional[builtins.str] = None,
        failure_reason: typing.Optional[builtins.str] = None,
        last_monitoring_execution_summary: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringExecutionSummaryProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        monitoring_schedule_status: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnMonitoringSchedule``.

        :param monitoring_schedule_config: The configuration object that specifies the monitoring schedule and defines the monitoring job.
        :param monitoring_schedule_name: The name of the monitoring schedule.
        :param endpoint_name: The name of the endpoint using the monitoring schedule.
        :param failure_reason: Contains the reason a monitoring job failed, if it failed.
        :param last_monitoring_execution_summary: Describes metadata on the last execution to run, if there was one.
        :param monitoring_schedule_status: The status of the monitoring schedule.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_monitoring_schedule_props = sagemaker.CfnMonitoringScheduleProps(
                monitoring_schedule_config=sagemaker.CfnMonitoringSchedule.MonitoringScheduleConfigProperty(
                    monitoring_job_definition=sagemaker.CfnMonitoringSchedule.MonitoringJobDefinitionProperty(
                        monitoring_app_specification=sagemaker.CfnMonitoringSchedule.MonitoringAppSpecificationProperty(
                            image_uri="imageUri",
            
                            # the properties below are optional
                            container_arguments=["containerArguments"],
                            container_entrypoint=["containerEntrypoint"],
                            post_analytics_processor_source_uri="postAnalyticsProcessorSourceUri",
                            record_preprocessor_source_uri="recordPreprocessorSourceUri"
                        ),
                        monitoring_inputs=[sagemaker.CfnMonitoringSchedule.MonitoringInputProperty(
                            batch_transform_input=sagemaker.CfnMonitoringSchedule.BatchTransformInputProperty(
                                data_captured_destination_s3_uri="dataCapturedDestinationS3Uri",
                                dataset_format=sagemaker.CfnMonitoringSchedule.DatasetFormatProperty(
                                    csv=sagemaker.CfnMonitoringSchedule.CsvProperty(
                                        header=False
                                    ),
                                    json=sagemaker.CfnMonitoringSchedule.JsonProperty(
                                        line=False
                                    ),
                                    parquet=False
                                ),
                                local_path="localPath",
            
                                # the properties below are optional
                                exclude_features_attribute="excludeFeaturesAttribute",
                                s3_data_distribution_type="s3DataDistributionType",
                                s3_input_mode="s3InputMode"
                            ),
                            endpoint_input=sagemaker.CfnMonitoringSchedule.EndpointInputProperty(
                                endpoint_name="endpointName",
                                local_path="localPath",
            
                                # the properties below are optional
                                exclude_features_attribute="excludeFeaturesAttribute",
                                s3_data_distribution_type="s3DataDistributionType",
                                s3_input_mode="s3InputMode"
                            )
                        )],
                        monitoring_output_config=sagemaker.CfnMonitoringSchedule.MonitoringOutputConfigProperty(
                            monitoring_outputs=[sagemaker.CfnMonitoringSchedule.MonitoringOutputProperty(
                                s3_output=sagemaker.CfnMonitoringSchedule.S3OutputProperty(
                                    local_path="localPath",
                                    s3_uri="s3Uri",
            
                                    # the properties below are optional
                                    s3_upload_mode="s3UploadMode"
                                )
                            )],
            
                            # the properties below are optional
                            kms_key_id="kmsKeyId"
                        ),
                        monitoring_resources=sagemaker.CfnMonitoringSchedule.MonitoringResourcesProperty(
                            cluster_config=sagemaker.CfnMonitoringSchedule.ClusterConfigProperty(
                                instance_count=123,
                                instance_type="instanceType",
                                volume_size_in_gb=123,
            
                                # the properties below are optional
                                volume_kms_key_id="volumeKmsKeyId"
                            )
                        ),
                        role_arn="roleArn",
            
                        # the properties below are optional
                        baseline_config=sagemaker.CfnMonitoringSchedule.BaselineConfigProperty(
                            constraints_resource=sagemaker.CfnMonitoringSchedule.ConstraintsResourceProperty(
                                s3_uri="s3Uri"
                            ),
                            statistics_resource=sagemaker.CfnMonitoringSchedule.StatisticsResourceProperty(
                                s3_uri="s3Uri"
                            )
                        ),
                        environment={
                            "environment_key": "environment"
                        },
                        network_config=sagemaker.CfnMonitoringSchedule.NetworkConfigProperty(
                            enable_inter_container_traffic_encryption=False,
                            enable_network_isolation=False,
                            vpc_config=sagemaker.CfnMonitoringSchedule.VpcConfigProperty(
                                security_group_ids=["securityGroupIds"],
                                subnets=["subnets"]
                            )
                        ),
                        stopping_condition=sagemaker.CfnMonitoringSchedule.StoppingConditionProperty(
                            max_runtime_in_seconds=123
                        )
                    ),
                    monitoring_job_definition_name="monitoringJobDefinitionName",
                    monitoring_type="monitoringType",
                    schedule_config=sagemaker.CfnMonitoringSchedule.ScheduleConfigProperty(
                        schedule_expression="scheduleExpression",
            
                        # the properties below are optional
                        data_analysis_end_time="dataAnalysisEndTime",
                        data_analysis_start_time="dataAnalysisStartTime"
                    )
                ),
                monitoring_schedule_name="monitoringScheduleName",
            
                # the properties below are optional
                endpoint_name="endpointName",
                failure_reason="failureReason",
                last_monitoring_execution_summary=sagemaker.CfnMonitoringSchedule.MonitoringExecutionSummaryProperty(
                    creation_time="creationTime",
                    last_modified_time="lastModifiedTime",
                    monitoring_execution_status="monitoringExecutionStatus",
                    monitoring_schedule_name="monitoringScheduleName",
                    scheduled_time="scheduledTime",
            
                    # the properties below are optional
                    endpoint_name="endpointName",
                    failure_reason="failureReason",
                    processing_job_arn="processingJobArn"
                ),
                monitoring_schedule_status="monitoringScheduleStatus",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__28a5b0047aa30ebc0aac1bb6a24b6076a786c61f9934d3ffef223f7e4d15b3b4)
            check_type(argname="argument monitoring_schedule_config", value=monitoring_schedule_config, expected_type=type_hints["monitoring_schedule_config"])
            check_type(argname="argument monitoring_schedule_name", value=monitoring_schedule_name, expected_type=type_hints["monitoring_schedule_name"])
            check_type(argname="argument endpoint_name", value=endpoint_name, expected_type=type_hints["endpoint_name"])
            check_type(argname="argument failure_reason", value=failure_reason, expected_type=type_hints["failure_reason"])
            check_type(argname="argument last_monitoring_execution_summary", value=last_monitoring_execution_summary, expected_type=type_hints["last_monitoring_execution_summary"])
            check_type(argname="argument monitoring_schedule_status", value=monitoring_schedule_status, expected_type=type_hints["monitoring_schedule_status"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "monitoring_schedule_config": monitoring_schedule_config,
            "monitoring_schedule_name": monitoring_schedule_name,
        }
        if endpoint_name is not None:
            self._values["endpoint_name"] = endpoint_name
        if failure_reason is not None:
            self._values["failure_reason"] = failure_reason
        if last_monitoring_execution_summary is not None:
            self._values["last_monitoring_execution_summary"] = last_monitoring_execution_summary
        if monitoring_schedule_status is not None:
            self._values["monitoring_schedule_status"] = monitoring_schedule_status
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def monitoring_schedule_config(
        self,
    ) -> typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringScheduleConfigProperty]:
        '''The configuration object that specifies the monitoring schedule and defines the monitoring job.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-monitoringscheduleconfig
        '''
        result = self._values.get("monitoring_schedule_config")
        assert result is not None, "Required property 'monitoring_schedule_config' is missing"
        return typing.cast(typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringScheduleConfigProperty], result)

    @builtins.property
    def monitoring_schedule_name(self) -> builtins.str:
        '''The name of the monitoring schedule.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-monitoringschedulename
        '''
        result = self._values.get("monitoring_schedule_name")
        assert result is not None, "Required property 'monitoring_schedule_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def endpoint_name(self) -> typing.Optional[builtins.str]:
        '''The name of the endpoint using the monitoring schedule.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-endpointname
        '''
        result = self._values.get("endpoint_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def failure_reason(self) -> typing.Optional[builtins.str]:
        '''Contains the reason a monitoring job failed, if it failed.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-failurereason
        '''
        result = self._values.get("failure_reason")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def last_monitoring_execution_summary(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringExecutionSummaryProperty]]:
        '''Describes metadata on the last execution to run, if there was one.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-lastmonitoringexecutionsummary
        '''
        result = self._values.get("last_monitoring_execution_summary")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringExecutionSummaryProperty]], result)

    @builtins.property
    def monitoring_schedule_status(self) -> typing.Optional[builtins.str]:
        '''The status of the monitoring schedule.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-monitoringschedulestatus
        '''
        result = self._values.get("monitoring_schedule_status")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-monitoringschedule.html#cfn-sagemaker-monitoringschedule-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnMonitoringScheduleProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnNotebookInstance(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstance",
):
    '''The ``AWS::SageMaker::NotebookInstance`` resource creates an Amazon SageMaker notebook instance.

    A notebook instance is a machine learning (ML) compute instance running on a Jupyter notebook. For more information, see `Use Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html>`_ .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html
    :cloudformationResource: AWS::SageMaker::NotebookInstance
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_notebook_instance = sagemaker.CfnNotebookInstance(self, "MyCfnNotebookInstance",
            instance_type="instanceType",
            role_arn="roleArn",
        
            # the properties below are optional
            accelerator_types=["acceleratorTypes"],
            additional_code_repositories=["additionalCodeRepositories"],
            default_code_repository="defaultCodeRepository",
            direct_internet_access="directInternetAccess",
            instance_metadata_service_configuration=sagemaker.CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty(
                minimum_instance_metadata_service_version="minimumInstanceMetadataServiceVersion"
            ),
            kms_key_id="kmsKeyId",
            lifecycle_config_name="lifecycleConfigName",
            notebook_instance_name="notebookInstanceName",
            platform_identifier="platformIdentifier",
            root_access="rootAccess",
            security_group_ids=["securityGroupIds"],
            subnet_id="subnetId",
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            volume_size_in_gb=123
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        instance_type: builtins.str,
        role_arn: builtins.str,
        accelerator_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        additional_code_repositories: typing.Optional[typing.Sequence[builtins.str]] = None,
        default_code_repository: typing.Optional[builtins.str] = None,
        direct_internet_access: typing.Optional[builtins.str] = None,
        instance_metadata_service_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        lifecycle_config_name: typing.Optional[builtins.str] = None,
        notebook_instance_name: typing.Optional[builtins.str] = None,
        platform_identifier: typing.Optional[builtins.str] = None,
        root_access: typing.Optional[builtins.str] = None,
        security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
        subnet_id: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        volume_size_in_gb: typing.Optional[jsii.Number] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param instance_type: The type of ML compute instance to launch for the notebook instance. .. epigraph:: Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.
        :param role_arn: When you send any requests to AWS resources from the notebook instance, SageMaker assumes this role to perform tasks on your behalf. You must grant this role necessary permissions so SageMaker can perform these tasks. The policy must allow the SageMaker service principal (sagemaker.amazonaws.com) permissions to assume this role. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ . .. epigraph:: To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.
        :param accelerator_types: A list of Amazon Elastic Inference (EI) instance types to associate with the notebook instance. Currently, only one instance type can be associated with a notebook instance. For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ . *Valid Values:* ``ml.eia1.medium | ml.eia1.large | ml.eia1.xlarge | ml.eia2.medium | ml.eia2.large | ml.eia2.xlarge`` .
        :param additional_code_repositories: An array of up to three Git repositories associated with the notebook instance. These can be either the names of Git repositories stored as resources in your account, or the URL of Git repositories in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. These repositories are cloned at the same level as the default repository of your notebook instance. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .
        :param default_code_repository: The Git repository associated with the notebook instance as its default code repository. This can be either the name of a Git repository stored as a resource in your account, or the URL of a Git repository in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. When you open a notebook instance, it opens in the directory that contains this repository. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .
        :param direct_internet_access: Sets whether SageMaker provides internet access to the notebook instance. If you set this to ``Disabled`` this notebook instance is able to access resources only in your VPC, and is not be able to connect to SageMaker training and endpoint services unless you configure a NAT Gateway in your VPC. For more information, see `Notebook Instances Are Internet-Enabled by Default <https://docs.aws.amazon.com/sagemaker/latest/dg/appendix-additional-considerations.html#appendix-notebook-and-internet-access>`_ . You can set the value of this parameter to ``Disabled`` only if you set a value for the ``SubnetId`` parameter.
        :param instance_metadata_service_configuration: Information on the IMDS configuration of the notebook instance.
        :param kms_key_id: The Amazon Resource Name (ARN) of a AWS Key Management Service key that SageMaker uses to encrypt data on the storage volume attached to your notebook instance. The KMS key you provide must be enabled. For information, see `Enabling and Disabling Keys <https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html>`_ in the *AWS Key Management Service Developer Guide* .
        :param lifecycle_config_name: The name of a lifecycle configuration to associate with the notebook instance. For information about lifecycle configurations, see `Customize a Notebook Instance <https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html>`_ in the *Amazon SageMaker Developer Guide* .
        :param notebook_instance_name: The name of the new notebook instance.
        :param platform_identifier: The platform identifier of the notebook instance runtime environment.
        :param root_access: Whether root access is enabled or disabled for users of the notebook instance. The default value is ``Enabled`` . .. epigraph:: Lifecycle configurations need root access to be able to set up a notebook instance. Because of this, lifecycle configurations associated with a notebook instance always run with root access even if you disable root access for users.
        :param security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. The security groups must be for the same VPC as specified in the subnet.
        :param subnet_id: The ID of the subnet in a VPC to which you would like to have a connectivity from your ML compute instance.
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ . You can add tags later by using the ``CreateTags`` API.
        :param volume_size_in_gb: The size, in GB, of the ML storage volume to attach to the notebook instance. The default value is 5 GB. .. epigraph:: Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4258a6f5191f53d94cb9bb9e4d02bc1fc8c49516c1cacb4e844127458c9bcb57)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnNotebookInstanceProps(
            instance_type=instance_type,
            role_arn=role_arn,
            accelerator_types=accelerator_types,
            additional_code_repositories=additional_code_repositories,
            default_code_repository=default_code_repository,
            direct_internet_access=direct_internet_access,
            instance_metadata_service_configuration=instance_metadata_service_configuration,
            kms_key_id=kms_key_id,
            lifecycle_config_name=lifecycle_config_name,
            notebook_instance_name=notebook_instance_name,
            platform_identifier=platform_identifier,
            root_access=root_access,
            security_group_ids=security_group_ids,
            subnet_id=subnet_id,
            tags=tags,
            volume_size_in_gb=volume_size_in_gb,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f502c12878c3c2e0ecdbfca9b6d1c2606059ac1413c77519821ea7a74535a4d6)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__48adf3bdeac409fbb8bd61ad7fda031bb7d3bf3702e2d24ff9486daa087ee387)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrNotebookInstanceName")
    def attr_notebook_instance_name(self) -> builtins.str:
        '''The name of the notebook instance, such as ``MyNotebookInstance`` .

        :cloudformationAttribute: NotebookInstanceName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrNotebookInstanceName"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="instanceType")
    def instance_type(self) -> builtins.str:
        '''The type of ML compute instance to launch for the notebook instance.'''
        return typing.cast(builtins.str, jsii.get(self, "instanceType"))

    @instance_type.setter
    def instance_type(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1624550a6d6f609df95a97a1cac1c4558ef364951d61f54a88c03689775cadb6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "instanceType", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''When you send any requests to AWS resources from the notebook instance, SageMaker assumes this role to perform tasks on your behalf.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7a01dd0c564eda35b7da42a00c931bac23b0d39b7af59626f06cbe59a837b4ad)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="acceleratorTypes")
    def accelerator_types(self) -> typing.Optional[typing.List[builtins.str]]:
        '''A list of Amazon Elastic Inference (EI) instance types to associate with the notebook instance.'''
        return typing.cast(typing.Optional[typing.List[builtins.str]], jsii.get(self, "acceleratorTypes"))

    @accelerator_types.setter
    def accelerator_types(
        self,
        value: typing.Optional[typing.List[builtins.str]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4038a1a01d792ad896085291f3b69c4d23642cb440864632301275c0f804cbcc)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "acceleratorTypes", value)

    @builtins.property
    @jsii.member(jsii_name="additionalCodeRepositories")
    def additional_code_repositories(
        self,
    ) -> typing.Optional[typing.List[builtins.str]]:
        '''An array of up to three Git repositories associated with the notebook instance.'''
        return typing.cast(typing.Optional[typing.List[builtins.str]], jsii.get(self, "additionalCodeRepositories"))

    @additional_code_repositories.setter
    def additional_code_repositories(
        self,
        value: typing.Optional[typing.List[builtins.str]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__30ff8678efb98b40f5a8824fc717be27ecd5b6a13d47559957e01a6069d0b757)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "additionalCodeRepositories", value)

    @builtins.property
    @jsii.member(jsii_name="defaultCodeRepository")
    def default_code_repository(self) -> typing.Optional[builtins.str]:
        '''The Git repository associated with the notebook instance as its default code repository.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "defaultCodeRepository"))

    @default_code_repository.setter
    def default_code_repository(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bf9a5d1b8f3ff3bfaff0c9ec6e0e91a391534e85401028efb43d810b945ce78a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "defaultCodeRepository", value)

    @builtins.property
    @jsii.member(jsii_name="directInternetAccess")
    def direct_internet_access(self) -> typing.Optional[builtins.str]:
        '''Sets whether SageMaker provides internet access to the notebook instance.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "directInternetAccess"))

    @direct_internet_access.setter
    def direct_internet_access(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d9787637974a404c84800b939ebb312aa7025c5d0e6e756a6470ec8b6b49789d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "directInternetAccess", value)

    @builtins.property
    @jsii.member(jsii_name="instanceMetadataServiceConfiguration")
    def instance_metadata_service_configuration(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty"]]:
        '''Information on the IMDS configuration of the notebook instance.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty"]], jsii.get(self, "instanceMetadataServiceConfiguration"))

    @instance_metadata_service_configuration.setter
    def instance_metadata_service_configuration(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4715580cbb9a7d7db6e3def456160b051a06a0d390785e2871fb4b56e67fd7e9)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "instanceMetadataServiceConfiguration", value)

    @builtins.property
    @jsii.member(jsii_name="kmsKeyId")
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of a AWS Key Management Service key that SageMaker uses to encrypt data on the storage volume attached to your notebook instance.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "kmsKeyId"))

    @kms_key_id.setter
    def kms_key_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__c9472fa26cb9f79b5a0ed7726aeaee812eeb3525f7aafeef1bc405172e0bcb17)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "kmsKeyId", value)

    @builtins.property
    @jsii.member(jsii_name="lifecycleConfigName")
    def lifecycle_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of a lifecycle configuration to associate with the notebook instance.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "lifecycleConfigName"))

    @lifecycle_config_name.setter
    def lifecycle_config_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__11003587e94643a827559660e73ff9453e4df8eb144db4e97c49e8f7bfb23d81)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "lifecycleConfigName", value)

    @builtins.property
    @jsii.member(jsii_name="notebookInstanceName")
    def notebook_instance_name(self) -> typing.Optional[builtins.str]:
        '''The name of the new notebook instance.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "notebookInstanceName"))

    @notebook_instance_name.setter
    def notebook_instance_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__71bc49af0221e3adf1c4f98e66ed5e612daf9bb15b633b3c2401546c452d21aa)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "notebookInstanceName", value)

    @builtins.property
    @jsii.member(jsii_name="platformIdentifier")
    def platform_identifier(self) -> typing.Optional[builtins.str]:
        '''The platform identifier of the notebook instance runtime environment.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "platformIdentifier"))

    @platform_identifier.setter
    def platform_identifier(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__651b32c45557e8298ff2e875d699a3c8627b8a7ee06344d38ad120fdc6baaddf)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "platformIdentifier", value)

    @builtins.property
    @jsii.member(jsii_name="rootAccess")
    def root_access(self) -> typing.Optional[builtins.str]:
        '''Whether root access is enabled or disabled for users of the notebook instance.

        The default value is ``Enabled`` .
        '''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "rootAccess"))

    @root_access.setter
    def root_access(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e73bb3427823bc3213ee89b75acb457061970ab81520a25b55f212b176df6546)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "rootAccess", value)

    @builtins.property
    @jsii.member(jsii_name="securityGroupIds")
    def security_group_ids(self) -> typing.Optional[typing.List[builtins.str]]:
        '''The VPC security group IDs, in the form sg-xxxxxxxx.'''
        return typing.cast(typing.Optional[typing.List[builtins.str]], jsii.get(self, "securityGroupIds"))

    @security_group_ids.setter
    def security_group_ids(
        self,
        value: typing.Optional[typing.List[builtins.str]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4d64706aca613168f17eabca25b285f585bb572cb9a92a672148b0fd6acbdc3a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "securityGroupIds", value)

    @builtins.property
    @jsii.member(jsii_name="subnetId")
    def subnet_id(self) -> typing.Optional[builtins.str]:
        '''The ID of the subnet in a VPC to which you would like to have a connectivity from your ML compute instance.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "subnetId"))

    @subnet_id.setter
    def subnet_id(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0927b0721636f28b7316ce12a66323e0646504a308a93025dd94f556e559bb3d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "subnetId", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9a2b436e239a6adc090ba9abd1f5e9daa1c3ac762ce0b8fd9fc223475bd67714)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="volumeSizeInGb")
    def volume_size_in_gb(self) -> typing.Optional[jsii.Number]:
        '''The size, in GB, of the ML storage volume to attach to the notebook instance.'''
        return typing.cast(typing.Optional[jsii.Number], jsii.get(self, "volumeSizeInGb"))

    @volume_size_in_gb.setter
    def volume_size_in_gb(self, value: typing.Optional[jsii.Number]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__36ebeec9f5c7eec651570238369444a3751c4b26c60de1b8dadbf1aab9cef52f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "volumeSizeInGb", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "minimum_instance_metadata_service_version": "minimumInstanceMetadataServiceVersion",
        },
    )
    class InstanceMetadataServiceConfigurationProperty:
        def __init__(
            self,
            *,
            minimum_instance_metadata_service_version: builtins.str,
        ) -> None:
            '''Information on the IMDS configuration of the notebook instance.

            :param minimum_instance_metadata_service_version: Indicates the minimum IMDS version that the notebook instance supports. When passed as part of ``CreateNotebookInstance`` , if no value is selected, then it defaults to IMDSv1. This means that both IMDSv1 and IMDSv2 are supported. If passed as part of ``UpdateNotebookInstance`` , there is no default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-notebookinstance-instancemetadataserviceconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                instance_metadata_service_configuration_property = sagemaker.CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty(
                    minimum_instance_metadata_service_version="minimumInstanceMetadataServiceVersion"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0f4a0d2cb344f0c7425a5b91574391433481b8edc2acc92a8988cf48294cf8e0)
                check_type(argname="argument minimum_instance_metadata_service_version", value=minimum_instance_metadata_service_version, expected_type=type_hints["minimum_instance_metadata_service_version"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "minimum_instance_metadata_service_version": minimum_instance_metadata_service_version,
            }

        @builtins.property
        def minimum_instance_metadata_service_version(self) -> builtins.str:
            '''Indicates the minimum IMDS version that the notebook instance supports.

            When passed as part of ``CreateNotebookInstance`` , if no value is selected, then it defaults to IMDSv1. This means that both IMDSv1 and IMDSv2 are supported. If passed as part of ``UpdateNotebookInstance`` , there is no default.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-notebookinstance-instancemetadataserviceconfiguration.html#cfn-sagemaker-notebookinstance-instancemetadataserviceconfiguration-minimuminstancemetadataserviceversion
            '''
            result = self._values.get("minimum_instance_metadata_service_version")
            assert result is not None, "Required property 'minimum_instance_metadata_service_version' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "InstanceMetadataServiceConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.implements(_IInspectable_c2943556)
class CfnNotebookInstanceLifecycleConfig(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstanceLifecycleConfig",
):
    '''The ``AWS::SageMaker::NotebookInstanceLifecycleConfig`` resource creates shell scripts that run when you create and/or start a notebook instance.

    For information about notebook instance lifecycle configurations, see `Customize a Notebook Instance <https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html>`_ in the *Amazon SageMaker Developer Guide* .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstancelifecycleconfig.html
    :cloudformationResource: AWS::SageMaker::NotebookInstanceLifecycleConfig
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_notebook_instance_lifecycle_config = sagemaker.CfnNotebookInstanceLifecycleConfig(self, "MyCfnNotebookInstanceLifecycleConfig",
            notebook_instance_lifecycle_config_name="notebookInstanceLifecycleConfigName",
            on_create=[sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty(
                content="content"
            )],
            on_start=[sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty(
                content="content"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        notebook_instance_lifecycle_config_name: typing.Optional[builtins.str] = None,
        on_create: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        on_start: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param notebook_instance_lifecycle_config_name: The name of the lifecycle configuration.
        :param on_create: A shell script that runs only once, when you create a notebook instance. The shell script must be a base64-encoded string.
        :param on_start: A shell script that runs every time you start a notebook instance, including when you create the notebook instance. The shell script must be a base64-encoded string.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__518043e7ff4ea7436d95b52252fafb48d756a1ef9372e9e1109fbba43ece3446)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnNotebookInstanceLifecycleConfigProps(
            notebook_instance_lifecycle_config_name=notebook_instance_lifecycle_config_name,
            on_create=on_create,
            on_start=on_start,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__71db9d0e2615f43293a8bea96ab42c82edea91c36a52e0f71758d973c947bf91)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d5302e45876e7d79389ba6d8897447cf7ad67f146699cbe2846d5d7ad69dac94)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrNotebookInstanceLifecycleConfigName")
    def attr_notebook_instance_lifecycle_config_name(self) -> builtins.str:
        '''The name of the lifecycle configuration, such as ``MyLifecycleConfig`` .

        :cloudformationAttribute: NotebookInstanceLifecycleConfigName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrNotebookInstanceLifecycleConfigName"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="notebookInstanceLifecycleConfigName")
    def notebook_instance_lifecycle_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of the lifecycle configuration.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "notebookInstanceLifecycleConfigName"))

    @notebook_instance_lifecycle_config_name.setter
    def notebook_instance_lifecycle_config_name(
        self,
        value: typing.Optional[builtins.str],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fce15998109ec27f9bf7652a68a0092b68ec864cd18199d1418aa3d82e5ce2fb)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "notebookInstanceLifecycleConfigName", value)

    @builtins.property
    @jsii.member(jsii_name="onCreate")
    def on_create(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]]:
        '''A shell script that runs only once, when you create a notebook instance.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]], jsii.get(self, "onCreate"))

    @on_create.setter
    def on_create(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3e1742b1957e1b689b9d3d9ee9213fcadbda6f1b85eec04eef85990c11e49e73)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "onCreate", value)

    @builtins.property
    @jsii.member(jsii_name="onStart")
    def on_start(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]]:
        '''A shell script that runs every time you start a notebook instance, including when you create the notebook instance.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]], jsii.get(self, "onStart"))

    @on_start.setter
    def on_start(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b5b4ce7c5cf92409ac58f3fedeef60cad5fa7a2d8c43865b05accd56e75d8f96)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "onStart", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty",
        jsii_struct_bases=[],
        name_mapping={"content": "content"},
    )
    class NotebookInstanceLifecycleHookProperty:
        def __init__(self, *, content: typing.Optional[builtins.str] = None) -> None:
            '''Specifies the notebook instance lifecycle configuration script.

            Each lifecycle configuration script has a limit of 16384 characters.

            :param content: A base64-encoded string that contains a shell script for a notebook instance lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-notebookinstancelifecycleconfig-notebookinstancelifecyclehook.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                notebook_instance_lifecycle_hook_property = sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty(
                    content="content"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__3d974a645e6211d4f3c43552b14b1faa8fd797600d1731ea384d007af9996c7a)
                check_type(argname="argument content", value=content, expected_type=type_hints["content"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if content is not None:
                self._values["content"] = content

        @builtins.property
        def content(self) -> typing.Optional[builtins.str]:
            '''A base64-encoded string that contains a shell script for a notebook instance lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-notebookinstancelifecycleconfig-notebookinstancelifecyclehook.html#cfn-sagemaker-notebookinstancelifecycleconfig-notebookinstancelifecyclehook-content
            '''
            result = self._values.get("content")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NotebookInstanceLifecycleHookProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstanceLifecycleConfigProps",
    jsii_struct_bases=[],
    name_mapping={
        "notebook_instance_lifecycle_config_name": "notebookInstanceLifecycleConfigName",
        "on_create": "onCreate",
        "on_start": "onStart",
    },
)
class CfnNotebookInstanceLifecycleConfigProps:
    def __init__(
        self,
        *,
        notebook_instance_lifecycle_config_name: typing.Optional[builtins.str] = None,
        on_create: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        on_start: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnNotebookInstanceLifecycleConfig``.

        :param notebook_instance_lifecycle_config_name: The name of the lifecycle configuration.
        :param on_create: A shell script that runs only once, when you create a notebook instance. The shell script must be a base64-encoded string.
        :param on_start: A shell script that runs every time you start a notebook instance, including when you create the notebook instance. The shell script must be a base64-encoded string.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstancelifecycleconfig.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_notebook_instance_lifecycle_config_props = sagemaker.CfnNotebookInstanceLifecycleConfigProps(
                notebook_instance_lifecycle_config_name="notebookInstanceLifecycleConfigName",
                on_create=[sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty(
                    content="content"
                )],
                on_start=[sagemaker.CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty(
                    content="content"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__39107b19e23bf4f67fa7869a85622b221e9d7f93297b32d555adbc59a5cd9010)
            check_type(argname="argument notebook_instance_lifecycle_config_name", value=notebook_instance_lifecycle_config_name, expected_type=type_hints["notebook_instance_lifecycle_config_name"])
            check_type(argname="argument on_create", value=on_create, expected_type=type_hints["on_create"])
            check_type(argname="argument on_start", value=on_start, expected_type=type_hints["on_start"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if notebook_instance_lifecycle_config_name is not None:
            self._values["notebook_instance_lifecycle_config_name"] = notebook_instance_lifecycle_config_name
        if on_create is not None:
            self._values["on_create"] = on_create
        if on_start is not None:
            self._values["on_start"] = on_start

    @builtins.property
    def notebook_instance_lifecycle_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of the lifecycle configuration.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstancelifecycleconfig.html#cfn-sagemaker-notebookinstancelifecycleconfig-notebookinstancelifecycleconfigname
        '''
        result = self._values.get("notebook_instance_lifecycle_config_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def on_create(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]]:
        '''A shell script that runs only once, when you create a notebook instance.

        The shell script must be a base64-encoded string.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstancelifecycleconfig.html#cfn-sagemaker-notebookinstancelifecycleconfig-oncreate
        '''
        result = self._values.get("on_create")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]], result)

    @builtins.property
    def on_start(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]]:
        '''A shell script that runs every time you start a notebook instance, including when you create the notebook instance.

        The shell script must be a base64-encoded string.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstancelifecycleconfig.html#cfn-sagemaker-notebookinstancelifecycleconfig-onstart
        '''
        result = self._values.get("on_start")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnNotebookInstanceLifecycleConfigProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnNotebookInstanceProps",
    jsii_struct_bases=[],
    name_mapping={
        "instance_type": "instanceType",
        "role_arn": "roleArn",
        "accelerator_types": "acceleratorTypes",
        "additional_code_repositories": "additionalCodeRepositories",
        "default_code_repository": "defaultCodeRepository",
        "direct_internet_access": "directInternetAccess",
        "instance_metadata_service_configuration": "instanceMetadataServiceConfiguration",
        "kms_key_id": "kmsKeyId",
        "lifecycle_config_name": "lifecycleConfigName",
        "notebook_instance_name": "notebookInstanceName",
        "platform_identifier": "platformIdentifier",
        "root_access": "rootAccess",
        "security_group_ids": "securityGroupIds",
        "subnet_id": "subnetId",
        "tags": "tags",
        "volume_size_in_gb": "volumeSizeInGb",
    },
)
class CfnNotebookInstanceProps:
    def __init__(
        self,
        *,
        instance_type: builtins.str,
        role_arn: builtins.str,
        accelerator_types: typing.Optional[typing.Sequence[builtins.str]] = None,
        additional_code_repositories: typing.Optional[typing.Sequence[builtins.str]] = None,
        default_code_repository: typing.Optional[builtins.str] = None,
        direct_internet_access: typing.Optional[builtins.str] = None,
        instance_metadata_service_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        kms_key_id: typing.Optional[builtins.str] = None,
        lifecycle_config_name: typing.Optional[builtins.str] = None,
        notebook_instance_name: typing.Optional[builtins.str] = None,
        platform_identifier: typing.Optional[builtins.str] = None,
        root_access: typing.Optional[builtins.str] = None,
        security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
        subnet_id: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        volume_size_in_gb: typing.Optional[jsii.Number] = None,
    ) -> None:
        '''Properties for defining a ``CfnNotebookInstance``.

        :param instance_type: The type of ML compute instance to launch for the notebook instance. .. epigraph:: Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.
        :param role_arn: When you send any requests to AWS resources from the notebook instance, SageMaker assumes this role to perform tasks on your behalf. You must grant this role necessary permissions so SageMaker can perform these tasks. The policy must allow the SageMaker service principal (sagemaker.amazonaws.com) permissions to assume this role. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ . .. epigraph:: To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.
        :param accelerator_types: A list of Amazon Elastic Inference (EI) instance types to associate with the notebook instance. Currently, only one instance type can be associated with a notebook instance. For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ . *Valid Values:* ``ml.eia1.medium | ml.eia1.large | ml.eia1.xlarge | ml.eia2.medium | ml.eia2.large | ml.eia2.xlarge`` .
        :param additional_code_repositories: An array of up to three Git repositories associated with the notebook instance. These can be either the names of Git repositories stored as resources in your account, or the URL of Git repositories in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. These repositories are cloned at the same level as the default repository of your notebook instance. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .
        :param default_code_repository: The Git repository associated with the notebook instance as its default code repository. This can be either the name of a Git repository stored as a resource in your account, or the URL of a Git repository in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. When you open a notebook instance, it opens in the directory that contains this repository. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .
        :param direct_internet_access: Sets whether SageMaker provides internet access to the notebook instance. If you set this to ``Disabled`` this notebook instance is able to access resources only in your VPC, and is not be able to connect to SageMaker training and endpoint services unless you configure a NAT Gateway in your VPC. For more information, see `Notebook Instances Are Internet-Enabled by Default <https://docs.aws.amazon.com/sagemaker/latest/dg/appendix-additional-considerations.html#appendix-notebook-and-internet-access>`_ . You can set the value of this parameter to ``Disabled`` only if you set a value for the ``SubnetId`` parameter.
        :param instance_metadata_service_configuration: Information on the IMDS configuration of the notebook instance.
        :param kms_key_id: The Amazon Resource Name (ARN) of a AWS Key Management Service key that SageMaker uses to encrypt data on the storage volume attached to your notebook instance. The KMS key you provide must be enabled. For information, see `Enabling and Disabling Keys <https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html>`_ in the *AWS Key Management Service Developer Guide* .
        :param lifecycle_config_name: The name of a lifecycle configuration to associate with the notebook instance. For information about lifecycle configurations, see `Customize a Notebook Instance <https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html>`_ in the *Amazon SageMaker Developer Guide* .
        :param notebook_instance_name: The name of the new notebook instance.
        :param platform_identifier: The platform identifier of the notebook instance runtime environment.
        :param root_access: Whether root access is enabled or disabled for users of the notebook instance. The default value is ``Enabled`` . .. epigraph:: Lifecycle configurations need root access to be able to set up a notebook instance. Because of this, lifecycle configurations associated with a notebook instance always run with root access even if you disable root access for users.
        :param security_group_ids: The VPC security group IDs, in the form sg-xxxxxxxx. The security groups must be for the same VPC as specified in the subnet.
        :param subnet_id: The ID of the subnet in a VPC to which you would like to have a connectivity from your ML compute instance.
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ . You can add tags later by using the ``CreateTags`` API.
        :param volume_size_in_gb: The size, in GB, of the ML storage volume to attach to the notebook instance. The default value is 5 GB. .. epigraph:: Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_notebook_instance_props = sagemaker.CfnNotebookInstanceProps(
                instance_type="instanceType",
                role_arn="roleArn",
            
                # the properties below are optional
                accelerator_types=["acceleratorTypes"],
                additional_code_repositories=["additionalCodeRepositories"],
                default_code_repository="defaultCodeRepository",
                direct_internet_access="directInternetAccess",
                instance_metadata_service_configuration=sagemaker.CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty(
                    minimum_instance_metadata_service_version="minimumInstanceMetadataServiceVersion"
                ),
                kms_key_id="kmsKeyId",
                lifecycle_config_name="lifecycleConfigName",
                notebook_instance_name="notebookInstanceName",
                platform_identifier="platformIdentifier",
                root_access="rootAccess",
                security_group_ids=["securityGroupIds"],
                subnet_id="subnetId",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                volume_size_in_gb=123
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fb4d5452fe3cd0d1665a3889149bbc6d104f132cfd2cfa196a6d745e80866209)
            check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument accelerator_types", value=accelerator_types, expected_type=type_hints["accelerator_types"])
            check_type(argname="argument additional_code_repositories", value=additional_code_repositories, expected_type=type_hints["additional_code_repositories"])
            check_type(argname="argument default_code_repository", value=default_code_repository, expected_type=type_hints["default_code_repository"])
            check_type(argname="argument direct_internet_access", value=direct_internet_access, expected_type=type_hints["direct_internet_access"])
            check_type(argname="argument instance_metadata_service_configuration", value=instance_metadata_service_configuration, expected_type=type_hints["instance_metadata_service_configuration"])
            check_type(argname="argument kms_key_id", value=kms_key_id, expected_type=type_hints["kms_key_id"])
            check_type(argname="argument lifecycle_config_name", value=lifecycle_config_name, expected_type=type_hints["lifecycle_config_name"])
            check_type(argname="argument notebook_instance_name", value=notebook_instance_name, expected_type=type_hints["notebook_instance_name"])
            check_type(argname="argument platform_identifier", value=platform_identifier, expected_type=type_hints["platform_identifier"])
            check_type(argname="argument root_access", value=root_access, expected_type=type_hints["root_access"])
            check_type(argname="argument security_group_ids", value=security_group_ids, expected_type=type_hints["security_group_ids"])
            check_type(argname="argument subnet_id", value=subnet_id, expected_type=type_hints["subnet_id"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument volume_size_in_gb", value=volume_size_in_gb, expected_type=type_hints["volume_size_in_gb"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "instance_type": instance_type,
            "role_arn": role_arn,
        }
        if accelerator_types is not None:
            self._values["accelerator_types"] = accelerator_types
        if additional_code_repositories is not None:
            self._values["additional_code_repositories"] = additional_code_repositories
        if default_code_repository is not None:
            self._values["default_code_repository"] = default_code_repository
        if direct_internet_access is not None:
            self._values["direct_internet_access"] = direct_internet_access
        if instance_metadata_service_configuration is not None:
            self._values["instance_metadata_service_configuration"] = instance_metadata_service_configuration
        if kms_key_id is not None:
            self._values["kms_key_id"] = kms_key_id
        if lifecycle_config_name is not None:
            self._values["lifecycle_config_name"] = lifecycle_config_name
        if notebook_instance_name is not None:
            self._values["notebook_instance_name"] = notebook_instance_name
        if platform_identifier is not None:
            self._values["platform_identifier"] = platform_identifier
        if root_access is not None:
            self._values["root_access"] = root_access
        if security_group_ids is not None:
            self._values["security_group_ids"] = security_group_ids
        if subnet_id is not None:
            self._values["subnet_id"] = subnet_id
        if tags is not None:
            self._values["tags"] = tags
        if volume_size_in_gb is not None:
            self._values["volume_size_in_gb"] = volume_size_in_gb

    @builtins.property
    def instance_type(self) -> builtins.str:
        '''The type of ML compute instance to launch for the notebook instance.

        .. epigraph::

           Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-instancetype
        '''
        result = self._values.get("instance_type")
        assert result is not None, "Required property 'instance_type' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''When you send any requests to AWS resources from the notebook instance, SageMaker assumes this role to perform tasks on your behalf.

        You must grant this role necessary permissions so SageMaker can perform these tasks. The policy must allow the SageMaker service principal (sagemaker.amazonaws.com) permissions to assume this role. For more information, see `SageMaker Roles <https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html>`_ .
        .. epigraph::

           To be able to pass this role to SageMaker, the caller of this API must have the ``iam:PassRole`` permission.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def accelerator_types(self) -> typing.Optional[typing.List[builtins.str]]:
        '''A list of Amazon Elastic Inference (EI) instance types to associate with the notebook instance.

        Currently, only one instance type can be associated with a notebook instance. For more information, see `Using Elastic Inference in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/ei.html>`_ .

        *Valid Values:* ``ml.eia1.medium | ml.eia1.large | ml.eia1.xlarge | ml.eia2.medium | ml.eia2.large | ml.eia2.xlarge`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-acceleratortypes
        '''
        result = self._values.get("accelerator_types")
        return typing.cast(typing.Optional[typing.List[builtins.str]], result)

    @builtins.property
    def additional_code_repositories(
        self,
    ) -> typing.Optional[typing.List[builtins.str]]:
        '''An array of up to three Git repositories associated with the notebook instance.

        These can be either the names of Git repositories stored as resources in your account, or the URL of Git repositories in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. These repositories are cloned at the same level as the default repository of your notebook instance. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-additionalcoderepositories
        '''
        result = self._values.get("additional_code_repositories")
        return typing.cast(typing.Optional[typing.List[builtins.str]], result)

    @builtins.property
    def default_code_repository(self) -> typing.Optional[builtins.str]:
        '''The Git repository associated with the notebook instance as its default code repository.

        This can be either the name of a Git repository stored as a resource in your account, or the URL of a Git repository in `AWS CodeCommit <https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html>`_ or in any other Git repository. When you open a notebook instance, it opens in the directory that contains this repository. For more information, see `Associating Git Repositories with SageMaker Notebook Instances <https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-repo.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-defaultcoderepository
        '''
        result = self._values.get("default_code_repository")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def direct_internet_access(self) -> typing.Optional[builtins.str]:
        '''Sets whether SageMaker provides internet access to the notebook instance.

        If you set this to ``Disabled`` this notebook instance is able to access resources only in your VPC, and is not be able to connect to SageMaker training and endpoint services unless you configure a NAT Gateway in your VPC.

        For more information, see `Notebook Instances Are Internet-Enabled by Default <https://docs.aws.amazon.com/sagemaker/latest/dg/appendix-additional-considerations.html#appendix-notebook-and-internet-access>`_ . You can set the value of this parameter to ``Disabled`` only if you set a value for the ``SubnetId`` parameter.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-directinternetaccess
        '''
        result = self._values.get("direct_internet_access")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def instance_metadata_service_configuration(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty]]:
        '''Information on the IMDS configuration of the notebook instance.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-instancemetadataserviceconfiguration
        '''
        result = self._values.get("instance_metadata_service_configuration")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty]], result)

    @builtins.property
    def kms_key_id(self) -> typing.Optional[builtins.str]:
        '''The Amazon Resource Name (ARN) of a AWS Key Management Service key that SageMaker uses to encrypt data on the storage volume attached to your notebook instance.

        The KMS key you provide must be enabled. For information, see `Enabling and Disabling Keys <https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html>`_ in the *AWS Key Management Service Developer Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-kmskeyid
        '''
        result = self._values.get("kms_key_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def lifecycle_config_name(self) -> typing.Optional[builtins.str]:
        '''The name of a lifecycle configuration to associate with the notebook instance.

        For information about lifecycle configurations, see `Customize a Notebook Instance <https://docs.aws.amazon.com/sagemaker/latest/dg/notebook-lifecycle-config.html>`_ in the *Amazon SageMaker Developer Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-lifecycleconfigname
        '''
        result = self._values.get("lifecycle_config_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def notebook_instance_name(self) -> typing.Optional[builtins.str]:
        '''The name of the new notebook instance.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-notebookinstancename
        '''
        result = self._values.get("notebook_instance_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def platform_identifier(self) -> typing.Optional[builtins.str]:
        '''The platform identifier of the notebook instance runtime environment.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-platformidentifier
        '''
        result = self._values.get("platform_identifier")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def root_access(self) -> typing.Optional[builtins.str]:
        '''Whether root access is enabled or disabled for users of the notebook instance. The default value is ``Enabled`` .

        .. epigraph::

           Lifecycle configurations need root access to be able to set up a notebook instance. Because of this, lifecycle configurations associated with a notebook instance always run with root access even if you disable root access for users.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-rootaccess
        '''
        result = self._values.get("root_access")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def security_group_ids(self) -> typing.Optional[typing.List[builtins.str]]:
        '''The VPC security group IDs, in the form sg-xxxxxxxx.

        The security groups must be for the same VPC as specified in the subnet.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-securitygroupids
        '''
        result = self._values.get("security_group_ids")
        return typing.cast(typing.Optional[typing.List[builtins.str]], result)

    @builtins.property
    def subnet_id(self) -> typing.Optional[builtins.str]:
        '''The ID of the subnet in a VPC to which you would like to have a connectivity from your ML compute instance.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-subnetid
        '''
        result = self._values.get("subnet_id")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ .

        You can add tags later by using the ``CreateTags`` API.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def volume_size_in_gb(self) -> typing.Optional[jsii.Number]:
        '''The size, in GB, of the ML storage volume to attach to the notebook instance.

        The default value is 5 GB.
        .. epigraph::

           Expect some interruption of service if this parameter is changed as CloudFormation stops a notebook instance and starts it up again to update it.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-notebookinstance.html#cfn-sagemaker-notebookinstance-volumesizeingb
        '''
        result = self._values.get("volume_size_in_gb")
        return typing.cast(typing.Optional[jsii.Number], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnNotebookInstanceProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnPipeline(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnPipeline",
):
    '''The ``AWS::SageMaker::Pipeline`` resource creates shell scripts that run when you create and/or start a SageMaker Pipeline.

    For information about SageMaker Pipelines, see `SageMaker Pipelines <https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines.html>`_ in the *Amazon SageMaker Developer Guide* .

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html
    :cloudformationResource: AWS::SageMaker::Pipeline
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # parallelism_configuration: Any
        # pipeline_definition: Any
        
        cfn_pipeline = sagemaker.CfnPipeline(self, "MyCfnPipeline",
            pipeline_definition=pipeline_definition,
            pipeline_name="pipelineName",
            role_arn="roleArn",
        
            # the properties below are optional
            parallelism_configuration=parallelism_configuration,
            pipeline_description="pipelineDescription",
            pipeline_display_name="pipelineDisplayName",
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        pipeline_definition: typing.Any,
        pipeline_name: builtins.str,
        role_arn: builtins.str,
        parallelism_configuration: typing.Any = None,
        pipeline_description: typing.Optional[builtins.str] = None,
        pipeline_display_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param pipeline_definition: The definition of the pipeline. This can be either a JSON string or an Amazon S3 location.
        :param pipeline_name: The name of the pipeline.
        :param role_arn: The Amazon Resource Name (ARN) of the IAM role used to execute the pipeline.
        :param parallelism_configuration: The parallelism configuration applied to the pipeline.
        :param pipeline_description: The description of the pipeline.
        :param pipeline_display_name: The display name of the pipeline.
        :param tags: The tags of the pipeline.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__1ad401effd23b8166514a4ae8c124006c7f366e8a04330e88afe117ee38dc759)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnPipelineProps(
            pipeline_definition=pipeline_definition,
            pipeline_name=pipeline_name,
            role_arn=role_arn,
            parallelism_configuration=parallelism_configuration,
            pipeline_description=pipeline_description,
            pipeline_display_name=pipeline_display_name,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2ef5df774dc4da664546343b07b97e1b911ae1340e00658468dbb3b548e35d0b)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__425cff485a7d607913cd5619367319f69abc05063f5c69dcc0187a86adbab558)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="pipelineDefinition")
    def pipeline_definition(self) -> typing.Any:
        '''The definition of the pipeline.'''
        return typing.cast(typing.Any, jsii.get(self, "pipelineDefinition"))

    @pipeline_definition.setter
    def pipeline_definition(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a4d6de343d0d5e8951289fbc8da9e379dea874e19819164a97a48f37b0d2054a)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "pipelineDefinition", value)

    @builtins.property
    @jsii.member(jsii_name="pipelineName")
    def pipeline_name(self) -> builtins.str:
        '''The name of the pipeline.'''
        return typing.cast(builtins.str, jsii.get(self, "pipelineName"))

    @pipeline_name.setter
    def pipeline_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__cbcf88f32c798e6042f4f042e947c84b0b73f17edf4d203ce943e3ad2f500042)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "pipelineName", value)

    @builtins.property
    @jsii.member(jsii_name="roleArn")
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the IAM role used to execute the pipeline.'''
        return typing.cast(builtins.str, jsii.get(self, "roleArn"))

    @role_arn.setter
    def role_arn(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fe03258e998279120b3ba766d655d0768128ecb7802ac4645154217adf786b50)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "roleArn", value)

    @builtins.property
    @jsii.member(jsii_name="parallelismConfiguration")
    def parallelism_configuration(self) -> typing.Any:
        '''The parallelism configuration applied to the pipeline.'''
        return typing.cast(typing.Any, jsii.get(self, "parallelismConfiguration"))

    @parallelism_configuration.setter
    def parallelism_configuration(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__75edf709dbf33ce1b709c54ac74b477fea0c18696074d2323b37200cab9c21f4)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "parallelismConfiguration", value)

    @builtins.property
    @jsii.member(jsii_name="pipelineDescription")
    def pipeline_description(self) -> typing.Optional[builtins.str]:
        '''The description of the pipeline.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "pipelineDescription"))

    @pipeline_description.setter
    def pipeline_description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__12d6af45df5bd392f8d07032559a4ec65d56f16891a7243b60216788da804975)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "pipelineDescription", value)

    @builtins.property
    @jsii.member(jsii_name="pipelineDisplayName")
    def pipeline_display_name(self) -> typing.Optional[builtins.str]:
        '''The display name of the pipeline.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "pipelineDisplayName"))

    @pipeline_display_name.setter
    def pipeline_display_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__5d73768efd335b094af9909ce72fa1e00cebb52292260403651362eb1a37b19e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "pipelineDisplayName", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''The tags of the pipeline.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__b0e1549a6239b3b94e742818628f9f0784a20e36c288ded56381bb7d51318418)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnPipeline.ParallelismConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={"max_parallel_execution_steps": "maxParallelExecutionSteps"},
    )
    class ParallelismConfigurationProperty:
        def __init__(self, *, max_parallel_execution_steps: jsii.Number) -> None:
            '''Configuration that controls the parallelism of the pipeline.

            By default, the parallelism configuration specified applies to all executions of the pipeline unless overridden.

            :param max_parallel_execution_steps: The max number of steps that can be executed in parallel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-parallelismconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                parallelism_configuration_property = sagemaker.CfnPipeline.ParallelismConfigurationProperty(
                    max_parallel_execution_steps=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__1d4335b664c05d7004f891fb161e3dc180491fa23764a7654c61de6ded41a844)
                check_type(argname="argument max_parallel_execution_steps", value=max_parallel_execution_steps, expected_type=type_hints["max_parallel_execution_steps"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "max_parallel_execution_steps": max_parallel_execution_steps,
            }

        @builtins.property
        def max_parallel_execution_steps(self) -> jsii.Number:
            '''The max number of steps that can be executed in parallel.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-parallelismconfiguration.html#cfn-sagemaker-pipeline-parallelismconfiguration-maxparallelexecutionsteps
            '''
            result = self._values.get("max_parallel_execution_steps")
            assert result is not None, "Required property 'max_parallel_execution_steps' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ParallelismConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnPipeline.PipelineDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "pipeline_definition_body": "pipelineDefinitionBody",
            "pipeline_definition_s3_location": "pipelineDefinitionS3Location",
        },
    )
    class PipelineDefinitionProperty:
        def __init__(
            self,
            *,
            pipeline_definition_body: builtins.str,
            pipeline_definition_s3_location: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnPipeline.S3LocationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The definition of the pipeline.

            This can be either a JSON string or an Amazon S3 location.

            :param pipeline_definition_body: The `JSON pipeline definition <https://docs.aws.amazon.com/https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/>`_ of the pipeline.
            :param pipeline_definition_s3_location: The location of the pipeline definition stored in Amazon S3. If specified, SageMaker retrieves the pipeline definition from this location.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                pipeline_definition_property = sagemaker.CfnPipeline.PipelineDefinitionProperty(
                    pipeline_definition_body="pipelineDefinitionBody",
                
                    # the properties below are optional
                    pipeline_definition_s3_location=sagemaker.CfnPipeline.S3LocationProperty(
                        bucket="bucket",
                        key="key",
                
                        # the properties below are optional
                        e_tag="eTag",
                        version="version"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0bbf8c20b27d196c5b392dce4c04dd2dcd33abb5fabfb5ec5855de83a39c9240)
                check_type(argname="argument pipeline_definition_body", value=pipeline_definition_body, expected_type=type_hints["pipeline_definition_body"])
                check_type(argname="argument pipeline_definition_s3_location", value=pipeline_definition_s3_location, expected_type=type_hints["pipeline_definition_s3_location"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "pipeline_definition_body": pipeline_definition_body,
            }
            if pipeline_definition_s3_location is not None:
                self._values["pipeline_definition_s3_location"] = pipeline_definition_s3_location

        @builtins.property
        def pipeline_definition_body(self) -> builtins.str:
            '''The `JSON pipeline definition <https://docs.aws.amazon.com/https://aws-sagemaker-mlops.github.io/sagemaker-model-building-pipeline-definition-JSON-schema/>`_ of the pipeline.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html#cfn-sagemaker-pipeline-pipelinedefinition-pipelinedefinitionbody
            '''
            result = self._values.get("pipeline_definition_body")
            assert result is not None, "Required property 'pipeline_definition_body' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def pipeline_definition_s3_location(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnPipeline.S3LocationProperty"]]:
            '''The location of the pipeline definition stored in Amazon S3.

            If specified, SageMaker retrieves the pipeline definition from this location.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-pipelinedefinition.html#cfn-sagemaker-pipeline-pipelinedefinition-pipelinedefinitions3location
            '''
            result = self._values.get("pipeline_definition_s3_location")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnPipeline.S3LocationProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "PipelineDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnPipeline.S3LocationProperty",
        jsii_struct_bases=[],
        name_mapping={
            "bucket": "bucket",
            "key": "key",
            "e_tag": "eTag",
            "version": "version",
        },
    )
    class S3LocationProperty:
        def __init__(
            self,
            *,
            bucket: builtins.str,
            key: builtins.str,
            e_tag: typing.Optional[builtins.str] = None,
            version: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The location of the pipeline definition stored in Amazon S3.

            If specified, SageMaker will retrieve the pipeline definition from this location.

            :param bucket: The name of the S3 bucket.
            :param key: The object key (or key name) which uniquely identifies the object in an S3 bucket.
            :param e_tag: A file checksum of the pipeline definition file.
            :param version: The version ID of the pipeline definition file. If not specified, Amazon SageMaker will retrieve the latest version.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                s3_location_property = sagemaker.CfnPipeline.S3LocationProperty(
                    bucket="bucket",
                    key="key",
                
                    # the properties below are optional
                    e_tag="eTag",
                    version="version"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4cbd25df52cca2361fd41b01fdfa929222941140b523d6049d49603e51d7821e)
                check_type(argname="argument bucket", value=bucket, expected_type=type_hints["bucket"])
                check_type(argname="argument key", value=key, expected_type=type_hints["key"])
                check_type(argname="argument e_tag", value=e_tag, expected_type=type_hints["e_tag"])
                check_type(argname="argument version", value=version, expected_type=type_hints["version"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "bucket": bucket,
                "key": key,
            }
            if e_tag is not None:
                self._values["e_tag"] = e_tag
            if version is not None:
                self._values["version"] = version

        @builtins.property
        def bucket(self) -> builtins.str:
            '''The name of the S3 bucket.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-bucket
            '''
            result = self._values.get("bucket")
            assert result is not None, "Required property 'bucket' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def key(self) -> builtins.str:
            '''The object key (or key name) which uniquely identifies the object in an S3 bucket.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-key
            '''
            result = self._values.get("key")
            assert result is not None, "Required property 'key' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def e_tag(self) -> typing.Optional[builtins.str]:
            '''A file checksum of the pipeline definition file.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-etag
            '''
            result = self._values.get("e_tag")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def version(self) -> typing.Optional[builtins.str]:
            '''The version ID of the pipeline definition file.

            If not specified, Amazon SageMaker will retrieve the latest version.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-pipeline-s3location.html#cfn-sagemaker-pipeline-s3location-version
            '''
            result = self._values.get("version")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "S3LocationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnPipelineProps",
    jsii_struct_bases=[],
    name_mapping={
        "pipeline_definition": "pipelineDefinition",
        "pipeline_name": "pipelineName",
        "role_arn": "roleArn",
        "parallelism_configuration": "parallelismConfiguration",
        "pipeline_description": "pipelineDescription",
        "pipeline_display_name": "pipelineDisplayName",
        "tags": "tags",
    },
)
class CfnPipelineProps:
    def __init__(
        self,
        *,
        pipeline_definition: typing.Any,
        pipeline_name: builtins.str,
        role_arn: builtins.str,
        parallelism_configuration: typing.Any = None,
        pipeline_description: typing.Optional[builtins.str] = None,
        pipeline_display_name: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnPipeline``.

        :param pipeline_definition: The definition of the pipeline. This can be either a JSON string or an Amazon S3 location.
        :param pipeline_name: The name of the pipeline.
        :param role_arn: The Amazon Resource Name (ARN) of the IAM role used to execute the pipeline.
        :param parallelism_configuration: The parallelism configuration applied to the pipeline.
        :param pipeline_description: The description of the pipeline.
        :param pipeline_display_name: The display name of the pipeline.
        :param tags: The tags of the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # parallelism_configuration: Any
            # pipeline_definition: Any
            
            cfn_pipeline_props = sagemaker.CfnPipelineProps(
                pipeline_definition=pipeline_definition,
                pipeline_name="pipelineName",
                role_arn="roleArn",
            
                # the properties below are optional
                parallelism_configuration=parallelism_configuration,
                pipeline_description="pipelineDescription",
                pipeline_display_name="pipelineDisplayName",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ee8df4c15293c04f73c46e2e5fee2d90e75d42f64c79bb1242363ef89c794bc3)
            check_type(argname="argument pipeline_definition", value=pipeline_definition, expected_type=type_hints["pipeline_definition"])
            check_type(argname="argument pipeline_name", value=pipeline_name, expected_type=type_hints["pipeline_name"])
            check_type(argname="argument role_arn", value=role_arn, expected_type=type_hints["role_arn"])
            check_type(argname="argument parallelism_configuration", value=parallelism_configuration, expected_type=type_hints["parallelism_configuration"])
            check_type(argname="argument pipeline_description", value=pipeline_description, expected_type=type_hints["pipeline_description"])
            check_type(argname="argument pipeline_display_name", value=pipeline_display_name, expected_type=type_hints["pipeline_display_name"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "pipeline_definition": pipeline_definition,
            "pipeline_name": pipeline_name,
            "role_arn": role_arn,
        }
        if parallelism_configuration is not None:
            self._values["parallelism_configuration"] = parallelism_configuration
        if pipeline_description is not None:
            self._values["pipeline_description"] = pipeline_description
        if pipeline_display_name is not None:
            self._values["pipeline_display_name"] = pipeline_display_name
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def pipeline_definition(self) -> typing.Any:
        '''The definition of the pipeline.

        This can be either a JSON string or an Amazon S3 location.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-pipelinedefinition
        '''
        result = self._values.get("pipeline_definition")
        assert result is not None, "Required property 'pipeline_definition' is missing"
        return typing.cast(typing.Any, result)

    @builtins.property
    def pipeline_name(self) -> builtins.str:
        '''The name of the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-pipelinename
        '''
        result = self._values.get("pipeline_name")
        assert result is not None, "Required property 'pipeline_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def role_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the IAM role used to execute the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-rolearn
        '''
        result = self._values.get("role_arn")
        assert result is not None, "Required property 'role_arn' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def parallelism_configuration(self) -> typing.Any:
        '''The parallelism configuration applied to the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-parallelismconfiguration
        '''
        result = self._values.get("parallelism_configuration")
        return typing.cast(typing.Any, result)

    @builtins.property
    def pipeline_description(self) -> typing.Optional[builtins.str]:
        '''The description of the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-pipelinedescription
        '''
        result = self._values.get("pipeline_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def pipeline_display_name(self) -> typing.Optional[builtins.str]:
        '''The display name of the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-pipelinedisplayname
        '''
        result = self._values.get("pipeline_display_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''The tags of the pipeline.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-pipeline.html#cfn-sagemaker-pipeline-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnPipelineProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnProject(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnProject",
):
    '''Creates a machine learning (ML) project that can contain one or more templates that set up an ML pipeline from training to deploying an approved model.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html
    :cloudformationResource: AWS::SageMaker::Project
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        # service_catalog_provisioning_details: Any
        
        cfn_project = sagemaker.CfnProject(self, "MyCfnProject",
            project_name="projectName",
            service_catalog_provisioning_details=service_catalog_provisioning_details,
        
            # the properties below are optional
            project_description="projectDescription",
            service_catalog_provisioned_product_details=sagemaker.CfnProject.ServiceCatalogProvisionedProductDetailsProperty(
                provisioned_product_id="provisionedProductId",
                provisioned_product_status_message="provisionedProductStatusMessage"
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        project_name: builtins.str,
        service_catalog_provisioning_details: typing.Any,
        project_description: typing.Optional[builtins.str] = None,
        service_catalog_provisioned_product_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnProject.ServiceCatalogProvisionedProductDetailsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param project_name: The name of the project.
        :param service_catalog_provisioning_details: The product ID and provisioning artifact ID to provision a service catalog. For information, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .
        :param project_description: The description of the project.
        :param service_catalog_provisioned_product_details: Details of a provisioned service catalog product. For information about service catalog, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__36d90c8a4de3ec6cd6aac98e8b78ab8d07ed4eaab37e59bd5a481048e098a352)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnProjectProps(
            project_name=project_name,
            service_catalog_provisioning_details=service_catalog_provisioning_details,
            project_description=project_description,
            service_catalog_provisioned_product_details=service_catalog_provisioned_product_details,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__76feecc969b22f7c1e87382ee8f1456390c3a5f1d0adff82d216a4528e0d8b63)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__4561aa9d3adbcdbd1302b62aa20d20c7f6da5a62cbb08e88f965ed9a6eeb7cf3)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrCreationTime")
    def attr_creation_time(self) -> builtins.str:
        '''The time that the project was created.

        :cloudformationAttribute: CreationTime
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrCreationTime"))

    @builtins.property
    @jsii.member(jsii_name="attrProjectArn")
    def attr_project_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the project.

        :cloudformationAttribute: ProjectArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrProjectArn"))

    @builtins.property
    @jsii.member(jsii_name="attrProjectId")
    def attr_project_id(self) -> builtins.str:
        '''The ID of the project.

        This ID is prepended to all entities associated with this project.

        :cloudformationAttribute: ProjectId
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrProjectId"))

    @builtins.property
    @jsii.member(jsii_name="attrProjectStatus")
    def attr_project_status(self) -> builtins.str:
        '''The status of the project.

        :cloudformationAttribute: ProjectStatus
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrProjectStatus"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="projectName")
    def project_name(self) -> builtins.str:
        '''The name of the project.'''
        return typing.cast(builtins.str, jsii.get(self, "projectName"))

    @project_name.setter
    def project_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e671a1f8a3c6667e300b84008f581f9371ad7d9618076d90853fed714b1db138)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "projectName", value)

    @builtins.property
    @jsii.member(jsii_name="serviceCatalogProvisioningDetails")
    def service_catalog_provisioning_details(self) -> typing.Any:
        '''The product ID and provisioning artifact ID to provision a service catalog.'''
        return typing.cast(typing.Any, jsii.get(self, "serviceCatalogProvisioningDetails"))

    @service_catalog_provisioning_details.setter
    def service_catalog_provisioning_details(self, value: typing.Any) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9d718ddafa3c422dac1f0d00451c0ed5aa622263f6d29b78b9bf867f3295e22c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "serviceCatalogProvisioningDetails", value)

    @builtins.property
    @jsii.member(jsii_name="projectDescription")
    def project_description(self) -> typing.Optional[builtins.str]:
        '''The description of the project.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "projectDescription"))

    @project_description.setter
    def project_description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__bbba1d96ca34775b9d6bb59929ffa5affcca7733f06a146a63b8176d032affec)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "projectDescription", value)

    @builtins.property
    @jsii.member(jsii_name="serviceCatalogProvisionedProductDetails")
    def service_catalog_provisioned_product_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnProject.ServiceCatalogProvisionedProductDetailsProperty"]]:
        '''Details of a provisioned service catalog product.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnProject.ServiceCatalogProvisionedProductDetailsProperty"]], jsii.get(self, "serviceCatalogProvisionedProductDetails"))

    @service_catalog_provisioned_product_details.setter
    def service_catalog_provisioned_product_details(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnProject.ServiceCatalogProvisionedProductDetailsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__718846b7774e70e41ab8c08d9dd7855efeff4369da6fb321666c7229a186b3c6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "serviceCatalogProvisionedProductDetails", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__710e9f99725a9a45c1269e140374af7d943b012a3c73a0a20bb49a9120ab06c6)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnProject.ProvisioningParameterProperty",
        jsii_struct_bases=[],
        name_mapping={"key": "key", "value": "value"},
    )
    class ProvisioningParameterProperty:
        def __init__(self, *, key: builtins.str, value: builtins.str) -> None:
            '''A key value pair used when you provision a project as a service catalog product.

            For information, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .

            :param key: The key that identifies a provisioning parameter.
            :param value: The value of the provisioning parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                provisioning_parameter_property = sagemaker.CfnProject.ProvisioningParameterProperty(
                    key="key",
                    value="value"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4c5d0079b3ac561527f2289261df009b2bf57d1d90c3910d54e231f6364bc394)
                check_type(argname="argument key", value=key, expected_type=type_hints["key"])
                check_type(argname="argument value", value=value, expected_type=type_hints["value"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "key": key,
                "value": value,
            }

        @builtins.property
        def key(self) -> builtins.str:
            '''The key that identifies a provisioning parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html#cfn-sagemaker-project-provisioningparameter-key
            '''
            result = self._values.get("key")
            assert result is not None, "Required property 'key' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def value(self) -> builtins.str:
            '''The value of the provisioning parameter.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-provisioningparameter.html#cfn-sagemaker-project-provisioningparameter-value
            '''
            result = self._values.get("value")
            assert result is not None, "Required property 'value' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ProvisioningParameterProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnProject.ServiceCatalogProvisionedProductDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "provisioned_product_id": "provisionedProductId",
            "provisioned_product_status_message": "provisionedProductStatusMessage",
        },
    )
    class ServiceCatalogProvisionedProductDetailsProperty:
        def __init__(
            self,
            *,
            provisioned_product_id: typing.Optional[builtins.str] = None,
            provisioned_product_status_message: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Details of a provisioned service catalog product.

            For information about service catalog, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .

            :param provisioned_product_id: The ID of the provisioned product.
            :param provisioned_product_status_message: The current status of the product. - ``AVAILABLE`` - Stable state, ready to perform any operation. The most recent operation succeeded and completed. - ``UNDER_CHANGE`` - Transitive state. Operations performed might not have valid results. Wait for an AVAILABLE status before performing operations. - ``TAINTED`` - Stable state, ready to perform any operation. The stack has completed the requested operation but is not exactly what was requested. For example, a request to update to a new version failed and the stack rolled back to the current version. - ``ERROR`` - An unexpected error occurred. The provisioned product exists but the stack is not running. For example, CloudFormation received a parameter value that was not valid and could not launch the stack. - ``PLAN_IN_PROGRESS`` - Transitive state. The plan operations were performed to provision a new product, but resources have not yet been created. After reviewing the list of resources to be created, execute the plan. Wait for an AVAILABLE status before performing operations.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                service_catalog_provisioned_product_details_property = sagemaker.CfnProject.ServiceCatalogProvisionedProductDetailsProperty(
                    provisioned_product_id="provisionedProductId",
                    provisioned_product_status_message="provisionedProductStatusMessage"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8805a1cbfa5ad8c3a8aa62a88122b7e85ddb718a700a209759f3c80250240aed)
                check_type(argname="argument provisioned_product_id", value=provisioned_product_id, expected_type=type_hints["provisioned_product_id"])
                check_type(argname="argument provisioned_product_status_message", value=provisioned_product_status_message, expected_type=type_hints["provisioned_product_status_message"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if provisioned_product_id is not None:
                self._values["provisioned_product_id"] = provisioned_product_id
            if provisioned_product_status_message is not None:
                self._values["provisioned_product_status_message"] = provisioned_product_status_message

        @builtins.property
        def provisioned_product_id(self) -> typing.Optional[builtins.str]:
            '''The ID of the provisioned product.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html#cfn-sagemaker-project-servicecatalogprovisionedproductdetails-provisionedproductid
            '''
            result = self._values.get("provisioned_product_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def provisioned_product_status_message(self) -> typing.Optional[builtins.str]:
            '''The current status of the product.

            - ``AVAILABLE`` - Stable state, ready to perform any operation. The most recent operation succeeded and completed.
            - ``UNDER_CHANGE`` - Transitive state. Operations performed might not have valid results. Wait for an AVAILABLE status before performing operations.
            - ``TAINTED`` - Stable state, ready to perform any operation. The stack has completed the requested operation but is not exactly what was requested. For example, a request to update to a new version failed and the stack rolled back to the current version.
            - ``ERROR`` - An unexpected error occurred. The provisioned product exists but the stack is not running. For example, CloudFormation received a parameter value that was not valid and could not launch the stack.
            - ``PLAN_IN_PROGRESS`` - Transitive state. The plan operations were performed to provision a new product, but resources have not yet been created. After reviewing the list of resources to be created, execute the plan. Wait for an AVAILABLE status before performing operations.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisionedproductdetails.html#cfn-sagemaker-project-servicecatalogprovisionedproductdetails-provisionedproductstatusmessage
            '''
            result = self._values.get("provisioned_product_status_message")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ServiceCatalogProvisionedProductDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnProject.ServiceCatalogProvisioningDetailsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "product_id": "productId",
            "path_id": "pathId",
            "provisioning_artifact_id": "provisioningArtifactId",
            "provisioning_parameters": "provisioningParameters",
        },
    )
    class ServiceCatalogProvisioningDetailsProperty:
        def __init__(
            self,
            *,
            product_id: builtins.str,
            path_id: typing.Optional[builtins.str] = None,
            provisioning_artifact_id: typing.Optional[builtins.str] = None,
            provisioning_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnProject.ProvisioningParameterProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        ) -> None:
            '''Details that you specify to provision a service catalog product.

            For information about service catalog, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .

            :param product_id: The ID of the product to provision.
            :param path_id: The path identifier of the product. This value is optional if the product has a default path, and required if the product has more than one path.
            :param provisioning_artifact_id: The ID of the provisioning artifact.
            :param provisioning_parameters: A list of key value pairs that you specify when you provision a product.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                service_catalog_provisioning_details_property = sagemaker.CfnProject.ServiceCatalogProvisioningDetailsProperty(
                    product_id="productId",
                
                    # the properties below are optional
                    path_id="pathId",
                    provisioning_artifact_id="provisioningArtifactId",
                    provisioning_parameters=[sagemaker.CfnProject.ProvisioningParameterProperty(
                        key="key",
                        value="value"
                    )]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__b185388247b0a58156f6d5e7ae6d0df0e06e969d26ac85a21f650329ce539a5a)
                check_type(argname="argument product_id", value=product_id, expected_type=type_hints["product_id"])
                check_type(argname="argument path_id", value=path_id, expected_type=type_hints["path_id"])
                check_type(argname="argument provisioning_artifact_id", value=provisioning_artifact_id, expected_type=type_hints["provisioning_artifact_id"])
                check_type(argname="argument provisioning_parameters", value=provisioning_parameters, expected_type=type_hints["provisioning_parameters"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "product_id": product_id,
            }
            if path_id is not None:
                self._values["path_id"] = path_id
            if provisioning_artifact_id is not None:
                self._values["provisioning_artifact_id"] = provisioning_artifact_id
            if provisioning_parameters is not None:
                self._values["provisioning_parameters"] = provisioning_parameters

        @builtins.property
        def product_id(self) -> builtins.str:
            '''The ID of the product to provision.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-productid
            '''
            result = self._values.get("product_id")
            assert result is not None, "Required property 'product_id' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def path_id(self) -> typing.Optional[builtins.str]:
            '''The path identifier of the product.

            This value is optional if the product has a default path, and required if the product has more than one path.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-pathid
            '''
            result = self._values.get("path_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def provisioning_artifact_id(self) -> typing.Optional[builtins.str]:
            '''The ID of the provisioning artifact.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-provisioningartifactid
            '''
            result = self._values.get("provisioning_artifact_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def provisioning_parameters(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnProject.ProvisioningParameterProperty"]]]]:
            '''A list of key value pairs that you specify when you provision a product.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-project-servicecatalogprovisioningdetails.html#cfn-sagemaker-project-servicecatalogprovisioningdetails-provisioningparameters
            '''
            result = self._values.get("provisioning_parameters")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnProject.ProvisioningParameterProperty"]]]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ServiceCatalogProvisioningDetailsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnProjectProps",
    jsii_struct_bases=[],
    name_mapping={
        "project_name": "projectName",
        "service_catalog_provisioning_details": "serviceCatalogProvisioningDetails",
        "project_description": "projectDescription",
        "service_catalog_provisioned_product_details": "serviceCatalogProvisionedProductDetails",
        "tags": "tags",
    },
)
class CfnProjectProps:
    def __init__(
        self,
        *,
        project_name: builtins.str,
        service_catalog_provisioning_details: typing.Any,
        project_description: typing.Optional[builtins.str] = None,
        service_catalog_provisioned_product_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnProject.ServiceCatalogProvisionedProductDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnProject``.

        :param project_name: The name of the project.
        :param service_catalog_provisioning_details: The product ID and provisioning artifact ID to provision a service catalog. For information, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .
        :param project_description: The description of the project.
        :param service_catalog_provisioned_product_details: Details of a provisioned service catalog product. For information about service catalog, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .
        :param tags: A list of key-value pairs to apply to this resource. For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            # service_catalog_provisioning_details: Any
            
            cfn_project_props = sagemaker.CfnProjectProps(
                project_name="projectName",
                service_catalog_provisioning_details=service_catalog_provisioning_details,
            
                # the properties below are optional
                project_description="projectDescription",
                service_catalog_provisioned_product_details=sagemaker.CfnProject.ServiceCatalogProvisionedProductDetailsProperty(
                    provisioned_product_id="provisionedProductId",
                    provisioned_product_status_message="provisionedProductStatusMessage"
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__87f81cd557ad556b59bd3547ccb89572ed4ac29822e147ed5868563162997450)
            check_type(argname="argument project_name", value=project_name, expected_type=type_hints["project_name"])
            check_type(argname="argument service_catalog_provisioning_details", value=service_catalog_provisioning_details, expected_type=type_hints["service_catalog_provisioning_details"])
            check_type(argname="argument project_description", value=project_description, expected_type=type_hints["project_description"])
            check_type(argname="argument service_catalog_provisioned_product_details", value=service_catalog_provisioned_product_details, expected_type=type_hints["service_catalog_provisioned_product_details"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "project_name": project_name,
            "service_catalog_provisioning_details": service_catalog_provisioning_details,
        }
        if project_description is not None:
            self._values["project_description"] = project_description
        if service_catalog_provisioned_product_details is not None:
            self._values["service_catalog_provisioned_product_details"] = service_catalog_provisioned_product_details
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def project_name(self) -> builtins.str:
        '''The name of the project.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-projectname
        '''
        result = self._values.get("project_name")
        assert result is not None, "Required property 'project_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def service_catalog_provisioning_details(self) -> typing.Any:
        '''The product ID and provisioning artifact ID to provision a service catalog.

        For information, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-servicecatalogprovisioningdetails
        '''
        result = self._values.get("service_catalog_provisioning_details")
        assert result is not None, "Required property 'service_catalog_provisioning_details' is missing"
        return typing.cast(typing.Any, result)

    @builtins.property
    def project_description(self) -> typing.Optional[builtins.str]:
        '''The description of the project.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-projectdescription
        '''
        result = self._values.get("project_description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def service_catalog_provisioned_product_details(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnProject.ServiceCatalogProvisionedProductDetailsProperty]]:
        '''Details of a provisioned service catalog product.

        For information about service catalog, see `What is AWS Service Catalog <https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-servicecatalogprovisionedproductdetails
        '''
        result = self._values.get("service_catalog_provisioned_product_details")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnProject.ServiceCatalogProvisionedProductDetailsProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''A list of key-value pairs to apply to this resource.

        For more information, see `Resource Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ and `Using Cost Allocation Tags <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html#allocation-what>`_ in the *AWS Billing and Cost Management User Guide* .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-project.html#cfn-sagemaker-project-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnProjectProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnSpace(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace",
):
    '''Creates a space used for real time collaboration in a Domain.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html
    :cloudformationResource: AWS::SageMaker::Space
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_space = sagemaker.CfnSpace(self, "MyCfnSpace",
            domain_id="domainId",
            space_name="spaceName",
        
            # the properties below are optional
            space_settings=sagemaker.CfnSpace.SpaceSettingsProperty(
                jupyter_server_app_settings=sagemaker.CfnSpace.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                kernel_gateway_app_settings=sagemaker.CfnSpace.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnSpace.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )]
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        domain_id: builtins.str,
        space_name: builtins.str,
        space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.SpaceSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param domain_id: The ID of the associated Domain.
        :param space_name: The name of the space.
        :param space_settings: A collection of space settings.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__f4cf36c039bdacba2a059b01ad6ca85e87e6d521f09ca1f75b013102797e097d)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnSpaceProps(
            domain_id=domain_id,
            space_name=space_name,
            space_settings=space_settings,
            tags=tags,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7dddb84aee67953eeae7ef9e4de9ff319c579f67a161e906e49503007dd5ac31)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__9af654c4b0148ef1da882d63146eae68237ac91a0d114d5a7911d8fd9730d199)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrSpaceArn")
    def attr_space_arn(self) -> builtins.str:
        '''The space's Amazon Resource Name (ARN).

        :cloudformationAttribute: SpaceArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrSpaceArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="domainId")
    def domain_id(self) -> builtins.str:
        '''The ID of the associated Domain.'''
        return typing.cast(builtins.str, jsii.get(self, "domainId"))

    @domain_id.setter
    def domain_id(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0df37d09c9493ede8597c2b33e56f1bfc87577d5607463586212a70c06083da8)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domainId", value)

    @builtins.property
    @jsii.member(jsii_name="spaceName")
    def space_name(self) -> builtins.str:
        '''The name of the space.'''
        return typing.cast(builtins.str, jsii.get(self, "spaceName"))

    @space_name.setter
    def space_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__01a66fc19cb8199a9c43aeac236d2f1881bb9b78f1ce1ac686d5a9a59b765212)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "spaceName", value)

    @builtins.property
    @jsii.member(jsii_name="spaceSettings")
    def space_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.SpaceSettingsProperty"]]:
        '''A collection of space settings.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.SpaceSettingsProperty"]], jsii.get(self, "spaceSettings"))

    @space_settings.setter
    def space_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.SpaceSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__264f1be432aaf86bc93f0672254d79855cc493af6e34ef50cd1505e249de6b5d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "spaceSettings", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__2fb997db93555cf7868ac4f87100c327aadec8d6df473fe2c1a64189d900ad3c)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace.CustomImageProperty",
        jsii_struct_bases=[],
        name_mapping={
            "app_image_config_name": "appImageConfigName",
            "image_name": "imageName",
            "image_version_number": "imageVersionNumber",
        },
    )
    class CustomImageProperty:
        def __init__(
            self,
            *,
            app_image_config_name: builtins.str,
            image_name: builtins.str,
            image_version_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''A custom SageMaker image.

            For more information, see `Bring your own SageMaker image <https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html>`_ .

            :param app_image_config_name: The name of the AppImageConfig.
            :param image_name: The name of the CustomImage. Must be unique to your account.
            :param image_version_number: The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-customimage.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_image_property = sagemaker.CfnSpace.CustomImageProperty(
                    app_image_config_name="appImageConfigName",
                    image_name="imageName",
                
                    # the properties below are optional
                    image_version_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__153516bc9ff4edaada8209c108f074d6ec6bcbeec18558659518ec7028cbb836)
                check_type(argname="argument app_image_config_name", value=app_image_config_name, expected_type=type_hints["app_image_config_name"])
                check_type(argname="argument image_name", value=image_name, expected_type=type_hints["image_name"])
                check_type(argname="argument image_version_number", value=image_version_number, expected_type=type_hints["image_version_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "app_image_config_name": app_image_config_name,
                "image_name": image_name,
            }
            if image_version_number is not None:
                self._values["image_version_number"] = image_version_number

        @builtins.property
        def app_image_config_name(self) -> builtins.str:
            '''The name of the AppImageConfig.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-customimage.html#cfn-sagemaker-space-customimage-appimageconfigname
            '''
            result = self._values.get("app_image_config_name")
            assert result is not None, "Required property 'app_image_config_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_name(self) -> builtins.str:
            '''The name of the CustomImage.

            Must be unique to your account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-customimage.html#cfn-sagemaker-space-customimage-imagename
            '''
            result = self._values.get("image_name")
            assert result is not None, "Required property 'image_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_version_number(self) -> typing.Optional[jsii.Number]:
            '''The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-customimage.html#cfn-sagemaker-space-customimage-imageversionnumber
            '''
            result = self._values.get("image_version_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomImageProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace.JupyterServerAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"default_resource_spec": "defaultResourceSpec"},
    )
    class JupyterServerAppSettingsProperty:
        def __init__(
            self,
            *,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The JupyterServer app settings.

            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app. If you use the ``LifecycleConfigArns`` parameter, then this parameter is also required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-jupyterserverappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                jupyter_server_app_settings_property = sagemaker.CfnSpace.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__41c77062d743943bf9fdd4eb4d3d0369cc1794bdb7dd97873d2ed4e1f32a9449)
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app.

            If you use the ``LifecycleConfigArns`` parameter, then this parameter is also required.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-jupyterserverappsettings.html#cfn-sagemaker-space-jupyterserverappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JupyterServerAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace.KernelGatewayAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
        },
    )
    class KernelGatewayAppSettingsProperty:
        def __init__(
            self,
            *,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The KernelGateway app settings.

            :param custom_images: A list of custom SageMaker images that are configured to run as a KernelGateway app.
            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app. .. epigraph:: The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-kernelgatewayappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                kernel_gateway_app_settings_property = sagemaker.CfnSpace.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnSpace.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__562ccb13fdd971a232d6c09771df96f39bf8c03a1dd5dc4dbe750dafb962dfba)
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnSpace.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a KernelGateway app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-kernelgatewayappsettings.html#cfn-sagemaker-space-kernelgatewayappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnSpace.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.

            .. epigraph::

               The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-kernelgatewayappsettings.html#cfn-sagemaker-space-kernelgatewayappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KernelGatewayAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace.ResourceSpecProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_type": "instanceType",
            "sage_maker_image_arn": "sageMakerImageArn",
            "sage_maker_image_version_arn": "sageMakerImageVersionArn",
        },
    )
    class ResourceSpecProperty:
        def __init__(
            self,
            *,
            instance_type: typing.Optional[builtins.str] = None,
            sage_maker_image_arn: typing.Optional[builtins.str] = None,
            sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the ARN's of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :param instance_type: The instance type that the image version runs on. .. epigraph:: *JupyterServer apps* only support the ``system`` value. For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.
            :param sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
            :param sage_maker_image_version_arn: The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-resourcespec.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                resource_spec_property = sagemaker.CfnSpace.ResourceSpecProperty(
                    instance_type="instanceType",
                    sage_maker_image_arn="sageMakerImageArn",
                    sage_maker_image_version_arn="sageMakerImageVersionArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__79b889d20ec4ee307fedce4172f7c39782dc99bf76625acfdf5b00983a54fd2b)
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument sage_maker_image_arn", value=sage_maker_image_arn, expected_type=type_hints["sage_maker_image_arn"])
                check_type(argname="argument sage_maker_image_version_arn", value=sage_maker_image_version_arn, expected_type=type_hints["sage_maker_image_version_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if instance_type is not None:
                self._values["instance_type"] = instance_type
            if sage_maker_image_arn is not None:
                self._values["sage_maker_image_arn"] = sage_maker_image_arn
            if sage_maker_image_version_arn is not None:
                self._values["sage_maker_image_version_arn"] = sage_maker_image_version_arn

        @builtins.property
        def instance_type(self) -> typing.Optional[builtins.str]:
            '''The instance type that the image version runs on.

            .. epigraph::

               *JupyterServer apps* only support the ``system`` value.

               For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-resourcespec.html#cfn-sagemaker-space-resourcespec-instancetype
            '''
            result = self._values.get("instance_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the SageMaker image that the image version belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-resourcespec.html#cfn-sagemaker-space-resourcespec-sagemakerimagearn
            '''
            result = self._values.get("sage_maker_image_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_version_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-resourcespec.html#cfn-sagemaker-space-resourcespec-sagemakerimageversionarn
            '''
            result = self._values.get("sage_maker_image_version_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ResourceSpecProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpace.SpaceSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "jupyter_server_app_settings": "jupyterServerAppSettings",
            "kernel_gateway_app_settings": "kernelGatewayAppSettings",
        },
    )
    class SpaceSettingsProperty:
        def __init__(
            self,
            *,
            jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.JupyterServerAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnSpace.KernelGatewayAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''A collection of space settings.

            :param jupyter_server_app_settings: The JupyterServer app settings.
            :param kernel_gateway_app_settings: The KernelGateway app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-spacesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                space_settings_property = sagemaker.CfnSpace.SpaceSettingsProperty(
                    jupyter_server_app_settings=sagemaker.CfnSpace.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnSpace.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnSpace.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__20403c26618d8fc71e879e92b0c5ef05fbfe71e99cf6ee51d918b935f23702aa)
                check_type(argname="argument jupyter_server_app_settings", value=jupyter_server_app_settings, expected_type=type_hints["jupyter_server_app_settings"])
                check_type(argname="argument kernel_gateway_app_settings", value=kernel_gateway_app_settings, expected_type=type_hints["kernel_gateway_app_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if jupyter_server_app_settings is not None:
                self._values["jupyter_server_app_settings"] = jupyter_server_app_settings
            if kernel_gateway_app_settings is not None:
                self._values["kernel_gateway_app_settings"] = kernel_gateway_app_settings

        @builtins.property
        def jupyter_server_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.JupyterServerAppSettingsProperty"]]:
            '''The JupyterServer app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-spacesettings.html#cfn-sagemaker-space-spacesettings-jupyterserverappsettings
            '''
            result = self._values.get("jupyter_server_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.JupyterServerAppSettingsProperty"]], result)

        @builtins.property
        def kernel_gateway_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.KernelGatewayAppSettingsProperty"]]:
            '''The KernelGateway app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-space-spacesettings.html#cfn-sagemaker-space-spacesettings-kernelgatewayappsettings
            '''
            result = self._values.get("kernel_gateway_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnSpace.KernelGatewayAppSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SpaceSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnSpaceProps",
    jsii_struct_bases=[],
    name_mapping={
        "domain_id": "domainId",
        "space_name": "spaceName",
        "space_settings": "spaceSettings",
        "tags": "tags",
    },
)
class CfnSpaceProps:
    def __init__(
        self,
        *,
        domain_id: builtins.str,
        space_name: builtins.str,
        space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.SpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnSpace``.

        :param domain_id: The ID of the associated Domain.
        :param space_name: The name of the space.
        :param space_settings: A collection of space settings.
        :param tags: An array of key-value pairs to apply to this resource. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_space_props = sagemaker.CfnSpaceProps(
                domain_id="domainId",
                space_name="spaceName",
            
                # the properties below are optional
                space_settings=sagemaker.CfnSpace.SpaceSettingsProperty(
                    jupyter_server_app_settings=sagemaker.CfnSpace.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnSpace.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnSpace.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnSpace.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    )
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )]
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__8f5699fa94392026ecd18cd10e7b2f958dfdf2e28a0ccce76bd35684435f42d8)
            check_type(argname="argument domain_id", value=domain_id, expected_type=type_hints["domain_id"])
            check_type(argname="argument space_name", value=space_name, expected_type=type_hints["space_name"])
            check_type(argname="argument space_settings", value=space_settings, expected_type=type_hints["space_settings"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "domain_id": domain_id,
            "space_name": space_name,
        }
        if space_settings is not None:
            self._values["space_settings"] = space_settings
        if tags is not None:
            self._values["tags"] = tags

    @builtins.property
    def domain_id(self) -> builtins.str:
        '''The ID of the associated Domain.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html#cfn-sagemaker-space-domainid
        '''
        result = self._values.get("domain_id")
        assert result is not None, "Required property 'domain_id' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def space_name(self) -> builtins.str:
        '''The name of the space.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html#cfn-sagemaker-space-spacename
        '''
        result = self._values.get("space_name")
        assert result is not None, "Required property 'space_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def space_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnSpace.SpaceSettingsProperty]]:
        '''A collection of space settings.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html#cfn-sagemaker-space-spacesettings
        '''
        result = self._values.get("space_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnSpace.SpaceSettingsProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-space.html#cfn-sagemaker-space-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnSpaceProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnUserProfile(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile",
):
    '''Creates a user profile.

    A user profile represents a single user within a domain, and is the main way to reference a "person" for the purposes of sharing, reporting, and other user-oriented features. This entity is created when a user onboards to Amazon SageMaker Studio. If an administrator invites a person by email or imports them from IAM Identity Center , a user profile is automatically created. A user profile is the primary holder of settings for an individual user and has a reference to the user's private Amazon Elastic File System (EFS) home directory.
    .. epigraph::

       If you're using IAM Identity Center authentication, a user in IAM Identity Center , or a group in IAM Identity Center containing that user, must be assigned to the Amazon SageMaker Studio application from the IAM Identity Center Console to create a user profile. For more information about application assignment, see `Assign user access <https://docs.aws.amazon.com/singlesignon/latest/userguide/assignuserstoapp.html>`_ . After assignment is complete, a user profile can be created for that user in IAM Identity Center with AWS CloudFormation.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html
    :cloudformationResource: AWS::SageMaker::UserProfile
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_user_profile = sagemaker.CfnUserProfile(self, "MyCfnUserProfile",
            domain_id="domainId",
            user_profile_name="userProfileName",
        
            # the properties below are optional
            single_sign_on_user_identifier="singleSignOnUserIdentifier",
            single_sign_on_user_value="singleSignOnUserValue",
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            user_settings=sagemaker.CfnUserProfile.UserSettingsProperty(
                code_editor_app_settings=sagemaker.CfnUserProfile.CodeEditorAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                ),
                custom_file_system_configs=[sagemaker.CfnUserProfile.CustomFileSystemConfigProperty(
                    efs_file_system_config=sagemaker.CfnUserProfile.EFSFileSystemConfigProperty(
                        file_system_id="fileSystemId",
        
                        # the properties below are optional
                        file_system_path="fileSystemPath"
                    )
                )],
                custom_posix_user_config=sagemaker.CfnUserProfile.CustomPosixUserConfigProperty(
                    gid=123,
                    uid=123
                ),
                default_landing_uri="defaultLandingUri",
                execution_role="executionRole",
                jupyter_lab_app_settings=sagemaker.CfnUserProfile.JupyterLabAppSettingsProperty(
                    code_repositories=[sagemaker.CfnUserProfile.CodeRepositoryProperty(
                        repository_url="repositoryUrl"
                    )],
                    custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                ),
                jupyter_server_app_settings=sagemaker.CfnUserProfile.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                kernel_gateway_app_settings=sagemaker.CfnUserProfile.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
        
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                ),
                r_studio_server_pro_app_settings=sagemaker.CfnUserProfile.RStudioServerProAppSettingsProperty(
                    access_status="accessStatus",
                    user_group="userGroup"
                ),
                security_groups=["securityGroups"],
                sharing_settings=sagemaker.CfnUserProfile.SharingSettingsProperty(
                    notebook_output_option="notebookOutputOption",
                    s3_kms_key_id="s3KmsKeyId",
                    s3_output_path="s3OutputPath"
                ),
                space_storage_settings=sagemaker.CfnUserProfile.DefaultSpaceStorageSettingsProperty(
                    default_ebs_storage_settings=sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty(
                        default_ebs_volume_size_in_gb=123,
                        maximum_ebs_volume_size_in_gb=123
                    )
                ),
                studio_web_portal="studioWebPortal"
            )
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        domain_id: builtins.str,
        user_profile_name: builtins.str,
        single_sign_on_user_identifier: typing.Optional[builtins.str] = None,
        single_sign_on_user_value: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        user_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.UserSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param domain_id: The domain ID.
        :param user_profile_name: The user profile name.
        :param single_sign_on_user_identifier: A specifier for the type of value specified in SingleSignOnUserValue. Currently, the only supported value is "UserName". If the Domain's AuthMode is IAM Identity Center , this field is required. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.
        :param single_sign_on_user_value: The username of the associated AWS Single Sign-On User for this UserProfile. If the Domain's AuthMode is IAM Identity Center , this field is required, and must match a valid username of a user in your directory. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.
        :param tags: An array of key-value pairs to apply to this resource. Tags that you specify for the User Profile are also added to all apps that the User Profile launches. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        :param user_settings: A collection of settings that apply to users of Amazon SageMaker Studio.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__beda07bea319cc25c84f5e77bce363c97996e606a26b7a70b225369558eb4372)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnUserProfileProps(
            domain_id=domain_id,
            user_profile_name=user_profile_name,
            single_sign_on_user_identifier=single_sign_on_user_identifier,
            single_sign_on_user_value=single_sign_on_user_value,
            tags=tags,
            user_settings=user_settings,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a2dadde93d4bb5495d1cda0d7f1d1582d8f3894875492f0b5b53c7fd32b84c93)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fc456425338165ec6117c40c3ac9fedfcbdbf0a3f00ca3bd3351e9adc8394bef)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrUserProfileArn")
    def attr_user_profile_arn(self) -> builtins.str:
        '''The Amazon Resource Name (ARN) of the user profile, such as ``arn:aws:sagemaker:us-west-2:account-id:user-profile/my-user-profile`` .

        :cloudformationAttribute: UserProfileArn
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrUserProfileArn"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="domainId")
    def domain_id(self) -> builtins.str:
        '''The domain ID.'''
        return typing.cast(builtins.str, jsii.get(self, "domainId"))

    @domain_id.setter
    def domain_id(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__e6ae2974d75af999e4c61eccca4e1e40f87a81f2df26fb1483f616d4b84d886e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "domainId", value)

    @builtins.property
    @jsii.member(jsii_name="userProfileName")
    def user_profile_name(self) -> builtins.str:
        '''The user profile name.'''
        return typing.cast(builtins.str, jsii.get(self, "userProfileName"))

    @user_profile_name.setter
    def user_profile_name(self, value: builtins.str) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fd2203f8e17628ff197b20f0d5db6b23443b615d61929ee239eb7deb4f830f51)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "userProfileName", value)

    @builtins.property
    @jsii.member(jsii_name="singleSignOnUserIdentifier")
    def single_sign_on_user_identifier(self) -> typing.Optional[builtins.str]:
        '''A specifier for the type of value specified in SingleSignOnUserValue.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "singleSignOnUserIdentifier"))

    @single_sign_on_user_identifier.setter
    def single_sign_on_user_identifier(
        self,
        value: typing.Optional[builtins.str],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__7bbf68ea2670e551740ebca224607b1b25b87a247cfaa90ee1ea0d058b2bf08d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "singleSignOnUserIdentifier", value)

    @builtins.property
    @jsii.member(jsii_name="singleSignOnUserValue")
    def single_sign_on_user_value(self) -> typing.Optional[builtins.str]:
        '''The username of the associated AWS Single Sign-On User for this UserProfile.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "singleSignOnUserValue"))

    @single_sign_on_user_value.setter
    def single_sign_on_user_value(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__083d9901018771b1e273a884be480f5ebd07c2ae32c99187e37a72f18c08902d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "singleSignOnUserValue", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__af2a7f232bf4e8c0ce7c886375156fc30df5a4b240ea11fae90630548281618d)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="userSettings")
    def user_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.UserSettingsProperty"]]:
        '''A collection of settings that apply to users of Amazon SageMaker Studio.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.UserSettingsProperty"]], jsii.get(self, "userSettings"))

    @user_settings.setter
    def user_settings(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.UserSettingsProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__406091aa6a2a94d5bbf06575babcd4456ed92c8bbf6d0265ac1061bf92a75255)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "userSettings", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.CodeEditorAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "default_resource_spec": "defaultResourceSpec",
            "lifecycle_config_arns": "lifecycleConfigArns",
        },
    )
    class CodeEditorAppSettingsProperty:
        def __init__(
            self,
            *,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''The Code Editor application settings.

            For more information about Code Editor, see `Get started with Code Editor in Amazon SageMaker <https://docs.aws.amazon.com/sagemaker/latest/dg/code-editor.html>`_ .

            :param default_resource_spec: 
            :param lifecycle_config_arns: The Amazon Resource Name (ARN) of the Code Editor application lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-codeeditorappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                code_editor_app_settings_property = sagemaker.CfnUserProfile.CodeEditorAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__9102031486b9c90cb4b3d6ac33ecdb4030f0a3c090fb394765dc1cb6cdb4e9b5)
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
                check_type(argname="argument lifecycle_config_arns", value=lifecycle_config_arns, expected_type=type_hints["lifecycle_config_arns"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec
            if lifecycle_config_arns is not None:
                self._values["lifecycle_config_arns"] = lifecycle_config_arns

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-codeeditorappsettings.html#cfn-sagemaker-userprofile-codeeditorappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]], result)

        @builtins.property
        def lifecycle_config_arns(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The Amazon Resource Name (ARN) of the Code Editor application lifecycle configuration.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-codeeditorappsettings.html#cfn-sagemaker-userprofile-codeeditorappsettings-lifecycleconfigarns
            '''
            result = self._values.get("lifecycle_config_arns")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CodeEditorAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.CodeRepositoryProperty",
        jsii_struct_bases=[],
        name_mapping={"repository_url": "repositoryUrl"},
    )
    class CodeRepositoryProperty:
        def __init__(self, *, repository_url: builtins.str) -> None:
            '''A Git repository that SageMaker automatically displays to users for cloning in the JupyterServer application.

            :param repository_url: The URL of the Git repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-coderepository.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                code_repository_property = sagemaker.CfnUserProfile.CodeRepositoryProperty(
                    repository_url="repositoryUrl"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8a85204216c7c66fb117971f3f03f1a13bc19b604efce2c469b7a4e207f267e0)
                check_type(argname="argument repository_url", value=repository_url, expected_type=type_hints["repository_url"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "repository_url": repository_url,
            }

        @builtins.property
        def repository_url(self) -> builtins.str:
            '''The URL of the Git repository.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-coderepository.html#cfn-sagemaker-userprofile-coderepository-repositoryurl
            '''
            result = self._values.get("repository_url")
            assert result is not None, "Required property 'repository_url' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CodeRepositoryProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.CustomFileSystemConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"efs_file_system_config": "efsFileSystemConfig"},
    )
    class CustomFileSystemConfigProperty:
        def __init__(
            self,
            *,
            efs_file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.EFSFileSystemConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The settings for assigning a custom file system to a user profile or space for an Amazon SageMaker Domain.

            Permitted users can access this file system in Amazon SageMaker Studio.

            :param efs_file_system_config: The settings for a custom Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customfilesystemconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_file_system_config_property = sagemaker.CfnUserProfile.CustomFileSystemConfigProperty(
                    efs_file_system_config=sagemaker.CfnUserProfile.EFSFileSystemConfigProperty(
                        file_system_id="fileSystemId",
                
                        # the properties below are optional
                        file_system_path="fileSystemPath"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f9203bac8296e14f4fd4a11939d2779a8f543105b9af12bf358b4053c4256e4d)
                check_type(argname="argument efs_file_system_config", value=efs_file_system_config, expected_type=type_hints["efs_file_system_config"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if efs_file_system_config is not None:
                self._values["efs_file_system_config"] = efs_file_system_config

        @builtins.property
        def efs_file_system_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.EFSFileSystemConfigProperty"]]:
            '''The settings for a custom Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customfilesystemconfig.html#cfn-sagemaker-userprofile-customfilesystemconfig-efsfilesystemconfig
            '''
            result = self._values.get("efs_file_system_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.EFSFileSystemConfigProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomFileSystemConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.CustomImageProperty",
        jsii_struct_bases=[],
        name_mapping={
            "app_image_config_name": "appImageConfigName",
            "image_name": "imageName",
            "image_version_number": "imageVersionNumber",
        },
    )
    class CustomImageProperty:
        def __init__(
            self,
            *,
            app_image_config_name: builtins.str,
            image_name: builtins.str,
            image_version_number: typing.Optional[jsii.Number] = None,
        ) -> None:
            '''A custom SageMaker image.

            For more information, see `Bring your own SageMaker image <https://docs.aws.amazon.com/sagemaker/latest/dg/studio-byoi.html>`_ .

            :param app_image_config_name: The name of the AppImageConfig.
            :param image_name: The name of the CustomImage. Must be unique to your account.
            :param image_version_number: The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customimage.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_image_property = sagemaker.CfnUserProfile.CustomImageProperty(
                    app_image_config_name="appImageConfigName",
                    image_name="imageName",
                
                    # the properties below are optional
                    image_version_number=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f24b0d9113dad117857a06384af724b403ec749a777dbfe4cf7dcff2af185555)
                check_type(argname="argument app_image_config_name", value=app_image_config_name, expected_type=type_hints["app_image_config_name"])
                check_type(argname="argument image_name", value=image_name, expected_type=type_hints["image_name"])
                check_type(argname="argument image_version_number", value=image_version_number, expected_type=type_hints["image_version_number"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "app_image_config_name": app_image_config_name,
                "image_name": image_name,
            }
            if image_version_number is not None:
                self._values["image_version_number"] = image_version_number

        @builtins.property
        def app_image_config_name(self) -> builtins.str:
            '''The name of the AppImageConfig.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customimage.html#cfn-sagemaker-userprofile-customimage-appimageconfigname
            '''
            result = self._values.get("app_image_config_name")
            assert result is not None, "Required property 'app_image_config_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_name(self) -> builtins.str:
            '''The name of the CustomImage.

            Must be unique to your account.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customimage.html#cfn-sagemaker-userprofile-customimage-imagename
            '''
            result = self._values.get("image_name")
            assert result is not None, "Required property 'image_name' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def image_version_number(self) -> typing.Optional[jsii.Number]:
            '''The version number of the CustomImage.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customimage.html#cfn-sagemaker-userprofile-customimage-imageversionnumber
            '''
            result = self._values.get("image_version_number")
            return typing.cast(typing.Optional[jsii.Number], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomImageProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.CustomPosixUserConfigProperty",
        jsii_struct_bases=[],
        name_mapping={"gid": "gid", "uid": "uid"},
    )
    class CustomPosixUserConfigProperty:
        def __init__(self, *, gid: jsii.Number, uid: jsii.Number) -> None:
            '''Details about the POSIX identity that is used for file system operations.

            :param gid: The POSIX group ID.
            :param uid: The POSIX user ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customposixuserconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                custom_posix_user_config_property = sagemaker.CfnUserProfile.CustomPosixUserConfigProperty(
                    gid=123,
                    uid=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__ff820c4c2152aca751978d5b34c2fac98f16bd182ea177b9535cb7921c3a1ddc)
                check_type(argname="argument gid", value=gid, expected_type=type_hints["gid"])
                check_type(argname="argument uid", value=uid, expected_type=type_hints["uid"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "gid": gid,
                "uid": uid,
            }

        @builtins.property
        def gid(self) -> jsii.Number:
            '''The POSIX group ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customposixuserconfig.html#cfn-sagemaker-userprofile-customposixuserconfig-gid
            '''
            result = self._values.get("gid")
            assert result is not None, "Required property 'gid' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def uid(self) -> jsii.Number:
            '''The POSIX user ID.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-customposixuserconfig.html#cfn-sagemaker-userprofile-customposixuserconfig-uid
            '''
            result = self._values.get("uid")
            assert result is not None, "Required property 'uid' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CustomPosixUserConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "default_ebs_volume_size_in_gb": "defaultEbsVolumeSizeInGb",
            "maximum_ebs_volume_size_in_gb": "maximumEbsVolumeSizeInGb",
        },
    )
    class DefaultEbsStorageSettingsProperty:
        def __init__(
            self,
            *,
            default_ebs_volume_size_in_gb: jsii.Number,
            maximum_ebs_volume_size_in_gb: jsii.Number,
        ) -> None:
            '''A collection of default EBS storage settings that applies to private spaces created within a domain or user profile.

            :param default_ebs_volume_size_in_gb: The default size of the EBS storage volume for a private space.
            :param maximum_ebs_volume_size_in_gb: The maximum size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-defaultebsstoragesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                default_ebs_storage_settings_property = sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty(
                    default_ebs_volume_size_in_gb=123,
                    maximum_ebs_volume_size_in_gb=123
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__dd6ce941f5ff6757aa1963c092b6ed0ccd865162a17a835418109b7b1ad8d730)
                check_type(argname="argument default_ebs_volume_size_in_gb", value=default_ebs_volume_size_in_gb, expected_type=type_hints["default_ebs_volume_size_in_gb"])
                check_type(argname="argument maximum_ebs_volume_size_in_gb", value=maximum_ebs_volume_size_in_gb, expected_type=type_hints["maximum_ebs_volume_size_in_gb"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "default_ebs_volume_size_in_gb": default_ebs_volume_size_in_gb,
                "maximum_ebs_volume_size_in_gb": maximum_ebs_volume_size_in_gb,
            }

        @builtins.property
        def default_ebs_volume_size_in_gb(self) -> jsii.Number:
            '''The default size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-defaultebsstoragesettings.html#cfn-sagemaker-userprofile-defaultebsstoragesettings-defaultebsvolumesizeingb
            '''
            result = self._values.get("default_ebs_volume_size_in_gb")
            assert result is not None, "Required property 'default_ebs_volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        @builtins.property
        def maximum_ebs_volume_size_in_gb(self) -> jsii.Number:
            '''The maximum size of the EBS storage volume for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-defaultebsstoragesettings.html#cfn-sagemaker-userprofile-defaultebsstoragesettings-maximumebsvolumesizeingb
            '''
            result = self._values.get("maximum_ebs_volume_size_in_gb")
            assert result is not None, "Required property 'maximum_ebs_volume_size_in_gb' is missing"
            return typing.cast(jsii.Number, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DefaultEbsStorageSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.DefaultSpaceStorageSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"default_ebs_storage_settings": "defaultEbsStorageSettings"},
    )
    class DefaultSpaceStorageSettingsProperty:
        def __init__(
            self,
            *,
            default_ebs_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.DefaultEbsStorageSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The default storage settings for a private space.

            :param default_ebs_storage_settings: The default EBS storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-defaultspacestoragesettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                default_space_storage_settings_property = sagemaker.CfnUserProfile.DefaultSpaceStorageSettingsProperty(
                    default_ebs_storage_settings=sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty(
                        default_ebs_volume_size_in_gb=123,
                        maximum_ebs_volume_size_in_gb=123
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__d083d880e5435845e2ce45145e917945ac347af8f566da3f0b98c7f974504c4c)
                check_type(argname="argument default_ebs_storage_settings", value=default_ebs_storage_settings, expected_type=type_hints["default_ebs_storage_settings"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_ebs_storage_settings is not None:
                self._values["default_ebs_storage_settings"] = default_ebs_storage_settings

        @builtins.property
        def default_ebs_storage_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.DefaultEbsStorageSettingsProperty"]]:
            '''The default EBS storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-defaultspacestoragesettings.html#cfn-sagemaker-userprofile-defaultspacestoragesettings-defaultebsstoragesettings
            '''
            result = self._values.get("default_ebs_storage_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.DefaultEbsStorageSettingsProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "DefaultSpaceStorageSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.EFSFileSystemConfigProperty",
        jsii_struct_bases=[],
        name_mapping={
            "file_system_id": "fileSystemId",
            "file_system_path": "fileSystemPath",
        },
    )
    class EFSFileSystemConfigProperty:
        def __init__(
            self,
            *,
            file_system_id: builtins.str,
            file_system_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''The settings for assigning a custom Amazon EFS file system to a user profile or space for an Amazon SageMaker Domain.

            :param file_system_id: The ID of your Amazon EFS file system.
            :param file_system_path: The path to the file system directory that is accessible in Amazon SageMaker Studio. Permitted users can access only this directory and below.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-efsfilesystemconfig.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                e_fSFile_system_config_property = sagemaker.CfnUserProfile.EFSFileSystemConfigProperty(
                    file_system_id="fileSystemId",
                
                    # the properties below are optional
                    file_system_path="fileSystemPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a31e83e9dc4907dba90a688b8095eb32a7c29ae9f1d2f32e4d18c55b824fb453)
                check_type(argname="argument file_system_id", value=file_system_id, expected_type=type_hints["file_system_id"])
                check_type(argname="argument file_system_path", value=file_system_path, expected_type=type_hints["file_system_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "file_system_id": file_system_id,
            }
            if file_system_path is not None:
                self._values["file_system_path"] = file_system_path

        @builtins.property
        def file_system_id(self) -> builtins.str:
            '''The ID of your Amazon EFS file system.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-efsfilesystemconfig.html#cfn-sagemaker-userprofile-efsfilesystemconfig-filesystemid
            '''
            result = self._values.get("file_system_id")
            assert result is not None, "Required property 'file_system_id' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def file_system_path(self) -> typing.Optional[builtins.str]:
            '''The path to the file system directory that is accessible in Amazon SageMaker Studio.

            Permitted users can access only this directory and below.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-efsfilesystemconfig.html#cfn-sagemaker-userprofile-efsfilesystemconfig-filesystempath
            '''
            result = self._values.get("file_system_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "EFSFileSystemConfigProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.JupyterLabAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "code_repositories": "codeRepositories",
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
            "lifecycle_config_arns": "lifecycleConfigArns",
        },
    )
    class JupyterLabAppSettingsProperty:
        def __init__(
            self,
            *,
            code_repositories: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CodeRepositoryProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
        ) -> None:
            '''The settings for the JupyterLab application.

            :param code_repositories: A list of Git repositories that SageMaker automatically displays to users for cloning in the JupyterLab application.
            :param custom_images: A list of custom SageMaker images that are configured to run as a JupyterLab app.
            :param default_resource_spec: 
            :param lifecycle_config_arns: The Amazon Resource Name (ARN) of the lifecycle configurations attached to the user profile or domain. To remove a lifecycle config, you must set ``LifecycleConfigArns`` to an empty list.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterlabappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                jupyter_lab_app_settings_property = sagemaker.CfnUserProfile.JupyterLabAppSettingsProperty(
                    code_repositories=[sagemaker.CfnUserProfile.CodeRepositoryProperty(
                        repository_url="repositoryUrl"
                    )],
                    custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    ),
                    lifecycle_config_arns=["lifecycleConfigArns"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8fbb8b52ced6fc617c616b643ca1ddc3673e837117aaeaf2063654aaa5ad3b72)
                check_type(argname="argument code_repositories", value=code_repositories, expected_type=type_hints["code_repositories"])
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
                check_type(argname="argument lifecycle_config_arns", value=lifecycle_config_arns, expected_type=type_hints["lifecycle_config_arns"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if code_repositories is not None:
                self._values["code_repositories"] = code_repositories
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec
            if lifecycle_config_arns is not None:
                self._values["lifecycle_config_arns"] = lifecycle_config_arns

        @builtins.property
        def code_repositories(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CodeRepositoryProperty"]]]]:
            '''A list of Git repositories that SageMaker automatically displays to users for cloning in the JupyterLab application.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterlabappsettings.html#cfn-sagemaker-userprofile-jupyterlabappsettings-coderepositories
            '''
            result = self._values.get("code_repositories")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CodeRepositoryProperty"]]]], result)

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a JupyterLab app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterlabappsettings.html#cfn-sagemaker-userprofile-jupyterlabappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterlabappsettings.html#cfn-sagemaker-userprofile-jupyterlabappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]], result)

        @builtins.property
        def lifecycle_config_arns(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The Amazon Resource Name (ARN) of the lifecycle configurations attached to the user profile or domain.

            To remove a lifecycle config, you must set ``LifecycleConfigArns`` to an empty list.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterlabappsettings.html#cfn-sagemaker-userprofile-jupyterlabappsettings-lifecycleconfigarns
            '''
            result = self._values.get("lifecycle_config_arns")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JupyterLabAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.JupyterServerAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"default_resource_spec": "defaultResourceSpec"},
    )
    class JupyterServerAppSettingsProperty:
        def __init__(
            self,
            *,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The JupyterServer app settings.

            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterserverappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                jupyter_server_app_settings_property = sagemaker.CfnUserProfile.JupyterServerAppSettingsProperty(
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__0a4d37bd9551635b6d688b4739d2640da6c7b530cbe31c96e6e565201cb35ab7)
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the JupyterServer app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-jupyterserverappsettings.html#cfn-sagemaker-userprofile-jupyterserverappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "JupyterServerAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.KernelGatewayAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "custom_images": "customImages",
            "default_resource_spec": "defaultResourceSpec",
        },
    )
    class KernelGatewayAppSettingsProperty:
        def __init__(
            self,
            *,
            custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CustomImageProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.ResourceSpecProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''The KernelGateway app settings.

            :param custom_images: A list of custom SageMaker images that are configured to run as a KernelGateway app.
            :param default_resource_spec: The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app. .. epigraph:: The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-kernelgatewayappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                kernel_gateway_app_settings_property = sagemaker.CfnUserProfile.KernelGatewayAppSettingsProperty(
                    custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                        app_image_config_name="appImageConfigName",
                        image_name="imageName",
                
                        # the properties below are optional
                        image_version_number=123
                    )],
                    default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                        instance_type="instanceType",
                        sage_maker_image_arn="sageMakerImageArn",
                        sage_maker_image_version_arn="sageMakerImageVersionArn"
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__4a84e697d50abdece306a0e4c7c282347c64219789aee5deab21c95e50194234)
                check_type(argname="argument custom_images", value=custom_images, expected_type=type_hints["custom_images"])
                check_type(argname="argument default_resource_spec", value=default_resource_spec, expected_type=type_hints["default_resource_spec"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if custom_images is not None:
                self._values["custom_images"] = custom_images
            if default_resource_spec is not None:
                self._values["default_resource_spec"] = default_resource_spec

        @builtins.property
        def custom_images(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomImageProperty"]]]]:
            '''A list of custom SageMaker images that are configured to run as a KernelGateway app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-kernelgatewayappsettings.html#cfn-sagemaker-userprofile-kernelgatewayappsettings-customimages
            '''
            result = self._values.get("custom_images")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomImageProperty"]]]], result)

        @builtins.property
        def default_resource_spec(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]]:
            '''The default instance type and the Amazon Resource Name (ARN) of the default SageMaker image used by the KernelGateway app.

            .. epigraph::

               The Amazon SageMaker Studio UI does not use the default instance type value set here. The default instance type set here is used when Apps are created using the AWS Command Line Interface or AWS CloudFormation and the instance type parameter value is not passed.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-kernelgatewayappsettings.html#cfn-sagemaker-userprofile-kernelgatewayappsettings-defaultresourcespec
            '''
            result = self._values.get("default_resource_spec")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.ResourceSpecProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "KernelGatewayAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.RStudioServerProAppSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={"access_status": "accessStatus", "user_group": "userGroup"},
    )
    class RStudioServerProAppSettingsProperty:
        def __init__(
            self,
            *,
            access_status: typing.Optional[builtins.str] = None,
            user_group: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A collection of settings that configure user interaction with the ``RStudioServerPro`` app.

            :param access_status: Indicates whether the current user has access to the ``RStudioServerPro`` app.
            :param user_group: The level of permissions that the user has within the ``RStudioServerPro`` app. This value defaults to ``User``. The ``Admin`` value allows the user access to the RStudio Administrative Dashboard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-rstudioserverproappsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                r_studio_server_pro_app_settings_property = sagemaker.CfnUserProfile.RStudioServerProAppSettingsProperty(
                    access_status="accessStatus",
                    user_group="userGroup"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__56cdae61f9e9edbd60b183a2194c677d167e50dd6262590ebdb53512f8400cba)
                check_type(argname="argument access_status", value=access_status, expected_type=type_hints["access_status"])
                check_type(argname="argument user_group", value=user_group, expected_type=type_hints["user_group"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if access_status is not None:
                self._values["access_status"] = access_status
            if user_group is not None:
                self._values["user_group"] = user_group

        @builtins.property
        def access_status(self) -> typing.Optional[builtins.str]:
            '''Indicates whether the current user has access to the ``RStudioServerPro`` app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-rstudioserverproappsettings.html#cfn-sagemaker-userprofile-rstudioserverproappsettings-accessstatus
            '''
            result = self._values.get("access_status")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def user_group(self) -> typing.Optional[builtins.str]:
            '''The level of permissions that the user has within the ``RStudioServerPro`` app.

            This value defaults to ``User``. The ``Admin`` value allows the user access to the RStudio Administrative Dashboard.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-rstudioserverproappsettings.html#cfn-sagemaker-userprofile-rstudioserverproappsettings-usergroup
            '''
            result = self._values.get("user_group")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "RStudioServerProAppSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.ResourceSpecProperty",
        jsii_struct_bases=[],
        name_mapping={
            "instance_type": "instanceType",
            "sage_maker_image_arn": "sageMakerImageArn",
            "sage_maker_image_version_arn": "sageMakerImageVersionArn",
        },
    )
    class ResourceSpecProperty:
        def __init__(
            self,
            *,
            instance_type: typing.Optional[builtins.str] = None,
            sage_maker_image_arn: typing.Optional[builtins.str] = None,
            sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies the ARN's of a SageMaker image and SageMaker image version, and the instance type that the version runs on.

            :param instance_type: The instance type that the image version runs on. .. epigraph:: *JupyterServer apps* only support the ``system`` value. For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.
            :param sage_maker_image_arn: The ARN of the SageMaker image that the image version belongs to.
            :param sage_maker_image_version_arn: The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-resourcespec.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                resource_spec_property = sagemaker.CfnUserProfile.ResourceSpecProperty(
                    instance_type="instanceType",
                    sage_maker_image_arn="sageMakerImageArn",
                    sage_maker_image_version_arn="sageMakerImageVersionArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__cc1ee3123b0a892e07425456edfc4f4741a2535f730ca4bea63aade70c624666)
                check_type(argname="argument instance_type", value=instance_type, expected_type=type_hints["instance_type"])
                check_type(argname="argument sage_maker_image_arn", value=sage_maker_image_arn, expected_type=type_hints["sage_maker_image_arn"])
                check_type(argname="argument sage_maker_image_version_arn", value=sage_maker_image_version_arn, expected_type=type_hints["sage_maker_image_version_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if instance_type is not None:
                self._values["instance_type"] = instance_type
            if sage_maker_image_arn is not None:
                self._values["sage_maker_image_arn"] = sage_maker_image_arn
            if sage_maker_image_version_arn is not None:
                self._values["sage_maker_image_version_arn"] = sage_maker_image_version_arn

        @builtins.property
        def instance_type(self) -> typing.Optional[builtins.str]:
            '''The instance type that the image version runs on.

            .. epigraph::

               *JupyterServer apps* only support the ``system`` value.

               For *KernelGateway apps* , the ``system`` value is translated to ``ml.t3.medium`` . KernelGateway apps also support all other values for available instance types.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-resourcespec.html#cfn-sagemaker-userprofile-resourcespec-instancetype
            '''
            result = self._values.get("instance_type")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the SageMaker image that the image version belongs to.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-resourcespec.html#cfn-sagemaker-userprofile-resourcespec-sagemakerimagearn
            '''
            result = self._values.get("sage_maker_image_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def sage_maker_image_version_arn(self) -> typing.Optional[builtins.str]:
            '''The ARN of the image version created on the instance.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-resourcespec.html#cfn-sagemaker-userprofile-resourcespec-sagemakerimageversionarn
            '''
            result = self._values.get("sage_maker_image_version_arn")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "ResourceSpecProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.SharingSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "notebook_output_option": "notebookOutputOption",
            "s3_kms_key_id": "s3KmsKeyId",
            "s3_output_path": "s3OutputPath",
        },
    )
    class SharingSettingsProperty:
        def __init__(
            self,
            *,
            notebook_output_option: typing.Optional[builtins.str] = None,
            s3_kms_key_id: typing.Optional[builtins.str] = None,
            s3_output_path: typing.Optional[builtins.str] = None,
        ) -> None:
            '''Specifies options when sharing an Amazon SageMaker Studio notebook.

            These settings are specified as part of ``DefaultUserSettings`` when the `CreateDomain <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDomain.html>`_ API is called, and as part of ``UserSettings`` when the `CreateUserProfile <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateUserProfile.html>`_ API is called.

            :param notebook_output_option: Whether to include the notebook cell output when sharing the notebook. The default is ``Disabled`` .
            :param s3_kms_key_id: When ``NotebookOutputOption`` is ``Allowed`` , the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.
            :param s3_output_path: When ``NotebookOutputOption`` is ``Allowed`` , the Amazon S3 bucket used to store the shared notebook snapshots.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-sharingsettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                sharing_settings_property = sagemaker.CfnUserProfile.SharingSettingsProperty(
                    notebook_output_option="notebookOutputOption",
                    s3_kms_key_id="s3KmsKeyId",
                    s3_output_path="s3OutputPath"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f5b8977e0ba203166fc6635e9d4d1a51fbc68b5d6b5b022bb1a4207ff0801905)
                check_type(argname="argument notebook_output_option", value=notebook_output_option, expected_type=type_hints["notebook_output_option"])
                check_type(argname="argument s3_kms_key_id", value=s3_kms_key_id, expected_type=type_hints["s3_kms_key_id"])
                check_type(argname="argument s3_output_path", value=s3_output_path, expected_type=type_hints["s3_output_path"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if notebook_output_option is not None:
                self._values["notebook_output_option"] = notebook_output_option
            if s3_kms_key_id is not None:
                self._values["s3_kms_key_id"] = s3_kms_key_id
            if s3_output_path is not None:
                self._values["s3_output_path"] = s3_output_path

        @builtins.property
        def notebook_output_option(self) -> typing.Optional[builtins.str]:
            '''Whether to include the notebook cell output when sharing the notebook.

            The default is ``Disabled`` .

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-sharingsettings.html#cfn-sagemaker-userprofile-sharingsettings-notebookoutputoption
            '''
            result = self._values.get("notebook_output_option")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_kms_key_id(self) -> typing.Optional[builtins.str]:
            '''When ``NotebookOutputOption`` is ``Allowed`` , the AWS Key Management Service (KMS) encryption key ID used to encrypt the notebook cell output in the Amazon S3 bucket.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-sharingsettings.html#cfn-sagemaker-userprofile-sharingsettings-s3kmskeyid
            '''
            result = self._values.get("s3_kms_key_id")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def s3_output_path(self) -> typing.Optional[builtins.str]:
            '''When ``NotebookOutputOption`` is ``Allowed`` , the Amazon S3 bucket used to store the shared notebook snapshots.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-sharingsettings.html#cfn-sagemaker-userprofile-sharingsettings-s3outputpath
            '''
            result = self._values.get("s3_output_path")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "SharingSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfile.UserSettingsProperty",
        jsii_struct_bases=[],
        name_mapping={
            "code_editor_app_settings": "codeEditorAppSettings",
            "custom_file_system_configs": "customFileSystemConfigs",
            "custom_posix_user_config": "customPosixUserConfig",
            "default_landing_uri": "defaultLandingUri",
            "execution_role": "executionRole",
            "jupyter_lab_app_settings": "jupyterLabAppSettings",
            "jupyter_server_app_settings": "jupyterServerAppSettings",
            "kernel_gateway_app_settings": "kernelGatewayAppSettings",
            "r_studio_server_pro_app_settings": "rStudioServerProAppSettings",
            "security_groups": "securityGroups",
            "sharing_settings": "sharingSettings",
            "space_storage_settings": "spaceStorageSettings",
            "studio_web_portal": "studioWebPortal",
        },
    )
    class UserSettingsProperty:
        def __init__(
            self,
            *,
            code_editor_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CodeEditorAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            custom_file_system_configs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CustomFileSystemConfigProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
            custom_posix_user_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.CustomPosixUserConfigProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            default_landing_uri: typing.Optional[builtins.str] = None,
            execution_role: typing.Optional[builtins.str] = None,
            jupyter_lab_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.JupyterLabAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.JupyterServerAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.KernelGatewayAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            r_studio_server_pro_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.RStudioServerProAppSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
            sharing_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.SharingSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            space_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnUserProfile.DefaultSpaceStorageSettingsProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            studio_web_portal: typing.Optional[builtins.str] = None,
        ) -> None:
            '''A collection of settings that apply to users of Amazon SageMaker Studio.

            These settings are specified when the `CreateUserProfile <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateUserProfile.html>`_ API is called, and as ``DefaultUserSettings`` when the `CreateDomain <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateDomain.html>`_ API is called.

            ``SecurityGroups`` is aggregated when specified in both calls. For all other settings in ``UserSettings`` , the values specified in ``CreateUserProfile`` take precedence over those specified in ``CreateDomain`` .

            :param code_editor_app_settings: The Code Editor application settings.
            :param custom_file_system_configs: The settings for assigning a custom file system to a user profile. Permitted users can access this file system in Amazon SageMaker Studio.
            :param custom_posix_user_config: Details about the POSIX identity that is used for file system operations.
            :param default_landing_uri: The default experience that the user is directed to when accessing the domain. The supported values are:. - ``studio::`` : Indicates that Studio is the default experience. This value can only be passed if ``StudioWebPortal`` is set to ``ENABLED`` . - ``app:JupyterServer:`` : Indicates that Studio Classic is the default experience.
            :param execution_role: The execution role for the user.
            :param jupyter_lab_app_settings: The settings for the JupyterLab application.
            :param jupyter_server_app_settings: The Jupyter server's app settings.
            :param kernel_gateway_app_settings: The kernel gateway app settings.
            :param r_studio_server_pro_app_settings: A collection of settings that configure user interaction with the ``RStudioServerPro`` app.
            :param security_groups: The security groups for the Amazon Virtual Private Cloud (VPC) that the domain uses for communication. Optional when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``PublicInternetOnly`` . Required when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``VpcOnly`` , unless specified as part of the ``DefaultUserSettings`` for the domain. Amazon SageMaker adds a security group to allow NFS traffic from Amazon SageMaker Studio. Therefore, the number of security groups that you can specify is one less than the maximum number shown.
            :param sharing_settings: Specifies options for sharing Amazon SageMaker Studio notebooks.
            :param space_storage_settings: The storage settings for a private space.
            :param studio_web_portal: Whether the user can access Studio. If this value is set to ``DISABLED`` , the user cannot access Studio, even if that is the default experience for the domain.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                user_settings_property = sagemaker.CfnUserProfile.UserSettingsProperty(
                    code_editor_app_settings=sagemaker.CfnUserProfile.CodeEditorAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    custom_file_system_configs=[sagemaker.CfnUserProfile.CustomFileSystemConfigProperty(
                        efs_file_system_config=sagemaker.CfnUserProfile.EFSFileSystemConfigProperty(
                            file_system_id="fileSystemId",
                
                            # the properties below are optional
                            file_system_path="fileSystemPath"
                        )
                    )],
                    custom_posix_user_config=sagemaker.CfnUserProfile.CustomPosixUserConfigProperty(
                        gid=123,
                        uid=123
                    ),
                    default_landing_uri="defaultLandingUri",
                    execution_role="executionRole",
                    jupyter_lab_app_settings=sagemaker.CfnUserProfile.JupyterLabAppSettingsProperty(
                        code_repositories=[sagemaker.CfnUserProfile.CodeRepositoryProperty(
                            repository_url="repositoryUrl"
                        )],
                        custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    jupyter_server_app_settings=sagemaker.CfnUserProfile.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnUserProfile.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
                
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_studio_server_pro_app_settings=sagemaker.CfnUserProfile.RStudioServerProAppSettingsProperty(
                        access_status="accessStatus",
                        user_group="userGroup"
                    ),
                    security_groups=["securityGroups"],
                    sharing_settings=sagemaker.CfnUserProfile.SharingSettingsProperty(
                        notebook_output_option="notebookOutputOption",
                        s3_kms_key_id="s3KmsKeyId",
                        s3_output_path="s3OutputPath"
                    ),
                    space_storage_settings=sagemaker.CfnUserProfile.DefaultSpaceStorageSettingsProperty(
                        default_ebs_storage_settings=sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty(
                            default_ebs_volume_size_in_gb=123,
                            maximum_ebs_volume_size_in_gb=123
                        )
                    ),
                    studio_web_portal="studioWebPortal"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__e97db7f3b3126b5a3d5c763d4d08621d63d98712c98017d6bda1493a96910b7f)
                check_type(argname="argument code_editor_app_settings", value=code_editor_app_settings, expected_type=type_hints["code_editor_app_settings"])
                check_type(argname="argument custom_file_system_configs", value=custom_file_system_configs, expected_type=type_hints["custom_file_system_configs"])
                check_type(argname="argument custom_posix_user_config", value=custom_posix_user_config, expected_type=type_hints["custom_posix_user_config"])
                check_type(argname="argument default_landing_uri", value=default_landing_uri, expected_type=type_hints["default_landing_uri"])
                check_type(argname="argument execution_role", value=execution_role, expected_type=type_hints["execution_role"])
                check_type(argname="argument jupyter_lab_app_settings", value=jupyter_lab_app_settings, expected_type=type_hints["jupyter_lab_app_settings"])
                check_type(argname="argument jupyter_server_app_settings", value=jupyter_server_app_settings, expected_type=type_hints["jupyter_server_app_settings"])
                check_type(argname="argument kernel_gateway_app_settings", value=kernel_gateway_app_settings, expected_type=type_hints["kernel_gateway_app_settings"])
                check_type(argname="argument r_studio_server_pro_app_settings", value=r_studio_server_pro_app_settings, expected_type=type_hints["r_studio_server_pro_app_settings"])
                check_type(argname="argument security_groups", value=security_groups, expected_type=type_hints["security_groups"])
                check_type(argname="argument sharing_settings", value=sharing_settings, expected_type=type_hints["sharing_settings"])
                check_type(argname="argument space_storage_settings", value=space_storage_settings, expected_type=type_hints["space_storage_settings"])
                check_type(argname="argument studio_web_portal", value=studio_web_portal, expected_type=type_hints["studio_web_portal"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if code_editor_app_settings is not None:
                self._values["code_editor_app_settings"] = code_editor_app_settings
            if custom_file_system_configs is not None:
                self._values["custom_file_system_configs"] = custom_file_system_configs
            if custom_posix_user_config is not None:
                self._values["custom_posix_user_config"] = custom_posix_user_config
            if default_landing_uri is not None:
                self._values["default_landing_uri"] = default_landing_uri
            if execution_role is not None:
                self._values["execution_role"] = execution_role
            if jupyter_lab_app_settings is not None:
                self._values["jupyter_lab_app_settings"] = jupyter_lab_app_settings
            if jupyter_server_app_settings is not None:
                self._values["jupyter_server_app_settings"] = jupyter_server_app_settings
            if kernel_gateway_app_settings is not None:
                self._values["kernel_gateway_app_settings"] = kernel_gateway_app_settings
            if r_studio_server_pro_app_settings is not None:
                self._values["r_studio_server_pro_app_settings"] = r_studio_server_pro_app_settings
            if security_groups is not None:
                self._values["security_groups"] = security_groups
            if sharing_settings is not None:
                self._values["sharing_settings"] = sharing_settings
            if space_storage_settings is not None:
                self._values["space_storage_settings"] = space_storage_settings
            if studio_web_portal is not None:
                self._values["studio_web_portal"] = studio_web_portal

        @builtins.property
        def code_editor_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CodeEditorAppSettingsProperty"]]:
            '''The Code Editor application settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-codeeditorappsettings
            '''
            result = self._values.get("code_editor_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CodeEditorAppSettingsProperty"]], result)

        @builtins.property
        def custom_file_system_configs(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomFileSystemConfigProperty"]]]]:
            '''The settings for assigning a custom file system to a user profile.

            Permitted users can access this file system in Amazon SageMaker Studio.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-customfilesystemconfigs
            '''
            result = self._values.get("custom_file_system_configs")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomFileSystemConfigProperty"]]]], result)

        @builtins.property
        def custom_posix_user_config(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomPosixUserConfigProperty"]]:
            '''Details about the POSIX identity that is used for file system operations.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-customposixuserconfig
            '''
            result = self._values.get("custom_posix_user_config")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.CustomPosixUserConfigProperty"]], result)

        @builtins.property
        def default_landing_uri(self) -> typing.Optional[builtins.str]:
            '''The default experience that the user is directed to when accessing the domain. The supported values are:.

            - ``studio::`` : Indicates that Studio is the default experience. This value can only be passed if ``StudioWebPortal`` is set to ``ENABLED`` .
            - ``app:JupyterServer:`` : Indicates that Studio Classic is the default experience.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-defaultlandinguri
            '''
            result = self._values.get("default_landing_uri")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def execution_role(self) -> typing.Optional[builtins.str]:
            '''The execution role for the user.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-executionrole
            '''
            result = self._values.get("execution_role")
            return typing.cast(typing.Optional[builtins.str], result)

        @builtins.property
        def jupyter_lab_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.JupyterLabAppSettingsProperty"]]:
            '''The settings for the JupyterLab application.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-jupyterlabappsettings
            '''
            result = self._values.get("jupyter_lab_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.JupyterLabAppSettingsProperty"]], result)

        @builtins.property
        def jupyter_server_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.JupyterServerAppSettingsProperty"]]:
            '''The Jupyter server's app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-jupyterserverappsettings
            '''
            result = self._values.get("jupyter_server_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.JupyterServerAppSettingsProperty"]], result)

        @builtins.property
        def kernel_gateway_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.KernelGatewayAppSettingsProperty"]]:
            '''The kernel gateway app settings.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-kernelgatewayappsettings
            '''
            result = self._values.get("kernel_gateway_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.KernelGatewayAppSettingsProperty"]], result)

        @builtins.property
        def r_studio_server_pro_app_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.RStudioServerProAppSettingsProperty"]]:
            '''A collection of settings that configure user interaction with the ``RStudioServerPro`` app.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-rstudioserverproappsettings
            '''
            result = self._values.get("r_studio_server_pro_app_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.RStudioServerProAppSettingsProperty"]], result)

        @builtins.property
        def security_groups(self) -> typing.Optional[typing.List[builtins.str]]:
            '''The security groups for the Amazon Virtual Private Cloud (VPC) that the domain uses for communication.

            Optional when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``PublicInternetOnly`` .

            Required when the ``CreateDomain.AppNetworkAccessType`` parameter is set to ``VpcOnly`` , unless specified as part of the ``DefaultUserSettings`` for the domain.

            Amazon SageMaker adds a security group to allow NFS traffic from Amazon SageMaker Studio. Therefore, the number of security groups that you can specify is one less than the maximum number shown.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-securitygroups
            '''
            result = self._values.get("security_groups")
            return typing.cast(typing.Optional[typing.List[builtins.str]], result)

        @builtins.property
        def sharing_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.SharingSettingsProperty"]]:
            '''Specifies options for sharing Amazon SageMaker Studio notebooks.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-sharingsettings
            '''
            result = self._values.get("sharing_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.SharingSettingsProperty"]], result)

        @builtins.property
        def space_storage_settings(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.DefaultSpaceStorageSettingsProperty"]]:
            '''The storage settings for a private space.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-spacestoragesettings
            '''
            result = self._values.get("space_storage_settings")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnUserProfile.DefaultSpaceStorageSettingsProperty"]], result)

        @builtins.property
        def studio_web_portal(self) -> typing.Optional[builtins.str]:
            '''Whether the user can access Studio.

            If this value is set to ``DISABLED`` , the user cannot access Studio, even if that is the default experience for the domain.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-userprofile-usersettings.html#cfn-sagemaker-userprofile-usersettings-studiowebportal
            '''
            result = self._values.get("studio_web_portal")
            return typing.cast(typing.Optional[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "UserSettingsProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnUserProfileProps",
    jsii_struct_bases=[],
    name_mapping={
        "domain_id": "domainId",
        "user_profile_name": "userProfileName",
        "single_sign_on_user_identifier": "singleSignOnUserIdentifier",
        "single_sign_on_user_value": "singleSignOnUserValue",
        "tags": "tags",
        "user_settings": "userSettings",
    },
)
class CfnUserProfileProps:
    def __init__(
        self,
        *,
        domain_id: builtins.str,
        user_profile_name: builtins.str,
        single_sign_on_user_identifier: typing.Optional[builtins.str] = None,
        single_sign_on_user_value: typing.Optional[builtins.str] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        user_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    ) -> None:
        '''Properties for defining a ``CfnUserProfile``.

        :param domain_id: The domain ID.
        :param user_profile_name: The user profile name.
        :param single_sign_on_user_identifier: A specifier for the type of value specified in SingleSignOnUserValue. Currently, the only supported value is "UserName". If the Domain's AuthMode is IAM Identity Center , this field is required. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.
        :param single_sign_on_user_value: The username of the associated AWS Single Sign-On User for this UserProfile. If the Domain's AuthMode is IAM Identity Center , this field is required, and must match a valid username of a user in your directory. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.
        :param tags: An array of key-value pairs to apply to this resource. Tags that you specify for the User Profile are also added to all apps that the User Profile launches. For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .
        :param user_settings: A collection of settings that apply to users of Amazon SageMaker Studio.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_user_profile_props = sagemaker.CfnUserProfileProps(
                domain_id="domainId",
                user_profile_name="userProfileName",
            
                # the properties below are optional
                single_sign_on_user_identifier="singleSignOnUserIdentifier",
                single_sign_on_user_value="singleSignOnUserValue",
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                user_settings=sagemaker.CfnUserProfile.UserSettingsProperty(
                    code_editor_app_settings=sagemaker.CfnUserProfile.CodeEditorAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    custom_file_system_configs=[sagemaker.CfnUserProfile.CustomFileSystemConfigProperty(
                        efs_file_system_config=sagemaker.CfnUserProfile.EFSFileSystemConfigProperty(
                            file_system_id="fileSystemId",
            
                            # the properties below are optional
                            file_system_path="fileSystemPath"
                        )
                    )],
                    custom_posix_user_config=sagemaker.CfnUserProfile.CustomPosixUserConfigProperty(
                        gid=123,
                        uid=123
                    ),
                    default_landing_uri="defaultLandingUri",
                    execution_role="executionRole",
                    jupyter_lab_app_settings=sagemaker.CfnUserProfile.JupyterLabAppSettingsProperty(
                        code_repositories=[sagemaker.CfnUserProfile.CodeRepositoryProperty(
                            repository_url="repositoryUrl"
                        )],
                        custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        ),
                        lifecycle_config_arns=["lifecycleConfigArns"]
                    ),
                    jupyter_server_app_settings=sagemaker.CfnUserProfile.JupyterServerAppSettingsProperty(
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    kernel_gateway_app_settings=sagemaker.CfnUserProfile.KernelGatewayAppSettingsProperty(
                        custom_images=[sagemaker.CfnUserProfile.CustomImageProperty(
                            app_image_config_name="appImageConfigName",
                            image_name="imageName",
            
                            # the properties below are optional
                            image_version_number=123
                        )],
                        default_resource_spec=sagemaker.CfnUserProfile.ResourceSpecProperty(
                            instance_type="instanceType",
                            sage_maker_image_arn="sageMakerImageArn",
                            sage_maker_image_version_arn="sageMakerImageVersionArn"
                        )
                    ),
                    r_studio_server_pro_app_settings=sagemaker.CfnUserProfile.RStudioServerProAppSettingsProperty(
                        access_status="accessStatus",
                        user_group="userGroup"
                    ),
                    security_groups=["securityGroups"],
                    sharing_settings=sagemaker.CfnUserProfile.SharingSettingsProperty(
                        notebook_output_option="notebookOutputOption",
                        s3_kms_key_id="s3KmsKeyId",
                        s3_output_path="s3OutputPath"
                    ),
                    space_storage_settings=sagemaker.CfnUserProfile.DefaultSpaceStorageSettingsProperty(
                        default_ebs_storage_settings=sagemaker.CfnUserProfile.DefaultEbsStorageSettingsProperty(
                            default_ebs_volume_size_in_gb=123,
                            maximum_ebs_volume_size_in_gb=123
                        )
                    ),
                    studio_web_portal="studioWebPortal"
                )
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__59e94811af563857fc7e4ba10de1c5e364f6af3d8c1863c0c3396d72a47b9c99)
            check_type(argname="argument domain_id", value=domain_id, expected_type=type_hints["domain_id"])
            check_type(argname="argument user_profile_name", value=user_profile_name, expected_type=type_hints["user_profile_name"])
            check_type(argname="argument single_sign_on_user_identifier", value=single_sign_on_user_identifier, expected_type=type_hints["single_sign_on_user_identifier"])
            check_type(argname="argument single_sign_on_user_value", value=single_sign_on_user_value, expected_type=type_hints["single_sign_on_user_value"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument user_settings", value=user_settings, expected_type=type_hints["user_settings"])
        self._values: typing.Dict[builtins.str, typing.Any] = {
            "domain_id": domain_id,
            "user_profile_name": user_profile_name,
        }
        if single_sign_on_user_identifier is not None:
            self._values["single_sign_on_user_identifier"] = single_sign_on_user_identifier
        if single_sign_on_user_value is not None:
            self._values["single_sign_on_user_value"] = single_sign_on_user_value
        if tags is not None:
            self._values["tags"] = tags
        if user_settings is not None:
            self._values["user_settings"] = user_settings

    @builtins.property
    def domain_id(self) -> builtins.str:
        '''The domain ID.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-domainid
        '''
        result = self._values.get("domain_id")
        assert result is not None, "Required property 'domain_id' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def user_profile_name(self) -> builtins.str:
        '''The user profile name.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-userprofilename
        '''
        result = self._values.get("user_profile_name")
        assert result is not None, "Required property 'user_profile_name' is missing"
        return typing.cast(builtins.str, result)

    @builtins.property
    def single_sign_on_user_identifier(self) -> typing.Optional[builtins.str]:
        '''A specifier for the type of value specified in SingleSignOnUserValue.

        Currently, the only supported value is "UserName". If the Domain's AuthMode is IAM Identity Center , this field is required. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-singlesignonuseridentifier
        '''
        result = self._values.get("single_sign_on_user_identifier")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def single_sign_on_user_value(self) -> typing.Optional[builtins.str]:
        '''The username of the associated AWS Single Sign-On User for this UserProfile.

        If the Domain's AuthMode is IAM Identity Center , this field is required, and must match a valid username of a user in your directory. If the Domain's AuthMode is not IAM Identity Center , this field cannot be specified.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-singlesignonuservalue
        '''
        result = self._values.get("single_sign_on_user_value")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs to apply to this resource.

        Tags that you specify for the User Profile are also added to all apps that the User Profile launches.

        For more information, see `Tag <https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html>`_ .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def user_settings(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnUserProfile.UserSettingsProperty]]:
        '''A collection of settings that apply to users of Amazon SageMaker Studio.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-userprofile.html#cfn-sagemaker-userprofile-usersettings
        '''
        result = self._values.get("user_settings")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnUserProfile.UserSettingsProperty]], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnUserProfileProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.implements(_IInspectable_c2943556, _ITaggable_36806126)
class CfnWorkteam(
    _CfnResource_9df397a6,
    metaclass=jsii.JSIIMeta,
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteam",
):
    '''Creates a new work team for labeling your data.

    A work team is defined by one or more Amazon Cognito user pools. You must first create the user pools before you can create a work team.

    You cannot create more than 25 work teams in an account and region.

    :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html
    :cloudformationResource: AWS::SageMaker::Workteam
    :exampleMetadata: fixture=_generated

    Example::

        # The code below shows an example of how to instantiate this type.
        # The values are placeholders you should change.
        from aws_cdk import aws_sagemaker as sagemaker
        
        cfn_workteam = sagemaker.CfnWorkteam(self, "MyCfnWorkteam",
            description="description",
            member_definitions=[sagemaker.CfnWorkteam.MemberDefinitionProperty(
                cognito_member_definition=sagemaker.CfnWorkteam.CognitoMemberDefinitionProperty(
                    cognito_client_id="cognitoClientId",
                    cognito_user_group="cognitoUserGroup",
                    cognito_user_pool="cognitoUserPool"
                ),
                oidc_member_definition=sagemaker.CfnWorkteam.OidcMemberDefinitionProperty(
                    oidc_groups=["oidcGroups"]
                )
            )],
            notification_configuration=sagemaker.CfnWorkteam.NotificationConfigurationProperty(
                notification_topic_arn="notificationTopicArn"
            ),
            tags=[CfnTag(
                key="key",
                value="value"
            )],
            workforce_name="workforceName",
            workteam_name="workteamName"
        )
    '''

    def __init__(
        self,
        scope: _constructs_77d1e7e8.Construct,
        id: builtins.str,
        *,
        description: typing.Optional[builtins.str] = None,
        member_definitions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union["CfnWorkteam.MemberDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]]]] = None,
        notification_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnWorkteam.NotificationConfigurationProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        workforce_name: typing.Optional[builtins.str] = None,
        workteam_name: typing.Optional[builtins.str] = None,
    ) -> None:
        '''
        :param scope: Scope in which this resource is defined.
        :param id: Construct identifier for this resource (unique in its scope).
        :param description: A description of the work team.
        :param member_definitions: A list of ``MemberDefinition`` objects that contains objects that identify the workers that make up the work team. Workforces can be created using Amazon Cognito or your own OIDC Identity Provider (IdP). For private workforces created using Amazon Cognito use ``CognitoMemberDefinition`` . For workforces created using your own OIDC identity provider (IdP) use ``OidcMemberDefinition`` .
        :param notification_configuration: Configures SNS notifications of available or expiring work items for work teams.
        :param tags: An array of key-value pairs.
        :param workforce_name: 
        :param workteam_name: The name of the work team.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__db9eb282091c745abfbd70a294ab8c168a305af7f2b4e80c34f292cc22c51a4a)
            check_type(argname="argument scope", value=scope, expected_type=type_hints["scope"])
            check_type(argname="argument id", value=id, expected_type=type_hints["id"])
        props = CfnWorkteamProps(
            description=description,
            member_definitions=member_definitions,
            notification_configuration=notification_configuration,
            tags=tags,
            workforce_name=workforce_name,
            workteam_name=workteam_name,
        )

        jsii.create(self.__class__, self, [scope, id, props])

    @jsii.member(jsii_name="inspect")
    def inspect(self, inspector: _TreeInspector_488e0dd5) -> None:
        '''Examines the CloudFormation resource and discloses attributes.

        :param inspector: tree inspector to collect and process attributes.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6a120585f009f8885d2379b2a972ae2fb988e9c94d26b8a8b24ea7a5ce8d525f)
            check_type(argname="argument inspector", value=inspector, expected_type=type_hints["inspector"])
        return typing.cast(None, jsii.invoke(self, "inspect", [inspector]))

    @jsii.member(jsii_name="renderProperties")
    def _render_properties(
        self,
        props: typing.Mapping[builtins.str, typing.Any],
    ) -> typing.Mapping[builtins.str, typing.Any]:
        '''
        :param props: -
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__d08e1e1dec47e610599cd87e4e531705da6fe7e63bfea4097a53c4a1e4bb7cb4)
            check_type(argname="argument props", value=props, expected_type=type_hints["props"])
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.invoke(self, "renderProperties", [props]))

    @jsii.python.classproperty
    @jsii.member(jsii_name="CFN_RESOURCE_TYPE_NAME")
    def CFN_RESOURCE_TYPE_NAME(cls) -> builtins.str:
        '''The CloudFormation resource type name for this resource class.'''
        return typing.cast(builtins.str, jsii.sget(cls, "CFN_RESOURCE_TYPE_NAME"))

    @builtins.property
    @jsii.member(jsii_name="attrId")
    def attr_id(self) -> builtins.str:
        '''
        :cloudformationAttribute: Id
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrId"))

    @builtins.property
    @jsii.member(jsii_name="attrWorkteamName")
    def attr_workteam_name(self) -> builtins.str:
        '''The name of the work team.

        :cloudformationAttribute: WorkteamName
        '''
        return typing.cast(builtins.str, jsii.get(self, "attrWorkteamName"))

    @builtins.property
    @jsii.member(jsii_name="cfnProperties")
    def _cfn_properties(self) -> typing.Mapping[builtins.str, typing.Any]:
        return typing.cast(typing.Mapping[builtins.str, typing.Any], jsii.get(self, "cfnProperties"))

    @builtins.property
    @jsii.member(jsii_name="tags")
    def tags(self) -> _TagManager_0a598cb3:
        '''Tag Manager which manages the tags for this resource.'''
        return typing.cast(_TagManager_0a598cb3, jsii.get(self, "tags"))

    @builtins.property
    @jsii.member(jsii_name="description")
    def description(self) -> typing.Optional[builtins.str]:
        '''A description of the work team.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "description"))

    @description.setter
    def description(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__3e51dbce26db436df412eb92734802d8f2f60a15c55f5bc26f1c0f647a4b427f)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "description", value)

    @builtins.property
    @jsii.member(jsii_name="memberDefinitions")
    def member_definitions(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.MemberDefinitionProperty"]]]]:
        '''A list of ``MemberDefinition`` objects that contains objects that identify the workers that make up the work team.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.MemberDefinitionProperty"]]]], jsii.get(self, "memberDefinitions"))

    @member_definitions.setter
    def member_definitions(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.MemberDefinitionProperty"]]]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__fdde5f079b81bfe00bc13e6bfa94c26420f9144669b455ef4c46b615c569713e)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "memberDefinitions", value)

    @builtins.property
    @jsii.member(jsii_name="notificationConfiguration")
    def notification_configuration(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.NotificationConfigurationProperty"]]:
        '''Configures SNS notifications of available or expiring work items for work teams.'''
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.NotificationConfigurationProperty"]], jsii.get(self, "notificationConfiguration"))

    @notification_configuration.setter
    def notification_configuration(
        self,
        value: typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.NotificationConfigurationProperty"]],
    ) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__0f827480e57089e921f425cbefa39bfb363efe8cf32b180ed6fd5514ebf41a87)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "notificationConfiguration", value)

    @builtins.property
    @jsii.member(jsii_name="tagsRaw")
    def tags_raw(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs.'''
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], jsii.get(self, "tagsRaw"))

    @tags_raw.setter
    def tags_raw(self, value: typing.Optional[typing.List[_CfnTag_f6864754]]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__a9e73c942296f3e614633cc4fa13a01d89e1476c06f0a7edfbaa4aca444f2a9b)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "tagsRaw", value)

    @builtins.property
    @jsii.member(jsii_name="workforceName")
    def workforce_name(self) -> typing.Optional[builtins.str]:
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "workforceName"))

    @workforce_name.setter
    def workforce_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__86f2160fe98930dc39f906ad9f2c393300ceda8a7d10c404b4037c4f4e05c2fd)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "workforceName", value)

    @builtins.property
    @jsii.member(jsii_name="workteamName")
    def workteam_name(self) -> typing.Optional[builtins.str]:
        '''The name of the work team.'''
        return typing.cast(typing.Optional[builtins.str], jsii.get(self, "workteamName"))

    @workteam_name.setter
    def workteam_name(self, value: typing.Optional[builtins.str]) -> None:
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__edb66c8cd2afc503fd755d85a5a0eb16d09d82c0cd7ea0a2fb330635cb6d2480)
            check_type(argname="argument value", value=value, expected_type=type_hints["value"])
        jsii.set(self, "workteamName", value)

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteam.CognitoMemberDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "cognito_client_id": "cognitoClientId",
            "cognito_user_group": "cognitoUserGroup",
            "cognito_user_pool": "cognitoUserPool",
        },
    )
    class CognitoMemberDefinitionProperty:
        def __init__(
            self,
            *,
            cognito_client_id: builtins.str,
            cognito_user_group: builtins.str,
            cognito_user_pool: builtins.str,
        ) -> None:
            '''Identifies a Amazon Cognito user group.

            A user group can be used in on or more work teams.

            :param cognito_client_id: An identifier for an application client. You must create the app client ID using Amazon Cognito.
            :param cognito_user_group: An identifier for a user group.
            :param cognito_user_pool: An identifier for a user pool. The user pool must be in the same region as the service that you are calling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-cognitomemberdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                cognito_member_definition_property = sagemaker.CfnWorkteam.CognitoMemberDefinitionProperty(
                    cognito_client_id="cognitoClientId",
                    cognito_user_group="cognitoUserGroup",
                    cognito_user_pool="cognitoUserPool"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__f57cdaed25fa064bea4736f3d69ea4c5db9b14362ae56db3436ee2094517f627)
                check_type(argname="argument cognito_client_id", value=cognito_client_id, expected_type=type_hints["cognito_client_id"])
                check_type(argname="argument cognito_user_group", value=cognito_user_group, expected_type=type_hints["cognito_user_group"])
                check_type(argname="argument cognito_user_pool", value=cognito_user_pool, expected_type=type_hints["cognito_user_pool"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "cognito_client_id": cognito_client_id,
                "cognito_user_group": cognito_user_group,
                "cognito_user_pool": cognito_user_pool,
            }

        @builtins.property
        def cognito_client_id(self) -> builtins.str:
            '''An identifier for an application client.

            You must create the app client ID using Amazon Cognito.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-cognitomemberdefinition.html#cfn-sagemaker-workteam-cognitomemberdefinition-cognitoclientid
            '''
            result = self._values.get("cognito_client_id")
            assert result is not None, "Required property 'cognito_client_id' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def cognito_user_group(self) -> builtins.str:
            '''An identifier for a user group.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-cognitomemberdefinition.html#cfn-sagemaker-workteam-cognitomemberdefinition-cognitousergroup
            '''
            result = self._values.get("cognito_user_group")
            assert result is not None, "Required property 'cognito_user_group' is missing"
            return typing.cast(builtins.str, result)

        @builtins.property
        def cognito_user_pool(self) -> builtins.str:
            '''An identifier for a user pool.

            The user pool must be in the same region as the service that you are calling.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-cognitomemberdefinition.html#cfn-sagemaker-workteam-cognitomemberdefinition-cognitouserpool
            '''
            result = self._values.get("cognito_user_pool")
            assert result is not None, "Required property 'cognito_user_pool' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "CognitoMemberDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteam.MemberDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={
            "cognito_member_definition": "cognitoMemberDefinition",
            "oidc_member_definition": "oidcMemberDefinition",
        },
    )
    class MemberDefinitionProperty:
        def __init__(
            self,
            *,
            cognito_member_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnWorkteam.CognitoMemberDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
            oidc_member_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union["CfnWorkteam.OidcMemberDefinitionProperty", typing.Dict[builtins.str, typing.Any]]]] = None,
        ) -> None:
            '''Defines an Amazon Cognito or your own OIDC IdP user group that is part of a work team.

            :param cognito_member_definition: The Amazon Cognito user group that is part of the work team.
            :param oidc_member_definition: A list user groups that exist in your OIDC Identity Provider (IdP). One to ten groups can be used to create a single private work team. When you add a user group to the list of ``Groups`` , you can add that user group to one or more private work teams. If you add a user group to a private work team, all workers in that user group are added to the work team.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-memberdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                member_definition_property = sagemaker.CfnWorkteam.MemberDefinitionProperty(
                    cognito_member_definition=sagemaker.CfnWorkteam.CognitoMemberDefinitionProperty(
                        cognito_client_id="cognitoClientId",
                        cognito_user_group="cognitoUserGroup",
                        cognito_user_pool="cognitoUserPool"
                    ),
                    oidc_member_definition=sagemaker.CfnWorkteam.OidcMemberDefinitionProperty(
                        oidc_groups=["oidcGroups"]
                    )
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__8f5e2cb2957f9f729e42a31a66ae8409b24707fd26bae58160af286c86f6892c)
                check_type(argname="argument cognito_member_definition", value=cognito_member_definition, expected_type=type_hints["cognito_member_definition"])
                check_type(argname="argument oidc_member_definition", value=oidc_member_definition, expected_type=type_hints["oidc_member_definition"])
            self._values: typing.Dict[builtins.str, typing.Any] = {}
            if cognito_member_definition is not None:
                self._values["cognito_member_definition"] = cognito_member_definition
            if oidc_member_definition is not None:
                self._values["oidc_member_definition"] = oidc_member_definition

        @builtins.property
        def cognito_member_definition(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.CognitoMemberDefinitionProperty"]]:
            '''The Amazon Cognito user group that is part of the work team.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-memberdefinition.html#cfn-sagemaker-workteam-memberdefinition-cognitomemberdefinition
            '''
            result = self._values.get("cognito_member_definition")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.CognitoMemberDefinitionProperty"]], result)

        @builtins.property
        def oidc_member_definition(
            self,
        ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.OidcMemberDefinitionProperty"]]:
            '''A list user groups that exist in your OIDC Identity Provider (IdP).

            One to ten groups can be used to create a single private work team. When you add a user group to the list of ``Groups`` , you can add that user group to one or more private work teams. If you add a user group to a private work team, all workers in that user group are added to the work team.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-memberdefinition.html#cfn-sagemaker-workteam-memberdefinition-oidcmemberdefinition
            '''
            result = self._values.get("oidc_member_definition")
            return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, "CfnWorkteam.OidcMemberDefinitionProperty"]], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "MemberDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteam.NotificationConfigurationProperty",
        jsii_struct_bases=[],
        name_mapping={"notification_topic_arn": "notificationTopicArn"},
    )
    class NotificationConfigurationProperty:
        def __init__(self, *, notification_topic_arn: builtins.str) -> None:
            '''Configures Amazon SNS notifications of available or expiring work items for work teams.

            :param notification_topic_arn: The ARN for the Amazon SNS topic to which notifications should be published.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-notificationconfiguration.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                notification_configuration_property = sagemaker.CfnWorkteam.NotificationConfigurationProperty(
                    notification_topic_arn="notificationTopicArn"
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__a67a4b4b8346e83023d322c6d7f90630c9f952f317d53cc36a9906c33de4ccea)
                check_type(argname="argument notification_topic_arn", value=notification_topic_arn, expected_type=type_hints["notification_topic_arn"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "notification_topic_arn": notification_topic_arn,
            }

        @builtins.property
        def notification_topic_arn(self) -> builtins.str:
            '''The ARN for the Amazon SNS topic to which notifications should be published.

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-notificationconfiguration.html#cfn-sagemaker-workteam-notificationconfiguration-notificationtopicarn
            '''
            result = self._values.get("notification_topic_arn")
            assert result is not None, "Required property 'notification_topic_arn' is missing"
            return typing.cast(builtins.str, result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "NotificationConfigurationProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )

    @jsii.data_type(
        jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteam.OidcMemberDefinitionProperty",
        jsii_struct_bases=[],
        name_mapping={"oidc_groups": "oidcGroups"},
    )
    class OidcMemberDefinitionProperty:
        def __init__(self, *, oidc_groups: typing.Sequence[builtins.str]) -> None:
            '''A list of user groups that exist in your OIDC Identity Provider (IdP).

            One to ten groups can be used to create a single private work team. When you add a user group to the list of ``Groups`` , you can add that user group to one or more private work teams. If you add a user group to a private work team, all workers in that user group are added to the work team.

            :param oidc_groups: 

            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-oidcmemberdefinition.html
            :exampleMetadata: fixture=_generated

            Example::

                # The code below shows an example of how to instantiate this type.
                # The values are placeholders you should change.
                from aws_cdk import aws_sagemaker as sagemaker
                
                oidc_member_definition_property = sagemaker.CfnWorkteam.OidcMemberDefinitionProperty(
                    oidc_groups=["oidcGroups"]
                )
            '''
            if __debug__:
                type_hints = typing.get_type_hints(_typecheckingstub__74f817ac3b5bece92b045cdf0b84972864f8be367364ba082cd53e1732deba87)
                check_type(argname="argument oidc_groups", value=oidc_groups, expected_type=type_hints["oidc_groups"])
            self._values: typing.Dict[builtins.str, typing.Any] = {
                "oidc_groups": oidc_groups,
            }

        @builtins.property
        def oidc_groups(self) -> typing.List[builtins.str]:
            '''
            :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sagemaker-workteam-oidcmemberdefinition.html#cfn-sagemaker-workteam-oidcmemberdefinition-oidcgroups
            '''
            result = self._values.get("oidc_groups")
            assert result is not None, "Required property 'oidc_groups' is missing"
            return typing.cast(typing.List[builtins.str], result)

        def __eq__(self, rhs: typing.Any) -> builtins.bool:
            return isinstance(rhs, self.__class__) and rhs._values == self._values

        def __ne__(self, rhs: typing.Any) -> builtins.bool:
            return not (rhs == self)

        def __repr__(self) -> str:
            return "OidcMemberDefinitionProperty(%s)" % ", ".join(
                k + "=" + repr(v) for k, v in self._values.items()
            )


@jsii.data_type(
    jsii_type="aws-cdk-lib.aws_sagemaker.CfnWorkteamProps",
    jsii_struct_bases=[],
    name_mapping={
        "description": "description",
        "member_definitions": "memberDefinitions",
        "notification_configuration": "notificationConfiguration",
        "tags": "tags",
        "workforce_name": "workforceName",
        "workteam_name": "workteamName",
    },
)
class CfnWorkteamProps:
    def __init__(
        self,
        *,
        description: typing.Optional[builtins.str] = None,
        member_definitions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.MemberDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
        notification_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.NotificationConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
        tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
        workforce_name: typing.Optional[builtins.str] = None,
        workteam_name: typing.Optional[builtins.str] = None,
    ) -> None:
        '''Properties for defining a ``CfnWorkteam``.

        :param description: A description of the work team.
        :param member_definitions: A list of ``MemberDefinition`` objects that contains objects that identify the workers that make up the work team. Workforces can be created using Amazon Cognito or your own OIDC Identity Provider (IdP). For private workforces created using Amazon Cognito use ``CognitoMemberDefinition`` . For workforces created using your own OIDC identity provider (IdP) use ``OidcMemberDefinition`` .
        :param notification_configuration: Configures SNS notifications of available or expiring work items for work teams.
        :param tags: An array of key-value pairs.
        :param workforce_name: 
        :param workteam_name: The name of the work team.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html
        :exampleMetadata: fixture=_generated

        Example::

            # The code below shows an example of how to instantiate this type.
            # The values are placeholders you should change.
            from aws_cdk import aws_sagemaker as sagemaker
            
            cfn_workteam_props = sagemaker.CfnWorkteamProps(
                description="description",
                member_definitions=[sagemaker.CfnWorkteam.MemberDefinitionProperty(
                    cognito_member_definition=sagemaker.CfnWorkteam.CognitoMemberDefinitionProperty(
                        cognito_client_id="cognitoClientId",
                        cognito_user_group="cognitoUserGroup",
                        cognito_user_pool="cognitoUserPool"
                    ),
                    oidc_member_definition=sagemaker.CfnWorkteam.OidcMemberDefinitionProperty(
                        oidc_groups=["oidcGroups"]
                    )
                )],
                notification_configuration=sagemaker.CfnWorkteam.NotificationConfigurationProperty(
                    notification_topic_arn="notificationTopicArn"
                ),
                tags=[CfnTag(
                    key="key",
                    value="value"
                )],
                workforce_name="workforceName",
                workteam_name="workteamName"
            )
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__6ed0fa104d17e6f2523c2e22c3478df23a7c14bf46bbb1dc39031a5c0d6d362e)
            check_type(argname="argument description", value=description, expected_type=type_hints["description"])
            check_type(argname="argument member_definitions", value=member_definitions, expected_type=type_hints["member_definitions"])
            check_type(argname="argument notification_configuration", value=notification_configuration, expected_type=type_hints["notification_configuration"])
            check_type(argname="argument tags", value=tags, expected_type=type_hints["tags"])
            check_type(argname="argument workforce_name", value=workforce_name, expected_type=type_hints["workforce_name"])
            check_type(argname="argument workteam_name", value=workteam_name, expected_type=type_hints["workteam_name"])
        self._values: typing.Dict[builtins.str, typing.Any] = {}
        if description is not None:
            self._values["description"] = description
        if member_definitions is not None:
            self._values["member_definitions"] = member_definitions
        if notification_configuration is not None:
            self._values["notification_configuration"] = notification_configuration
        if tags is not None:
            self._values["tags"] = tags
        if workforce_name is not None:
            self._values["workforce_name"] = workforce_name
        if workteam_name is not None:
            self._values["workteam_name"] = workteam_name

    @builtins.property
    def description(self) -> typing.Optional[builtins.str]:
        '''A description of the work team.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-description
        '''
        result = self._values.get("description")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def member_definitions(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnWorkteam.MemberDefinitionProperty]]]]:
        '''A list of ``MemberDefinition`` objects that contains objects that identify the workers that make up the work team.

        Workforces can be created using Amazon Cognito or your own OIDC Identity Provider (IdP). For private workforces created using Amazon Cognito use ``CognitoMemberDefinition`` . For workforces created using your own OIDC identity provider (IdP) use ``OidcMemberDefinition`` .

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-memberdefinitions
        '''
        result = self._values.get("member_definitions")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnWorkteam.MemberDefinitionProperty]]]], result)

    @builtins.property
    def notification_configuration(
        self,
    ) -> typing.Optional[typing.Union[_IResolvable_da3f097b, CfnWorkteam.NotificationConfigurationProperty]]:
        '''Configures SNS notifications of available or expiring work items for work teams.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-notificationconfiguration
        '''
        result = self._values.get("notification_configuration")
        return typing.cast(typing.Optional[typing.Union[_IResolvable_da3f097b, CfnWorkteam.NotificationConfigurationProperty]], result)

    @builtins.property
    def tags(self) -> typing.Optional[typing.List[_CfnTag_f6864754]]:
        '''An array of key-value pairs.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-tags
        '''
        result = self._values.get("tags")
        return typing.cast(typing.Optional[typing.List[_CfnTag_f6864754]], result)

    @builtins.property
    def workforce_name(self) -> typing.Optional[builtins.str]:
        '''
        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-workforcename
        '''
        result = self._values.get("workforce_name")
        return typing.cast(typing.Optional[builtins.str], result)

    @builtins.property
    def workteam_name(self) -> typing.Optional[builtins.str]:
        '''The name of the work team.

        :see: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-workteam.html#cfn-sagemaker-workteam-workteamname
        '''
        result = self._values.get("workteam_name")
        return typing.cast(typing.Optional[builtins.str], result)

    def __eq__(self, rhs: typing.Any) -> builtins.bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs: typing.Any) -> builtins.bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "CfnWorkteamProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


@jsii.interface(jsii_type="aws-cdk-lib.aws_sagemaker.IEndpoint")
class IEndpoint(_IResource_c80c4260, typing_extensions.Protocol):
    '''The interface for a SageMaker Endpoint resource.'''

    @builtins.property
    @jsii.member(jsii_name="endpointArn")
    def endpoint_arn(self) -> builtins.str:
        '''The ARN of the endpoint.

        :attribute: true
        '''
        ...

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint.

        :attribute: true
        '''
        ...

    @jsii.member(jsii_name="grantInvoke")
    def grant_invoke(self, grantee: _IGrantable_71c4f5de) -> _Grant_a7ae64f8:
        '''Permits an IAM principal to invoke this endpoint.

        :param grantee: The principal to grant access to.
        '''
        ...


class _IEndpointProxy(
    jsii.proxy_for(_IResource_c80c4260), # type: ignore[misc]
):
    '''The interface for a SageMaker Endpoint resource.'''

    __jsii_type__: typing.ClassVar[str] = "aws-cdk-lib.aws_sagemaker.IEndpoint"

    @builtins.property
    @jsii.member(jsii_name="endpointArn")
    def endpoint_arn(self) -> builtins.str:
        '''The ARN of the endpoint.

        :attribute: true
        '''
        return typing.cast(builtins.str, jsii.get(self, "endpointArn"))

    @builtins.property
    @jsii.member(jsii_name="endpointName")
    def endpoint_name(self) -> builtins.str:
        '''The name of the endpoint.

        :attribute: true
        '''
        return typing.cast(builtins.str, jsii.get(self, "endpointName"))

    @jsii.member(jsii_name="grantInvoke")
    def grant_invoke(self, grantee: _IGrantable_71c4f5de) -> _Grant_a7ae64f8:
        '''Permits an IAM principal to invoke this endpoint.

        :param grantee: The principal to grant access to.
        '''
        if __debug__:
            type_hints = typing.get_type_hints(_typecheckingstub__ea5ef6bb1dcef938d1b2e2e52237c3ada34985058999f3b8f52f983e542d1f1b)
            check_type(argname="argument grantee", value=grantee, expected_type=type_hints["grantee"])
        return typing.cast(_Grant_a7ae64f8, jsii.invoke(self, "grantInvoke", [grantee]))

# Adding a "__jsii_proxy_class__(): typing.Type" function to the interface
typing.cast(typing.Any, IEndpoint).__jsii_proxy_class__ = lambda : _IEndpointProxy


__all__ = [
    "CfnApp",
    "CfnAppImageConfig",
    "CfnAppImageConfigProps",
    "CfnAppProps",
    "CfnCodeRepository",
    "CfnCodeRepositoryProps",
    "CfnDataQualityJobDefinition",
    "CfnDataQualityJobDefinitionProps",
    "CfnDevice",
    "CfnDeviceFleet",
    "CfnDeviceFleetProps",
    "CfnDeviceProps",
    "CfnDomain",
    "CfnDomainProps",
    "CfnEndpoint",
    "CfnEndpointConfig",
    "CfnEndpointConfigProps",
    "CfnEndpointProps",
    "CfnFeatureGroup",
    "CfnFeatureGroupProps",
    "CfnImage",
    "CfnImageProps",
    "CfnImageVersion",
    "CfnImageVersionProps",
    "CfnInferenceComponent",
    "CfnInferenceComponentProps",
    "CfnInferenceExperiment",
    "CfnInferenceExperimentProps",
    "CfnModel",
    "CfnModelBiasJobDefinition",
    "CfnModelBiasJobDefinitionProps",
    "CfnModelCard",
    "CfnModelCardProps",
    "CfnModelExplainabilityJobDefinition",
    "CfnModelExplainabilityJobDefinitionProps",
    "CfnModelPackage",
    "CfnModelPackageGroup",
    "CfnModelPackageGroupProps",
    "CfnModelPackageProps",
    "CfnModelProps",
    "CfnModelQualityJobDefinition",
    "CfnModelQualityJobDefinitionProps",
    "CfnMonitoringSchedule",
    "CfnMonitoringScheduleProps",
    "CfnNotebookInstance",
    "CfnNotebookInstanceLifecycleConfig",
    "CfnNotebookInstanceLifecycleConfigProps",
    "CfnNotebookInstanceProps",
    "CfnPipeline",
    "CfnPipelineProps",
    "CfnProject",
    "CfnProjectProps",
    "CfnSpace",
    "CfnSpaceProps",
    "CfnUserProfile",
    "CfnUserProfileProps",
    "CfnWorkteam",
    "CfnWorkteamProps",
    "IEndpoint",
]

publication.publish()

def _typecheckingstub__da207547ea530dc451bd8f33c6174b52ddcb5c9c348d4df84894bf6a2e2ada4a(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    app_name: builtins.str,
    app_type: builtins.str,
    domain_id: builtins.str,
    user_profile_name: builtins.str,
    resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnApp.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__76b99b25d5846497c07368fb764a277782458a65eed58ef9398494227f100421(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ed187eab5bee18dd53b1c928d2ccb0e90ab23f4cc25f17ae924a522946f79c87(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__60338cb684c35adee2166006d8a5799b8774a901f8ecf9c2ac63ee250f468884(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8050a2337833fa41f2f81b9f4cdfdb20ac505027fde6b3acfde898ba8800a4a3(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__563ef9985abcabcd774803749869a87550a085a0ba09908e86c235da523c4d6c(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9231045eaa19a04e645ac4427861d86fb43ed510b73c35bda73d525ca58769ab(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__41e96c1fc82b070303e88c71e535d7b01017c13f06d3c4baf96523a46c257f09(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnApp.ResourceSpecProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e1e0fea60c9fcc98ad12e3c7e8c3b6ab7da4954ca4f3501ea10f407018e1d017(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__59e5b32b2186d51d00289fe7e4950d7333bbf83c68ebe92d0bdb2eceb03ed406(
    *,
    instance_type: typing.Optional[builtins.str] = None,
    sage_maker_image_arn: typing.Optional[builtins.str] = None,
    sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a5bddad57cf4d60d052f199fa18e6d92660d1097d0ea8d783dbde99f9c0a028d(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    app_image_config_name: builtins.str,
    kernel_gateway_image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnAppImageConfig.KernelGatewayImageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5bb94facbcc3b4d7b1de5aa9b83ce79e3da77d42eacbb7c16e3363a42398869b(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e215d4a475fe72e90d5dd156e3b19de51b712660dded95424cb42e06752b5395(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__01fc550542699aeed5dd2d9ae695d23b69d475612dabef44e560292d011f07e0(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5129d030fcca687bbeeb2006415186516bbfe40d0eb84e4e1b19bda9233d80f0(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnAppImageConfig.KernelGatewayImageConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4462443074ff405184cbe7f0da1ea76390388cd02ffca07d1fbaf2ef6b2935b2(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1bf5a54cea483597930e2acc9a52917d8d76e77acdbacf9c4d89c223259b37b0(
    *,
    default_gid: typing.Optional[jsii.Number] = None,
    default_uid: typing.Optional[jsii.Number] = None,
    mount_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c86ddd58dc2d271d40ac6b9fe05c0ef722eda13bfa91f644e01a4fc42586ef1e(
    *,
    kernel_specs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnAppImageConfig.KernelSpecProperty, typing.Dict[builtins.str, typing.Any]]]]],
    file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnAppImageConfig.FileSystemConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ca51ca3546507d1ce51158d74b8fb17c6958c2747cd16f3b75aceb61d2159329(
    *,
    name: builtins.str,
    display_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ff2672f4d222b0d6bb376871aa42ac2f1c78c70d0a1aa2fd3f19e08fcbb07857(
    *,
    app_image_config_name: builtins.str,
    kernel_gateway_image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnAppImageConfig.KernelGatewayImageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2f03f5ccb1b2c4633c9ef3bee30e7429d047ef909520efe2cbcf88d12287682b(
    *,
    app_name: builtins.str,
    app_type: builtins.str,
    domain_id: builtins.str,
    user_profile_name: builtins.str,
    resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnApp.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5d17e8e1fa9515a89c3b89e14e1cbaa1aa86352b6f00eb195b7e040e28d143bb(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    git_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnCodeRepository.GitConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    code_repository_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bff270252b12354536e07e0adbb6a99f9803ad93f114f8583a39db978a69fa3f(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__53e09fd075ed3c77659648b585bc9171f99083a9e3158fb4475a8f9ca5cf3e0a(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c94bc452a10c6b523d42959d6fd417ef8250361ea0998ca3fe23777c0086fc7d(
    value: typing.Union[_IResolvable_da3f097b, CfnCodeRepository.GitConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4a0e39e1c2d26d01398986983ecd1ad412f11a1b0fcc8519842102d63b6f8dff(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0edc76fab76c0d705b0f03c8ebebadb42dab5a5dba0c022834796e6bd93720f2(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7219bf58b36a2496c01c604d8614f6ea1469c9ff3b2619516c61e8e994b4dbe1(
    *,
    repository_url: builtins.str,
    branch: typing.Optional[builtins.str] = None,
    secret_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c42ae1f0efe0811d1d204114356c2e0129a8f96e7aa17a0078217570e2903e4a(
    *,
    git_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnCodeRepository.GitConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    code_repository_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__738872af4917cc4a9c82bf05685c5bae3f1ac28542f97be97fe1f36cb1ba9f22(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    data_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    data_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    data_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    data_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f462bdc067fd44e78f92476e1454a553345a32c03985c226bd6553e4c637284a(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f21a6d8efc59d5475d29ea3eb6cb20caf535aef455944b20e340244406959398(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9d33a45fcf08092c0e108f025d8d4a4fc5872cb335e89ddc1f1c94f4d59bb502(
    value: typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__22c7862ad92959194cfe02be5360375cb1cd67676ced8e0d0b87e7822af6ebde(
    value: typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityJobInputProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6d029ecdfc6dcdfc0f1c62dff2897f3cb8d337d35dfcd0f36aa375a458bfcae9(
    value: typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringOutputConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__29ff9c2764c492630d1c5cc10ba5a43a5f0e949dfc7672232a6858b4fc679c55(
    value: typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.MonitoringResourcesProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9f4267c53b0d493df8356e7f07d5aa41c917ddcfb48583b5137a53da86f4c13(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fc8e3f65489594e046239891fcc106cf785fdad2448a7b413159063d4ec2baad(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2370e87925965d970102cac6226c13f49a0241b622030c01b2780bcb34a8ec19(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e482152aafd0979a35f29bc7cd47814ad3977ddb15a34b7c02c4b274ed8aea23(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5982fc49bfb59c2f83b476c77c84ae4a4e929f10dd2181018054a285dee2e87d(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.NetworkConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cf7fbe101220056322d4ff1986d7e71874aee8887d658ccaa569c5000edefac0(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDataQualityJobDefinition.StoppingConditionProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bee59ab0f88a182cfa91a2b70a5d9d409b799e89e1e3e7f2ae811159215b0c10(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1b75b7b728f069893458a7695ee7ac0853bd8e23efc061ecf9829ddbd3a6dbdd(
    *,
    data_captured_destination_s3_uri: builtins.str,
    dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DatasetFormatProperty, typing.Dict[builtins.str, typing.Any]]],
    local_path: builtins.str,
    exclude_features_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__441576a0f27acb41558fd46f071ce526510ec72480da00f75773b2a12013485c(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_size_in_gb: jsii.Number,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8248581daf5496221148b44514fed0064c1ab304d2086bed4146fdcb2aad1058(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6ee6b0eb617419663b4b8b32dff8e00b1f826734909bcd7b71edd3ae47218cec(
    *,
    header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__11ad7b07799b19e9d0c959ac5d51f2235fe7a36d54964df0e345ae8688d19922(
    *,
    image_uri: builtins.str,
    container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
    container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
    record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b3e1d4034764e8a8282c558559d3c93f2a5f23a1c1e5af323dec1e81a3e53562(
    *,
    baselining_job_name: typing.Optional[builtins.str] = None,
    constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.ConstraintsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.StatisticsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__544455777165b176b920249188ba86b340ed4f77e4675683ab1522af2f4badf1(
    *,
    batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.BatchTransformInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.EndpointInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__72b55db1656fb2bcc5633e486da62737a3f6d508f0d82b1ddd27a348b79b925b(
    *,
    csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.CsvProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.JsonProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__601305c78964ecde31263e255b74c778af52df31d8ef7cb4dd0eb2d3a6c28583(
    *,
    endpoint_name: builtins.str,
    local_path: builtins.str,
    exclude_features_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bbb228f2cc450802d77014c5761cf088476cfb96cca3c0ba2a6970015dab083b(
    *,
    line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__27ce8c4b0ff4f56b1642e027e445fa857c7e78618882f3465132c214aa3cefcd(
    *,
    monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringOutputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__69c3b9716a30dd2e2aa8080d1792409d731b5674fbcbefd12fc5bc52de21eb03(
    *,
    s3_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.S3OutputProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__11b009463e27499e4088d4a4ff3eb32ac79a74cb796077eccef622663c7e78e1(
    *,
    cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.ClusterConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__80502177a4e5c8957484568926e21dfce6f3cab0e6313a34ee6bafac1ac94de4(
    *,
    enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c76b13f2c22215a02261c3002c67bac19ddd708df4133a02db04cf014d82159e(
    *,
    local_path: builtins.str,
    s3_uri: builtins.str,
    s3_upload_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e66a7ef5687cec2b47261b154bc007b591d204014d7afbc2b5d0700f91efa565(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__080294505eaa0cfd3e651708dd9939428c82dd4a6df3e6ba24e70b042595bfc5(
    *,
    max_runtime_in_seconds: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9271b40223b97a4908066b16c9660259e46e7b1d4d693d3a2df71e4d8c31a21f(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9c5a27da69d6cdc76cfa83b348321ea97cb5023c0191ac16e8ba03f2ab76dac6(
    *,
    data_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    data_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    data_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    data_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.DataQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDataQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c3abcdef1d2ea64456171c0cbf08b0c16eae8b8d28f4815c6515aabe2e523270(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    device_fleet_name: builtins.str,
    device: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDevice.DeviceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6a8d3dc37aebc873d0aeea906ad87c927cdf82cf7e9a80e28d7b2195c636a2b4(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0506dad1f49196fefcbd13d570aff49c31dda0672510b37b43320d943cf268b7(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__946425d0a7da6f130191f8a0815402b1bda48bcc0627c7ed770b3d4f07198f79(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__76314385f9853a3bfe385c949d5b6a43dee2c54b479381ea9765bd304cba6476(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDevice.DeviceProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2d6f7f7a38eb4816071db5d533c111cb8649922632e188b4325a82dd00675042(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__43b40b55245978699774f9b5e56191c22e81a73552561f7190f32a80a2311431(
    *,
    device_name: builtins.str,
    description: typing.Optional[builtins.str] = None,
    iot_thing_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e5c11192822cf6a7274bcacd8c8147149a9111d09d2701f9547a16c89d2d2c06(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    device_fleet_name: builtins.str,
    output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDeviceFleet.EdgeOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    description: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3cb330fe6c6b70769b12318fb10174ed458f16ae84753429881454642514e4e9(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3d262d2dfa0a766b9ef88b7d0180a9a007a4589ca64179969667e5c835a27524(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dc1ebf19bb8d12d33f46194921833987903a772f1f8219286b1e902fb541b0a3(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7fc98ed95422b4cc9f6b42674ea7654ba952161c116c8516d593f0414b33cb81(
    value: typing.Union[_IResolvable_da3f097b, CfnDeviceFleet.EdgeOutputConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2032a1e19b80658a94b8bed07221ad9072ce3559dc064b8ec7b727b4080ed28a(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eeedc707895aa3002c706479748ee7820bd530fd99db1b35f3953bbe5c0681d5(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4f53f02381a9dd5e349f8db9586bd32761b8f0f1adab26fa442b152d97868e36(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1eb8f35c611515659c53b813c3fef2016ed31d467e5dfe3e9720e7ec96acc382(
    *,
    s3_output_location: builtins.str,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d2dc3d0951ad79f71353b3ad32783516a322539ca7717d79ffa74bab3f2b0300(
    *,
    device_fleet_name: builtins.str,
    output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDeviceFleet.EdgeOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    description: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__73e7f76537702c6066451ab74616be8106d0374344002438b8bafb5d35f7440e(
    *,
    device_fleet_name: builtins.str,
    device: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDevice.DeviceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6a98e719c58aab3299db52c4086bfb65ee6438882423af805478e9ea3fda998f(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    auth_mode: builtins.str,
    default_user_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
    domain_name: builtins.str,
    subnet_ids: typing.Sequence[builtins.str],
    vpc_id: builtins.str,
    app_network_access_type: typing.Optional[builtins.str] = None,
    app_security_group_management: typing.Optional[builtins.str] = None,
    default_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DefaultSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DomainSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__054b92073504f806c8065046fb755c4424b063db14ea01d662bf1a3799b913a9(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__27b8551bfeb2abb4c1faf2dad1939e476fbe0902c5876e849b3a2a2526fef410(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a67fdecfd1f892afa5b5efc44318f01b5d8286aec268d01fb468966f5a4710fb(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__14263bf0f3dae6b010cee5a9a7de240a41a79f8f655ed36f1444e579a936fc5d(
    value: typing.Union[_IResolvable_da3f097b, CfnDomain.UserSettingsProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__76d0ed31020f4eadd792cd5d7897939d99ef06ed557509d040b88b5f6e9cca9c(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6556642f81d027deb80da8cf42e945b715e6966790a8ab41e68da4acaaf3a9eb(
    value: typing.List[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e0aca1d756799cd6468a535127ee441605b164991ff11c6effe6c40c519ff5c0(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__66770e15c78955514aa53519369aa0389610ff7cbd94793f5ee385fb2c96a0cb(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dfaaa586058b1b8f2197fde6ee73bb9b0d7df2f79e82996c1d47c48d7c51b1c5(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f5d0e056a481e730ebed277f032ef13b3337668137169bd966cc3fc66b40464e(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DefaultSpaceSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a80dc18546bde6c82a5e78a8e60c044ce75c01a498f10fd5d6422d2fecfbbd61(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnDomain.DomainSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__705995dde312c66454de0b9e9f6a8d7e895beb5c34f61395d1dab1369dd40850(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6d1a70c209913231f1eb30dba814eb3a3bc58f6f4341ea1392c5061d8dbc8d51(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fc744bb58e49877db429fbdcea73e31d9e5326375463940bb48321473f97dfaa(
    *,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1ca7d1d6cdc42171e1cf7375238fa986babdf04453e194f3a1f0615c62b65fa1(
    *,
    repository_url: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__acb2194c11b5367f9afdacac546d8288c9357d3ca5f49b7d828264eb239b24c8(
    *,
    efs_file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.EFSFileSystemConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2406a28ab5a6558d6675669b44f0ae0fc98be5d4a9d0f1426d9e8ba1b3a2b623(
    *,
    app_image_config_name: builtins.str,
    image_name: builtins.str,
    image_version_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b89c0efcbc897595afb135954faed4acca8f58bad6b6be89e253973b9d9aeb4d(
    *,
    gid: jsii.Number,
    uid: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b52c119b99eae7bccd0ea69c20d2eb78b4e2a18d561fcfd418dff5adba549437(
    *,
    default_ebs_volume_size_in_gb: jsii.Number,
    maximum_ebs_volume_size_in_gb: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6f9de66f7050e50e98d4b4c96b379ab71681a650698564e825f452052572214f(
    *,
    execution_role: builtins.str,
    jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.JupyterServerAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.KernelGatewayAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__65b37e511dc3aca202a4950f1f8750ff3beb0c7745987fbeac5766d6635c681e(
    *,
    default_ebs_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DefaultEbsStorageSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b23323cc301476d59d77a279da88bfc3d14a3c21fb8709a0ecc6db6074a56cf9(
    *,
    r_studio_server_pro_domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.RStudioServerProDomainSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f58dbfc3d8dc294c7e7f3e4dbd80fef3d00950f110fa9f391ce587b6d1499684(
    *,
    file_system_id: builtins.str,
    file_system_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3cd086b89fbe936eaaa5fb775d9cbd0e29ad00fb21eb2a45265c217414f406d1(
    *,
    code_repositories: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CodeRepositoryProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__942897b920fdd808a5ea532138ac1b0df0fb1c9ddd37871604e65d095f882b59(
    *,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__976135962fc7c07e542fc30bab2304803e495b79c9c357ea5114ddc4b0dbb7ed(
    *,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ed9236f4ca80bc2b976cbd6c7f549652ec32a05dfb3665bd8630243e309c6276(
    *,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5bdad69d0d7dd9f412f84d21f9ef9cb6bb758f797a769d60e05dab58f67a85af(
    *,
    access_status: typing.Optional[builtins.str] = None,
    user_group: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a53076bef887f5d807ddb5491cbeabe991590efba7801d2aa8d981d6913eb70c(
    *,
    domain_execution_role_arn: builtins.str,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    r_studio_connect_url: typing.Optional[builtins.str] = None,
    r_studio_package_manager_url: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a15c1a8a4f296645dbaf164af882f41bb1cf89c7585a52dc9b76a9ade4b3f49a(
    *,
    instance_type: typing.Optional[builtins.str] = None,
    lifecycle_config_arn: typing.Optional[builtins.str] = None,
    sage_maker_image_arn: typing.Optional[builtins.str] = None,
    sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__548dd396dfd935cd647f2a1297e1f20836fc0ddc163c1659d63bbf9e9cf88849(
    *,
    notebook_output_option: typing.Optional[builtins.str] = None,
    s3_kms_key_id: typing.Optional[builtins.str] = None,
    s3_output_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__88423e90a647fb1fb625855a5ca5160b5e8125e664363a24f90939664cc2d507(
    *,
    execution_role: builtins.str,
    code_editor_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CodeEditorAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    custom_file_system_configs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CustomFileSystemConfigProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    custom_posix_user_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.CustomPosixUserConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    default_landing_uri: typing.Optional[builtins.str] = None,
    jupyter_lab_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.JupyterLabAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.JupyterServerAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.KernelGatewayAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    r_session_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.RSessionAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    r_studio_server_pro_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.RStudioServerProAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
    sharing_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.SharingSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    space_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DefaultSpaceStorageSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    studio_web_portal: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d70b90cbf9af0f3b53a18e5f11f7de868ef5fe3e6110bb229fd1350019f730e5(
    *,
    auth_mode: builtins.str,
    default_user_settings: typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]],
    domain_name: builtins.str,
    subnet_ids: typing.Sequence[builtins.str],
    vpc_id: builtins.str,
    app_network_access_type: typing.Optional[builtins.str] = None,
    app_security_group_management: typing.Optional[builtins.str] = None,
    default_space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DefaultSpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    domain_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnDomain.DomainSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__25a1b782521c912d49f8881f9136b81a31874db7423cbc69dd4d592308ab1637(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    endpoint_config_name: builtins.str,
    deployment_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.DeploymentConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_name: typing.Optional[builtins.str] = None,
    exclude_retained_variant_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.VariantPropertyProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    retain_all_variant_properties: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    retain_deployment_config: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__30e2eaf7ae1d65739ce7b332f2d2eaa983053d55ecf4081e243a2ac5f47961eb(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2f47dbdb18a90354facd890ea710422eaf2acd63bfcef2ca594f9c45be4c0741(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8fc46b5a4608391c5b023fa1800209955387c9abc04000465c1497a02ffcc73b(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__282ad840d284416c74cb1dec9d8585464ab2fdabef85c02a2157137e553d929d(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpoint.DeploymentConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ed57f464bb55b112eacf852ffafe64ee93beb0dd0f9a9c81cfed938f546e9413(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5ee6a8f5fa98cdfc488825acbd1978c8669d4e6de4cdb626a755c8b4462edb18(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpoint.VariantPropertyProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a449b8aec7663417625aba5613780daefbd54794f3fc085c8275ee15b03e0ddd(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__edaf654b3efad8522601d55dc70b1fbe91565b325788322fd32078ba331c7236(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a09ce1e0fbf50769fe1466ab68006be1481654b4884a0501ebd711c3f0d46435(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__545f901797973de76167553f39b693c4f1564abc9dfaeb5563cb8afd7917adb1(
    *,
    alarm_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d86e3846eb32ca90c0c7fbf8652bbfcc5f60c6360575c7f19bc7e9da7d2fe467(
    *,
    alarms: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.AlarmProperty, typing.Dict[builtins.str, typing.Any]]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d28be213bc658ab75fb13a94b106b4201e989c105915c39fb50705be12d37728(
    *,
    traffic_routing_configuration: typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.TrafficRoutingConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    maximum_execution_timeout_in_seconds: typing.Optional[jsii.Number] = None,
    termination_wait_in_seconds: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__620e1fd2701901a3771895d025a10da547bd6349c473e05ba7dd2b7c1ee9235b(
    *,
    type: builtins.str,
    value: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ef4fd0099485ae9d7fd2d7347509c94feea591075e4c9b0ec8f5dd9747851049(
    *,
    auto_rollback_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.AutoRollbackConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    blue_green_update_policy: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.BlueGreenUpdatePolicyProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    rolling_update_policy: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.RollingUpdatePolicyProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0d94ee607e8086635b8f00b305f4dbb6e2be8a4dfe79113facceefda72439b8c(
    *,
    maximum_batch_size: typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.CapacitySizeProperty, typing.Dict[builtins.str, typing.Any]]],
    wait_interval_in_seconds: jsii.Number,
    maximum_execution_timeout_in_seconds: typing.Optional[jsii.Number] = None,
    rollback_maximum_batch_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.CapacitySizeProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ed93bec369cf789d2763e6fe66be5df767a5c5c4c898134732efbeb60fd121ee(
    *,
    type: builtins.str,
    canary_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.CapacitySizeProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    linear_step_size: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.CapacitySizeProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    wait_interval_in_seconds: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a64f8f48a2b5af883cfc2cd98614bb5fc82a1ad9e9bad182f015286151da4d68(
    *,
    variant_property_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d5ec3761393d0c2344de58784b3017f7e1498d65c80ca0e29094c617103903e4(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    production_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]],
    async_inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    data_capture_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.DataCaptureConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    endpoint_config_name: typing.Optional[builtins.str] = None,
    execution_role_arn: typing.Optional[builtins.str] = None,
    explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ExplainerConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    shadow_production_variants: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b2d94310d95f958331f33f530628190b1b0cb9f396a80c916a18ff5d4f37f1b4(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0d017ceb78f627a4d082938a9d00f60606064212462ecc172f2732ca4cfecf4e(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bfd9dbaba28aed3cd83027875322f2cbb70f3fea264bd0ad0c78e962c341e3e9(
    value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3d66437c5253334608419691e2755c084d9f098a57fe7460e997e14374a4394b(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.AsyncInferenceConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__13ddfd0a291efa4705835c0f8adb807852e0c61e1bcff1144556e06335ac7f46(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.DataCaptureConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b84b130678c86998100d841aba59b69e7249ee09f47b89e205eddb9f70d59cd6(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c1e35e22547536b5f3a9420b1327dcc09512d00f5a6fcb7050fb847aef3cc7e2(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__581dfd37743e4c2af9ac0f0eecf04a51838a2258349beb74cea64c57f10c1b56(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1f3348af00a67f21513de8698151acf7998ee647db8a9740c9d0d51eb170a4fa(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ExplainerConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1feedfcd01ce7ecf1fca052ce76bf378f4ce268fabd561d3ec301f697053426d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__364e8e55ae8c7122cb952ab736c20798058ad6defc1088f9d91757193a806d68(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.ProductionVariantProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a87b0cdee3111cac9d994b2db39e4afee50e739e8856c202cbae175391893dd6(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b56879c446ab33e312f91778c0221db7735c2aed701c929318efc4707ff5c69f(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnEndpointConfig.VpcConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3dee0d44cdca5f0d19568fbd2782436822015939f8aeb568463590b55f41cfe6(
    *,
    max_concurrent_invocations_per_instance: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9d6279f6f1637a7f063e020863fb6143db719f071239eaff4a14abcffa4e236c(
    *,
    output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    client_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceClientConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__78f6f560c2b90941cc4af6490a3ab4a8382e19112589f81c2bff6e63dfa574bb(
    *,
    error_topic: typing.Optional[builtins.str] = None,
    include_inference_response_in: typing.Optional[typing.Sequence[builtins.str]] = None,
    success_topic: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c3ae80c64de4a57385622840864bf472efd012f72363c8a905b70c436e071533(
    *,
    kms_key_id: typing.Optional[builtins.str] = None,
    notification_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceNotificationConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    s3_failure_path: typing.Optional[builtins.str] = None,
    s3_output_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8f365f85e452b00846d8dd4987370795343fee0c95178a92e6cb69c5d32bba4e(
    *,
    csv_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    json_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__025dde0eee27b1ccd2ed0364dddac7611f70b70c09602593590e4a1cc7047b37(
    *,
    capture_mode: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__558fc059462816c0491f464603da3fabbd56effd8ec81519187f942727b6f280(
    *,
    shap_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ClarifyShapConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    enable_explanations: typing.Optional[builtins.str] = None,
    inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ClarifyInferenceConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__219c4bc4be82ae8b985455b761775c8949e24bde8f8339359c77ac29849deaa3(
    *,
    content_template: typing.Optional[builtins.str] = None,
    feature_headers: typing.Optional[typing.Sequence[builtins.str]] = None,
    features_attribute: typing.Optional[builtins.str] = None,
    feature_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    label_attribute: typing.Optional[builtins.str] = None,
    label_headers: typing.Optional[typing.Sequence[builtins.str]] = None,
    label_index: typing.Optional[jsii.Number] = None,
    max_payload_in_mb: typing.Optional[jsii.Number] = None,
    max_record_count: typing.Optional[jsii.Number] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    probability_index: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cdc07b2ae81ca067b669ad8eee10c233a84cec6816b6e1eaeb4a3c9022fb49f4(
    *,
    mime_type: typing.Optional[builtins.str] = None,
    shap_baseline: typing.Optional[builtins.str] = None,
    shap_baseline_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d13ff204bac34e66abda71c300286f5367bc3e95b80ce1f5be250f0fd508e677(
    *,
    shap_baseline_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ClarifyShapBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    number_of_samples: typing.Optional[jsii.Number] = None,
    seed: typing.Optional[jsii.Number] = None,
    text_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ClarifyTextConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    use_logit: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bb02c2885c5605c12d9e5b35849a33c20ae5db4791746707dc4165477061ed2d(
    *,
    granularity: builtins.str,
    language: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5f66371a559ba65ff125b2321cd8b6a93386ca97a2bbac0b89139668121914bb(
    *,
    capture_options: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.CaptureOptionProperty, typing.Dict[builtins.str, typing.Any]]]]],
    destination_s3_uri: builtins.str,
    initial_sampling_percentage: jsii.Number,
    capture_content_type_header: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.CaptureContentTypeHeaderProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    enable_capture: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bca400d67b7e0b7493acf5a52ff4165f4d522d876c087e0e3b8c804a10c9e4e5(
    *,
    clarify_explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ClarifyExplainerConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__46cb311c857cc447bc44e0db8728dd4118d07da4d442a846a68ff8c75a4c5e62(
    *,
    max_instance_count: typing.Optional[jsii.Number] = None,
    min_instance_count: typing.Optional[jsii.Number] = None,
    status: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__685c22aefe4bd12e237f4e6f239c6de7809e228c81d2604127d6824fa36dee01(
    *,
    variant_name: builtins.str,
    accelerator_type: typing.Optional[builtins.str] = None,
    container_startup_health_check_timeout_in_seconds: typing.Optional[jsii.Number] = None,
    enable_ssm_access: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    initial_instance_count: typing.Optional[jsii.Number] = None,
    initial_variant_weight: typing.Optional[jsii.Number] = None,
    instance_type: typing.Optional[builtins.str] = None,
    managed_instance_scaling: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ManagedInstanceScalingProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_data_download_timeout_in_seconds: typing.Optional[jsii.Number] = None,
    model_name: typing.Optional[builtins.str] = None,
    routing_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.RoutingConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    serverless_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ServerlessConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    volume_size_in_gb: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__41a70a45b46693d52cb9cc5fc85772297ca38491c9ce53c7e06d6304a7c4f1e0(
    *,
    routing_strategy: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__106fe363b377b1cd93971d0e7e50c104cd6274d6f8c54c71faa17da1c784753b(
    *,
    max_concurrency: jsii.Number,
    memory_size_in_mb: jsii.Number,
    provisioned_concurrency: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1c6a09f61bc385349b0211430cceb3d842e9c43b8196ce0da566274f27b2a59e(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__78ef2b9ddede793caaf7b19d01bb59252a5dbfeb2526319f7e6ad617b37c5814(
    *,
    production_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]],
    async_inference_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.AsyncInferenceConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    data_capture_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.DataCaptureConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    endpoint_config_name: typing.Optional[builtins.str] = None,
    execution_role_arn: typing.Optional[builtins.str] = None,
    explainer_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ExplainerConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    shadow_production_variants: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.ProductionVariantProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpointConfig.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__52a2e56834295c61b7da5a9bf2f08a781f50e70d1e6a1452ded8f8b0cc1245c1(
    *,
    endpoint_config_name: builtins.str,
    deployment_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.DeploymentConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_name: typing.Optional[builtins.str] = None,
    exclude_retained_variant_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnEndpoint.VariantPropertyProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    retain_all_variant_properties: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    retain_deployment_config: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4102c01580236aeaa8183dc09f0ab2d908ee3b4650df43ce2419ef038f864258(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    event_time_feature_name: builtins.str,
    feature_definitions: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.FeatureDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]],
    feature_group_name: builtins.str,
    record_identifier_feature_name: builtins.str,
    description: typing.Optional[builtins.str] = None,
    offline_store_config: typing.Any = None,
    online_store_config: typing.Any = None,
    role_arn: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    throughput_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.ThroughputConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0cd6259820b736e87a6da7d27e2e1e1a14b614640e31da0fcb54668a45db785f(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4377922dbd7c3d2d8d521bce16c0e6ef23d2e76a3cd1823cfe6bb698934e9794(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8adfc53ff0bc63839afe55973c1f5c8873bebb52fb98328b9839255298b674b9(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__554ed28625ccedc71ce244f01f302b22d68e2b9ad204918f91e7f3fd85527e61(
    value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.FeatureDefinitionProperty]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d6f4169fe264f570e3e6859737b587e566b9716d614cf3a24902f6b04cde8b93(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b78873bd7aeb067f399e0d34bbfcead148ee8cd93f599510cd64c6e738908832(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2b3eb81281cd3d68bb6a0b5a3ea79863153df71f1420743d27c3d773a2fd6c98(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__35a3cd1a7f2eeb38ecbdecb8d787b667dd2fb89f595b3887438fb9c49ebe2125(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36874ea58589f290874ec1f6e4483a6eaf3b42f76d17dd0b2c0aa81106ea1710(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dd4c4dc86f0dd4d52ceac67d70b2ea2229a255079338500d2261a011ff1b32ee(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d8168817a8eaecafae45794cccbd827fb5a8ecca77d875940f9f6a69e039d7b6(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__af00a14f14915d9468127ac75d20463075f7aef1c7623208e6c755ca9f7feba2(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnFeatureGroup.ThroughputConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4caa5f76e9359d50b237d02f2288070020184465e320800c861a60749c9be45b(
    *,
    catalog: builtins.str,
    database: builtins.str,
    table_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__04848822e3ad8782bf48bda17c952f5ed10b1558aac29dcca56aa3c21c34f2a1(
    *,
    feature_name: builtins.str,
    feature_type: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2f29e7edde4b24306bda02357db072f0b29e6110817a4c588bd3c02734019d42(
    *,
    s3_storage_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.S3StorageConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    data_catalog_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.DataCatalogConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    disable_glue_table_creation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    table_format: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4068ec17c64be821371cb37a174b97e325a38220882aa92f5b086d22af6c9c9b(
    *,
    enable_online_store: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.OnlineStoreSecurityConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    storage_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9ba97e020f46b5d443fb0f7a2b65107dfb083e44bf5c9573eb5b040837128996(
    *,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4deea26cb2dc59d1dedd4813cf07b36e4bf8da5eff8446a0b746de73938917fc(
    *,
    s3_uri: builtins.str,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6d458f28019d4b4a6f2a06acd0db6858b60dffb2d229940dd18dcb6dd4e010a3(
    *,
    throughput_mode: builtins.str,
    provisioned_read_capacity_units: typing.Optional[jsii.Number] = None,
    provisioned_write_capacity_units: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bb1e9da53f754dd8978f06cdc95c9101b0ef89f3b1a689ab0a1e92eacd0a0951(
    *,
    event_time_feature_name: builtins.str,
    feature_definitions: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.FeatureDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]],
    feature_group_name: builtins.str,
    record_identifier_feature_name: builtins.str,
    description: typing.Optional[builtins.str] = None,
    offline_store_config: typing.Any = None,
    online_store_config: typing.Any = None,
    role_arn: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    throughput_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnFeatureGroup.ThroughputConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dde982bdab4dea21946725303bd84c1eb61267733b6351eb23c00f7d036f6966(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    image_name: builtins.str,
    image_role_arn: builtins.str,
    image_description: typing.Optional[builtins.str] = None,
    image_display_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3683228322bbbd09cb4aac0a4469f1685a49afb4d71c553abbab272eaef100dc(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4230003faeb71eb706948f19ec046a12d72b36d81d5e22c11bcc3b1ebe02c2c0(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c83dda1eec4dea7e586e14528740a9a908c8dc9cfdfaa25322bcb6254256fe95(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f4cb3cf1a068192a3c85d41bfd4e7865613f5eaad72e81e906ea09806af1a6a2(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d98fb90f3bdd23e0a7e2f8f7f3b5da1a34a2efdfb7989565b70a598777d1d2e9(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9507742917d9e396f824e9318497084f8ae68b4ebb9daa0f6845e96629a78a4d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cc08ec4a8b34363d9c0cf6afe34c04e17ea65e896db8f146c6a6a1ba5a120bb1(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dc32c041f4bbebc30466bd7f70f1571b2e2a1def5e8e2166caa2d830a35fe8e8(
    *,
    image_name: builtins.str,
    image_role_arn: builtins.str,
    image_description: typing.Optional[builtins.str] = None,
    image_display_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1ad8c361f2876657ea1cf0f0f9f7356de06575f95ad80d7a587da19094ecd39f(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    base_image: builtins.str,
    image_name: builtins.str,
    alias: typing.Optional[builtins.str] = None,
    aliases: typing.Optional[typing.Sequence[builtins.str]] = None,
    horovod: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    job_type: typing.Optional[builtins.str] = None,
    ml_framework: typing.Optional[builtins.str] = None,
    processor: typing.Optional[builtins.str] = None,
    programming_lang: typing.Optional[builtins.str] = None,
    release_notes: typing.Optional[builtins.str] = None,
    vendor_guidance: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d5617eaff0fc7e0099928623a36e2b9f1458a37ad9fe1fa24bd54f054ebffae4(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0c4bc42175535dc7e1f18100775e38634217828944c7afb9a921d5d4ded34609(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4cd7f0125c670f13843a82d4765f1707e53ed79633a107bc8f478ee89f7c4447(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__32397b68bd7477c88dd5aca2fab6262902fec8c5be04520516af969354dc3411(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__130335aafd8604a37bb0c6378189d323e11f1c9a8d9de59d6826369f2086fb54(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1b53841ef8f974620a34f1089ddd34dab945dc1cfc6214ff5c96805c28fee339(
    value: typing.Optional[typing.List[builtins.str]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__63b740d348bf3bc8f512963928cc212f67fef7490d5bc60dbf44641d8a8bba80(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4325909e50b32e3c971c803ff8d527558eaf27440a7e1eecd39347ec829edf7e(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__81d68f0650f7bba3ce23357345acab3a7f8c2473cb1f04dd8ec3718f4ad3f061(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__51796dc1c41721e2403c8fcaf57981fc62e4d27583b46f696048e71c11c42217(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__558e00760dafdf270030f6c74f7af644a9073b029f802c09baf4ca45a0f96579(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fdda2091c290a3c94f3594803b8ff7d3846931cb6976f4fbe76584d69581fac1(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5382fea0d28fb1b1a6c04307334e93f65dd93058c962443126e5776048b93ac6(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eb1cf2f49fa3a5bb0e6e9fdd2097a7a9401edb65fabfda045235c1b04b02fbf1(
    *,
    base_image: builtins.str,
    image_name: builtins.str,
    alias: typing.Optional[builtins.str] = None,
    aliases: typing.Optional[typing.Sequence[builtins.str]] = None,
    horovod: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    job_type: typing.Optional[builtins.str] = None,
    ml_framework: typing.Optional[builtins.str] = None,
    processor: typing.Optional[builtins.str] = None,
    programming_lang: typing.Optional[builtins.str] = None,
    release_notes: typing.Optional[builtins.str] = None,
    vendor_guidance: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3f4e5766b29b94468be54bb573abdb408c06e9ece9272100939b3c0180556e58(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    endpoint_name: builtins.str,
    runtime_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentRuntimeConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    variant_name: builtins.str,
    endpoint_arn: typing.Optional[builtins.str] = None,
    inference_component_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b1229b87a01037ac1a39fba400729787882a0e5da916a89f8f2d664594cf6695(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ea8877be2acff923e7ef08e1efa4d1f02452a154b43e2e34180d83113e4cb35a(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b5da5a7b9146494fb112ee7d607f46334dc3051d93d50b77735f62bdd6ca326a(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4e7c351a25e5bcfa57adb1a6effe98407a73bd29e017ee9e9dea5d09a2106d9c(
    value: typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentRuntimeConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0adfcd5be0b7e042e0a87c6ccfbe4b53fc4803e5b7da8ad8951b7875f1bc187d(
    value: typing.Union[_IResolvable_da3f097b, CfnInferenceComponent.InferenceComponentSpecificationProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ca03af9ff83216f8a0636af33c0e4a7a2eb600513b2eed7eb75f082151eb70e5(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6177c630f46f5680f400bfc08061f6f7a9f5f1e1736976ebe24194a8378cbb9c(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3472a30311d416ad067afa5672326f2c73cf974625b4aa6be0907db35a5a4bac(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__01670e9b8687fbb8bb10369a12d0d3b7f4aba931c3ce72496c12f3a81c2890f4(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c27834d414a93bc1a61027191b0a24b7e6f65578d28266dfd21a6ed1a5a85ee1(
    *,
    resolution_time: typing.Optional[builtins.str] = None,
    resolved_image: typing.Optional[builtins.str] = None,
    specified_image: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c434e562757acaaae52cb6bda4572fad68492cf9a55f32d82b5e11d8f3897a91(
    *,
    max_memory_required_in_mb: typing.Optional[jsii.Number] = None,
    min_memory_required_in_mb: typing.Optional[jsii.Number] = None,
    number_of_accelerator_devices_required: typing.Optional[jsii.Number] = None,
    number_of_cpu_cores_required: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f5aed592935acb4ecc3dffe218101a8b9053d16d99e4a24219409fd2bd906fec(
    *,
    artifact_url: typing.Optional[builtins.str] = None,
    deployed_image: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.DeployedImageProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    image: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__63c5c7c37d4a557d84dc45694cd00ae845f319a810bc817c50db41e7d063109f(
    *,
    copy_count: typing.Optional[jsii.Number] = None,
    current_copy_count: typing.Optional[jsii.Number] = None,
    desired_copy_count: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6a0b62210860358f55c428526365b9cb1755209df1a27a1d8b73278ffe9fe251(
    *,
    compute_resource_requirements: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentComputeResourceRequirementsProperty, typing.Dict[builtins.str, typing.Any]]],
    container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentContainerSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_name: typing.Optional[builtins.str] = None,
    startup_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentStartupParametersProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__51a3a32a227ed8c98901c9a701372df1d229c6ff59152c6bdae0644d1cdd4dea(
    *,
    container_startup_health_check_timeout_in_seconds: typing.Optional[jsii.Number] = None,
    model_data_download_timeout_in_seconds: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3926edf39d044760bb8195e9466dfa81ab70056fcc1e3a9053c6c3d90bcaaafa(
    *,
    endpoint_name: builtins.str,
    runtime_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentRuntimeConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceComponent.InferenceComponentSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    variant_name: builtins.str,
    endpoint_arn: typing.Optional[builtins.str] = None,
    inference_component_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__43a6aafd6835d00baa8d211b8e504c33f5e79820719546466a90ba8ccba23e8b(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    endpoint_name: builtins.str,
    model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ModelVariantConfigProperty, typing.Dict[builtins.str, typing.Any]]]]],
    name: builtins.str,
    role_arn: builtins.str,
    type: builtins.str,
    data_storage_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.DataStorageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    description: typing.Optional[builtins.str] = None,
    desired_state: typing.Optional[builtins.str] = None,
    kms_key: typing.Optional[builtins.str] = None,
    schedule: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.InferenceExperimentScheduleProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    shadow_mode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ShadowModeConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    status_reason: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0429293b59a464f1c87e050fd5de3a0f1283acf5234761acc40dd9a0c1529ec6(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5d5462c366a245602783769db7714995b6576c73554805c7d6edbb2f89fa9c82(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2c4337f067fc258ce16c34b1da89725682a5cf8ff9f6a2ddd422b9f89840ee1a(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d41f9ab792b0ee24b059dd0c689f265f2cc5451883b9558031beef50d938eb62(
    value: typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ModelVariantConfigProperty]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__043744ee899f8ec5bbdbd1fbc6d8774cadd21db45111864f5c8ead306bb7b595(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d34c11a8c1a2565fd1bd312899edca7a17ece1ab4a263f6b77d6495463d16160(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__85a5c60f39e6ced69371734777bf1a7f5120ae90108f9878242836df2968b2cf(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4ca53dbe0cab6482d1059c1abb3716bae126aa7390eed3feb2786f3f26ec1f3a(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.DataStorageConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9675a0ad932dd544645220c342877b3a50604bc4af74f4945f49c0c1fa4bf9c(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__560c4e84471ced1b1564fbafbcde81a7c5199b6ab923155b20dfb4ffa055319a(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__73ae7d64f9f9a718610ce8ac197a5da229e70b8d0dc49ef88b25fe0fd5c376d4(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ed6b54d3ee809b6078311472039cded4bd4bb4c3baf96c59e62c310c5ff476ab(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.InferenceExperimentScheduleProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__67f5007da506049c6e4d9db3b50bf4f19e91b2ec2cdc034cd3d9bf82d7c9d8f4(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnInferenceExperiment.ShadowModeConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dfebdc6aced204f5eadb3a382298b795ce8fc92befce5a9dcf2c97d6291e404e(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e59016137af4c7b38305436a8dc15ee374c4184401c0e8a57c663b9df5898f81(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7c0b271d1582078e305c84d489e11f37be3e2b7ef6c6198b16bdde2fd43eb6f4(
    *,
    csv_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    json_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4bb25738a9eaaf2cf105bc471ef7ba191fa9e7b1befb0d87ec8f0b7c0bbf555b(
    *,
    destination: builtins.str,
    content_type: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.CaptureContentTypeHeaderProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__584b8c3e18059227ecc04adc07f8c677504691a10ba94105216fb343fc851d8c(
    *,
    endpoint_name: builtins.str,
    endpoint_config_name: typing.Optional[builtins.str] = None,
    endpoint_status: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__acbe5d91e9d98b2305f92faad4290867d7222976052ee9514438e22424c987af(
    *,
    end_time: typing.Optional[builtins.str] = None,
    start_time: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4b18fe8646349bdc2b21a39c725771f5758341e2b9462bbc2fa2551d36678833(
    *,
    infrastructure_type: builtins.str,
    real_time_inference_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.RealTimeInferenceConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d3c170d8faf15db2d5807c2ae41d4a468de1df8e8a19c9c6caabe6d26f370a21(
    *,
    infrastructure_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ModelInfrastructureConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    model_name: builtins.str,
    variant_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ee618762d941d57c3de8cc9c6f383b82dea89ef9cf39ca6466ee5a46c80b81a0(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3f291b4e09d5ffc820332818871f4802d2b8177cb6cb21d9e46fa42b37419994(
    *,
    shadow_model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ShadowModelVariantConfigProperty, typing.Dict[builtins.str, typing.Any]]]]],
    source_model_variant_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b71dfceba1d10e6ee264fc7af67e8ae144ee546f86d6a0ff6ceaacdfde0a8cc8(
    *,
    sampling_percentage: jsii.Number,
    shadow_model_variant_name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__92df73cfaf86dc9fd85986305f2cf4611dafd4cb962187062714c75ad4d36821(
    *,
    endpoint_name: builtins.str,
    model_variants: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ModelVariantConfigProperty, typing.Dict[builtins.str, typing.Any]]]]],
    name: builtins.str,
    role_arn: builtins.str,
    type: builtins.str,
    data_storage_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.DataStorageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    description: typing.Optional[builtins.str] = None,
    desired_state: typing.Optional[builtins.str] = None,
    kms_key: typing.Optional[builtins.str] = None,
    schedule: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.InferenceExperimentScheduleProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    shadow_mode_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnInferenceExperiment.ShadowModeConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    status_reason: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7038463d0628899b9eb5e6fe2ba453464478eaae99d07015ffbcc79b06d20df5(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    containers: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    execution_role_arn: typing.Optional[builtins.str] = None,
    inference_execution_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.InferenceExecutionConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_name: typing.Optional[builtins.str] = None,
    primary_container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b84351be1922488ac80002fe5ddee12b876da8414660edea4a2934f89467ec19(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__913c78dc3229ce748ffe616b0a4e27dde623fb940a9aba6e71ddfad962b6cf1a(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b01e1f19c42cd636e28c12960d0033c49437123645a888dfe9632b05f82d3e13(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__53bc631344d4b4e3c59054cff75e57ec89c85f75caf719e0dab16fcd8afd0466(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f9245e519b65722c82aa989675ac43fc87cf93b2550317f4eaf7e13a9664cc7f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c2442385f951a1cbcea2aa75bc2ac67e569b8dacf083ebcdbaaf36da6d71e1c9(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.InferenceExecutionConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4e4e3295bb42e97b1b076108d30037b03bceb1ed3a175c334b83e248865661f3(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7dd8585adfcdbc3db9b90e6fbfbd279c2c8f241c64f52a3aadf8294bb116c781(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.ContainerDefinitionProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5ff0e0d742056f0edcdcec2eb2ecbf5b6002bd7ae5ba77434b6daf6daae8923d(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9cfac637d2a98c4124bfa455969a4e620103bd5e25811264e2ba7b637cc9bf8e(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModel.VpcConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__996935212d254956134eaeb4bf5a82a497d061b5ef4b632b3d9d05c75d492918(
    *,
    container_hostname: typing.Optional[builtins.str] = None,
    environment: typing.Any = None,
    image: typing.Optional[builtins.str] = None,
    image_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ImageConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    inference_specification_name: typing.Optional[builtins.str] = None,
    mode: typing.Optional[builtins.str] = None,
    model_data_source: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ModelDataSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_data_url: typing.Optional[builtins.str] = None,
    model_package_name: typing.Optional[builtins.str] = None,
    multi_model_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.MultiModelConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__180270b1ba7df71db873af487e12d74fe699c3086d4da3480de69fa5d9547097(
    *,
    repository_access_mode: builtins.str,
    repository_auth_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.RepositoryAuthConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__de83cd55ed4b1fc85f299ed9d65fccedbf91ee1227e57cfa7bf733eec8cc7555(
    *,
    mode: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__054248bc5f3f029699d9ba6431865466995797b77aa5323b0009b8593a6a4be3(
    *,
    accept_eula: typing.Union[builtins.bool, _IResolvable_da3f097b],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a2b9ae36f864a8bc684522004675e5402e3a032e13cae5ba270a0a08a2f51c71(
    *,
    s3_data_source: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.S3DataSourceProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eec04cb7e26e6c993c6789df684dc23c1794f95642a9b7de5423825e8f44827c(
    *,
    model_cache_setting: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__055d3a2d4cf2da6731af22ce760741f05ab6fab49696f9fc65c093a2dfc0571c(
    *,
    repository_credentials_provider_arn: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b8f37eb3244bd29202b465b6cd69e8e427a2946e3c4d2d1093fb60182e2ea3a5(
    *,
    compression_type: builtins.str,
    s3_data_type: builtins.str,
    s3_uri: builtins.str,
    model_access_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ModelAccessConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__55eaa95aa90ad4b6999e4006738b0d40057c7530e2df3a661a4d6d9ea9b26c3f(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5872e9629433c78a4806d9db53eb11d5daed20c7d3e8e4499c965f5459e8a0da(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_bias_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__30a2c6f0c977388e724ac91b9243f8c00987aa5ad7e25fb19c61839812145ebc(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__61b39aa70eee6ad364d2a9532cb7f6e9f3c54be8261f5f3b42ea9eb4c31abce4(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d4d25577671ac14fc2077caea7b095d699090f94839ed53d13e4875c34c6ba13(
    value: typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringResourcesProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f4a90b0ccee1791598d39d418f1a3314cd5d1b8bea523ee7a5f1ba04e697d49f(
    value: typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f7d7745ade63f1d91e760582259714ed75129cdf07dc3a2aef1c8453e1c31be2(
    value: typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasJobInputProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ca83e265312887bf91d708a9c2063355e1f575cfe903547ec38487020a048b89(
    value: typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.MonitoringOutputConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fff9bf6880fe445d4f4aee27a35e15071953a8ce117ebd3abf182497a61a9967(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9e49ca89381d4cd706696ca645f36f1e966bbee42f50fa589af0f2bcd121f117(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__50c53d48b8ba4b9bb17a0c41365c39ed717b163631f50f1837e6abba7069e579(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__564f3203a07a362273c689d273521691f57b7fe7e19b5cdfac97df3e45677ba7(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0e0f168d3853b9bdc566efd8f97da806d03d1518937caf92cd43447ff5e2e6ae(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.NetworkConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c8b9812c4f147c20439686b5bacf9867f679c51edd630c77d87d65d5ab33b4d7(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelBiasJobDefinition.StoppingConditionProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__28deb0afb71e18327b8a1781eae28f1be20a347976d63e9fa12cc725a24045c1(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__095e1c4ad30edfe45e06a2be3f2d81470123016adae4473fa83adb32923cd5b6(
    *,
    data_captured_destination_s3_uri: builtins.str,
    dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.DatasetFormatProperty, typing.Dict[builtins.str, typing.Any]]],
    local_path: builtins.str,
    end_time_offset: typing.Optional[builtins.str] = None,
    features_attribute: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    probability_threshold_attribute: typing.Optional[jsii.Number] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
    start_time_offset: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7b8869dfe33d807dbf7cfd7e3dc13f6b26b3f5e0e5682b9dc2811f4ede94462a(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_size_in_gb: jsii.Number,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__943ebfed01717dd008a0d1e2960fc1ce2d35b1748556502d98427a764b53750f(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ad7b9ec14afd894dc6cae82e572b09369f7dbf4f6dcc8847e5dea58a0bd8340c(
    *,
    header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36892a7975b64582ee5f88a49643cfe6219c5efea35fb7613c7dd08e9b2eaad0(
    *,
    csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.CsvProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.JsonProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f1f8abf8437ab2ecf1d7e91d0e0eef66b0b92d6eb75e4e47d89f5119da394e82(
    *,
    endpoint_name: builtins.str,
    local_path: builtins.str,
    end_time_offset: typing.Optional[builtins.str] = None,
    features_attribute: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    probability_threshold_attribute: typing.Optional[jsii.Number] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
    start_time_offset: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__108ddba994e973d46709c36ee036ed088e10ebd2bafb950e49da9971b9bd4478(
    *,
    line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1f01cf0d16de54b691554f90fc0164a32bb034cb11f48e1da830de2f9a3cf5a6(
    *,
    config_uri: builtins.str,
    image_uri: builtins.str,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__823e6e415f7639c7c7afbfb8814917a4e2e40c50c66bdfe3ac97ca0bc30cc5d3(
    *,
    baselining_job_name: typing.Optional[builtins.str] = None,
    constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ConstraintsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2ffcf5c6155bcd42245ba3b4be18afbff8648089a8d444f8113b04cbaae873b1(
    *,
    ground_truth_s3_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringGroundTruthS3InputProperty, typing.Dict[builtins.str, typing.Any]]],
    batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.BatchTransformInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.EndpointInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__157af7a127a3b0073068813c099aca200305bbf786f887277a81dd44b8ccb7be(
    *,
    s3_uri: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__66d2a40f96e7c82ca2e00fe803e1af79eb9f014c8e2eaaf048e5f919855e60b8(
    *,
    monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringOutputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__26779aa7e6b94222b25d88996befe67774fd9e96c31cf9ab4b970012ad11c0bd(
    *,
    s3_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.S3OutputProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d366eab1f33057db8e52fa7f9a947a4c33d5d1a88ebc1f70e0b42ddf22fdd665(
    *,
    cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ClusterConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__387cd4dbb8879c27437d3607adf4bc4d6cb6faeb7264e9eb78f046cd461f5447(
    *,
    enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__50955362eff017f76ac61a86f28afca2e07257ac507029f9cf344292c30cc690(
    *,
    local_path: builtins.str,
    s3_uri: builtins.str,
    s3_upload_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2ab64963f895d7d98e730686e981f063bb28b958ec4593026768864d8df0709b(
    *,
    max_runtime_in_seconds: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__041672cbe0536137cc10cb4921c5ada479006d91889f53efb9ed3bc4d57f8ca2(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3161ba72dcb53b69d61217bc71ca77ee8b6119cd05c9055b38545e88d3f6f6b6(
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_bias_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_bias_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.ModelBiasBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelBiasJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a592fe664bd5fc9b01b1e64fc0f6cea3e28e6bcee51c6b1db5790b4854661b17(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    content: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ContentProperty, typing.Dict[builtins.str, typing.Any]]],
    model_card_name: builtins.str,
    model_card_status: builtins.str,
    created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    last_modified_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.SecurityConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3a1a3799b007a1226f7f69a3ae5033dd02cabd7734d75bf1f0b2f0945e26ad6e(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f553be99ffe4257f9cb4a7f1b60bc1b90090306760fcbca6966d067686781764(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6312b1e45b9cd115d8d68dc4f0a7a5ba993555ace7bf2658c7bdb9d31af3b066(
    value: typing.Union[_IResolvable_da3f097b, CfnModelCard.ContentProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__35b92fd0a88edd62589b1ac3231631690a1025b09fa71eda09f8fb912e29bbb8(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9ccc5c6c973f86f30180b2e7f8af4bb35118c6878fb5ee58dd4ce7f30713c6fd(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3200edebb36cb29038567788eb869413a6087864c22db112f4e396c0347e23d5(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__980c80444f032b41b916e012ba6410d56d5b5f6ffbae3ba3ac29416576d8c48b(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.UserContextProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cd3e6b98665d602c4bc065357e599386796abc8ca8388dee986b130a4e6537c3(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelCard.SecurityConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__21ba0d4cc0226b207bf2ec8b60d2dec29d0e16f53ed13490a4eadd31adbf4717(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bdc804b35b707b6b83db59dd5856c727f91c3eaf822ead69849965c8d835fb16(
    *,
    caveats_and_recommendations: typing.Optional[builtins.str] = None,
    custom_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    ethical_considerations: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9648d55d580d4da7524caf1b1d303ad1894db6b202cb07f245c4a41363fae4b(
    *,
    business_problem: typing.Optional[builtins.str] = None,
    business_stakeholders: typing.Optional[builtins.str] = None,
    line_of_business: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__33e54e364df9af6954c3dcbfdce9460667559b7475acfc5fd430e99e93216bb9(
    *,
    image: builtins.str,
    model_data_url: typing.Optional[builtins.str] = None,
    nearest_model_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2bdf1111a719ae9856d556b646aa8ed25948001df09f5d13ffdfa66d2c045e8a(
    *,
    additional_information: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.AdditionalInformationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    business_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.BusinessDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    evaluation_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.EvaluationDetailProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    intended_uses: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.IntendedUsesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_overview: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ModelOverviewProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_package_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ModelPackageDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    training_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__aea006f10e4b9e47fd972d6bbaf6414142d5740197c53c1291d43731d253b3df(
    *,
    name: builtins.str,
    datasets: typing.Optional[typing.Sequence[builtins.str]] = None,
    evaluation_job_arn: typing.Optional[builtins.str] = None,
    evaluation_observation: typing.Optional[builtins.str] = None,
    metadata: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    metric_groups: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.MetricGroupProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a7aabd7285b985f807b5b1aa8faffb16095b37fc0bbe3bfaaa2cd3ead56906ab(
    *,
    condition: typing.Optional[builtins.str] = None,
    facet: typing.Optional[builtins.str] = None,
    function: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0b044f2503b369f970e26112957a10a0cc8e540ccb0d838071093af9f76573ae(
    *,
    container_image: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__79ec272824fcd1d34bc3b7422cada21eafc70ab07f6510c7b4ae2c97b69be166(
    *,
    containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ContainerProperty, typing.Dict[builtins.str, typing.Any]]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f50ebdc974dffa049d74b654ef1fe223a9f706231a2a26dc2cfd96e05a07bbe4(
    *,
    explanations_for_risk_rating: typing.Optional[builtins.str] = None,
    factors_affecting_model_efficiency: typing.Optional[builtins.str] = None,
    intended_uses: typing.Optional[builtins.str] = None,
    purpose_of_model: typing.Optional[builtins.str] = None,
    risk_rating: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ecb1989d0f4614a1a03f5250829b332318f83777f4e0cce7afbbb5e846853d41(
    *,
    name: builtins.str,
    type: builtins.str,
    value: typing.Any,
    notes: typing.Optional[builtins.str] = None,
    x_axis_name: typing.Optional[typing.Sequence[builtins.str]] = None,
    y_axis_name: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__abc86db13c92aef1bc355cb20418fd5c65e7ccf20c339f71cb754378170ad258(
    *,
    metric_data: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.MetricDataItemsProperty, typing.Dict[builtins.str, typing.Any]]]]],
    name: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9f242f13835a335efa0a9727dbf619720b86c97a351f84a0057feadc0910770b(
    *,
    algorithm_type: typing.Optional[builtins.str] = None,
    inference_environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.InferenceEnvironmentProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_artifact: typing.Optional[typing.Sequence[builtins.str]] = None,
    model_creator: typing.Optional[builtins.str] = None,
    model_description: typing.Optional[builtins.str] = None,
    model_id: typing.Optional[builtins.str] = None,
    model_name: typing.Optional[builtins.str] = None,
    model_owner: typing.Optional[builtins.str] = None,
    model_version: typing.Optional[jsii.Number] = None,
    problem_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d9d4b7ea360a07d0e3dec74eeaaa3b032a7fc06087e3fed5017c170c2846b72e(
    *,
    user_profile_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9944d702a933de3043469707db635021beda0f9e96a67a17871870e8ee95109(
    *,
    approval_description: typing.Optional[builtins.str] = None,
    created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ModelPackageCreatorProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    domain: typing.Optional[builtins.str] = None,
    inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.InferenceSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_approval_status: typing.Optional[builtins.str] = None,
    model_package_arn: typing.Optional[builtins.str] = None,
    model_package_description: typing.Optional[builtins.str] = None,
    model_package_group_name: typing.Optional[builtins.str] = None,
    model_package_name: typing.Optional[builtins.str] = None,
    model_package_status: typing.Optional[builtins.str] = None,
    model_package_version: typing.Optional[jsii.Number] = None,
    source_algorithms: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.SourceAlgorithmProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    task: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d68a09b949d0634250f1af2d54a41718dc5585bb122780708c9cbcd762e9acc2(
    *,
    function: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.FunctionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    notes: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__436fb9977397a9132b1478696f5501d6215eec53d2cfcafb3e32026113739441(
    *,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a82dfe1af245e6f9ba002f1c95940a73e0d9d16c15d4b13be69754241ae2160c(
    *,
    algorithm_name: builtins.str,
    model_data_url: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8fa87a55ef5c7309515a6bb1873506d752348929f085259127d5dca11d5a64bb(
    *,
    objective_function: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ObjectiveFunctionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    training_job_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingJobDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    training_observations: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36cf1be04ac7692efda323a2decea8870c4985abe3f355b6321607e78c877d94(
    *,
    container_image: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__340ea84885520e7f3ac3fc13c1f80cc9a491d24b5e63be5c2fc6288c49477fa3(
    *,
    name: builtins.str,
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__75ea247ecc16590c4cfc79d2b560eebfb19102c2919dcf5b112542b017770812(
    *,
    hyper_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingHyperParameterProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    training_arn: typing.Optional[builtins.str] = None,
    training_datasets: typing.Optional[typing.Sequence[builtins.str]] = None,
    training_environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingEnvironmentProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    training_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingMetricProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    user_provided_hyper_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingHyperParameterProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    user_provided_training_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.TrainingMetricProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__53a61afb1bf0b460c25b699fea9bd096e51bd1fe11849fe86fe9a9bde85312f7(
    *,
    name: builtins.str,
    value: jsii.Number,
    notes: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__605653cc827c713b5c70a6fd0d29eadda991963ffa0099e26bf96b5bb361f029(
    *,
    domain_id: typing.Optional[builtins.str] = None,
    user_profile_arn: typing.Optional[builtins.str] = None,
    user_profile_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e84d8f1626af99e65c0fe3f79473cc4957c66247c4c4c868dc9b89fcdd8356f2(
    *,
    content: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.ContentProperty, typing.Dict[builtins.str, typing.Any]]],
    model_card_name: builtins.str,
    model_card_status: builtins.str,
    created_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    last_modified_by: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.UserContextProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelCard.SecurityConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__954f804ffa3bf5dd33695ee00ecfe5ce08b7adb2e74010525ccd32a9adddcd69(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_explainability_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c25a399ce592da6a5aeb991c645f16759378b64e7c90954e06b0eb766bc5a5cb(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fd0a694b7405e01fc3f479a1027ecd0f46e2eb937bf9a7d602cc4087cc4330b4(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d422a30d126970915cc8495b869e3c7db9f854b2fcd87490df348c194d343674(
    value: typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1c53a969e652e0136399ec80002f2f198c1c63f8456011292205d745721bdd19(
    value: typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__495b555b30d3846f827f09b73319ed59fbb50d2039de4e07d0ec4b9b8ce0b87f(
    value: typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__48717f82211b0a11f9a35b96843a92efbbe71ee32e9d7d31903f5c34e705610a(
    value: typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__34cd6301c5f2aba6124abd00d8e55f0b8ed289663fb014bec3e35dac788be599(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cfcce096a35b2a2381a07fbf9aabf14e9e8b4e5539c0e0638d2763e9c9a42fcd(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1aceb538ddf688359c0113b1c64532ed2070090d48001c2d98a0bdf0effd9ddd(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7debfb1ae612fdf60913a86f4ea3623c716789b8ef1f916075b874acd2f1de62(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__afa96e4656847146085057ee89dab45a0b2cecfdec800174134362c052297ab3(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.NetworkConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__649e4179282387b41e32c8808582ab74538c1896479e37a25481f36866965a15(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelExplainabilityJobDefinition.StoppingConditionProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__facad0e976368bc105b0f8e5e34cf9f70ef7605e04337f4152c90a7228db0a40(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8218381f975f9dbb2a35661c10f212426a9fef5379d65f67da44ff55366283cf(
    *,
    data_captured_destination_s3_uri: builtins.str,
    dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.DatasetFormatProperty, typing.Dict[builtins.str, typing.Any]]],
    local_path: builtins.str,
    features_attribute: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__85690b811ee480a36a146a23f4711dd339cec30e74fa9c234ae3c74d41f22c9c(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_size_in_gb: jsii.Number,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7e81d907a778bcaa00742819afd8f88e9e64e5d100c67d9b1af174fcac54910d(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b224b814f09b7de391271c7d3c38ace86d32a9e32c9fde79e9880308342a62cf(
    *,
    header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e8225ff3c21f764842746be62d4c9ddb589b217c3c3b8494ef295043743c687c(
    *,
    csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.CsvProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.JsonProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e788b79725844f1b9887b062e539eadcfe401306e596af606536f4dc291ecb8c(
    *,
    endpoint_name: builtins.str,
    local_path: builtins.str,
    features_attribute: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b47a2b0d32eade841fbc5b0707a694aac661eb8c8ef69552afbc6cb6513f7991(
    *,
    line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ebe56328bde0b850895826fabfc7bc3442ae0788e844a26866e772ad10e87bed(
    *,
    config_uri: builtins.str,
    image_uri: builtins.str,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0d793a8a58a92604079c005aa4a444a5a9902a1522777576bfdaac23f93b5af6(
    *,
    baselining_job_name: typing.Optional[builtins.str] = None,
    constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ConstraintsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ec8ac85f23fa2862e6cf2eea8002ceb01087e83cbff878162f950b699546e63e(
    *,
    batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.BatchTransformInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.EndpointInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__be4739ae54c1d57b6f9fb64c4b95f53c3a48b9163da7afb568e8e265dd0da14c(
    *,
    monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringOutputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__476b34dde6767c9a7214e0b1005a08a9c9a01b9f60950463f0b2ce06d82b9516(
    *,
    s3_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.S3OutputProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__746a6e34a89d9945c840ac5a16e5065dd324516966b022991fd0019731e310ac(
    *,
    cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ClusterConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__736183198ba84e84c1a7ddfa17d7c6e762d3957b37957afa955cf7ec27128bce(
    *,
    enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__77475b02c889e323dca3d42aa4b3334fb85c2226ab3c3f1c29b6329113a04d5c(
    *,
    local_path: builtins.str,
    s3_uri: builtins.str,
    s3_upload_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__852d4ce521ce847d2331b9653cc463aa4376aabf5b9b41a11c2bd46874051dd7(
    *,
    max_runtime_in_seconds: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1cac621fb0bd5a10ec8f30283eafe7ac219e52c35b2436b2978d5500afe05e2f(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__362e56df80f87db6e76a20cfa99a7869ba12eb909ceb3dc9c80aa0c6f74f099a(
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_explainability_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_explainability_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.ModelExplainabilityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelExplainabilityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dd16b0de7cecf20a90c23d8d97096e81424f40b485b97eeee13cb706dbb76728(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    additional_inference_specifications: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    additional_inference_specifications_to_add: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    approval_description: typing.Optional[builtins.str] = None,
    certify_for_marketplace: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    client_token: typing.Optional[builtins.str] = None,
    customer_metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    domain: typing.Optional[builtins.str] = None,
    drift_check_baselines: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckBaselinesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.InferenceSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    last_modified_time: typing.Optional[builtins.str] = None,
    metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetadataPropertiesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_approval_status: typing.Optional[builtins.str] = None,
    model_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelMetricsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_package_description: typing.Optional[builtins.str] = None,
    model_package_group_name: typing.Optional[builtins.str] = None,
    model_package_name: typing.Optional[builtins.str] = None,
    model_package_status_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageStatusDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_package_version: typing.Optional[jsii.Number] = None,
    sample_payload_url: typing.Optional[builtins.str] = None,
    skip_model_validation: typing.Optional[builtins.str] = None,
    source_algorithm_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.SourceAlgorithmSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    task: typing.Optional[builtins.str] = None,
    validation_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ValidationSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8edbf8f079b2f57815bbba7490bc2f89d0b9856f086c31930ddf1b632d1fa269(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ea484fb5ecdd1ea0942bd80167d6e21953fa2e4466aac5d7d5918ab2dc5a5d07(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__075221b403e1bd04dce9e65c7eef0a255fe8afac094e66b6cf7557829d830aec(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5b461d20ca494efd31c8128f746c5693a32b1ba1d8411791c563be38576aefb2(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2d8be72c53544ec18143c7d8b4e3f6561e9f4ae160853fe202af250b1fc24387(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4d338a29b9223337cbcfb02828d950d011002db9b5fcb7c0b1c4795e3dbaa4cd(
    value: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__89d64f853866a4eba94f202d8d78bafb1c880d82debc68888016437a91c64212(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dd585f917b3f9ab436b00b5bec7661845c3d88a37a2a6e7b37c3e2c851fd45b4(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7ee3bcd6747b2923622b324c3674ca7c1cdbefda33a982aa0a7d7019f6918e46(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b96847febd4b1671c589f437d336ecb2b62d8dc82ef997b49d294d28a57d524e(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.DriftCheckBaselinesProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bd3be90e6308c9d1cc8b7932f6c1557f259e44b46f4b43050fd3923068d98e07(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.InferenceSpecificationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__684bf78747598ba069c515ad2d890a67e1845d83ecbc1827b4f4e15098b5a74f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__17175b72aaf79878a46845fa43368d531e9d0b4752c90c98ddf2883583e4d9a4(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.MetadataPropertiesProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b33fe284883372d31c13f9366c036f03c2ed537d9d266e483195c50194f9782f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ec9081cd8dc5e445a8aa5c3fd36e3dc6e49087f8b99a90cc28b0f0a9251f0490(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelMetricsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bceb97f7255e1e849196348f2d7db19a40e666af4ab46aa2c7f885347bede597(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1edd4411cc4529355fa85c7cab74264665aa9c6599ebef1cc47cc870c99f2e9b(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__502cacb26733d3c73379ab561efbd11238a4f0b7671c6fa037fe1b624a81b441(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9b01787a5b5fcf7a24152f7fd4d7ac5b6854f8ad53b125ba9cbf58c5029c649(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ModelPackageStatusDetailsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3a1fb6ad36914a71b782730295cf9731fbaa376719e3777571688ab057e2ac17(
    value: typing.Optional[jsii.Number],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__362c1ab777eb981ffa248716181e5be9f735633741d191ec395bf5af29686d60(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b52a517af33f00f15dfe417154cb22ae2bdafd5824fc8cb4317c1431bccf34e4(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6b338156669d00889f2939dd8fca9eb99030bb6dd511049c3272d4c3c76bc917(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.SourceAlgorithmSpecificationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__749212874a1c34f665c626fb22503a80ec4df93233dc2255b602d8c751c09ec2(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5dbf6e1cc064ea9e19d1b079e934c67fa9a60b07813df3b1c715e5bedac7e5fe(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4e8178f30e36acade6c5e7d9f3341487df7db2bd7601045647bcc8b06675978c(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelPackage.ValidationSpecificationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a4e54ce850fcef1c7045aaf25b173c9d98c47f74292ef85b6da006e1cb34f159(
    *,
    containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]],
    name: builtins.str,
    description: typing.Optional[builtins.str] = None,
    supported_content_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    supported_realtime_inference_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    supported_response_mime_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    supported_transform_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__07b438066510c291923fe47937fcf82d4bd967e789cb9641271bc715eb76ab40(
    *,
    post_training_report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pre_training_report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8cc0e7c2f16e8c16fe23b47279a3995936f2f5566926c6f3cfb3e0ecfc7c2e16(
    *,
    s3_data_source: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.S3DataSourceProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__57f2b3022a8539f928307f101ccf71acb9c23242064cdf4d51d77cf68bf22c10(
    *,
    bias: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckBiasProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    explainability: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckExplainabilityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_data_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckModelDataQualityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckModelQualityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4b8a641c6d4e4621ce311e102952307a3b8049fca60bbcfadbe2069f92df1b84(
    *,
    config_file: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.FileSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    post_training_constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    pre_training_constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__99e35c0ba2d8f1981bc57cb471e309f2b088456f827360ae98c87c065c6d5cbd(
    *,
    config_file: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.FileSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e365cd64dca91817a43deaf063c804eb4ba2ed277fa880da49581e3544ecc022(
    *,
    constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fb79072e66ead1df334e93f158b5c6de19458bf6f48b7750ca7fff90851c7342(
    *,
    constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2b51b8e13aac7ce66f0d1b576a1ceffce4b0be2ec72798403c5fee94531748f8(
    *,
    report: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__db7763cb6b9815303d198e89e9aeadcab55ce59532300264f5c3dc766041fc78(
    *,
    s3_uri: builtins.str,
    content_digest: typing.Optional[builtins.str] = None,
    content_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a5782aaf7ec3b905b60c1ab277de71c6af3306c86a75621889fb2cedcdf3f421(
    *,
    containers: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]],
    supported_content_types: typing.Sequence[builtins.str],
    supported_response_mime_types: typing.Sequence[builtins.str],
    supported_realtime_inference_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    supported_transform_instance_types: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__10e5e7dccf00943bacebd630ff15f15f68b73b25f626a3a10fdb6970b2323a29(
    *,
    commit_id: typing.Optional[builtins.str] = None,
    generated_by: typing.Optional[builtins.str] = None,
    project_id: typing.Optional[builtins.str] = None,
    repository: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9d8c5e1ca778f0bd848c7c4565bd984ba948e6f822a430874a2a9194af1fef79(
    *,
    content_type: builtins.str,
    s3_uri: builtins.str,
    content_digest: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3a6d9495df9d7becc3db8b76b810b451cce56bcf5a3b857f132acc8df35a20ea(
    *,
    constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dbc6728c5d1c7a15254c2bd668450b7eaeb7b8c388c8f9b330e053c407c25e01(
    *,
    data_input_config: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2a4038e64653047e711218c6a79f61b3488bf0ea3ec72e295b93aca185bfd2bd(
    *,
    bias: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.BiasProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    explainability: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ExplainabilityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_data_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelDataQualityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_quality: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelQualityProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__863ee4313d8978810e469a123f1fc9cf3a202aa7d038afc51cd8fa6100b9b505(
    *,
    image: builtins.str,
    container_hostname: typing.Optional[builtins.str] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    framework: typing.Optional[builtins.str] = None,
    framework_version: typing.Optional[builtins.str] = None,
    image_digest: typing.Optional[builtins.str] = None,
    model_data_url: typing.Optional[builtins.str] = None,
    model_input: typing.Any = None,
    nearest_model_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9368151f814de756031d15d98423c4f626ecab7772bbc450c61220269d51ba72(
    *,
    validation_statuses: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageStatusItemProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__925abde7b5bc45209854382ec8f11eef2ac8c1008579d5eea27a923d43839619(
    *,
    name: builtins.str,
    status: builtins.str,
    failure_reason: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d70460b42f50b69dd9179d1065515c0653bf645b82333cac9f935bb46ad24039(
    *,
    constraints: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetricsSourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__95a8628c262dbb4d0d7dc94b9b71e1fee54370555330c2e596d5180c978a0f5c(
    *,
    s3_data_type: builtins.str,
    s3_uri: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c7370e044241d5015ba4487bc95be9e2da1ab701d951eb96050e9f7187993173(
    *,
    algorithm_name: builtins.str,
    model_data_url: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5fa6f5a981cdfc9624808cae76285d5b200712bd6a58978ab2126f4f18f91ccc(
    *,
    source_algorithms: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.SourceAlgorithmProperty, typing.Dict[builtins.str, typing.Any]]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a5ac59639bea94c11b27589b4aa48a1c45071db76f2cc6339f6dbca031854143(
    *,
    data_source: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DataSourceProperty, typing.Dict[builtins.str, typing.Any]]],
    compression_type: typing.Optional[builtins.str] = None,
    content_type: typing.Optional[builtins.str] = None,
    split_type: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ad90453f586dca988e2139c0764adcc4e222e4f795136ffe7266e6b1a31a4f9f(
    *,
    transform_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.TransformInputProperty, typing.Dict[builtins.str, typing.Any]]],
    transform_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.TransformOutputProperty, typing.Dict[builtins.str, typing.Any]]],
    transform_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.TransformResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    batch_strategy: typing.Optional[builtins.str] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    max_concurrent_transforms: typing.Optional[jsii.Number] = None,
    max_payload_in_mb: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e3de08fae1bf76b0f8e8964ef8f9704de012d1a8ea97211690dbfab05c3cf737(
    *,
    s3_output_path: builtins.str,
    accept: typing.Optional[builtins.str] = None,
    assemble_with: typing.Optional[builtins.str] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ac6699f069de1ccf42c0ea72d604adc94c9b7b18a2ffd98f5018d313bc15dacd(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c8a338f1264abd227b969108f413a5f2179b62ece8e669747e97af5c10fe68ff(
    *,
    profile_name: builtins.str,
    transform_job_definition: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.TransformJobDefinitionProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__56a5474f3a19bb692e24e54841bfef2e353ba442fa47b9254c761c240adf8a3c(
    *,
    validation_profiles: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ValidationProfileProperty, typing.Dict[builtins.str, typing.Any]]]]],
    validation_role: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__746607cd1f1d8be2c0e4762ebd80bdfab4d2d86299bd55c14b011cbec5b77ad3(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    model_package_group_name: builtins.str,
    model_package_group_description: typing.Optional[builtins.str] = None,
    model_package_group_policy: typing.Any = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8ce67476f97f7f11bbbe25ff1a7e5f540c17f1614cfa9671655bdc488c4309ba(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9b28ac0ff821de88f31a1297f9a364882f035bc6e46eb2403fd1075f8f43f5b9(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f733d2395a5b964f60911bc23f1df2182dfade19e251f7d463a9b030d03f5f22(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4355427f5a6cfe7448fead52d53481adcb15a61d6238fd6aa476aec9b29dd90a(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cf026534ccea2b3126cb94af5d3a36a2aedfe86f89479e5b10e0cc06eb20d7dd(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c750adabdf97b4466938740af401939b05ced410bbf8a5029e1914386d825a26(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b32e5fb078258552a5762ac3209c1aecb6cedaa59fc46f2a8e220c3c17e26340(
    *,
    model_package_group_name: builtins.str,
    model_package_group_description: typing.Optional[builtins.str] = None,
    model_package_group_policy: typing.Any = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__378bde633f0e72c03caed7fddbf9a121418d898f476e84e86c7b4d379a50ee6e(
    *,
    additional_inference_specifications: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    additional_inference_specifications_to_add: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.AdditionalInferenceSpecificationDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    approval_description: typing.Optional[builtins.str] = None,
    certify_for_marketplace: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    client_token: typing.Optional[builtins.str] = None,
    customer_metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    domain: typing.Optional[builtins.str] = None,
    drift_check_baselines: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.DriftCheckBaselinesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    inference_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.InferenceSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    last_modified_time: typing.Optional[builtins.str] = None,
    metadata_properties: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.MetadataPropertiesProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_approval_status: typing.Optional[builtins.str] = None,
    model_metrics: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelMetricsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_package_description: typing.Optional[builtins.str] = None,
    model_package_group_name: typing.Optional[builtins.str] = None,
    model_package_name: typing.Optional[builtins.str] = None,
    model_package_status_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ModelPackageStatusDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_package_version: typing.Optional[jsii.Number] = None,
    sample_payload_url: typing.Optional[builtins.str] = None,
    skip_model_validation: typing.Optional[builtins.str] = None,
    source_algorithm_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.SourceAlgorithmSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    task: typing.Optional[builtins.str] = None,
    validation_specification: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelPackage.ValidationSpecificationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f9e4a9cb7efeda6a3740140ab3ba480ae3174948753988331ff9187b0bbaf5c5(
    *,
    containers: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    execution_role_arn: typing.Optional[builtins.str] = None,
    inference_execution_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.InferenceExecutionConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    model_name: typing.Optional[builtins.str] = None,
    primary_container: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.ContainerDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModel.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__42e31b56fc0144a98a714f239264ddf7afe0fd9daf080a15f45b2586010cb014(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5503d455cdcb9812cece439cb77fdddf4e25cb7742b2f60ef989ad78d070dbd1(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f7c7f7156ff8b8f4e38ccadac8d610f3077158c93355fbc0b8ab6785dc687256(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0c89aeb966220e928121f7c0a8748a5def40c7dcc3b435297521a1b4de3e5d99(
    value: typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringResourcesProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__361aafd1c3d6434c939b643523515899a17f34f4c84bc9460385008f952ff5ce(
    value: typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8ee098487f097c297f5b6dcf676b8ff6b93d2a776d26b5d89d40d17e3666dd40(
    value: typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityJobInputProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dfcb1455e248274cfd0464147cfe165813fcb97079fdf063d25d7d843d3a2c9a(
    value: typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.MonitoringOutputConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__345b07978ff3e5c3459c9f145b0997567018db993cb1893fddb5d51bca038716(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__95c7270eda7753d64f7ee2f671976026489fb015ddfe6237fa1e6beb73cc13da(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0204032476e8f5b124b5d8af10f340c97ced99290a2f46302a62e61462affbec(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__59ef09dd29bc147058594ea65458aacc4b4e4c5b2aedf059726f333d30c4caab(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2b2071d5ef448c0e1935d23747178084b1846093280a3ead5e38f29c337da5fb(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.NetworkConfigProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3ec1ebbaae725cb274030b8eb63c06ffb5c9248e0a7949abcc5cc012a5bc198f(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnModelQualityJobDefinition.StoppingConditionProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__04773e5acb2d4d524f631f45d6648e805d07158e007fe0577458761258f555c8(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__08a0fc421c170b7116c059e1c803034b1e1d2e4f3d1139e96d86868b4acce580(
    *,
    data_captured_destination_s3_uri: builtins.str,
    dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.DatasetFormatProperty, typing.Dict[builtins.str, typing.Any]]],
    local_path: builtins.str,
    end_time_offset: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    probability_threshold_attribute: typing.Optional[jsii.Number] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
    start_time_offset: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__65137d3044a71a264599fe61cb48d2ecd3a19e17ce611b27e552921b3929e2c8(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_size_in_gb: jsii.Number,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__831137b4f29fc79af094bc52ba211600ac5596a9e2b88be8384db4afd89f1ab0(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e06c255a8eff9cdc34bdfd9605eea9a628bde3715b3ed99ed9981db9be8c87d2(
    *,
    header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3b2c1b1f6d0fb2a52da1f70b4528ffb40b39f674d57bdc6bfcfc0a4f4614054c(
    *,
    csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.CsvProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.JsonProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a942217acda5bca59aa7b51165d72d3988a006aa82eec958130cf1a49037049e(
    *,
    endpoint_name: builtins.str,
    local_path: builtins.str,
    end_time_offset: typing.Optional[builtins.str] = None,
    inference_attribute: typing.Optional[builtins.str] = None,
    probability_attribute: typing.Optional[builtins.str] = None,
    probability_threshold_attribute: typing.Optional[jsii.Number] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
    start_time_offset: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f4c9d7a354f28cfb41f9918c7c6907d3508e9834a1d0608cd7054de85da8a86e(
    *,
    line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__be45c2268dae58e29dd4db030dc1f3380067168548e1d2ff4e0a4642b76662a4(
    *,
    image_uri: builtins.str,
    problem_type: builtins.str,
    container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
    container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
    record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e1e56b4d0dd7476adfd42a62d02c9575a93870102c8ffc441542ea5cf61694aa(
    *,
    baselining_job_name: typing.Optional[builtins.str] = None,
    constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ConstraintsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__16e71c34e479607a3391fe5072ed831b7d3a10839360dcabd7f8a221200dd9c9(
    *,
    ground_truth_s3_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringGroundTruthS3InputProperty, typing.Dict[builtins.str, typing.Any]]],
    batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.BatchTransformInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.EndpointInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__32e1bb7f2fb6bb11efc18e84bfaa6d1ce56292b04d8d5d9b419c725ca85acc2f(
    *,
    s3_uri: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3f94b93c16af4cc55122a6f5114a7037e797a961a2cf10a42a9fdcba768abf74(
    *,
    monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringOutputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fc23b18a491249f83a88060541a95cccef4c10aebb744102fe808bfaf8be98da(
    *,
    s3_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.S3OutputProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__998fe11493b9f1ead5f9991d1f87e7759bd9de540d146859ec3cbac48ea8de47(
    *,
    cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ClusterConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__aa9c313eacfc2297a7cd0cf18d952580f385ca3ad8c91dafd75a2f0f9140df4a(
    *,
    enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5576387ed8cd9e4a7326c42b6f705f7d012c7bcdfb9ee1f677ce0e28ea68342f(
    *,
    local_path: builtins.str,
    s3_uri: builtins.str,
    s3_upload_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__95461f0570a72c179f83ce352039af066f11d84f1d8289a48d5906f0c571a72a(
    *,
    max_runtime_in_seconds: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ede33ea9a3e3bcffc42f51b799a3a341ef58031e42a63662c818424188ead4e4(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0f10e098db055e6a84ca2addf51239dd57eff36806af7627bac7fe001acf6efa(
    *,
    job_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_job_input: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityJobInputProperty, typing.Dict[builtins.str, typing.Any]]],
    model_quality_job_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    job_definition_name: typing.Optional[builtins.str] = None,
    model_quality_baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.ModelQualityBaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnModelQualityJobDefinition.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ca5a38a8da7fe54fa09469575d3375d9a6aa233ff46d22e0e0de6efcaa04aadc(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    monitoring_schedule_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringScheduleConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    monitoring_schedule_name: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    failure_reason: typing.Optional[builtins.str] = None,
    last_monitoring_execution_summary: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringExecutionSummaryProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    monitoring_schedule_status: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__126a088c6330d84b4cd9bd7423be2b5230dba858e3db1ea6cac01426a2ff9e86(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8902d7946e4e13058066ee547a2c9868532aa43c8025ee0fd71de41402682d7a(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__96720df3106409612248d7344ad7ae7186b8abecd3bd05e517ffcf09a8c86a65(
    value: typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringScheduleConfigProperty],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d86ed63100984532d11aee6d5998f5ecee52e8433ba25fdb25c7b106c771da31(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a54598e019b9c4853ef5ce7f27446ddd31e8f8004f095b484f7657b89bed2115(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d9e06f257c6452ada6adfc5929b62eed4fd9e5befe1cdb66608a7762953043ef(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__21d4f57e3558ee13daf2e78b3d2b7789074a397568a9f915ff84ad16828b14a6(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnMonitoringSchedule.MonitoringExecutionSummaryProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ca21323324de2cfa944b92e83cbca8a400e2315fd8053984e87cbb53a7e724e6(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__705853eb754b81ba432bb4f34184384e8b9b8ecd6371672e6fd0d54466cf04ee(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0ce194d45dca8ccf39b5ae84a3282a7fc7985302038c0fc714ebb53fd294d3cc(
    *,
    constraints_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.ConstraintsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    statistics_resource: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.StatisticsResourceProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__eedba47561ccd78a9b98fed7f927738ee65a856721f279e9c8a39a52b44e3241(
    *,
    data_captured_destination_s3_uri: builtins.str,
    dataset_format: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.DatasetFormatProperty, typing.Dict[builtins.str, typing.Any]]],
    local_path: builtins.str,
    exclude_features_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__929e18c0e7ad9bf3ca25178c420d84fdf0ba8ef328dee1b3cb869fd9a093e61c(
    *,
    instance_count: jsii.Number,
    instance_type: builtins.str,
    volume_size_in_gb: jsii.Number,
    volume_kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2caa81822304ad652e60a0e510b5304088fb5b1ef4e1401a20a4d08f04e35400(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d45116cd59cb386954acf6d44a6f0cc293bb273c742160854144a528ef29794d(
    *,
    header: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7661bc4fdc1f4bc63f3a98cdda3172a8d07459f192e8de328102129b3b2f5582(
    *,
    csv: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.CsvProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    json: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.JsonProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    parquet: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2c39d68d5dfd7639ec6547197fd64e012cbb28a35a29caa52c34f3746d539b66(
    *,
    endpoint_name: builtins.str,
    local_path: builtins.str,
    exclude_features_attribute: typing.Optional[builtins.str] = None,
    s3_data_distribution_type: typing.Optional[builtins.str] = None,
    s3_input_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a8afa28f544cd3df1d0316feaf8abbe78c4e01de2bc12c6f8e867e9106450abc(
    *,
    line: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__005040f13e21d59e3d26250e2d3f7b29b6b4999d51eac7d7752141b09056dcc5(
    *,
    image_uri: builtins.str,
    container_arguments: typing.Optional[typing.Sequence[builtins.str]] = None,
    container_entrypoint: typing.Optional[typing.Sequence[builtins.str]] = None,
    post_analytics_processor_source_uri: typing.Optional[builtins.str] = None,
    record_preprocessor_source_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bd490448650454b6dd63c86d10f1d5a048e5c5ed8122132f650622306f3b621d(
    *,
    creation_time: builtins.str,
    last_modified_time: builtins.str,
    monitoring_execution_status: builtins.str,
    monitoring_schedule_name: builtins.str,
    scheduled_time: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    failure_reason: typing.Optional[builtins.str] = None,
    processing_job_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d4168c0367a28b1cfe3e6543b3df6e71358f88a1ffdfa88d2ed02691e0b6b39a(
    *,
    batch_transform_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.BatchTransformInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    endpoint_input: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.EndpointInputProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b910b71aa0bd7c4735c78fd94a919ccf37569efb82cd95f526e9b54a3fce538d(
    *,
    monitoring_app_specification: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringAppSpecificationProperty, typing.Dict[builtins.str, typing.Any]]],
    monitoring_inputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringInputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    monitoring_output_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringOutputConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    monitoring_resources: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringResourcesProperty, typing.Dict[builtins.str, typing.Any]]],
    role_arn: builtins.str,
    baseline_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.BaselineConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    environment: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Mapping[builtins.str, builtins.str]]] = None,
    network_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.NetworkConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    stopping_condition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.StoppingConditionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f36ec71d3aa6aba322b9fe403cfbedc006af93d645d3197a1c5d389261a50e7f(
    *,
    monitoring_outputs: typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringOutputProperty, typing.Dict[builtins.str, typing.Any]]]]],
    kms_key_id: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__03c47c608b328ee8edc6adac4a7427d35274a35b4b31fd1c5a1a3e0f9e3f0631(
    *,
    s3_output: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.S3OutputProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__23e858a126c37ebcb3c444065dd1b417db9eca966f7ee05fca6d54759a2ede79(
    *,
    cluster_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.ClusterConfigProperty, typing.Dict[builtins.str, typing.Any]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ae563bf5eb284341308fd66319d82963a1d60dd20f020fe537e320ab2264b5b6(
    *,
    monitoring_job_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringJobDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    monitoring_job_definition_name: typing.Optional[builtins.str] = None,
    monitoring_type: typing.Optional[builtins.str] = None,
    schedule_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.ScheduleConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bd8da2edb05f524a8cec2645431357a23e90518457adf8b1cceb5c2c836212e5(
    *,
    enable_inter_container_traffic_encryption: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    enable_network_isolation: typing.Optional[typing.Union[builtins.bool, _IResolvable_da3f097b]] = None,
    vpc_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.VpcConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__71badfaff04b4305f0c3c62a5f1df2e5ce110caa1b5d47fbea5ed441052115e3(
    *,
    local_path: builtins.str,
    s3_uri: builtins.str,
    s3_upload_mode: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6cd4009cfbe7205d7eb8eb550b2eb82816cdff6947fb3049a36efb431cd8bdf6(
    *,
    schedule_expression: builtins.str,
    data_analysis_end_time: typing.Optional[builtins.str] = None,
    data_analysis_start_time: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cfb3dbff0a3f394b0718ae50ab787bcb66a449535f458dec42b2c32646cb9b74(
    *,
    s3_uri: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c7e5bb0fc01d568d2f801c28a2a25d61c124468fe75ef26f71c064475b087d29(
    *,
    max_runtime_in_seconds: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5443f2ae1a6b1327f14c81943da48e1b6fbb092c8467ad6b5e44facb1c07b8a7(
    *,
    security_group_ids: typing.Sequence[builtins.str],
    subnets: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__28a5b0047aa30ebc0aac1bb6a24b6076a786c61f9934d3ffef223f7e4d15b3b4(
    *,
    monitoring_schedule_config: typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringScheduleConfigProperty, typing.Dict[builtins.str, typing.Any]]],
    monitoring_schedule_name: builtins.str,
    endpoint_name: typing.Optional[builtins.str] = None,
    failure_reason: typing.Optional[builtins.str] = None,
    last_monitoring_execution_summary: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnMonitoringSchedule.MonitoringExecutionSummaryProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    monitoring_schedule_status: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4258a6f5191f53d94cb9bb9e4d02bc1fc8c49516c1cacb4e844127458c9bcb57(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    instance_type: builtins.str,
    role_arn: builtins.str,
    accelerator_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    additional_code_repositories: typing.Optional[typing.Sequence[builtins.str]] = None,
    default_code_repository: typing.Optional[builtins.str] = None,
    direct_internet_access: typing.Optional[builtins.str] = None,
    instance_metadata_service_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    lifecycle_config_name: typing.Optional[builtins.str] = None,
    notebook_instance_name: typing.Optional[builtins.str] = None,
    platform_identifier: typing.Optional[builtins.str] = None,
    root_access: typing.Optional[builtins.str] = None,
    security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
    subnet_id: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    volume_size_in_gb: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f502c12878c3c2e0ecdbfca9b6d1c2606059ac1413c77519821ea7a74535a4d6(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__48adf3bdeac409fbb8bd61ad7fda031bb7d3bf3702e2d24ff9486daa087ee387(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1624550a6d6f609df95a97a1cac1c4558ef364951d61f54a88c03689775cadb6(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7a01dd0c564eda35b7da42a00c931bac23b0d39b7af59626f06cbe59a837b4ad(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4038a1a01d792ad896085291f3b69c4d23642cb440864632301275c0f804cbcc(
    value: typing.Optional[typing.List[builtins.str]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__30ff8678efb98b40f5a8824fc717be27ecd5b6a13d47559957e01a6069d0b757(
    value: typing.Optional[typing.List[builtins.str]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bf9a5d1b8f3ff3bfaff0c9ec6e0e91a391534e85401028efb43d810b945ce78a(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d9787637974a404c84800b939ebb312aa7025c5d0e6e756a6470ec8b6b49789d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4715580cbb9a7d7db6e3def456160b051a06a0d390785e2871fb4b56e67fd7e9(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__c9472fa26cb9f79b5a0ed7726aeaee812eeb3525f7aafeef1bc405172e0bcb17(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__11003587e94643a827559660e73ff9453e4df8eb144db4e97c49e8f7bfb23d81(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__71bc49af0221e3adf1c4f98e66ed5e612daf9bb15b633b3c2401546c452d21aa(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__651b32c45557e8298ff2e875d699a3c8627b8a7ee06344d38ad120fdc6baaddf(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e73bb3427823bc3213ee89b75acb457061970ab81520a25b55f212b176df6546(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4d64706aca613168f17eabca25b285f585bb572cb9a92a672148b0fd6acbdc3a(
    value: typing.Optional[typing.List[builtins.str]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0927b0721636f28b7316ce12a66323e0646504a308a93025dd94f556e559bb3d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9a2b436e239a6adc090ba9abd1f5e9daa1c3ac762ce0b8fd9fc223475bd67714(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36ebeec9f5c7eec651570238369444a3751c4b26c60de1b8dadbf1aab9cef52f(
    value: typing.Optional[jsii.Number],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0f4a0d2cb344f0c7425a5b91574391433481b8edc2acc92a8988cf48294cf8e0(
    *,
    minimum_instance_metadata_service_version: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__518043e7ff4ea7436d95b52252fafb48d756a1ef9372e9e1109fbba43ece3446(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    notebook_instance_lifecycle_config_name: typing.Optional[builtins.str] = None,
    on_create: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    on_start: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__71db9d0e2615f43293a8bea96ab42c82edea91c36a52e0f71758d973c947bf91(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d5302e45876e7d79389ba6d8897447cf7ad67f146699cbe2846d5d7ad69dac94(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fce15998109ec27f9bf7652a68a0092b68ec864cd18199d1418aa3d82e5ce2fb(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3e1742b1957e1b689b9d3d9ee9213fcadbda6f1b85eec04eef85990c11e49e73(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b5b4ce7c5cf92409ac58f3fedeef60cad5fa7a2d8c43865b05accd56e75d8f96(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3d974a645e6211d4f3c43552b14b1faa8fd797600d1731ea384d007af9996c7a(
    *,
    content: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__39107b19e23bf4f67fa7869a85622b221e9d7f93297b32d555adbc59a5cd9010(
    *,
    notebook_instance_lifecycle_config_name: typing.Optional[builtins.str] = None,
    on_create: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    on_start: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstanceLifecycleConfig.NotebookInstanceLifecycleHookProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fb4d5452fe3cd0d1665a3889149bbc6d104f132cfd2cfa196a6d745e80866209(
    *,
    instance_type: builtins.str,
    role_arn: builtins.str,
    accelerator_types: typing.Optional[typing.Sequence[builtins.str]] = None,
    additional_code_repositories: typing.Optional[typing.Sequence[builtins.str]] = None,
    default_code_repository: typing.Optional[builtins.str] = None,
    direct_internet_access: typing.Optional[builtins.str] = None,
    instance_metadata_service_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnNotebookInstance.InstanceMetadataServiceConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kms_key_id: typing.Optional[builtins.str] = None,
    lifecycle_config_name: typing.Optional[builtins.str] = None,
    notebook_instance_name: typing.Optional[builtins.str] = None,
    platform_identifier: typing.Optional[builtins.str] = None,
    root_access: typing.Optional[builtins.str] = None,
    security_group_ids: typing.Optional[typing.Sequence[builtins.str]] = None,
    subnet_id: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    volume_size_in_gb: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1ad401effd23b8166514a4ae8c124006c7f366e8a04330e88afe117ee38dc759(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    pipeline_definition: typing.Any,
    pipeline_name: builtins.str,
    role_arn: builtins.str,
    parallelism_configuration: typing.Any = None,
    pipeline_description: typing.Optional[builtins.str] = None,
    pipeline_display_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2ef5df774dc4da664546343b07b97e1b911ae1340e00658468dbb3b548e35d0b(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__425cff485a7d607913cd5619367319f69abc05063f5c69dcc0187a86adbab558(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a4d6de343d0d5e8951289fbc8da9e379dea874e19819164a97a48f37b0d2054a(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cbcf88f32c798e6042f4f042e947c84b0b73f17edf4d203ce943e3ad2f500042(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fe03258e998279120b3ba766d655d0768128ecb7802ac4645154217adf786b50(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__75edf709dbf33ce1b709c54ac74b477fea0c18696074d2323b37200cab9c21f4(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__12d6af45df5bd392f8d07032559a4ec65d56f16891a7243b60216788da804975(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__5d73768efd335b094af9909ce72fa1e00cebb52292260403651362eb1a37b19e(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b0e1549a6239b3b94e742818628f9f0784a20e36c288ded56381bb7d51318418(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__1d4335b664c05d7004f891fb161e3dc180491fa23764a7654c61de6ded41a844(
    *,
    max_parallel_execution_steps: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0bbf8c20b27d196c5b392dce4c04dd2dcd33abb5fabfb5ec5855de83a39c9240(
    *,
    pipeline_definition_body: builtins.str,
    pipeline_definition_s3_location: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnPipeline.S3LocationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4cbd25df52cca2361fd41b01fdfa929222941140b523d6049d49603e51d7821e(
    *,
    bucket: builtins.str,
    key: builtins.str,
    e_tag: typing.Optional[builtins.str] = None,
    version: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ee8df4c15293c04f73c46e2e5fee2d90e75d42f64c79bb1242363ef89c794bc3(
    *,
    pipeline_definition: typing.Any,
    pipeline_name: builtins.str,
    role_arn: builtins.str,
    parallelism_configuration: typing.Any = None,
    pipeline_description: typing.Optional[builtins.str] = None,
    pipeline_display_name: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__36d90c8a4de3ec6cd6aac98e8b78ab8d07ed4eaab37e59bd5a481048e098a352(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    project_name: builtins.str,
    service_catalog_provisioning_details: typing.Any,
    project_description: typing.Optional[builtins.str] = None,
    service_catalog_provisioned_product_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnProject.ServiceCatalogProvisionedProductDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__76feecc969b22f7c1e87382ee8f1456390c3a5f1d0adff82d216a4528e0d8b63(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4561aa9d3adbcdbd1302b62aa20d20c7f6da5a62cbb08e88f965ed9a6eeb7cf3(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e671a1f8a3c6667e300b84008f581f9371ad7d9618076d90853fed714b1db138(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9d718ddafa3c422dac1f0d00451c0ed5aa622263f6d29b78b9bf867f3295e22c(
    value: typing.Any,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__bbba1d96ca34775b9d6bb59929ffa5affcca7733f06a146a63b8176d032affec(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__718846b7774e70e41ab8c08d9dd7855efeff4369da6fb321666c7229a186b3c6(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnProject.ServiceCatalogProvisionedProductDetailsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__710e9f99725a9a45c1269e140374af7d943b012a3c73a0a20bb49a9120ab06c6(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4c5d0079b3ac561527f2289261df009b2bf57d1d90c3910d54e231f6364bc394(
    *,
    key: builtins.str,
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8805a1cbfa5ad8c3a8aa62a88122b7e85ddb718a700a209759f3c80250240aed(
    *,
    provisioned_product_id: typing.Optional[builtins.str] = None,
    provisioned_product_status_message: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__b185388247b0a58156f6d5e7ae6d0df0e06e969d26ac85a21f650329ce539a5a(
    *,
    product_id: builtins.str,
    path_id: typing.Optional[builtins.str] = None,
    provisioning_artifact_id: typing.Optional[builtins.str] = None,
    provisioning_parameters: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnProject.ProvisioningParameterProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__87f81cd557ad556b59bd3547ccb89572ed4ac29822e147ed5868563162997450(
    *,
    project_name: builtins.str,
    service_catalog_provisioning_details: typing.Any,
    project_description: typing.Optional[builtins.str] = None,
    service_catalog_provisioned_product_details: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnProject.ServiceCatalogProvisionedProductDetailsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f4cf36c039bdacba2a059b01ad6ca85e87e6d521f09ca1f75b013102797e097d(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    domain_id: builtins.str,
    space_name: builtins.str,
    space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.SpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7dddb84aee67953eeae7ef9e4de9ff319c579f67a161e906e49503007dd5ac31(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9af654c4b0148ef1da882d63146eae68237ac91a0d114d5a7911d8fd9730d199(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0df37d09c9493ede8597c2b33e56f1bfc87577d5607463586212a70c06083da8(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__01a66fc19cb8199a9c43aeac236d2f1881bb9b78f1ce1ac686d5a9a59b765212(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__264f1be432aaf86bc93f0672254d79855cc493af6e34ef50cd1505e249de6b5d(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnSpace.SpaceSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__2fb997db93555cf7868ac4f87100c327aadec8d6df473fe2c1a64189d900ad3c(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__153516bc9ff4edaada8209c108f074d6ec6bcbeec18558659518ec7028cbb836(
    *,
    app_image_config_name: builtins.str,
    image_name: builtins.str,
    image_version_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__41c77062d743943bf9fdd4eb4d3d0369cc1794bdb7dd97873d2ed4e1f32a9449(
    *,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__562ccb13fdd971a232d6c09771df96f39bf8c03a1dd5dc4dbe750dafb962dfba(
    *,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__79b889d20ec4ee307fedce4172f7c39782dc99bf76625acfdf5b00983a54fd2b(
    *,
    instance_type: typing.Optional[builtins.str] = None,
    sage_maker_image_arn: typing.Optional[builtins.str] = None,
    sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__20403c26618d8fc71e879e92b0c5ef05fbfe71e99cf6ee51d918b935f23702aa(
    *,
    jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.JupyterServerAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.KernelGatewayAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8f5699fa94392026ecd18cd10e7b2f958dfdf2e28a0ccce76bd35684435f42d8(
    *,
    domain_id: builtins.str,
    space_name: builtins.str,
    space_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnSpace.SpaceSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__beda07bea319cc25c84f5e77bce363c97996e606a26b7a70b225369558eb4372(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    domain_id: builtins.str,
    user_profile_name: builtins.str,
    single_sign_on_user_identifier: typing.Optional[builtins.str] = None,
    single_sign_on_user_value: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    user_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a2dadde93d4bb5495d1cda0d7f1d1582d8f3894875492f0b5b53c7fd32b84c93(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fc456425338165ec6117c40c3ac9fedfcbdbf0a3f00ca3bd3351e9adc8394bef(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e6ae2974d75af999e4c61eccca4e1e40f87a81f2df26fb1483f616d4b84d886e(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fd2203f8e17628ff197b20f0d5db6b23443b615d61929ee239eb7deb4f830f51(
    value: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__7bbf68ea2670e551740ebca224607b1b25b87a247cfaa90ee1ea0d058b2bf08d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__083d9901018771b1e273a884be480f5ebd07c2ae32c99187e37a72f18c08902d(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__af2a7f232bf4e8c0ce7c886375156fc30df5a4b240ea11fae90630548281618d(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__406091aa6a2a94d5bbf06575babcd4456ed92c8bbf6d0265ac1061bf92a75255(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnUserProfile.UserSettingsProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__9102031486b9c90cb4b3d6ac33ecdb4030f0a3c090fb394765dc1cb6cdb4e9b5(
    *,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8a85204216c7c66fb117971f3f03f1a13bc19b604efce2c469b7a4e207f267e0(
    *,
    repository_url: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f9203bac8296e14f4fd4a11939d2779a8f543105b9af12bf358b4053c4256e4d(
    *,
    efs_file_system_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.EFSFileSystemConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f24b0d9113dad117857a06384af724b403ec749a777dbfe4cf7dcff2af185555(
    *,
    app_image_config_name: builtins.str,
    image_name: builtins.str,
    image_version_number: typing.Optional[jsii.Number] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ff820c4c2152aca751978d5b34c2fac98f16bd182ea177b9535cb7921c3a1ddc(
    *,
    gid: jsii.Number,
    uid: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__dd6ce941f5ff6757aa1963c092b6ed0ccd865162a17a835418109b7b1ad8d730(
    *,
    default_ebs_volume_size_in_gb: jsii.Number,
    maximum_ebs_volume_size_in_gb: jsii.Number,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d083d880e5435845e2ce45145e917945ac347af8f566da3f0b98c7f974504c4c(
    *,
    default_ebs_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.DefaultEbsStorageSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a31e83e9dc4907dba90a688b8095eb32a7c29ae9f1d2f32e4d18c55b824fb453(
    *,
    file_system_id: builtins.str,
    file_system_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8fbb8b52ced6fc617c616b643ca1ddc3673e837117aaeaf2063654aaa5ad3b72(
    *,
    code_repositories: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CodeRepositoryProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    lifecycle_config_arns: typing.Optional[typing.Sequence[builtins.str]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0a4d37bd9551635b6d688b4739d2640da6c7b530cbe31c96e6e565201cb35ab7(
    *,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__4a84e697d50abdece306a0e4c7c282347c64219789aee5deab21c95e50194234(
    *,
    custom_images: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CustomImageProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    default_resource_spec: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.ResourceSpecProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__56cdae61f9e9edbd60b183a2194c677d167e50dd6262590ebdb53512f8400cba(
    *,
    access_status: typing.Optional[builtins.str] = None,
    user_group: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__cc1ee3123b0a892e07425456edfc4f4741a2535f730ca4bea63aade70c624666(
    *,
    instance_type: typing.Optional[builtins.str] = None,
    sage_maker_image_arn: typing.Optional[builtins.str] = None,
    sage_maker_image_version_arn: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f5b8977e0ba203166fc6635e9d4d1a51fbc68b5d6b5b022bb1a4207ff0801905(
    *,
    notebook_output_option: typing.Optional[builtins.str] = None,
    s3_kms_key_id: typing.Optional[builtins.str] = None,
    s3_output_path: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__e97db7f3b3126b5a3d5c763d4d08621d63d98712c98017d6bda1493a96910b7f(
    *,
    code_editor_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CodeEditorAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    custom_file_system_configs: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CustomFileSystemConfigProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    custom_posix_user_config: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.CustomPosixUserConfigProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    default_landing_uri: typing.Optional[builtins.str] = None,
    execution_role: typing.Optional[builtins.str] = None,
    jupyter_lab_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.JupyterLabAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    jupyter_server_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.JupyterServerAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    kernel_gateway_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.KernelGatewayAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    r_studio_server_pro_app_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.RStudioServerProAppSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    security_groups: typing.Optional[typing.Sequence[builtins.str]] = None,
    sharing_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.SharingSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    space_storage_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.DefaultSpaceStorageSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    studio_web_portal: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__59e94811af563857fc7e4ba10de1c5e364f6af3d8c1863c0c3396d72a47b9c99(
    *,
    domain_id: builtins.str,
    user_profile_name: builtins.str,
    single_sign_on_user_identifier: typing.Optional[builtins.str] = None,
    single_sign_on_user_value: typing.Optional[builtins.str] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    user_settings: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnUserProfile.UserSettingsProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__db9eb282091c745abfbd70a294ab8c168a305af7f2b4e80c34f292cc22c51a4a(
    scope: _constructs_77d1e7e8.Construct,
    id: builtins.str,
    *,
    description: typing.Optional[builtins.str] = None,
    member_definitions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.MemberDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    notification_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.NotificationConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    workforce_name: typing.Optional[builtins.str] = None,
    workteam_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6a120585f009f8885d2379b2a972ae2fb988e9c94d26b8a8b24ea7a5ce8d525f(
    inspector: _TreeInspector_488e0dd5,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__d08e1e1dec47e610599cd87e4e531705da6fe7e63bfea4097a53c4a1e4bb7cb4(
    props: typing.Mapping[builtins.str, typing.Any],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__3e51dbce26db436df412eb92734802d8f2f60a15c55f5bc26f1c0f647a4b427f(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__fdde5f079b81bfe00bc13e6bfa94c26420f9144669b455ef4c46b615c569713e(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.List[typing.Union[_IResolvable_da3f097b, CfnWorkteam.MemberDefinitionProperty]]]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__0f827480e57089e921f425cbefa39bfb363efe8cf32b180ed6fd5514ebf41a87(
    value: typing.Optional[typing.Union[_IResolvable_da3f097b, CfnWorkteam.NotificationConfigurationProperty]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a9e73c942296f3e614633cc4fa13a01d89e1476c06f0a7edfbaa4aca444f2a9b(
    value: typing.Optional[typing.List[_CfnTag_f6864754]],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__86f2160fe98930dc39f906ad9f2c393300ceda8a7d10c404b4037c4f4e05c2fd(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__edb66c8cd2afc503fd755d85a5a0eb16d09d82c0cd7ea0a2fb330635cb6d2480(
    value: typing.Optional[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__f57cdaed25fa064bea4736f3d69ea4c5db9b14362ae56db3436ee2094517f627(
    *,
    cognito_client_id: builtins.str,
    cognito_user_group: builtins.str,
    cognito_user_pool: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__8f5e2cb2957f9f729e42a31a66ae8409b24707fd26bae58160af286c86f6892c(
    *,
    cognito_member_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.CognitoMemberDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    oidc_member_definition: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.OidcMemberDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__a67a4b4b8346e83023d322c6d7f90630c9f952f317d53cc36a9906c33de4ccea(
    *,
    notification_topic_arn: builtins.str,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__74f817ac3b5bece92b045cdf0b84972864f8be367364ba082cd53e1732deba87(
    *,
    oidc_groups: typing.Sequence[builtins.str],
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__6ed0fa104d17e6f2523c2e22c3478df23a7c14bf46bbb1dc39031a5c0d6d362e(
    *,
    description: typing.Optional[builtins.str] = None,
    member_definitions: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Sequence[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.MemberDefinitionProperty, typing.Dict[builtins.str, typing.Any]]]]]] = None,
    notification_configuration: typing.Optional[typing.Union[_IResolvable_da3f097b, typing.Union[CfnWorkteam.NotificationConfigurationProperty, typing.Dict[builtins.str, typing.Any]]]] = None,
    tags: typing.Optional[typing.Sequence[typing.Union[_CfnTag_f6864754, typing.Dict[builtins.str, typing.Any]]]] = None,
    workforce_name: typing.Optional[builtins.str] = None,
    workteam_name: typing.Optional[builtins.str] = None,
) -> None:
    """Type checking stubs"""
    pass

def _typecheckingstub__ea5ef6bb1dcef938d1b2e2e52237c3ada34985058999f3b8f52f983e542d1f1b(
    grantee: _IGrantable_71c4f5de,
) -> None:
    """Type checking stubs"""
    pass
