



from timeit import timeit

UpperCAmelCase_									=							{
    "MALAYALAM": True,
    "String": False,
    "rotor": True,
    "level": True,
    "A": True,
    "BB": True,
    "ABC": False,
    "amanaplanacanalpanama": True,  # "a man a plan a canal panama"
}
# Ensure our test data is valid
assert all((key == key[::-1]) is value for key, value in test_data.items())
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	str				)->bool:
      _lowerCAmelCase 			=  0
      _lowerCAmelCase 			=  len(_SCREAMING_SNAKE_CASE				) - 1
      while start_i < end_i:
            if s[start_i] == s[end_i]:
                  start_i += 1
                  end_i -= 1
            else:
                  return False
      return True
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	str				)->bool:
      _lowerCAmelCase 			=  len(_SCREAMING_SNAKE_CASE				) // 2
      _lowerCAmelCase 			=  len(_SCREAMING_SNAKE_CASE				)

      # We need to traverse till half of the length of string
      # as we can get access of the i'th last element from
      # i'th index.
      # eg: [0,1,2,3,4,5] => 4th index can be accessed
      # with the help of 1st index (i==n-i-1)
      # where n is length of string
      return all(s[i] == s[n - i - 1] for i in range(_SCREAMING_SNAKE_CASE				)				)
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	str				)->bool:
      if len(_SCREAMING_SNAKE_CASE				) <= 2:
            return True
      if s[0] == s[len(_SCREAMING_SNAKE_CASE				) - 1]:
            return is_palindrome_recursive(s[1:-1]				)
      else:
            return False
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	str				)->bool:
      return s == s[::-1]
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	str				)->None:
      _lowerCAmelCase 			=  f'''all({name}(key) is value for key, value in test_data.items())'''
      _lowerCAmelCase 			=  f'''from __main__ import test_data, {name}'''
      _lowerCAmelCase 			=  5_0_0_0_0_0
      _lowerCAmelCase 			=  timeit(stmt=_SCREAMING_SNAKE_CASE     ,				setup=_SCREAMING_SNAKE_CASE     ,				number=_SCREAMING_SNAKE_CASE				)
      print(f'''{name:<35} finished {number:,} runs in {result:.5f} seconds'''				)


if __name__ == "__main__":
    for key, value in test_data.items():
        assert is_palindrome(key) is is_palindrome_recursive(key)
        assert is_palindrome(key) is is_palindrome_slice(key)
        print(F"""{key:21} {value}""")
    print("a man a plan a canal panama")

    # finished 500,000 runs in 0.46793 seconds
    benchmark_function("is_palindrome_slice")
    # finished 500,000 runs in 0.85234 seconds
    benchmark_function("is_palindrome")
    # finished 500,000 runs in 1.32028 seconds
    benchmark_function("is_palindrome_recursive")
    # finished 500,000 runs in 2.08679 seconds
    benchmark_function("is_palindrome_traversal")




# 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 argparse
import os

from accelerate.utils import ComputeEnvironment

from .cluster import get_cluster_input
from .config_args import cache_dir, default_config_file, default_yaml_config_file, load_config_from_file  # noqa: F401
from .config_utils import _ask_field, _ask_options, _convert_compute_environment  # noqa: F401
from .sagemaker import get_sagemaker_input


UpperCAmelCase_									=							"Launches a series of prompts to create and save a `default_config.yaml` configuration file for your training system. Should always be ran first on your machine"
def 							UpperCAmelCase__		(				)->Any:
      _lowerCAmelCase 			=  _ask_options(
          '''In which compute environment are you running?'''     ,				['''This machine''', '''AWS (Amazon SageMaker)''']     ,				_convert_compute_environment     ,				)
      if compute_environment == ComputeEnvironment.AMAZON_SAGEMAKER:
            _lowerCAmelCase 			=  get_sagemaker_input()
      else:
            _lowerCAmelCase 			=  get_cluster_input()
      return config
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	int=None				)->str:
      if subparsers is not None:
            _lowerCAmelCase 			=  subparsers.add_parser('''config'''     ,				description=_SCREAMING_SNAKE_CASE				)
      else:
            _lowerCAmelCase 			=  argparse.ArgumentParser('''Accelerate config command'''     ,				description=_SCREAMING_SNAKE_CASE				)

      parser.add_argument(
          '''--config_file'''     ,				default=_SCREAMING_SNAKE_CASE     ,				help=(
              '''The path to use to store the config file. Will default to a file named default_config.yaml in the cache '''
              '''location, which is the content of the environment `HF_HOME` suffixed with \'accelerate\', or if you don\'t have '''
              '''such an environment variable, your cache directory (\'~/.cache\' or the content of `XDG_CACHE_HOME`) suffixed '''
              '''with \'huggingface\'.'''
          )     ,				)

      if subparsers is not None:
            parser.set_defaults(func=_SCREAMING_SNAKE_CASE				)
      return parser
def 							UpperCAmelCase__		(				_SCREAMING_SNAKE_CASE   :	Dict				)->str:
      _lowerCAmelCase 			=  get_user_input()
      if args.config_file is not None:
            _lowerCAmelCase 			=  args.config_file
      else:
            if not os.path.isdir(_SCREAMING_SNAKE_CASE				):
                  os.makedirs(_SCREAMING_SNAKE_CASE				)
            _lowerCAmelCase 			=  default_yaml_config_file

      if config_file.endswith('''.json'''				):
            config.to_json_file(_SCREAMING_SNAKE_CASE				)
      else:
            config.to_yaml_file(_SCREAMING_SNAKE_CASE				)
      print(f'''accelerate configuration saved at {config_file}'''				)
def 							UpperCAmelCase__		(				)->List[Any]:
      _lowerCAmelCase 			=  config_command_parser()
      _lowerCAmelCase 			=  parser.parse_args()
      config_command(_SCREAMING_SNAKE_CASE				)


if __name__ == "__main__":
    main()