




# 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	:       str     =	"Create a default config file for Accelerate with only a few flags set."




def     __magic_name__       (				A	:      Any="no",						A	:      str = default_json_config_file,						A	:      bool = False     ):






			'''simple docstring'''







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




def     __magic_name__       (				A	:      str,						A	:      int     ):






			'''simple docstring'''







			a					=    parser.add_parser("default",						parents=A,						help=A,						formatter_class=A     )
			parser.add_argument(
			    "--config_file",						default=A,						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=A,						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=A     )
			return parser






def     __magic_name__       (				A	:      Any     ):






			'''simple docstring'''







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












from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_torch_available,
    is_vision_available,
)


__lowerCAmelCase	:       Dict     =	{
    'configuration_blip': [
        'BLIP_PRETRAINED_CONFIG_ARCHIVE_MAP',
        'BlipConfig',
        'BlipTextConfig',
        'BlipVisionConfig',
    ],
    'processing_blip': ['BlipProcessor'],
}

try:
		if not is_vision_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__lowerCAmelCase	:       Optional[Any]     =	['BlipImageProcessor']


try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__lowerCAmelCase	:       List[Any]     =	[
		    'BLIP_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'BlipModel',
		    'BlipPreTrainedModel',
		    'BlipForConditionalGeneration',
		    'BlipForQuestionAnswering',
		    'BlipVisionModel',
		    'BlipTextModel',
		    'BlipForImageTextRetrieval',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		__lowerCAmelCase	:       Any     =	[
		    'TF_BLIP_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'TFBlipModel',
		    'TFBlipPreTrainedModel',
		    'TFBlipForConditionalGeneration',
		    'TFBlipForQuestionAnswering',
		    'TFBlipVisionModel',
		    'TFBlipTextModel',
		    'TFBlipForImageTextRetrieval',
		]

if TYPE_CHECKING:
		from .configuration_blip import BLIP_PRETRAINED_CONFIG_ARCHIVE_MAP, BlipConfig, BlipTextConfig, BlipVisionConfig
		from .processing_blip import BlipProcessor

		try:
				if not is_vision_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .image_processing_blip import BlipImageProcessor

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_blip import (
				    BLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
				    BlipForConditionalGeneration,
				    BlipForImageTextRetrieval,
				    BlipForQuestionAnswering,
				    BlipModel,
				    BlipPreTrainedModel,
				    BlipTextModel,
				    BlipVisionModel,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_blip import (
				    TF_BLIP_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFBlipForConditionalGeneration,
				    TFBlipForImageTextRetrieval,
				    TFBlipForQuestionAnswering,
				    TFBlipModel,
				    TFBlipPreTrainedModel,
				    TFBlipTextModel,
				    TFBlipVisionModel,
				)

else:
		import sys

		__lowerCAmelCase	:       List[str]     =	_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)






