


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


lowerCamelCase_  :  Any     		=    get_logger(__name__)


if TYPE_CHECKING:
       from .builder import DatasetBuilder
def _A		(		lowercase			,       lowercase = None						):







    """simple docstring"""
    a											=importlib.import_module(lowercase						)

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

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

        a											='''wrap_auth'''
        return wrapper

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





def _A		(		lowercase						):







    """simple docstring"""
    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											=imports[1]
                a											='''.'''.join(builder.__module__.split('''.'''						)[:-1] + [internal_import_name]						)
                extend_module_for_streaming(lowercase			,       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											=[
        cls.__module__
        for cls in type(lowercase						).__mro__[1:]  # make sure it's not the same module we've already patched
        if issubclass(cls			,       lowercase						) 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(lowercase			,       use_auth_token=builder.use_auth_token						)



"""simple docstring"""







import pytest

from datasets.utils.version import Version
@pytest.mark.parametrize(
    '''other, expected_equality'''			,       [
        (Version('''1.0.0'''						), True),
        ('''1.0.0''', True),
        (Version('''2.0.0'''						), False),
        ('''2.0.0''', False),
        ('''1''', False),
        ('''a''', False),
        (1, False),
        (None, False),
    ]			,       )
def _A		(		lowercase			,       lowercase						):







    """simple docstring"""
    a											=Version('''1.0.0'''						)
    assert (version == other) is expected_equality
    assert (version != other) is not expected_equality
    assert (hash(lowercase						) == hash(lowercase						)) is expected_equality