


"""simple docstring"""


import numpy as np
from PIL import Image


def _lowerCamelCase	(		_UpperCamelCase    , _UpperCamelCase    , _UpperCamelCase      ):

			'''simple docstring'''




			__lowerCAmelCase				    =			np.array(_UpperCamelCase      )
			if arr.shape[0] != arr.shape[1]:
						raise ValueError("The input array is not a square matrix"      )
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0

			# compute the shape of the output matrix
			__lowerCAmelCase				    =			(arr.shape[0] - size) // stride + 1
			# initialize the output matrix with zeros of shape maxpool_shape
			__lowerCAmelCase				    =			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				    =			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				    =			0
						__lowerCAmelCase				    =			0

			return updated_arr


def _lowerCamelCase	(		_UpperCamelCase    , _UpperCamelCase    , _UpperCamelCase      ):

			'''simple docstring'''




			__lowerCAmelCase				    =			np.array(_UpperCamelCase      )
			if arr.shape[0] != arr.shape[1]:
						raise ValueError("The input array is not a square matrix"      )
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0
			__lowerCAmelCase				    =			0

			# compute the shape of the output matrix
			__lowerCAmelCase				    =			(arr.shape[0] - size) // stride + 1
			# initialize the output matrix with zeros of shape avgpool_shape
			__lowerCAmelCase				    =			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				    =			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				    =			0
						__lowerCAmelCase				    =			0

			return updated_arr


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

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

	# Loading the image
	A     :   str			    =			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 diffusers.utils.testing_utils import require_onnxruntime
@require_onnxruntime
class   _UpperCamelCase  :
							'''simple docstring'''







							pass




