


"""simple docstring"""

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

import fsspec
import fsspec.asyn

from . import compression
from .hffilesystem import HfFileSystem


UpperCAmelCase__  							=importlib.util.find_spec("s3fs") is not None

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

UpperCAmelCase__  							=[
    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_      (				UpperCamelCase__	: str ):






 """simple docstring"""







 if "://" in dataset_path:
  __lowercase									=	dataset_path.split("""://""" )[1]
 return dataset_path


def lowerCAmelCase_      (				UpperCamelCase__	: fsspec.AbstractFileSystem ):






 """simple docstring"""







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


def lowerCAmelCase_      (				UpperCamelCase__	: fsspec.AbstractFileSystem				,   UpperCamelCase__	: str				,   UpperCamelCase__	: str ):






 """simple docstring"""







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


def lowerCAmelCase_      (				):






 """simple docstring"""







 if hasattr(fsspec.asyn				,   """reset_lock""" ):
  # for future fsspec>2022.05.0
  fsspec.asyn.reset_lock()
 else:
  __lowercase									=	None
  __lowercase									=	None
  __lowercase									=	threading.Lock()




"""simple docstring"""

from collections.abc import Callable

import numpy as np


def lowerCAmelCase_      (				UpperCamelCase__	: Callable				,   UpperCamelCase__	: float				,   UpperCamelCase__	: float				,   UpperCamelCase__	: float				,   UpperCamelCase__	: float ):






 """simple docstring"""







 __lowercase									=	int(np.ceil((x_end - xa) / step_size ) )
 __lowercase									=	np.zeros((n + 1,) )
 __lowercase									=	ya
 __lowercase									=	xa

 for k in range(UpperCamelCase__ ):
  __lowercase									=	y[k] + step_size * ode_func(UpperCamelCase__				,   y[k] )
  x += step_size

 return y


if __name__ == "__main__":
       import doctest

       doctest.testmod()
