



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

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


SCREAMING_SNAKE_CASE__     :						List[str]	=  '''Create a default config file for Accelerate with only a few flags set.'''






def 				a  (     UpperCamelCase_    :    Tuple="no"      ,					UpperCamelCase_    :    str = default_json_config_file      ,					UpperCamelCase_    :    bool = False			)       ->	int:
		snake_case__	     =Path(UpperCamelCase_			)
		path.parent.mkdir(parents=UpperCamelCase_      ,					exist_ok=UpperCamelCase_			)
		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
		snake_case__	     =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}"""			)
		snake_case__	     ={
		    'compute_environment': 'LOCAL_MACHINE',
		    'mixed_precision': mixed_precision,
		}
		if torch.cuda.is_available():
				snake_case__	     =torch.cuda.device_count()
				snake_case__	     =num_gpus
				snake_case__	     =False
				if num_gpus > 1:
						snake_case__	     ='MULTI_GPU'
				else:
						snake_case__	     ='NO'
		elif is_xpu_available() and use_xpu:
				snake_case__	     =torch.xpu.device_count()
				snake_case__	     =num_xpus
				snake_case__	     =False
				if num_xpus > 1:
						snake_case__	     ='MULTI_XPU'
				else:
						snake_case__	     ='NO'
		elif is_npu_available():
				snake_case__	     =torch.npu.device_count()
				snake_case__	     =num_npus
				snake_case__	     =False
				if num_npus > 1:
						snake_case__	     ='MULTI_NPU'
				else:
						snake_case__	     ='NO'
		else:
				snake_case__	     =0
				snake_case__	     =True
				snake_case__	     =1
				snake_case__	     ='NO'
		snake_case__	     =ClusterConfig(**UpperCamelCase_			)
		config.to_json_file(UpperCamelCase_			)
		return path






def 				a  (     UpperCamelCase_    :    List[Any]      ,					UpperCamelCase_    :    str			)       ->	Any:
		snake_case__	     =parser.add_parser('default'      ,					parents=UpperCamelCase_      ,					help=UpperCamelCase_      ,					formatter_class=UpperCamelCase_			)
		parser.add_argument(
		    '--config_file'      ,					default=UpperCamelCase_      ,					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=UpperCamelCase_      ,					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=UpperCamelCase_			)
		return parser






def 				a  (     UpperCamelCase_    :    List[str]			)       ->	Union[str, Any]:
		snake_case__	     =write_basic_config(args.mixed_precision      ,					args.save_location			)
		if config_file:
				print(f"""accelerate configuration saved at {config_file}"""			)









'''simple docstring'''

from typing import TYPE_CHECKING

from ...utils import _LazyModule


SCREAMING_SNAKE_CASE__     :						Dict	=  {'''tokenization_wav2vec2_phoneme''': ['''Wav2Vec2PhonemeCTCTokenizer''']}


if TYPE_CHECKING:
			from .tokenization_wavaveca_phoneme import WavaVecaPhonemeCTCTokenizer
else:
			import sys

			SCREAMING_SNAKE_CASE__     :						Dict	=  _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)




