'''simple docstring'''




import numpy as np
from PIL import Image






def 				snake_case__							(			_A:					np.ndarray      ,   _A:					int      ,   _A:					int )    ->	np.ndarray:

		'''simple docstring'''


		lowerCAmelCase   					=  np.array(_A )
		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 				snake_case__							(			_A:					np.ndarray      ,   _A:					int      ,   _A:					int )    ->	np.ndarray:

		'''simple docstring'''


		lowerCAmelCase   					=  np.array(_A )
		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
						__lowercase          =  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 TYPE_CHECKING

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


__lowercase          =  {
    '''configuration_nezha''': ['''NEZHA_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''NezhaConfig'''],
}

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						__lowercase          =  [
						    '''NEZHA_PRETRAINED_MODEL_ARCHIVE_LIST''',
						    '''NezhaForNextSentencePrediction''',
						    '''NezhaForMaskedLM''',
						    '''NezhaForPreTraining''',
						    '''NezhaForMultipleChoice''',
						    '''NezhaForQuestionAnswering''',
						    '''NezhaForSequenceClassification''',
						    '''NezhaForTokenClassification''',
						    '''NezhaModel''',
						    '''NezhaPreTrainedModel''',
						]


if TYPE_CHECKING:
						from .configuration_nezha import NEZHA_PRETRAINED_CONFIG_ARCHIVE_MAP, NezhaConfig

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_nezha import (
												    NEZHA_PRETRAINED_MODEL_ARCHIVE_LIST,
												    NezhaForMaskedLM,
												    NezhaForMultipleChoice,
												    NezhaForNextSentencePrediction,
												    NezhaForPreTraining,
												    NezhaForQuestionAnswering,
												    NezhaForSequenceClassification,
												    NezhaForTokenClassification,
												    NezhaModel,
												    NezhaPreTrainedModel,
												)


else:
						import sys

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




