
'''simple docstring'''

import importlib
import inspect
from functools import wraps
from typing import TYPE_CHECKING, Optional, Union

from .download.streaming_download_manager import (
    xbasename,
    xdirname,
    xet_parse,
    xexists,
    xgetsize,
    xglob,
    xgzip_open,
    xisdir,
    xisfile,
    xjoin,
    xlistdir,
    xnumpy_load,
    xopen,
    xpandas_read_csv,
    xpandas_read_excel,
    xPath,
    xrelpath,
    xsio_loadmat,
    xsplit,
    xsplitext,
    xwalk,
    xxml_dom_minidom_parse,
)
from .utils.logging import get_logger
from .utils.patching import patch_submodule
from .utils.py_utils import get_imports


_UpperCAmelCase   :      List[str] 						=  get_logger(__name__)


if TYPE_CHECKING:
	from .builder import DatasetBuilder







def 						snake_case__	(      UpperCamelCase			,UpperCamelCase = None	) ->      Any:
		_UpperCamelCase       : Optional[int]    =      importlib.import_module(snake_case__	)

		# TODO(QL): always update the module to add subsequent new authentication
		if hasattr(snake_case__			,'''_patched_for_streaming'''	) and module._patched_for_streaming:
				return

		def wrap_auth(UpperCamelCase	):
				@wraps(snake_case__	)
				def wrapper(*UpperCamelCase			,**UpperCamelCase	):
						return function(*snake_case__			,use_auth_token=snake_case__			,**snake_case__	)

				_UpperCamelCase       : int    =      'wrap_auth'
				return wrapper

		# open files in a streaming fashion
		patch_submodule(snake_case__			,'''open'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''os.listdir'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''os.walk'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''glob.glob'''			,wrap_auth(snake_case__	)	).start()
		# allow to navigate in remote zip files
		patch_submodule(snake_case__			,'''os.path.join'''			,snake_case__	).start()
		patch_submodule(snake_case__			,'''os.path.dirname'''			,snake_case__	).start()
		patch_submodule(snake_case__			,'''os.path.basename'''			,snake_case__	).start()
		patch_submodule(snake_case__			,'''os.path.relpath'''			,snake_case__	).start()
		patch_submodule(snake_case__			,'''os.path.split'''			,snake_case__	).start()
		patch_submodule(snake_case__			,'''os.path.splitext'''			,snake_case__	).start()
		# allow checks on paths
		patch_submodule(snake_case__			,'''os.path.exists'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''os.path.isdir'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''os.path.isfile'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''os.path.getsize'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''pathlib.Path'''			,snake_case__	).start()
		# file readers
		patch_submodule(snake_case__			,'''gzip.open'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''numpy.load'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''pandas.read_csv'''			,wrap_auth(snake_case__	)			,attrs=['''__version__''']	).start()
		patch_submodule(snake_case__			,'''pandas.read_excel'''			,wrap_auth(snake_case__	)			,attrs=['''__version__''']	).start()
		patch_submodule(snake_case__			,'''scipy.io.loadmat'''			,wrap_auth(snake_case__	)			,attrs=['''__version__''']	).start()
		patch_submodule(snake_case__			,'''xml.etree.ElementTree.parse'''			,wrap_auth(snake_case__	)	).start()
		patch_submodule(snake_case__			,'''xml.dom.minidom.parse'''			,wrap_auth(snake_case__	)	).start()
		_UpperCamelCase       : List[Any]    =      True







def 						snake_case__	(      UpperCamelCase	) ->      List[Any]:
		extend_module_for_streaming(builder.__module__			,use_auth_token=builder.use_auth_token	)
		# if needed, we also have to extend additional internal imports (like wmt14 -> wmt_utils)
		if not builder.__module__.startswith('''datasets.'''	):  # check that it's not a packaged builder like csv
				for imports in get_imports(inspect.getfile(builder.__class__	)	):
						if imports[0] == "internal":
								_UpperCamelCase       : Optional[int]    =      imports[1]
								_UpperCamelCase       : Union[str, Any]    =      '.'.join(builder.__module__.split('''.'''	)[:-1] + [internal_import_name]	)
								extend_module_for_streaming(snake_case__			,use_auth_token=builder.use_auth_token	)

    # builders can inherit from other builders that might use streaming functionality
    # (for example, ImageFolder and AudioFolder inherit from FolderBuilder which implements examples generation)
    # but these parents builders are not patched automatically as they are not instantiated, so we patch them here
		from .builder import DatasetBuilder

		_UpperCamelCase       : Dict    =      [
		    cls.__module__
		    for cls in type(snake_case__	).__mro__[1:]  # make sure it's not the same module we've already patched
		    if issubclass(cls			,snake_case__	) and cls.__module__ != DatasetBuilder.__module__
		]  # check it's not a standard builder from datasets.builder
		for module in parent_builder_modules:
				extend_module_for_streaming(snake_case__			,use_auth_token=builder.use_auth_token	)





'''simple docstring'''

_UpperCAmelCase   :      Optional[int] 						=  """
# Transformers installation
! pip install transformers datasets evaluate
# To install from source instead of the last release, comment the command above and uncomment the following one.
# ! pip install git+https://github.com/huggingface/transformers.git
"""

_UpperCAmelCase   :      Union[str, Any] 						=  [{"""type""": """code""", """content""": INSTALL_CONTENT}]
_UpperCAmelCase   :      Union[str, Any] 						=  {
    """{processor_class}""": """FakeProcessorClass""",
    """{model_class}""": """FakeModelClass""",
    """{object_class}""": """FakeObjectClass""",
}





