



import importlib
import shutil
import threading
import warnings
from typing import List

import fsspec
import fsspec.asyn

from . import compression
from .hffilesystem import HfFileSystem


A__								=		importlib.util.find_spec('''s3fs''') is not None

if _has_safs:
				from .safilesystem import SaFileSystem  # noqa: F401

A__								=		[
    compression.BzaFileSystem,
    compression.GzipFileSystem,
    compression.LzaFileSystem,
    compression.XzFileSystem,
    compression.ZstdFileSystem,
]

# Register custom filesystems
for fs_class in COMPRESSION_FILESYSTEMS + [HfFileSystem]:
				if fs_class.protocol in fsspec.registry and fsspec.registry[fs_class.protocol] is not fs_class:
								warnings.warn(f"""A filesystem protocol was already set for {fs_class.protocol} and will be overwritten.""")
				fsspec.register_implementation(fs_class.protocol, fs_class, clobber=True)



def      _lowerCAmelCase			(   __lowerCAmelCase )  ->   str:


				"""simple docstring"""

				if "://" in dataset_path:
								snake_case__      : List[Any]							=      dataset_path.split('''://''' )[1]
				return dataset_path



def      _lowerCAmelCase			(   __lowerCAmelCase )  ->   bool:


				"""simple docstring"""

				if fs is not None and fs.protocol != "file":
								return True
				else:
								return False



def      _lowerCAmelCase			(   __lowerCAmelCase    ,    __lowerCAmelCase    ,    __lowerCAmelCase )  ->   Tuple:


				"""simple docstring"""

				snake_case__      : int							=      not is_remote_filesystem(UpperCamelCase__ )
				if is_local:
								# LocalFileSystem.mv does copy + rm, it is more efficient to simply move a local directory
								shutil.move(fs._strip_protocol(UpperCamelCase__ )    ,    fs._strip_protocol(UpperCamelCase__ ) )
				else:
								fs.mv(UpperCamelCase__    ,    UpperCamelCase__    ,    recursive=UpperCamelCase__ )





def      _lowerCAmelCase			(   )  ->   None:


				"""simple docstring"""

				if hasattr(fsspec.asyn    ,    '''reset_lock''' ):
								# for future fsspec>2022.05.0
								fsspec.asyn.reset_lock()
				else:
								snake_case__      : Any							=      None
								snake_case__      : int							=      None
								snake_case__      : Any							=      threading.Lock()


'''simple docstring'''




def __lowerCAmelCase					(				UpperCamelCase__							,    UpperCamelCase__							)      ->       float:
    return base * power(UpperCamelCase__							,    (exponent - 1)							) if exponent else 1


if __name__ == "__main__":
  print("Raise base to the power of exponent using recursion...")
  __UpperCAmelCase					=int(input("Enter the base: ").strip())
  __UpperCAmelCase					=int(input("Enter the exponent: ").strip())
  __UpperCAmelCase					=power(base, abs(exponent))
  if exponent < 0:  # power() does not properly deal w/ negative exponents
    __UpperCAmelCase					=1 / result
  print(f'{base} to the power of {exponent} is {result}')
