



'''simple docstring'''




import numpy as np
from PIL import Image



def      a      (			lowerCamelCase__						,				lowerCamelCase__						,				lowerCamelCase__   ):
			'''simple docstring'''





			A_     :						List[str]     =					np.array(lowerCamelCase__   )
			if arr.shape[0] != arr.shape[1]:
						raise ValueError("""The input array is not a square matrix"""   )
			A_     :						Union[str, Any]     =					0
			A_     :						Optional[Any]     =					0
			A_     :						Tuple     =					0
			A_     :						List[str]     =					0

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

			return updated_arr



def      a      (			lowerCamelCase__						,				lowerCamelCase__						,				lowerCamelCase__   ):
			'''simple docstring'''





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

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

			return updated_arr


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

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

						# Loading the image
						lowerCamelCase							: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'''




def      a      (			lowerCamelCase__						,				lowerCamelCase__   ):
			'''simple docstring'''





			if density <= 0:
						raise ValueError("""Impossible fluid density"""   )
			if bulk_modulus <= 0:
						raise ValueError("""Impossible bulk modulus"""   )

			return (bulk_modulus / density) ** 0.5


if __name__ == "__main__":
						import doctest

						doctest.testmod()