





'''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


snake_case_     			=						get_logger(__name__)


if TYPE_CHECKING:
     from .builder import DatasetBuilder
def 				_lowerCamelCase(	UpperCamelCase__     :			int     ,							UpperCamelCase__     :			Optional[Union[str, bool]] = None		)		->	Union[str, Any]:
    A							:							List[str]				=    importlib.import_module(UpperCamelCase__		)

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

    def wrap_auth(UpperCamelCase__     :			int		):
        @wraps(UpperCamelCase__		)
        def wrapper(*UpperCamelCase__     :			Dict     ,							**UpperCamelCase__     :			Dict		):
            return function(*UpperCamelCase__     ,							use_auth_token=UpperCamelCase__     ,							**UpperCamelCase__		)

        A							:							Optional[Any]				=    '''wrap_auth'''
        return wrapper

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





def 				_lowerCamelCase(	UpperCamelCase__     :			"DatasetBuilder"		)		->	str:
    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":
                A							:							Dict				=    imports[1]
                A							:							List[Any]				=    '''.'''.join(builder.__module__.split('''.'''		)[:-1] + [internal_import_name]		)
                extend_module_for_streaming(UpperCamelCase__     ,							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

    A							:							int				=    [
        cls.__module__
        for cls in type(UpperCamelCase__		).__mro__[1:]  # make sure it's not the same module we've already patched
        if issubclass(cls     ,							UpperCamelCase__		) 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(UpperCamelCase__     ,							use_auth_token=builder.use_auth_token		)







'''simple docstring'''






import platform
from argparse import ArgumentParser

import huggingface_hub
import pandas
import pyarrow

from datasets import __version__ as version
from datasets.commands import BaseDatasetsCLICommand
def 				_lowerCamelCase(	UpperCamelCase__     :			Any		)		->	List[str]:
    return EnvironmentCommand()





class 	_lowercase    (				a					):


   @staticmethod
   def        snake_case					(			_UpperCAmelCase       ):
       A							:							List[str]				=    parser.add_parser('''env'''     , help='''Print relevant system environment info.'''       )
       download_parser.set_defaults(func=_UpperCAmelCase       )


   def        snake_case					(			self       ):
       A							:							Optional[int]				=    {
           '''`datasets` version''': version,
           '''Platform''': platform.platform(),
           '''Python version''': platform.python_version(),
           '''Huggingface_hub version''': huggingface_hub.__version__,
           '''PyArrow version''': pyarrow.__version__,
           '''Pandas version''': pandas.__version__,
       }

       print('''\nCopy-and-paste the text below in your GitHub issue.\n'''       )
       print(self.format_dict(_UpperCAmelCase       )       )

       return info


   @staticmethod
   def        snake_case					(			_UpperCAmelCase       ):
       return "\n".join([f'''- {prop}: {val}''' for prop, val in d.items()]       ) + "\n"
