text: def square_matrix(square):
      # Calculate sum of all the pixels in 3 * 3 matrix
      tot_sum = 0
      for i in range(3):
          for j in range(3):
              tot_sum += square[i][j]
  
      return tot_sum // 9  # return the average of the sum of pixels
  
  
  def boxBlur(image):
      square = []  # This will store the 3 * 3 matrix
      # which will be used to find its blurred pixel
  
      square_row = []  # This will store one row of a 3 * 3 matrix and
      # will be appended in square
  
      blur_row = []  # Here we will store the resulting blurred
      # pixels possible in one row
      # and will append this in the blur_img
  
      blur_img = []  # This is the resulting blurred image
  
      # number of rows in the given image
      n_rows = len(image)
  
      # number of columns in the given image
      n_col = len(image[0])
  
      # rp is row pointer and cp is column pointer
      rp, cp = 0, 0
  
      # This while loop will be used to
      # calculate all the blurred pixel in the first row
      while rp <= n_rows - 3:
          while cp <= n_col - 3:
  
              for i in range(rp, rp + 3):
  
                  for j in range(cp, cp + 3):
  
                      # append all the pixels in a row of 3 * 3 matrix
                      square_row.append(image[i][j])
  
                  # append the row in the square i.e. 3 * 3 matrix
                  square.append(square_row)
                  square_row = []
  
              # calculate the blurred pixel for given 3 * 3 matrix
              # i.e. square and append it in blur_row
              blur_row.append(square_matrix(square))
              square = []
  
              # increase the column pointer
              cp = cp + 1
  
          # append the blur_row in blur_image
          blur_img.append(blur_row)
          blur_row = []
          rp = rp + 1  # increase row pointer
          cp = 0  # start column pointer from 0 again
  
      # Return the resulting pixel matrix
      return blur_img
  