

"""simple docstring"""



# Copyright 2021 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
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  _snake_case     (    UpperCAmelCase_  :					List[Any]			):
     A__										=  botoa.client("""iam"""			)

     A__										=  {
         "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=_lowerCAmelCase					,   AssumeRolePolicyDocument=json.dumps(_lowerCAmelCase					,   indent=2			)			)
          A__										=  {
              "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=_lowerCAmelCase					,   PolicyName=F"""{role_name}_policy_permission"""					,   PolicyDocument=json.dumps(_lowerCAmelCase					,   indent=2			)					,   )
     except iam_client.exceptions.EntityAlreadyExistsException:
          print(F"""role {role_name} already exists. Using existing one"""			)





def  _snake_case     (    UpperCAmelCase_  :					Optional[int]			):
     A__										=  botoa.client("""iam"""			)
     return iam_client.get_role(RoleName=_lowerCAmelCase			)["Role"]["Arn"]





def  _snake_case     (    ):
     A__										=  _ask_options(
         """How do you want to authorize?"""					,   ["""AWS Profile""", """Credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) """]					,   _lowerCAmelCase					,   )
     A__										=  None
     if credentials_configuration == 0:
          A__										=  _ask_field("""Enter your AWS Profile name: [default] """					,   default="""default"""			)
          A__										=  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`"""			)
          A__										=  _ask_field("""AWS Access Key ID: """			)
          A__										=  aws_access_key_id

          A__										=  _ask_field("""AWS Secret Access Key: """			)
          A__										=  aws_secret_access_key

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

     A__										=  _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"""]					,   _lowerCAmelCase					,   )
     if role_management == 0:
          A__										=  _ask_field("""Enter your IAM role name: """			)
     else:
          A__										=  "accelerate_sagemaker_execution_role"
          print(F"""Accelerate will create an iam role \"{iam_role_name}\" using the provided credentials"""			)
          _create_iam_role_for_sagemaker(_lowerCAmelCase			)

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

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

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

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

          if use_custom_options:
               A__										=  _ask_options(
                   """Which mode do you want to use?"""					,   _lowerCAmelCase					,   lambda UpperCAmelCase_			: TORCH_DYNAMO_MODES[int(_lowerCAmelCase			)]					,   default="""default"""					,   )
               A__										=  _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=_lowerCAmelCase					,   error_message="""Please enter yes or no."""					,   )
               A__										=  _ask_field(
                   """Do you want to enable dynamic shape tracing? [yes/NO]: """					,   _convert_yes_no_to_bool					,   default=_lowerCAmelCase					,   error_message="""Please enter yes or no."""					,   )
     A__										=  "Which EC2 instance type you want to use for your training?"
     if distributed_type != SageMakerDistributedType.NO:
          A__										=  _ask_options(
              _lowerCAmelCase					,   _lowerCAmelCase					,   lambda UpperCAmelCase_			: SAGEMAKER_PARALLEL_EC2_INSTANCES[int(_lowerCAmelCase			)]			)
     else:
          eca_instance_query += "? [ml.p3.2xlarge]:"
          A__										=  _ask_field(_lowerCAmelCase					,   lambda UpperCAmelCase_			: str(_lowerCAmelCase			).lower()					,   default="""ml.p3.2xlarge"""			)

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

     A__										=  _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=_lowerCAmelCase					,   compute_environment=ComputeEnvironment.AMAZON_SAGEMAKER					,   distributed_type=_lowerCAmelCase					,   use_cpu=_lowerCAmelCase					,   dynamo_config=_lowerCAmelCase					,   eca_instance_type=_lowerCAmelCase					,   profile=_lowerCAmelCase					,   region=_lowerCAmelCase					,   iam_role_name=_lowerCAmelCase					,   mixed_precision=_lowerCAmelCase					,   num_machines=_lowerCAmelCase					,   sagemaker_inputs_file=_lowerCAmelCase					,   sagemaker_metrics_file=_lowerCAmelCase					,   )








"""simple docstring"""



def  _snake_case     (    UpperCAmelCase_  :					list			):
     if len(UpperCAmelCase_			) <= 1:
          return lst

     A__										=  1

     while i < len(UpperCAmelCase_			):
          if lst[i - 1] <= lst[i]:
               i += 1
          else:
               A__			,				A__										=  lst[i], lst[i - 1]
               i -= 1
               if i == 0:
                    A__										=  1

     return lst


if __name__ == "__main__":
 SCREAMING_SNAKE_CASE_					:	Union[str, Any]							  =						input('Enter numbers separated by a comma:\n').strip()
 SCREAMING_SNAKE_CASE_					:	Union[str, Any]							  =						[int(item) for item in user_input.split(',')]
 print(gnome_sort(unsorted))






