






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


A_     =				get_logger(__name__)


if TYPE_CHECKING:
						from .builder import DatasetBuilder




def   _lowerCAmelCase		(				UpperCAmelCase__							:       Optional[int],    UpperCAmelCase__							:       Optional[Union[str, bool]] = None   )		->Optional[Any]:
						A__    :	int			=	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__							:       List[str]   ):
												@wraps(UpperCAmelCase__   )
												def wrapper(*UpperCAmelCase__							:       Dict,    **UpperCAmelCase__							:       Dict   ):
																		return function(*UpperCAmelCase__,    use_auth_token=UpperCAmelCase__,    **UpperCAmelCase__   )

												A__    :	List[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__    :	Any			=	True




def   _lowerCAmelCase		(				UpperCAmelCase__							:       "DatasetBuilder"   )		->Tuple:
						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__    :	Any			=	imports[1]
																								A__    :	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__    :	Any			=	[
						    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"""



def   _lowerCAmelCase		(				UpperCAmelCase__							:       float,    UpperCAmelCase__							:       float,    UpperCAmelCase__							:       float   )		->list[int]:
						if hue < 0 or hue > 3_6_0:
												raise Exception("""hue should be between 0 and 360"""   )

						if saturation < 0 or saturation > 1:
												raise Exception("""saturation should be between 0 and 1"""   )

						if value < 0 or value > 1:
												raise Exception("""value should be between 0 and 1"""   )

						A__    :	int			=	value * saturation
						A__    :	Any			=	hue / 6_0
						A__    :	Any			=	chroma * (1 - abs(hue_section % 2 - 1   ))
						A__    :	Optional[Any]			=	value - chroma

						if hue_section >= 0 and hue_section <= 1:
												A__    :	Dict			=	round(2_5_5 * (chroma + match_value)   )
												A__    :	Optional[Any]			=	round(2_5_5 * (second_largest_component + match_value)   )
												A__    :	Any			=	round(2_5_5 * (match_value)   )
						elif hue_section > 1 and hue_section <= 2:
												A__    :	Optional[int]			=	round(2_5_5 * (second_largest_component + match_value)   )
												A__    :	Union[str, Any]			=	round(2_5_5 * (chroma + match_value)   )
												A__    :	Union[str, Any]			=	round(2_5_5 * (match_value)   )
						elif hue_section > 2 and hue_section <= 3:
												A__    :	Tuple			=	round(2_5_5 * (match_value)   )
												A__    :	List[str]			=	round(2_5_5 * (chroma + match_value)   )
												A__    :	Union[str, Any]			=	round(2_5_5 * (second_largest_component + match_value)   )
						elif hue_section > 3 and hue_section <= 4:
												A__    :	Any			=	round(2_5_5 * (match_value)   )
												A__    :	Dict			=	round(2_5_5 * (second_largest_component + match_value)   )
												A__    :	List[Any]			=	round(2_5_5 * (chroma + match_value)   )
						elif hue_section > 4 and hue_section <= 5:
												A__    :	Any			=	round(2_5_5 * (second_largest_component + match_value)   )
												A__    :	Dict			=	round(2_5_5 * (match_value)   )
												A__    :	Tuple			=	round(2_5_5 * (chroma + match_value)   )
						else:
												A__    :	Tuple			=	round(2_5_5 * (chroma + match_value)   )
												A__    :	Optional[int]			=	round(2_5_5 * (match_value)   )
												A__    :	str			=	round(2_5_5 * (second_largest_component + match_value)   )

						return [red, green, blue]




def   _lowerCAmelCase		(				UpperCAmelCase__							:       int,    UpperCAmelCase__							:       int,    UpperCAmelCase__							:       int   )		->list[float]:
						if red < 0 or red > 2_5_5:
												raise Exception("""red should be between 0 and 255"""   )

						if green < 0 or green > 2_5_5:
												raise Exception("""green should be between 0 and 255"""   )

						if blue < 0 or blue > 2_5_5:
												raise Exception("""blue should be between 0 and 255"""   )

						A__    :	int			=	red / 2_5_5
						A__    :	List[str]			=	green / 2_5_5
						A__    :	Optional[int]			=	blue / 2_5_5
						A__    :	Optional[int]			=	max(UpperCAmelCase__,    UpperCAmelCase__,    UpperCAmelCase__   )
						A__    :	Tuple			=	value - min(UpperCAmelCase__,    UpperCAmelCase__,    UpperCAmelCase__   )
						A__    :	Any			=	0 if value == 0 else chroma / value

						if chroma == 0:
												A__    :	Optional[Any]			=	0.0
						elif value == float_red:
												A__    :	Optional[Any]			=	6_0 * (0 + (float_green - float_blue) / chroma)
						elif value == float_green:
												A__    :	Tuple			=	6_0 * (2 + (float_blue - float_red) / chroma)
						else:
												A__    :	int			=	6_0 * (4 + (float_red - float_green) / chroma)

						A__    :	Optional[int]			=	(hue + 3_6_0) % 3_6_0

						return [hue, saturation, value]




def   _lowerCAmelCase		(				UpperCAmelCase__							:       list[float],    UpperCAmelCase__							:       list[float]   )		->bool:
						A__    :	Optional[Any]			=	abs(hsv_a[0] - hsv_a[0]   ) < 0.2
						A__    :	str			=	abs(hsv_a[1] - hsv_a[1]   ) < 0.002
						A__    :	Optional[int]			=	abs(hsv_a[2] - hsv_a[2]   ) < 0.002

						return check_hue and check_saturation and check_value






