




from typing import TYPE_CHECKING

from ....utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


SCREAMING_SNAKE_CASE__     :     Any		    =       {
    "configuration_mctct": ["MCTCT_PRETRAINED_CONFIG_ARCHIVE_MAP", "MCTCTConfig"],
    "feature_extraction_mctct": ["MCTCTFeatureExtractor"],
    "processing_mctct": ["MCTCTProcessor"],
}


try:
				if not is_torch_available():
								raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
				pass
else:
				SCREAMING_SNAKE_CASE__     :     List[Any]		    =       [
				    "MCTCT_PRETRAINED_MODEL_ARCHIVE_LIST",
				    "MCTCTForCTC",
				    "MCTCTModel",
				    "MCTCTPreTrainedModel",
				]


if TYPE_CHECKING:
				from .configuration_mctct import MCTCT_PRETRAINED_CONFIG_ARCHIVE_MAP, MCTCTConfig
				from .feature_extraction_mctct import MCTCTFeatureExtractor
				from .processing_mctct import MCTCTProcessor

				try:
								if not is_torch_available():
												raise OptionalDependencyNotAvailable()
				except OptionalDependencyNotAvailable:
								pass
				else:
								from .modeling_mctct import MCTCT_PRETRAINED_MODEL_ARCHIVE_LIST, MCTCTForCTC, MCTCTModel, MCTCTPreTrainedModel

else:
				import sys

				SCREAMING_SNAKE_CASE__     :     Tuple		    =       _LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)


"""simple docstring"""






from pathlib import PurePosixPath
from typing import Optional

import fsspec
from fsspec import AbstractFileSystem
from huggingface_hub.hf_api import DatasetInfo

from ..utils.file_utils import get_authentication_headers_for_url
from ..utils.hub import hf_hub_url





class 				a__					(						A__       ):
     UpperCAmelCase__         =      ''''''
     UpperCAmelCase__         =      '''hf-legacy'''  # "hf://"" is reserved for hffs



     def __init__(							self :Dict      ,  _lowerCamelCase :Optional[DatasetInfo] = None      ,  _lowerCamelCase :Optional[str] = None      ,  **_lowerCamelCase :Tuple      ,  ):







      '''simple docstring'''



      super().__init__(self      ,  **_lowerCamelCase   )
      UpperCamelCase_     :					List[str]   	=repo_info
      UpperCamelCase_     :					Any   	=token
      UpperCamelCase_     :					Tuple   	=None



     def  lowerCamelCase_						(							self :Dict   ):







      '''simple docstring'''



      if self.dir_cache is None:
       UpperCamelCase_     :					Any   	={}
       for hf_file in self.repo_info.siblings:
        # TODO(QL): add sizes
        UpperCamelCase_     :					Optional[Any]   	={
            'name': hf_file.rfilename,
            'size': None,
            'type': 'file',
        }
        self.dir_cache.update(
            {
                str(_lowerCamelCase   ): {'name': str(_lowerCamelCase   ), 'size': None, 'type': 'directory'}
                for d in list(PurePosixPath(hf_file.rfilename   ).parents   )[:-1]
            }   )



     def  lowerCamelCase_						(							self :Union[str, Any]      ,  _lowerCamelCase :str      ,  _lowerCamelCase :str = "rb"      ,  **_lowerCamelCase :str      ,  ):







      '''simple docstring'''



      if not isinstance(self.repo_info      ,  _lowerCamelCase   ):
       raise NotImplementedError(f'''Open is only implemented for dataset repositories, but got {self.repo_info}'''   )
      UpperCamelCase_     :					List[Any]   	=hf_hub_url(self.repo_info.id      ,  _lowerCamelCase      ,  revision=self.repo_info.sha   )
      return fsspec.open(
          _lowerCamelCase      ,  mode=_lowerCamelCase      ,  headers=get_authentication_headers_for_url(_lowerCamelCase      ,  use_auth_token=self.token   )      ,  client_kwargs={'trust_env': True}      ,  ).open()



     def  lowerCamelCase_						(							self :Optional[Any]      ,  _lowerCamelCase :Tuple      ,  **_lowerCamelCase :Any   ):







      '''simple docstring'''



      self._get_dirs()
      UpperCamelCase_     :					Tuple   	=self._strip_protocol(_lowerCamelCase   )
      if path in self.dir_cache:
       return self.dir_cache[path]
      else:
       raise FileNotFoundError(_lowerCamelCase   )




     def  lowerCamelCase_						(							self :Optional[Any]      ,  _lowerCamelCase :List[str]      ,  _lowerCamelCase :List[Any]=False      ,  **_lowerCamelCase :Any   ):







      '''simple docstring'''



      self._get_dirs()
      UpperCamelCase_     :					str   	=PurePosixPath(path.strip('/'   )   )
      UpperCamelCase_     :					List[str]   	={}
      for p, f in self.dir_cache.items():
       UpperCamelCase_     :					List[Any]   	=PurePosixPath(p.strip('/'   )   )
       UpperCamelCase_     :					Tuple   	=p.parent
       if root == path:
        UpperCamelCase_     :					int   	=f
      UpperCamelCase_     :					Optional[int]   	=list(paths.values()   )
      if detail:
       return out
      else:
       return sorted(f['name'] for f in out   )
