






# 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.

from pathlib import Path

import torch

from ...utils import is_npu_available, is_xpu_available
from .config_args import ClusterConfig, default_json_config_file
from .config_utils import SubcommandHelpFormatter


lowerCamelCase     :							Tuple    ='''Create a default config file for Accelerate with only a few flags set.'''







def 		SCREAMING_SNAKE_CASE							( __lowerCAmelCase="no" ,   __lowerCAmelCase = default_json_config_file ,   __lowerCAmelCase = False      )			->     Any:
     UpperCamelCase__      :       Any	    =  Path(__lowerCAmelCase      )
     path.parent.mkdir(parents=__lowerCAmelCase ,   exist_ok=__lowerCAmelCase      )
     if path.exists():
          print(
              f'Configuration already exists at {save_location}, will not override. Run `accelerate config` manually or pass a different `save_location`.'      )
          return False
     UpperCamelCase__      :       Union[str, Any]	    =  mixed_precision.lower()
     if mixed_precision not in ["no", "fp16", "bf16", "fp8"]:
          raise ValueError(
              f'`mixed_precision` should be one of \'no\', \'fp16\', \'bf16\', or \'fp8\'. Received {mixed_precision}'      )
     UpperCamelCase__      :       Dict	    =  {
         "compute_environment": "LOCAL_MACHINE",
         "mixed_precision": mixed_precision,
     }
     if torch.cuda.is_available():
          UpperCamelCase__      :       List[str]	    =  torch.cuda.device_count()
          UpperCamelCase__      :       List[str]	    =  num_gpus
          UpperCamelCase__      :       Optional[Any]	    =  False
          if num_gpus > 1:
               UpperCamelCase__      :       int	    =  "MULTI_GPU"
          else:
               UpperCamelCase__      :       str	    =  "NO"
     elif is_xpu_available() and use_xpu:
          UpperCamelCase__      :       str	    =  torch.xpu.device_count()
          UpperCamelCase__      :       List[str]	    =  num_xpus
          UpperCamelCase__      :       Union[str, Any]	    =  False
          if num_xpus > 1:
               UpperCamelCase__      :       str	    =  "MULTI_XPU"
          else:
               UpperCamelCase__      :       Dict	    =  "NO"
     elif is_npu_available():
          UpperCamelCase__      :       Union[str, Any]	    =  torch.npu.device_count()
          UpperCamelCase__      :       Optional[int]	    =  num_npus
          UpperCamelCase__      :       Optional[int]	    =  False
          if num_npus > 1:
               UpperCamelCase__      :       Dict	    =  "MULTI_NPU"
          else:
               UpperCamelCase__      :       Optional[Any]	    =  "NO"
     else:
          UpperCamelCase__      :       str	    =  0
          UpperCamelCase__      :       List[str]	    =  True
          UpperCamelCase__      :       List[str]	    =  1
          UpperCamelCase__      :       Union[str, Any]	    =  "NO"
     UpperCamelCase__      :       Dict	    =  ClusterConfig(**__lowerCAmelCase      )
     config.to_json_file(__lowerCAmelCase      )
     return path







def 		SCREAMING_SNAKE_CASE							( __lowerCAmelCase ,   __lowerCAmelCase      )			->     List[str]:
     UpperCamelCase__      :       Union[str, Any]	    =  parser.add_parser("default" ,   parents=__lowerCAmelCase ,   help=__lowerCAmelCase ,   formatter_class=__lowerCAmelCase      )
     parser.add_argument(
         "--config_file" ,   default=__lowerCAmelCase ,   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'."
         ) ,   dest="save_location" ,   )

     parser.add_argument(
         "--mixed_precision" ,   choices=["no", "fp16", "bf16"] ,   type=__lowerCAmelCase ,   help="Whether or not to use mixed precision training. "
         "Choose between FP16 and BF16 (bfloat16) training. "
         "BF16 training is only supported on Nvidia Ampere GPUs and PyTorch 1.10 or later." ,   default="no" ,   )
     parser.set_defaults(func=__lowerCAmelCase      )
     return parser







def 		SCREAMING_SNAKE_CASE							( __lowerCAmelCase      )			->     Optional[int]:
     UpperCamelCase__      :       Dict	    =  write_basic_config(args.mixed_precision ,   args.save_location      )
     if config_file:
          print(f'accelerate configuration saved at {config_file}'      )







import re







def 		SCREAMING_SNAKE_CASE							( __lowerCAmelCase      )			->     bool:
     UpperCamelCase__      :       Union[str, Any]	    =  re.compile(
         R"^(?:0|94|\+94|0{2}94)" R"7(0|1|2|4|5|6|7|8)" R"(-| |)" R"\d{7}$"      )

     return bool(re.search(__lowerCAmelCase ,   __lowerCAmelCase      )      )


if __name__ == "__main__":
 lowerCamelCase     :							Union[str, Any]    ='''0094702343221'''

 print(is_sri_lankan_phone_number(phone))