




'''simple docstring'''




import numpy as np
from PIL import Image





def      a_							(      __snake_case							:			np.ndarray   ,       __snake_case							:			int   ,       __snake_case							:			int   )							->						np.ndarray:



       """simple docstring"""
       lowerCamelCase_							=np.array(__snake_case   )
       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      a_							(      __snake_case							:			np.ndarray   ,       __snake_case							:			int   ,       __snake_case							:			int   )							->						np.ndarray:



       """simple docstring"""
       lowerCamelCase_							=np.array(__snake_case   )
       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_      :		Union[str, Any]							      =       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 random
from typing import Any






def  snake_case  (       snake_case__			:list)						->   list[Any]:
       for _ in range(len(snake_case__)):
              _A        =  random.randint(0   ,	len(snake_case__) - 1)
              _A        =  random.randint(0   ,	len(snake_case__) - 1)
              _A   ,  _A        =  data[b], data[a]
       return data


if __name__ == "__main__":
    _SCREAMING_SNAKE_CASE										=						[0, 1, 2, 3, 4, 5, 6, 7]
    _SCREAMING_SNAKE_CASE										=						['python', 'says', 'hello', '!']
    print('Fisher-Yates Shuffle:')
    print('List', integers, strings)
    print('FY Shuffle', fisher_yates_shuffle(integers), fisher_yates_shuffle(strings))




