
"""simple docstring"""


import numpy as np
from PIL import Image






def       _snake_case				(		snake_case__   :     np.ndarray	,      snake_case__   :     int	,      snake_case__   :     int     ):
	A						   =   np.array(snake_case__     )
	if arr.shape[0] != arr.shape[1]:
		raise ValueError('The input array is not a square matrix'     )
	A						   =   0
	A						   =   0
	A						   =   0
	A						   =   0

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

	return updated_arr






def       _snake_case				(		snake_case__   :     np.ndarray	,      snake_case__   :     int	,      snake_case__   :     int     ):
	A						   =   np.array(snake_case__     )
	if arr.shape[0] != arr.shape[1]:
		raise ValueError('The input array is not a square matrix'     )
	A						   =   0
	A						   =   0
	A						   =   0
	A						   =   0

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


# this script reports modified .py files under the desired list of top-level sub-dirs passed as a list of arguments, e.g.:
#   python ./utils/get_modified_files.py utils src tests examples
#
# it uses git to find the forking point and which files were modified - i.e. files not under git won't be considered
# since the output of this script is fed into Makefile commands it doesn't print a newline after the results

import re
import subprocess
import sys


_lowercase							   =				subprocess.check_output('''git merge-base main HEAD'''.split()).decode('''utf-8''')
_lowercase							   =				subprocess.check_output(F"""git diff --name-only {fork_point_sha}""".split()).decode('''utf-8''').split()

_lowercase							   =				'''|'''.join(sys.argv[1:])
_lowercase							   =				re.compile(rF"""^({joined_dirs}).*?\.py$""")

_lowercase							   =				[x for x in modified_files if regex.match(x)]
print(''' '''.join(relevant_modified_files), end='''''')