





from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCAmelCase_  							=				{
    'configuration_whisper': ['WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'WhisperConfig', 'WhisperOnnxConfig'],
    'feature_extraction_whisper': ['WhisperFeatureExtractor'],
    'processing_whisper': ['WhisperProcessor'],
    'tokenization_whisper': ['WhisperTokenizer'],
}

try:
  if not is_tokenizers_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  UpperCAmelCase_  							=				['WhisperTokenizerFast']

try:
  if not is_torch_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  UpperCAmelCase_  							=				[
      'WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
      'WhisperForConditionalGeneration',
      'WhisperModel',
      'WhisperPreTrainedModel',
      'WhisperForAudioClassification',
  ]

try:
  if not is_tf_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  UpperCAmelCase_  							=				[
      'TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST',
      'TFWhisperForConditionalGeneration',
      'TFWhisperModel',
      'TFWhisperPreTrainedModel',
  ]

try:
  if not is_flax_available():
    raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
  pass
else:
  UpperCAmelCase_  							=				[
      'FlaxWhisperForConditionalGeneration',
      'FlaxWhisperModel',
      'FlaxWhisperPreTrainedModel',
      'FlaxWhisperForAudioClassification',
  ]


if TYPE_CHECKING:
  from .configuration_whisper import WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP, WhisperConfig, WhisperOnnxConfig
  from .feature_extraction_whisper import WhisperFeatureExtractor
  from .processing_whisper import WhisperProcessor
  from .tokenization_whisper import WhisperTokenizer

  try:
    if not is_tokenizers_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .tokenization_whisper_fast import WhisperTokenizerFast

  try:
    if not is_torch_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_whisper import (
        WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
        WhisperForAudioClassification,
        WhisperForConditionalGeneration,
        WhisperModel,
        WhisperPreTrainedModel,
    )

  try:
    if not is_tf_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_tf_whisper import (
        TF_WHISPER_PRETRAINED_MODEL_ARCHIVE_LIST,
        TFWhisperForConditionalGeneration,
        TFWhisperModel,
        TFWhisperPreTrainedModel,
    )

  try:
    if not is_flax_available():
      raise OptionalDependencyNotAvailable()
  except OptionalDependencyNotAvailable:
    pass
  else:
    from .modeling_flax_whisper import (
        FlaxWhisperForAudioClassification,
        FlaxWhisperForConditionalGeneration,
        FlaxWhisperModel,
        FlaxWhisperPreTrainedModel,
    )

else:
  import sys

  UpperCAmelCase_  							=				_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)








# Lint as: python3
import itertools
import os
import re


UpperCAmelCase_  							=				re.compile(R'([A-Z]+)([A-Z][a-z])')
UpperCAmelCase_  							=				re.compile(R'([a-z\d])([A-Z])')

UpperCAmelCase_  							=				re.compile(R'(?<!_)_(?!_)')
UpperCAmelCase_  							=				re.compile(R'(_{2,})')

UpperCAmelCase_  							=				R'^\w+(\.\w+)*$'

UpperCAmelCase_  							=				R'<>:/\|?*'




def 	lowerCAmelCase_					(						__UpperCAmelCase:    Optional[int]   )   ->			List[Any]:
    UpperCamelCase__							:       int      =   _uppercase_uppercase_re.sub(r'''\1_\2'''	,     __UpperCAmelCase   )
    UpperCamelCase__							:       Tuple      =   _lowercase_uppercase_re.sub(r'''\1_\2'''	,     __UpperCAmelCase   )
    return name.lower()




def 	lowerCAmelCase_					(						__UpperCAmelCase:    Any   )   ->			Any:
    UpperCamelCase__							:       Optional[int]      =   _single_underscore_re.split(__UpperCAmelCase   )
    UpperCamelCase__							:       Dict      =   [_multiple_underscores_re.split(__UpperCAmelCase   ) for n in name]
    return "".join(n.capitalize() for n in itertools.chain.from_iterable(__UpperCAmelCase   ) if n != ''''''   )




def 	lowerCAmelCase_					(						__UpperCAmelCase:    int   )   ->			Union[str, Any]:
    if os.path.basename(__UpperCAmelCase   ) != name:
        raise ValueError(f"Should be a dataset name, not a path: {name}"   )
    return camelcase_to_snakecase(__UpperCAmelCase   )




def 	lowerCAmelCase_					(						__UpperCAmelCase:    Dict	,     __UpperCAmelCase:    Optional[int]   )   ->			Optional[Any]:
    if os.path.basename(__UpperCAmelCase   ) != name:
        raise ValueError(f"Should be a dataset name, not a path: {name}"   )
    if not re.match(_split_re	,     __UpperCAmelCase   ):
        raise ValueError(f"Split name should match '{_split_re}'' but got '{split}'."   )
    return f"{filename_prefix_for_name(__UpperCAmelCase   )}-{split}"




def 	lowerCAmelCase_					(						__UpperCAmelCase:    str	,     __UpperCAmelCase:    Dict	,     __UpperCAmelCase:    List[Any]	,     __UpperCAmelCase:    List[Any]=None   )   ->			Union[str, Any]:
    UpperCamelCase__							:       Optional[Any]      =   filename_prefix_for_split(__UpperCAmelCase	,     __UpperCAmelCase   )
    if filetype_suffix:
        prefix += f".{filetype_suffix}"
    UpperCamelCase__							:       Dict      =   os.path.join(__UpperCAmelCase	,     __UpperCAmelCase   )
    return f"{filepath}*"





def 	lowerCAmelCase_					(						__UpperCAmelCase:    List[str]	,     __UpperCAmelCase:    List[str]	,     __UpperCAmelCase:    int	,     __UpperCAmelCase:    str=None	,     __UpperCAmelCase:    Tuple=None   )   ->			Tuple:
    UpperCamelCase__							:       str      =   filename_prefix_for_split(__UpperCAmelCase	,     __UpperCAmelCase   )
    UpperCamelCase__							:       Tuple      =   os.path.join(__UpperCAmelCase	,     __UpperCAmelCase   )

    if shard_lengths:
        UpperCamelCase__							:       Optional[Any]      =   len(__UpperCAmelCase   )
        UpperCamelCase__							:       List[str]      =   [f"{prefix}-{shard_id:05d}-of-{num_shards:05d}" for shard_id in range(__UpperCAmelCase   )]
        if filetype_suffix:
            UpperCamelCase__							:       Union[str, Any]      =   [filename + f".{filetype_suffix}" for filename in filenames]
        return filenames
    else:
        UpperCamelCase__							:       Tuple      =   prefix
        if filetype_suffix:
            filename += f".{filetype_suffix}"
        return [filename]

