





'''simple docstring'''

import json
import os

from ...utils.constants import SAGEMAKER_PARALLEL_EC2_INSTANCES, TORCH_DYNAMO_MODES
from ...utils.dataclasses import ComputeEnvironment, SageMakerDistributedType
from ...utils.imports import is_botoa_available
from .config_args import SageMakerConfig
from .config_utils import (
    DYNAMO_BACKENDS,
    _ask_field,
    _ask_options,
    _convert_dynamo_backend,
    _convert_mixed_precision,
    _convert_sagemaker_distributed_mode,
    _convert_yes_no_to_bool,
)


if is_botoa_available():
   import botoa  # noqa: F401







def  a__    (    lowercase :					Optional[int]				)		->		Union[str, Any]:





     """simple docstring"""

     _UpperCamelCase       =	botoa.client('''iam'''				)

     _UpperCamelCase       =	{
         '''Version''': '''2012-10-17''',
         '''Statement''': [
             {'''Effect''': '''Allow''', '''Principal''': {'''Service''': '''sagemaker.amazonaws.com'''}, '''Action''': '''sts:AssumeRole'''}
         ],
     }
     try:
          # create the role, associated with the chosen trust policy
          iam_client.create_role(
              RoleName=lowercase, AssumeRolePolicyDocument=json.dumps(lowercase, indent=2				)				)
          _UpperCamelCase       =	{
              '''Version''': '''2012-10-17''',
              '''Statement''': [
                  {
                      '''Effect''': '''Allow''',
                      '''Action''': [
                          '''sagemaker:*''',
                          '''ecr:GetDownloadUrlForLayer''',
                          '''ecr:BatchGetImage''',
                          '''ecr:BatchCheckLayerAvailability''',
                          '''ecr:GetAuthorizationToken''',
                          '''cloudwatch:PutMetricData''',
                          '''cloudwatch:GetMetricData''',
                          '''cloudwatch:GetMetricStatistics''',
                          '''cloudwatch:ListMetrics''',
                          '''logs:CreateLogGroup''',
                          '''logs:CreateLogStream''',
                          '''logs:DescribeLogStreams''',
                          '''logs:PutLogEvents''',
                          '''logs:GetLogEvents''',
                          '''s3:CreateBucket''',
                          '''s3:ListBucket''',
                          '''s3:GetBucketLocation''',
                          '''s3:GetObject''',
                          '''s3:PutObject''',
                      ],
                      '''Resource''': '''*''',
                  }
              ],
          }
          # attach policy to role
          iam_client.put_role_policy(
              RoleName=lowercase, PolicyName=F"""{role_name}_policy_permission""", PolicyDocument=json.dumps(lowercase, indent=2				), )
     except iam_client.exceptions.EntityAlreadyExistsException:
          print(F"""role {role_name} already exists. Using existing one"""				)







def  a__    (    lowercase :					Union[str, Any]				)		->		Optional[Any]:





     """simple docstring"""

     _UpperCamelCase       =	botoa.client('''iam'''				)
     return iam_client.get_role(RoleName=lowercase				)["Role"]["Arn"]







def  a__    (    )		->		Tuple:





     """simple docstring"""

     _UpperCamelCase       =	_ask_options(
         '''How do you want to authorize?''', ['''AWS Profile''', '''Credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) '''], lowercase, )
     _UpperCamelCase       =	None
     if credentials_configuration == 0:
          _UpperCamelCase       =	_ask_field('''Enter your AWS Profile name: [default] ''', default='''default'''				)
          _UpperCamelCase       =	aws_profile
     else:
          print(
              '''Note you will need to provide AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY when you launch you training script with,'''
              '''`accelerate launch --aws_access_key_id XXX --aws_secret_access_key YYY`'''				)
          _UpperCamelCase       =	_ask_field('''AWS Access Key ID: '''				)
          _UpperCamelCase       =	aws_access_key_id

          _UpperCamelCase       =	_ask_field('''AWS Secret Access Key: '''				)
          _UpperCamelCase       =	aws_secret_access_key

     _UpperCamelCase       =	_ask_field('''Enter your AWS Region: [us-east-1]''', default='''us-east-1'''				)
     _UpperCamelCase       =	aws_region

     _UpperCamelCase       =	_ask_options(
         '''Do you already have an IAM Role for executing Amazon SageMaker Training Jobs?''', ['''Provide IAM Role name''', '''Create new IAM role using credentials'''], lowercase, )
     if role_management == 0:
          _UpperCamelCase       =	_ask_field('''Enter your IAM role name: '''				)
     else:
          _UpperCamelCase       =	'''accelerate_sagemaker_execution_role'''
          print(F"""Accelerate will create an iam role \"{iam_role_name}\" using the provided credentials"""				)
          _create_iam_role_for_sagemaker(lowercase				)

     _UpperCamelCase       =	_ask_field(
         '''Do you want to use custom Docker image? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
     _UpperCamelCase       =	None
     if is_custom_docker_image:
          _UpperCamelCase       =	_ask_field('''Enter your Docker image: ''', lambda lowercase				: str(lowercase				).lower()				)

     _UpperCamelCase       =	_ask_field(
         '''Do you want to provide SageMaker input channels with data locations? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
     _UpperCamelCase       =	None
     if is_sagemaker_inputs_enabled:
          _UpperCamelCase       =	_ask_field(
              '''Enter the path to the SageMaker inputs TSV file with columns (channel_name, data_location): ''', lambda lowercase				: str(lowercase				).lower(), )

     _UpperCamelCase       =	_ask_field(
         '''Do you want to enable SageMaker metrics? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
     _UpperCamelCase       =	None
     if is_sagemaker_metrics_enabled:
          _UpperCamelCase       =	_ask_field(
              '''Enter the path to the SageMaker metrics TSV file with columns (metric_name, metric_regex): ''', lambda lowercase				: str(lowercase				).lower(), )

     _UpperCamelCase       =	_ask_options(
         '''What is the distributed mode?''', ['''No distributed training''', '''Data parallelism'''], _convert_sagemaker_distributed_mode, )
     _UpperCamelCase       =	{}
     _UpperCamelCase       =	_ask_field(
         '''Do you wish to optimize your script with torch dynamo?[yes/NO]:''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
     if use_dynamo:
          _UpperCamelCase       =	'''dynamo_'''
          _UpperCamelCase       =	_ask_options(
              '''Which dynamo backend would you like to use?''', [x.lower() for x in DYNAMO_BACKENDS], _convert_dynamo_backend, default=2, )
          _UpperCamelCase       =	_ask_field(
              '''Do you want to customize the defaults sent to torch.compile? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )

          if use_custom_options:
               _UpperCamelCase       =	_ask_options(
                   '''Which mode do you want to use?''', lowercase, lambda lowercase				: TORCH_DYNAMO_MODES[int(lowercase				)], default='''default''', )
               _UpperCamelCase       =	_ask_field(
                   '''Do you want the fullgraph mode or it is ok to break model into several subgraphs? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
               _UpperCamelCase       =	_ask_field(
                   '''Do you want to enable dynamic shape tracing? [yes/NO]: ''', _convert_yes_no_to_bool, default=lowercase, error_message='''Please enter yes or no.''', )
     _UpperCamelCase       =	'''Which EC2 instance type you want to use for your training?'''
     if distributed_type != SageMakerDistributedType.NO:
          _UpperCamelCase       =	_ask_options(
              lowercase, lowercase, lambda lowercase				: SAGEMAKER_PARALLEL_EC2_INSTANCES[int(lowercase				)]				)
     else:
          eca_instance_query += "? [ml.p3.2xlarge]:"
          _UpperCamelCase       =	_ask_field(lowercase, lambda lowercase				: str(lowercase				).lower(), default='''ml.p3.2xlarge'''				)

     _UpperCamelCase       =	1
     if distributed_type in (SageMakerDistributedType.DATA_PARALLEL, SageMakerDistributedType.MODEL_PARALLEL):
          _UpperCamelCase       =	_ask_field(
              '''How many machines do you want use? [1]: ''', lowercase, default=1, )

     _UpperCamelCase       =	_ask_options(
         '''Do you wish to use FP16 or BF16 (mixed precision)?''', ['''no''', '''fp16''', '''bf16''', '''fp8'''], _convert_mixed_precision, )

     if use_dynamo and mixed_precision == "no":
          print(
              '''Torch dynamo used without mixed precision requires TF32 to be efficient. Accelerate will enable it by default when launching your scripts.'''				)

     return SageMakerConfig(
         image_uri=lowercase, compute_environment=ComputeEnvironment.AMAZON_SAGEMAKER, distributed_type=lowercase, use_cpu=lowercase, dynamo_config=lowercase, eca_instance_type=lowercase, profile=lowercase, region=lowercase, iam_role_name=lowercase, mixed_precision=lowercase, num_machines=lowercase, sagemaker_inputs_file=lowercase, sagemaker_metrics_file=lowercase, )










'''simple docstring'''

from cva import destroyAllWindows, imread, imshow, waitKey







def  a__    (    lowercase :					str				)		->		Optional[int]:





     """simple docstring"""

     _UpperCamelCase   ,    _UpperCamelCase       =	img.shape[0], img.shape[1]

     # converting each pixel's color to its negative
     for i in range(lowercase				):
          for j in range(lowercase				):
               _UpperCamelCase       =	[255, 255, 255] - img[i][j]

     return img


if __name__ == "__main__":
   # read original image
   lowercase__						:      Optional[int]	=    imread('image_data/lena.jpg', 1)

   # convert to its negative
   lowercase__						:      Union[str, Any]	=    convert_to_negative(img)

   # show result image
   imshow('negative of original image', img)
   waitKey(0)
   destroyAllWindows()



