
"""simple docstring"""







import numpy as np
from PIL import Image
def 					__lowerCAmelCase       (_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase	):
	__lowerCAmelCase    :		Optional[int]		    =   np.array(_UpperCamelCase	)
	if arr.shape[0] != arr.shape[1]:
		raise ValueError('The input array is not a square matrix'	)
	__lowerCAmelCase    :		List[Any]		    =   0
	__lowerCAmelCase    :		Optional[Any]		    =   0
	__lowerCAmelCase    :		List[Any]		    =   0
	__lowerCAmelCase    :		str		    =   0

	# compute the shape of the output matrix
	__lowerCAmelCase    :		Tuple		    =   (arr.shape[0] - size) // stride + 1
	# initialize the output matrix with zeros of shape maxpool_shape
	__lowerCAmelCase    :		str		    =   np.zeros((maxpool_shape, maxpool_shape)	)

	while i < arr.shape[0]:
		if i + size > arr.shape[0]:
			# if the end of the matrix is reached, break
			break
		while j < arr.shape[1]:
			# if the end of the matrix is reached, break
			if j + size > arr.shape[1]:
				break
			# compute the maximum of the pooling matrix
			__lowerCAmelCase    :		Optional[Any]		    =   np.max(arr[i : i + size, j : j + size]	)
			# shift the pooling matrix by stride of column pixels
			j += stride
			mat_j += 1

		# shift the pooling matrix by stride of row pixels
		i += stride
		mat_i += 1

		# reset the column index to 0
		__lowerCAmelCase    :		Optional[Any]		    =   0
		__lowerCAmelCase    :		Optional[int]		    =   0

	return updated_arr
def 					__lowerCAmelCase       (_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase	):
	__lowerCAmelCase    :		Any		    =   np.array(_UpperCamelCase	)
	if arr.shape[0] != arr.shape[1]:
		raise ValueError('The input array is not a square matrix'	)
	__lowerCAmelCase    :		Optional[Any]		    =   0
	__lowerCAmelCase    :		Dict		    =   0
	__lowerCAmelCase    :		Optional[Any]		    =   0
	__lowerCAmelCase    :		Union[str, Any]		    =   0

	# compute the shape of the output matrix
	__lowerCAmelCase    :		Optional[int]		    =   (arr.shape[0] - size) // stride + 1
	# initialize the output matrix with zeros of shape avgpool_shape
	__lowerCAmelCase    :		Tuple		    =   np.zeros((avgpool_shape, avgpool_shape)	)

	while i < arr.shape[0]:
		# if the end of the matrix is reached, break
		if i + size > arr.shape[0]:
			break
		while j < arr.shape[1]:
			# if the end of the matrix is reached, break
			if j + size > arr.shape[1]:
				break
			# compute the average of the pooling matrix
			__lowerCAmelCase    :		Any		    =   int(np.average(arr[i : i + size, j : j + size]	)	)
			# shift the pooling matrix by stride of column pixels
			j += stride
			mat_j += 1

		# shift the pooling matrix by stride of row pixels
		i += stride
		mat_i += 1
		# reset the column index to 0
		__lowerCAmelCase    :		int		    =   0
		__lowerCAmelCase    :		Optional[Any]		    =   0

	return updated_arr


# Main Function
if __name__ == "__main__":
							from doctest import testmod

							testmod(name="""avgpooling""", verbose=True)

							# Loading the image
							lowerCamelCase__           =	Image.open("""path_to_image""")

							# Converting the image to numpy array and maxpooling, displaying the result
							# Ensure that the image is a square matrix

							Image.fromarray(maxpooling(np.array(image), size=3, stride=2)).show()

							# Converting the image to numpy array and averagepooling, displaying the result
							# Ensure that the image is a square matrix

							Image.fromarray(avgpooling(np.array(image), size=3, stride=2)).show()

"""simple docstring"""







from typing import List, Optional, Union

from ...image_utils import ImageInput
from ...processing_utils import ProcessorMixin
from ...tokenization_utils_base import BatchEncoding, PaddingStrategy, PreTokenizedInput, TextInput, TruncationStrategy
from ...utils import TensorType




class 				A__ (			_lowerCamelCase):
		A_		: Any            =			['image_processor', 'tokenizer']
		A_		: Optional[Any]            =			'BlipImageProcessor'
		A_		: int            =			'AutoTokenizer'

		def __init__(   self ,	_SCREAMING_SNAKE_CASE ,	_SCREAMING_SNAKE_CASE				):
			__lowerCAmelCase    :		Union[str, Any]		    =   False
			super().__init__(_SCREAMING_SNAKE_CASE ,	_SCREAMING_SNAKE_CASE				)
			__lowerCAmelCase    :		List[Any]		    =   self.image_processor

		def __call__(   self ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = True ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = 0 ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = None ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = False ,	_SCREAMING_SNAKE_CASE = True ,	_SCREAMING_SNAKE_CASE = None ,	**_SCREAMING_SNAKE_CASE ,	):
			if images is None and text is None:
				raise ValueError('You have to specify either images or text.'				)

			# Get only text
			if images is None:
				__lowerCAmelCase    :		Optional[int]		    =   self.tokenizer
				__lowerCAmelCase    :		List[str]		    =   self.tokenizer(
				    text=_SCREAMING_SNAKE_CASE ,	add_special_tokens=_SCREAMING_SNAKE_CASE ,	padding=_SCREAMING_SNAKE_CASE ,	truncation=_SCREAMING_SNAKE_CASE ,	max_length=_SCREAMING_SNAKE_CASE ,	stride=_SCREAMING_SNAKE_CASE ,	pad_to_multiple_of=_SCREAMING_SNAKE_CASE ,	return_attention_mask=_SCREAMING_SNAKE_CASE ,	return_overflowing_tokens=_SCREAMING_SNAKE_CASE ,	return_special_tokens_mask=_SCREAMING_SNAKE_CASE ,	return_offsets_mapping=_SCREAMING_SNAKE_CASE ,	return_token_type_ids=_SCREAMING_SNAKE_CASE ,	return_length=_SCREAMING_SNAKE_CASE ,	verbose=_SCREAMING_SNAKE_CASE ,	return_tensors=_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE ,	)
				return text_encoding

			# add pixel_values
			__lowerCAmelCase    :		List[Any]		    =   self.image_processor(_SCREAMING_SNAKE_CASE ,	return_tensors=_SCREAMING_SNAKE_CASE				)

			if text is not None:
				__lowerCAmelCase    :		Optional[int]		    =   self.tokenizer(
				    text=_SCREAMING_SNAKE_CASE ,	add_special_tokens=_SCREAMING_SNAKE_CASE ,	padding=_SCREAMING_SNAKE_CASE ,	truncation=_SCREAMING_SNAKE_CASE ,	max_length=_SCREAMING_SNAKE_CASE ,	stride=_SCREAMING_SNAKE_CASE ,	pad_to_multiple_of=_SCREAMING_SNAKE_CASE ,	return_attention_mask=_SCREAMING_SNAKE_CASE ,	return_overflowing_tokens=_SCREAMING_SNAKE_CASE ,	return_special_tokens_mask=_SCREAMING_SNAKE_CASE ,	return_offsets_mapping=_SCREAMING_SNAKE_CASE ,	return_token_type_ids=_SCREAMING_SNAKE_CASE ,	return_length=_SCREAMING_SNAKE_CASE ,	verbose=_SCREAMING_SNAKE_CASE ,	return_tensors=_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE ,	)
			else:
				__lowerCAmelCase    :		int		    =   None

			if text_encoding is not None:
				encoding_image_processor.update(_SCREAMING_SNAKE_CASE				)

			return encoding_image_processor

		def 							__lowerCamelCase							(   self ,	*_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE				):
			return self.tokenizer.batch_decode(*_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE				)

		def 							__lowerCamelCase							(   self ,	*_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE				):
			return self.tokenizer.decode(*_SCREAMING_SNAKE_CASE ,	**_SCREAMING_SNAKE_CASE				)







		@property
		# Copied from transformers.models.blip.processing_blip.BlipProcessor.model_input_names
		def 							__lowerCamelCase							(   self				):
			__lowerCAmelCase    :		int		    =   self.tokenizer.model_input_names
			__lowerCAmelCase    :		Union[str, Any]		    =   self.image_processor.model_input_names
			return list(dict.fromkeys(tokenizer_input_names + image_processor_input_names				)				)