





import numpy as np
from PIL import Image






def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase ,				_UpperCamelCase )		->						np.ndarray:






				"""simple docstring"""


				snake_case_						:    str				=  np.array(__a )
				if arr.shape[0] != arr.shape[1]:
								raise ValueError('''The input array is not a square matrix''' )
				snake_case_						:    Optional[int]				=  0
				snake_case_						:    Union[str, Any]				=  0
				snake_case_						:    Union[str, Any]				=  0
				snake_case_						:    List[Any]				=  0

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

				return updated_arr






def      lowerCamelCase_						(				_UpperCamelCase ,				_UpperCamelCase ,				_UpperCamelCase )		->						np.ndarray:






				"""simple docstring"""


				snake_case_						:    str				=  np.array(__a )
				if arr.shape[0] != arr.shape[1]:
								raise ValueError('''The input array is not a square matrix''' )
				snake_case_						:    List[str]				=  0
				snake_case_						:    List[Any]				=  0
				snake_case_						:    List[str]				=  0
				snake_case_						:    str				=  0

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







import os


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_doctest_list.py
__A									=				"."


if __name__ == "__main__":
     __A									=				os.path.join(REPO_PATH, "utils/documentation_tests.txt")
     __A									=				[]
     __A									=				[]
     with open(doctest_file_path) as fp:
          for line in fp:
               __A									=				line.strip()
               __A									=				os.path.join(REPO_PATH, line)
               if not (os.path.isfile(path) or os.path.isdir(path)):
                    non_existent_paths.append(line)
               all_paths.append(path)
     if len(non_existent_paths) > 0:
          __A									=				"\n".join(non_existent_paths)
          raise ValueError(f'`utils/documentation_tests.txt` contains non-existent paths:\n{non_existent_paths}')
     if all_paths != sorted(all_paths):
          raise ValueError("Files in `utils/documentation_tests.txt` are not in alphabetical order.")

