




import unittest

import numpy as np

from transformers.testing_utils import require_torch, require_vision
from transformers.utils import is_torch_available, is_vision_available

from ...test_image_processing_common import ImageProcessingSavingTestMixin


if is_torch_available():
				import torch

if is_vision_available():
				from PIL import Image

				from transformers import TvltImageProcessor







def 			lowerCAmelCase  (     UpperCAmelCase,     UpperCAmelCase=10,     UpperCAmelCase=10,     UpperCAmelCase=False,     UpperCAmelCase=False	)  ->Tuple:






					"""simple docstring"""






					__magic_name__ :							List[Any]		       =							[]
					for i in range(image_processor_tester.num_frames	):
										video.append(np.random.randint(255,     size=(image_processor_tester.num_channels, width, height),     dtype=np.uinta	)	)

					if not numpify and not torchify:
										# PIL expects the channel dimension as last dimension
										__magic_name__ :							Union[str, Any]		       =							[Image.fromarray(np.moveaxis(UpperCAmelCase,     0,     -1	)	) for frame in video]

					if torchify:
										__magic_name__ :							List[str]		       =							[torch.from_numpy(UpperCAmelCase	) for frame in video]

					return video







def 			lowerCAmelCase  (     UpperCAmelCase,     UpperCAmelCase=False,     UpperCAmelCase=False,     UpperCAmelCase=False	)  ->int:






					"""simple docstring"""






					assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"

					__magic_name__ :							Union[str, Any]		       =							[]
					for i in range(image_processor_tester.batch_size	):
										if equal_resolution:
															__magic_name__ :							List[str]		       =							image_processor_tester.max_resolution
										else:
															__magic_name__       ,			__magic_name__ :							List[Any]		       =							np.random.choice(
															    np.arange(image_processor_tester.min_resolution,     image_processor_tester.max_resolution	),     2	)
															__magic_name__ :							Union[str, Any]		       =							prepare_video(
															    image_processor_tester=UpperCAmelCase,     width=UpperCAmelCase,     height=UpperCAmelCase,     numpify=UpperCAmelCase,     torchify=UpperCAmelCase,     )
										video_inputs.append(UpperCAmelCase	)

					return video_inputs





class 		A__    (       unittest.TestCase			):






	def __init__(     self    ,					lowerCamelCase    ,					lowerCamelCase=7    ,					lowerCamelCase=3    ,					lowerCamelCase=4    ,					lowerCamelCase=18    ,					lowerCamelCase=30    ,					lowerCamelCase=400    ,					lowerCamelCase=True    ,					lowerCamelCase=None    ,					lowerCamelCase=True    ,					lowerCamelCase=[0.5, 0.5, 0.5]    ,					lowerCamelCase=[0.5, 0.5, 0.5]    ,					lowerCamelCase=True    ,					lowerCamelCase=None    ,					)				->       List[str]:




						"""simple docstring"""






						__magic_name__ :							Any		       =							size if size is not None else {'''shortest_edge''': 18}
						__magic_name__ :							Optional[Any]		       =							crop_size if crop_size is not None else {'''height''': 18, '''width''': 18}

						__magic_name__ :							Tuple		       =							parent
						__magic_name__ :							Union[str, Any]		       =							batch_size
						__magic_name__ :							Union[str, Any]		       =							num_channels
						__magic_name__ :							Dict		       =							num_frames
						__magic_name__ :							Optional[Any]		       =							image_size
						__magic_name__ :							Tuple		       =							min_resolution
						__magic_name__ :							Optional[int]		       =							max_resolution
						__magic_name__ :							Any		       =							do_resize
						__magic_name__ :							List[str]		       =							size
						__magic_name__ :							str		       =							do_normalize
						__magic_name__ :							int		       =							image_mean
						__magic_name__ :							Union[str, Any]		       =							image_std
						__magic_name__ :							List[Any]		       =							do_center_crop
						__magic_name__ :							Optional[int]		       =							crop_size






	def 			lowercase				(     self						)				->       Tuple:




						"""simple docstring"""






						return {
						    "image_mean": self.image_mean,
						    "image_std": self.image_std,
						    "do_normalize": self.do_normalize,
						    "do_resize": self.do_resize,
						    "size": self.size,
						    "do_center_crop": self.do_center_crop,
						    "crop_size": self.crop_size,
						}





@require_torch
@require_vision
class 		A__    (       __SCREAMING_SNAKE_CASE		,					unittest.TestCase			):
	lowerCamelCase__		:			Dict       =TvltImageProcessor if is_vision_available() else None






	def 			lowercase				(     self						)				->       List[str]:




						"""simple docstring"""






						__magic_name__ :							Union[str, Any]		       =							TvltImageProcessorTester(self						)






	@property
	def 			lowercase				(     self						)				->       Any:




						"""simple docstring"""






						return self.image_processor_tester.prepare_image_processor_dict()






	def 			lowercase				(     self						)				->       List[str]:




						"""simple docstring"""






						__magic_name__ :							List[Any]		       =							self.image_processing_class(**self.image_processor_dict						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''image_mean'''						)						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''image_std'''						)						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''do_normalize'''						)						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''do_resize'''						)						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''do_center_crop'''						)						)
						self.assertTrue(hasattr(lowerCamelCase    ,					'''size'''						)						)






	def 			lowercase				(     self						)				->       Union[str, Any]:




						"""simple docstring"""






						__magic_name__ :							Any		       =							self.image_processing_class(**self.image_processor_dict						)
						# create random PIL videos
						__magic_name__ :							Optional[Any]		       =							prepare_video_inputs(self.image_processor_tester    ,					equal_resolution=lowerCamelCase						)
						for video in video_inputs:
											self.assertIsInstance(lowerCamelCase    ,					lowerCamelCase						)
											self.assertIsInstance(video[0]    ,					Image.Image						)

						# Test not batched input
						__magic_name__ :							Optional[int]		       =							image_processor(video_inputs[0]    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        1,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)

						# Test batched
						__magic_name__ :							Tuple		       =							image_processor(lowerCamelCase    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)






	def 			lowercase				(     self						)				->       Dict:




						"""simple docstring"""






						__magic_name__ :							Optional[Any]		       =							self.image_processing_class(**self.image_processor_dict						)
						# create random numpy tensors
						__magic_name__ :							Optional[int]		       =							prepare_video_inputs(self.image_processor_tester    ,					equal_resolution=lowerCamelCase    ,					numpify=lowerCamelCase						)
						for video in video_inputs:
											self.assertIsInstance(lowerCamelCase    ,					lowerCamelCase						)
											self.assertIsInstance(video[0]    ,					np.ndarray						)

						# Test not batched input
						__magic_name__ :							Union[str, Any]		       =							image_processor(video_inputs[0]    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        1,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)

						# Test batched
						__magic_name__ :							Dict		       =							image_processor(lowerCamelCase    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)






	def 			lowercase				(     self						)				->       Union[str, Any]:




						"""simple docstring"""






						__magic_name__ :							Dict		       =							self.image_processing_class(**self.image_processor_dict						)
						# create random PyTorch tensors
						__magic_name__ :							Any		       =							prepare_video_inputs(self.image_processor_tester    ,					equal_resolution=lowerCamelCase    ,					torchify=lowerCamelCase						)
						for video in video_inputs:
											self.assertIsInstance(lowerCamelCase    ,					lowerCamelCase						)
											self.assertIsInstance(video[0]    ,					torch.Tensor						)

						# Test not batched input
						__magic_name__ :							str		       =							image_processor(video_inputs[0]    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        1,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)

						# Test batched
						__magic_name__ :							Tuple		       =							image_processor(lowerCamelCase    ,					return_tensors='''pt'''						).pixel_values
						self.assertEqual(
						    encoded_videos.shape    ,					(
						        self.image_processor_tester.batch_size,
						        self.image_processor_tester.num_frames,
						        self.image_processor_tester.num_channels,
						        self.image_processor_tester.crop_size['''height'''],
						        self.image_processor_tester.crop_size['''width'''],
						    )    ,					)









import importlib
import os
import platform
from pathlib import Path

from packaging import version

from .utils.logging import get_logger


lowercase_		=							get_logger(__name__)

# Datasets
lowercase_		=							'''https://s3.amazonaws.com/datasets.huggingface.co/datasets/datasets'''
lowercase_		=							'''https://cdn-datasets.huggingface.co/datasets/datasets'''
lowercase_		=							'''https://raw.githubusercontent.com/huggingface/datasets/{revision}/datasets/{path}/{name}'''

# Metrics
lowercase_		=							'''https://s3.amazonaws.com/datasets.huggingface.co/datasets/metrics'''
lowercase_		=							'''https://cdn-datasets.huggingface.co/datasets/metric'''
lowercase_		=							'''https://raw.githubusercontent.com/huggingface/datasets/{revision}/metrics/{path}/{name}'''

# Hub
lowercase_		=							os.environ.get('''HF_ENDPOINT''', '''https://huggingface.co''')
lowercase_		=							HF_ENDPOINT + '''/datasets/{repo_id}/resolve/{revision}/{path}'''
lowercase_		=							'''main'''

lowercase_		=							version.parse(platform.python_version())

if PY_VERSION < version.parse('''3.8'''):
				import importlib_metadata
else:
				import importlib.metadata as importlib_metadata

# General environment variables accepted values for booleans
lowercase_		=							{'''1''', '''ON''', '''YES''', '''TRUE'''}
lowercase_		=							ENV_VARS_TRUE_VALUES.union({'''AUTO'''})


# Imports
lowercase_		=							version.parse(importlib_metadata.version('''dill'''))
lowercase_		=							version.parse(importlib_metadata.version('''pandas'''))
lowercase_		=							version.parse(importlib_metadata.version('''pyarrow'''))

lowercase_		=							os.environ.get('''USE_TF''', '''AUTO''').upper()
lowercase_		=							os.environ.get('''USE_TORCH''', '''AUTO''').upper()
lowercase_		=							os.environ.get('''USE_JAX''', '''AUTO''').upper()

lowercase_		=							'''N/A'''
lowercase_		=							False

if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
				lowercase_		=							importlib.util.find_spec('''torch''') is not None
				if TORCH_AVAILABLE:
								try:
												lowercase_		=							version.parse(importlib_metadata.version('''torch'''))
												logger.info(f"PyTorch version {TORCH_VERSION} available.")
								except importlib_metadata.PackageNotFoundError:
												pass
else:
				logger.info('''Disabling PyTorch because USE_TF is set''')

lowercase_		=							'''N/A'''
lowercase_		=							False

if USE_TF in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TORCH not in ENV_VARS_TRUE_VALUES:
				lowercase_		=							importlib.util.find_spec('''tensorflow''') is not None
				if TF_AVAILABLE:
								# For the metadata, we have to look for both tensorflow and tensorflow-cpu
								for package in [
								    "tensorflow",
								    "tensorflow-cpu",
								    "tensorflow-gpu",
								    "tf-nightly",
								    "tf-nightly-cpu",
								    "tf-nightly-gpu",
								    "intel-tensorflow",
								    "tensorflow-rocm",
								    "tensorflow-macos",
								]:
												try:
																lowercase_		=							version.parse(importlib_metadata.version(package))
												except importlib_metadata.PackageNotFoundError:
																continue
												else:
																break
								else:
												lowercase_		=							False
				if TF_AVAILABLE:
								if TF_VERSION.major < 2:
												logger.info(f"TensorFlow found but with version {TF_VERSION}. `datasets` requires version 2 minimum.")
												lowercase_		=							False
								else:
												logger.info(f"TensorFlow version {TF_VERSION} available.")
else:
				logger.info('''Disabling Tensorflow because USE_TORCH is set''')


lowercase_		=							'''N/A'''
lowercase_		=							False

if USE_JAX in ENV_VARS_TRUE_AND_AUTO_VALUES:
				lowercase_		=							importlib.util.find_spec('''jax''') is not None and importlib.util.find_spec('''jaxlib''') is not None
				if JAX_AVAILABLE:
								try:
												lowercase_		=							version.parse(importlib_metadata.version('''jax'''))
												logger.info(f"JAX version {JAX_VERSION} available.")
								except importlib_metadata.PackageNotFoundError:
												pass
else:
				logger.info('''Disabling JAX because USE_JAX is set to False''')


lowercase_		=							os.environ.get('''USE_BEAM''', '''AUTO''').upper()
lowercase_		=							'''N/A'''
lowercase_		=							False
if USE_BEAM in ENV_VARS_TRUE_AND_AUTO_VALUES:
				try:
								lowercase_		=							version.parse(importlib_metadata.version('''apache_beam'''))
								lowercase_		=							True
								logger.info(f"Apache Beam version {BEAM_VERSION} available.")
				except importlib_metadata.PackageNotFoundError:
								pass
else:
				logger.info('''Disabling Apache Beam because USE_BEAM is set to False''')


# Optional tools for data loading
lowercase_		=							importlib.util.find_spec('''sqlalchemy''') is not None

# Optional tools for feature decoding
lowercase_		=							importlib.util.find_spec('''PIL''') is not None
lowercase_		=							importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.0.31''')
lowercase_		=							importlib.util.find_spec('''soundfile''') is not None and version.parse(
    importlib.import_module('''soundfile''').__libsndfile_version__
) >= version.parse('''1.1.0''')

# Optional compression tools
lowercase_		=							importlib.util.find_spec('''rarfile''') is not None
lowercase_		=							importlib.util.find_spec('''zstandard''') is not None
lowercase_		=							importlib.util.find_spec('''lz4''') is not None
lowercase_		=							importlib.util.find_spec('''py7zr''') is not None


# Cache location
lowercase_		=							'''~/.cache'''
lowercase_		=							os.getenv('''XDG_CACHE_HOME''', DEFAULT_XDG_CACHE_HOME)
lowercase_		=							os.path.join(XDG_CACHE_HOME, '''huggingface''')
lowercase_		=							os.path.expanduser(os.getenv('''HF_HOME''', DEFAULT_HF_CACHE_HOME))

lowercase_		=							os.path.join(HF_CACHE_HOME, '''datasets''')
lowercase_		=							Path(os.getenv('''HF_DATASETS_CACHE''', DEFAULT_HF_DATASETS_CACHE))

lowercase_		=							os.path.join(HF_CACHE_HOME, '''metrics''')
lowercase_		=							Path(os.getenv('''HF_METRICS_CACHE''', DEFAULT_HF_METRICS_CACHE))

lowercase_		=							os.path.join(HF_CACHE_HOME, '''modules''')
lowercase_		=							Path(os.getenv('''HF_MODULES_CACHE''', DEFAULT_HF_MODULES_CACHE))

lowercase_		=							'''downloads'''
lowercase_		=							os.path.join(HF_DATASETS_CACHE, DOWNLOADED_DATASETS_DIR)
lowercase_		=							Path(os.getenv('''HF_DATASETS_DOWNLOADED_DATASETS_PATH''', DEFAULT_DOWNLOADED_DATASETS_PATH))

lowercase_		=							'''extracted'''
lowercase_		=							os.path.join(DEFAULT_DOWNLOADED_DATASETS_PATH, EXTRACTED_DATASETS_DIR)
lowercase_		=							Path(os.getenv('''HF_DATASETS_EXTRACTED_DATASETS_PATH''', DEFAULT_EXTRACTED_DATASETS_PATH))

# Download count for the website
lowercase_		=							(
    os.environ.get('''HF_UPDATE_DOWNLOAD_COUNTS''', '''AUTO''').upper() in ENV_VARS_TRUE_AND_AUTO_VALUES
)

# Batch size constants. For more info, see:
# https://github.com/apache/arrow/blob/master/docs/source/cpp/arrays.rst#size-limitations-and-recommendations)
lowercase_		=							1000

# Size of the preloaded record batch in `Dataset.__iter__`
lowercase_		=							10

# Pickling tables works only for small tables (<4GiB)
# For big tables, we write them on disk instead
lowercase_		=							4 << 30

# Max shard size in bytes (e.g. to shard parquet datasets in push_to_hub or download_and_prepare)
lowercase_		=							'''500MB'''

# Parquet configuration
lowercase_		=							100
lowercase_		=							100
lowercase_		=							100

# Offline mode
lowercase_		=							os.environ.get('''HF_DATASETS_OFFLINE''', '''AUTO''').upper() in ENV_VARS_TRUE_VALUES

# In-memory
lowercase_		=							0  # Disabled
lowercase_		=							float(os.environ.get('''HF_DATASETS_IN_MEMORY_MAX_SIZE''', DEFAULT_IN_MEMORY_MAX_SIZE))

# File names
lowercase_		=							'''dataset.arrow'''
lowercase_		=							'''indices.arrow'''
lowercase_		=							'''state.json'''
lowercase_		=							'''dataset_info.json'''
lowercase_		=							'''dataset_infos.json'''
lowercase_		=							'''LICENSE'''
lowercase_		=							'''metric_info.json'''
lowercase_		=							'''dataset_dict.json'''

lowercase_		=							'''datasets_modules'''

lowercase_		=							255

# Streaming
lowercase_		=							20
lowercase_		=							5

# Datasets without script
lowercase_		=							200
lowercase_		=							10
lowercase_		=							200

# Progress bars
lowercase_		=							0.0_5  # 20 progress updates per sec



