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


__lowercase	=    get_logger(__name__)


if TYPE_CHECKING:
							from .builder import DatasetBuilder







def 		SCREAMING_SNAKE_CASE__					(							_SCREAMING_SNAKE_CASE  ,					_SCREAMING_SNAKE_CASE = None  ):
		lowerCAmelCase_   :       Optional[int]    							=importlib.import_module(_SCREAMING_SNAKE_CASE  )

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

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

				lowerCAmelCase_   :       Any    							='''wrap_auth'''
				return wrapper

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







def 		SCREAMING_SNAKE_CASE__					(							_SCREAMING_SNAKE_CASE  ):
		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":
								lowerCAmelCase_   :       List[str]    							=imports[1]
								lowerCAmelCase_   :       int    							='''.'''.join(builder.__module__.split('''.'''  )[:-1] + [internal_import_name]  )
								extend_module_for_streaming(_SCREAMING_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

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








'''simple docstring'''






from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


__lowercase	=    {'''configuration_detr''': ['''DETR_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''DetrConfig''', '''DetrOnnxConfig''']}

try:
							if not is_vision_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__lowercase	=    ['''DetrFeatureExtractor''']
							__lowercase	=    ['''DetrImageProcessor''']

try:
							if not is_torch_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							__lowercase	=    [
							    '''DETR_PRETRAINED_MODEL_ARCHIVE_LIST''',
							    '''DetrForObjectDetection''',
							    '''DetrForSegmentation''',
							    '''DetrModel''',
							    '''DetrPreTrainedModel''',
							]


if TYPE_CHECKING:
							from .configuration_detr import DETR_PRETRAINED_CONFIG_ARCHIVE_MAP, DetrConfig, DetrOnnxConfig

							try:
														if not is_vision_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .feature_extraction_detr import DetrFeatureExtractor
														from .image_processing_detr import DetrImageProcessor

							try:
														if not is_torch_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_detr import (
														    DETR_PRETRAINED_MODEL_ARCHIVE_LIST,
														    DetrForObjectDetection,
														    DetrForSegmentation,
														    DetrModel,
														    DetrPreTrainedModel,
														)

else:
							import sys

							__lowercase	=    _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)






