
import copy

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto.configuration_auto import AutoConfig


A  :			Union[str, Any]     				=				logging.get_logger(__name__)

A  :			Optional[Any]     				=				{
    'facebook/musicgen-small': 'https://huggingface.co/facebook/musicgen-small/resolve/main/config.json',
    # See all Musicgen models at https://huggingface.co/models?filter=musicgen
}







class     __A(				a    ):
				snake_case_		     =					'''musicgen_decoder'''
				snake_case_		     =					['''past_key_values''']




				def __init__(  self	,  _snake_case=2_048	,  _snake_case=2_048	,  _snake_case=24	,  _snake_case=4_096	,  _snake_case=16	,  _snake_case=0.0	,  _snake_case=True	,  _snake_case="gelu"	,  _snake_case=1_024	,  _snake_case=0.1	,  _snake_case=0.0	,  _snake_case=0.0	,  _snake_case=0.02	,  _snake_case=False	,  _snake_case=4	,  _snake_case=2_048	,  _snake_case=2_048	,  _snake_case=None	,  _snake_case=False	,  **_snake_case	,  )					->   Tuple:


								'''simple docstring'''




								__a    							=					vocab_size
								__a    							=					max_position_embeddings
								__a    							=					hidden_size
								__a    							=					ffn_dim
								__a    							=					num_hidden_layers
								__a    							=					num_attention_heads
								__a    							=					dropout
								__a    							=					attention_dropout
								__a    							=					activation_dropout
								__a    							=					activation_function
								__a    							=					initializer_factor
								__a    							=					layerdrop
								__a    							=					use_cache
								__a    							=					scale_embedding  # scale factor will be sqrt(d_model) if True
								__a    							=					num_codebooks
								super().__init__(
								    pad_token_id=_snake_case	,  bos_token_id=_snake_case	,  eos_token_id=_snake_case	,  tie_word_embeddings=_snake_case	,  **_snake_case	,  )







class     __A(				a    ):
				snake_case_		     =					'''musicgen'''
				snake_case_		     =					True




				def __init__(  self	,  **_snake_case       )					->   Any:


								'''simple docstring'''




								super().__init__(**_snake_case       )
								if "text_encoder" not in kwargs or "audio_encoder" not in kwargs or "decoder" not in kwargs:
												raise ValueError('''Config has to be initialized with text_encoder, audio_encoder and decoder config'''       )

								__a    							=					kwargs.pop('''text_encoder'''       )
								__a    							=					text_encoder_config.pop('''model_type'''       )

								__a    							=					kwargs.pop('''audio_encoder'''       )
								__a    							=					audio_encoder_config.pop('''model_type'''       )

								__a    							=					kwargs.pop('''decoder'''       )

								__a    							=					AutoConfig.for_model(_snake_case	,  **_snake_case       )
								__a    							=					AutoConfig.for_model(_snake_case	,  **_snake_case       )
								__a    							=					MusicgenDecoderConfig(**_snake_case       )
								__a    							=					True




				@classmethod
				def        SCREAMING_SNAKE_CASE_	(  cls	,  _snake_case	,  _snake_case	,  _snake_case	,  **_snake_case	,  )					->   Optional[int]:


								'''simple docstring'''




								return cls(
								    text_encoder=text_encoder_config.to_dict()	,  audio_encoder=audio_encoder_config.to_dict()	,  decoder=decoder_config.to_dict()	,  **_snake_case	,  )




				def        SCREAMING_SNAKE_CASE_	(  self       )					->   Optional[Any]:


								'''simple docstring'''




								__a    							=					copy.deepcopy(self.__dict__       )
								__a    							=					self.text_encoder.to_dict()
								__a    							=					self.audio_encoder.to_dict()
								__a    							=					self.decoder.to_dict()
								__a    							=					self.__class__.model_type
								return output

import importlib
import importlib.metadata
import os
import warnings
from distutils.util import strtobool
from functools import lru_cache

import torch
from packaging import version
from packaging.version import parse

from .environment import parse_flag_from_env
from .versions import compare_versions, is_torch_version


try:
					import torch_xla.core.xla_model as xm  # noqa: F401

					A  :			List[str]     				=				True
except ImportError:
					A  :			List[Any]     				=				False


# Cache this result has it's a C FFI call which can be pretty time-consuming
A  :			str     				=				torch.distributed.is_available()


def 					__lowerCAmelCase    (    a__						) ->						List[str]:
				# Check we're not importing a "pkg_name" directory somewhere but the actual library by trying to grab the version
				__a    							=					importlib.util.find_spec(a__						) is not None
				if package_exists:
								try:
												__a    							=					importlib.metadata.metadata(a__						)
												return True
								except importlib.metadata.PackageNotFoundError:
												return False


def 					__lowerCAmelCase    (    ) ->						bool:
				return _torch_distributed_available


def 					__lowerCAmelCase    (    ) ->						Tuple:
				try:
								pass
				except ImportError:
								print(
								    '''Intel(R) oneCCL Bindings for PyTorch* is required to run DDP on Intel(R) GPUs, but it is not'''
								    ''' detected. If you see \"ValueError: Invalid backend: \'ccl\'\" error, please install Intel(R) oneCCL'''
								    ''' Bindings for PyTorch*.'''						)
				return (
				    importlib.util.find_spec('''torch_ccl'''						) is not None
				    or importlib.util.find_spec('''oneccl_bindings_for_pytorch'''						) is not None
				)


def 					__lowerCAmelCase    (    ) ->						Union[str, Any]:
				return importlib.metadata.version('''oneccl_bind_pt'''						)


def 					__lowerCAmelCase    (    ) ->						Dict:
				return _is_package_available('''transformer_engine'''						)


@lru_cache
def 					__lowerCAmelCase    (    a__=True						) ->						Union[str, Any]:
				# Due to bugs on the amp series GPUs, we disable torch-xla on them
				if torch.cuda.is_available():
								return False
				if _tpu_available and check_device:
								try:
												# Will raise a RuntimeError if no XLA configuration is found
												__a    							=					xm.xla_device()
												return True
								except RuntimeError:
												return False
				return _tpu_available


def 					__lowerCAmelCase    (    ) ->						Any:
				return _is_package_available('''deepspeed'''						)


def 					__lowerCAmelCase    (    a__=False						) ->						Optional[Any]:
				if is_tpu_available():
								return not ignore_tpu
				if torch.cuda.is_available():
								return torch.cuda.is_bfaa_supported()
				if is_npu_available():
								return False
				return True


def 					__lowerCAmelCase    (    ) ->						List[str]:
				__a    							=					_is_package_available('''bitsandbytes'''						)
				if package_exists:
								__a    							=					version.parse(importlib.metadata.version('''bitsandbytes'''						)						)
								return compare_versions(a__		,					'''>='''		,					'''0.39.0'''						)
				return False


def 					__lowerCAmelCase    (    ) ->						Any:
				__a    							=					_is_package_available('''bitsandbytes'''						)
				if package_exists:
								__a    							=					version.parse(importlib.metadata.version('''bitsandbytes'''						)						)
								return compare_versions(a__		,					'''>='''		,					'''0.37.2'''						)
				return False


def 					__lowerCAmelCase    (    ) ->						int:
				return _is_package_available('''bitsandbytes'''						)


def 					__lowerCAmelCase    (    ) ->						str:
				if strtobool(os.environ.get('''ACCELERATE_USE_MEGATRON_LM'''		,					'''False'''						)						) == 1:
								__a    							=					importlib.util.find_spec('''megatron'''						) is not None
								if package_exists:
												try:
																__a    							=					parse(importlib.metadata.version('''megatron-lm'''						)						)
																return compare_versions(a__		,					'''>='''		,					'''2.2.0'''						)
												except Exception as e:
																warnings.warn(F"""Parse Megatron version failed. Exception:{e}"""						)
																return False


def 					__lowerCAmelCase    (    ) ->						List[str]:
				return _is_package_available('''safetensors'''						)


def 					__lowerCAmelCase    (    ) ->						Optional[Any]:
				return _is_package_available('''transformers'''						)


def 					__lowerCAmelCase    (    ) ->						int:
				return _is_package_available('''datasets'''						)


def 					__lowerCAmelCase    (    ) ->						Optional[int]:
				return _is_package_available('''aim'''						)


def 					__lowerCAmelCase    (    ) ->						List[Any]:
				return _is_package_available('''tensorboard'''						) or _is_package_available('''tensorboardX'''						)


def 					__lowerCAmelCase    (    ) ->						List[Any]:
				return _is_package_available('''wandb'''						)


def 					__lowerCAmelCase    (    ) ->						Optional[int]:
				return _is_package_available('''comet_ml'''						)


def 					__lowerCAmelCase    (    ) ->						str:
				return _is_package_available('''boto3'''						)


def 					__lowerCAmelCase    (    ) ->						Optional[Any]:
				if _is_package_available('''rich'''						):
								if "ACCELERATE_DISABLE_RICH" in os.environ:
												warnings.warn(
												    '''`ACCELERATE_DISABLE_RICH` is deprecated and will be removed in v0.22.0 and deactivated by default. Please use `ACCELERATE_ENABLE_RICH` if you wish to use `rich`.'''						)
												return not parse_flag_from_env('''ACCELERATE_DISABLE_RICH'''		,					a__						)
								return parse_flag_from_env('''ACCELERATE_ENABLE_RICH'''		,					a__						)
				return False


def 					__lowerCAmelCase    (    ) ->						Any:
				return _is_package_available('''sagemaker'''						)


def 					__lowerCAmelCase    (    ) ->						int:
				return _is_package_available('''tqdm'''						)


def 					__lowerCAmelCase    (    ) ->						Union[str, Any]:
				return _is_package_available('''mlflow'''						)


def 					__lowerCAmelCase    (    ) ->						Optional[Any]:
				return is_torch_version('''>='''		,					'''1.12'''						) and torch.backends.mps.is_available() and torch.backends.mps.is_built()


def 					__lowerCAmelCase    (    ) ->						str:
				def get_major_and_minor_from_version(a__						):
								return str(version.parse(a__						).major						) + "." + str(version.parse(a__						).minor						)

				__a    							=					importlib.metadata.version('''torch'''						)
				if importlib.util.find_spec('''intel_extension_for_pytorch'''						) is None:
								return False
				__a    							=					'''N/A'''
				try:
								__a    							=					importlib.metadata.version('''intel_extension_for_pytorch'''						)
				except importlib.metadata.PackageNotFoundError:
								return False
				__a    							=					get_major_and_minor_from_version(_torch_version						)
				__a    							=					get_major_and_minor_from_version(_ipex_version						)
				if torch_major_and_minor != ipex_major_and_minor:
								warnings.warn(
								    F"""Intel Extension for PyTorch {ipex_major_and_minor} needs to work with PyTorch {ipex_major_and_minor}.*,"""
								    F""" but PyTorch {_torch_version} is found. Please switch to the matching version and run again."""						)
								return False
				return True


@lru_cache
def 					__lowerCAmelCase    (    a__=False						) ->						List[Any]:
				if importlib.util.find_spec('''torch'''						) is None or importlib.util.find_spec('''torch_npu'''						) is None:
								return False

				import torch
				import torch_npu  # noqa: F401

				if check_device:
								try:
												# Will raise a RuntimeError if no NPU is found
												__a    							=					torch.npu.device_count()
												return torch.npu.is_available()
								except RuntimeError:
												return False
				return hasattr(a__		,					'''npu'''						) and torch.npu.is_available()






@lru_cache
def 					__lowerCAmelCase    (    a__=False						) ->						Union[str, Any]:
				if not parse_flag_from_env('''ACCELERATE_USE_XPU'''		,					default=a__						):
								return False
				if is_ipex_available():
								import torch

								if is_torch_version('''<='''		,					'''1.12'''						):
												return False
				else:
								return False

				import intel_extension_for_pytorch  # noqa: F401

				if check_device:
								try:
												# Will raise a RuntimeError if no XPU  is found
												__a    							=					torch.xpu.device_count()
												return torch.xpu.is_available()
								except RuntimeError:
												return False
				return hasattr(a__		,					'''xpu'''						) and torch.xpu.is_available()