


# 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


_snake_case             =     '''Create a default config file for Accelerate with only a few flags set.'''






def 		lowercase_(  SCREAMING_SNAKE_CASE_="no"      ,						SCREAMING_SNAKE_CASE_ = default_json_config_file      ,						SCREAMING_SNAKE_CASE_ = False	):


  '''simple docstring'''

  lowerCamelCase :					List[str]    =				Path(SCREAMING_SNAKE_CASE_	)
  path.parent.mkdir(parents=SCREAMING_SNAKE_CASE_      ,						exist_ok=SCREAMING_SNAKE_CASE_	)
  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
  lowerCamelCase :					Optional[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}"""	)
  lowerCamelCase :					int    =				{
      "compute_environment": "LOCAL_MACHINE",
      "mixed_precision": mixed_precision,
  }
  if torch.cuda.is_available():
    lowerCamelCase :					Union[str, Any]    =				torch.cuda.device_count()
    lowerCamelCase :					List[str]    =				num_gpus
    lowerCamelCase :					int    =				False
    if num_gpus > 1:
      lowerCamelCase :					Dict    =				"MULTI_GPU"
    else:
      lowerCamelCase :					str    =				"NO"
  elif is_xpu_available() and use_xpu:
    lowerCamelCase :					Optional[Any]    =				torch.xpu.device_count()
    lowerCamelCase :					Any    =				num_xpus
    lowerCamelCase :					Dict    =				False
    if num_xpus > 1:
      lowerCamelCase :					int    =				"MULTI_XPU"
    else:
      lowerCamelCase :					Dict    =				"NO"
  elif is_npu_available():
    lowerCamelCase :					str    =				torch.npu.device_count()
    lowerCamelCase :					str    =				num_npus
    lowerCamelCase :					Union[str, Any]    =				False
    if num_npus > 1:
      lowerCamelCase :					Any    =				"MULTI_NPU"
    else:
      lowerCamelCase :					Union[str, Any]    =				"NO"
  else:
    lowerCamelCase :					Any    =				0
    lowerCamelCase :					List[Any]    =				True
    lowerCamelCase :					str    =				1
    lowerCamelCase :					Optional[int]    =				"NO"
  lowerCamelCase :					Optional[Any]    =				ClusterConfig(**SCREAMING_SNAKE_CASE_	)
  config.to_json_file(SCREAMING_SNAKE_CASE_	)
  return path






def 		lowercase_(  SCREAMING_SNAKE_CASE_      ,						SCREAMING_SNAKE_CASE_	):


  '''simple docstring'''

  lowerCamelCase :					Dict    =				parser.add_parser("default"      ,						parents=SCREAMING_SNAKE_CASE_      ,						help=SCREAMING_SNAKE_CASE_      ,						formatter_class=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'."
      )      ,						dest="save_location"      ,						)

  parser.add_argument(
      "--mixed_precision"      ,						choices=["no", "fp16", "bf16"]      ,						type=SCREAMING_SNAKE_CASE_      ,						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=SCREAMING_SNAKE_CASE_	)
  return parser







def 		lowercase_(  SCREAMING_SNAKE_CASE_	):


  '''simple docstring'''

  lowerCamelCase :					Tuple    =				write_basic_config(args.mixed_precision      ,						args.save_location	)
  if config_file:
    print(f"""accelerate configuration saved at {config_file}"""	)







import warnings

from ...utils import logging
from .image_processing_dpt import DPTImageProcessor


_snake_case             =     logging.get_logger(__name__)
class 	UpperCAmelCase_					(					UpperCamelCase    ):

   '''simple docstring'''




   def __init__(		self						,				*__A						,				**__A ):






     """simple docstring"""





     warnings.warn(
         "The class DPTFeatureExtractor is deprecated and will be removed in version 5 of Transformers. Please"
         " use DPTImageProcessor instead."						,				__A						,				)
     super().__init__(*__A						,				**__A )



