old_contents: import numpy as np
  import scipy.ndimage as nd
  
  def remove_small_connected_components(ar, min_size=64, 
                                              connectivity=1, in_place=False):
      """Remove connected components smaller than the specified size.
  
      Parameters
      ----------
      ar : ndarray (arbitrary shape, int or bool type)
          The array containing the connected components of interest.
      min_size : int, optional (default: 64)
          The smallest allowable connected component size.
      connectivity : int, {1, 2, ..., ar.ndim}, optional (default: 1)
          The connectivity defining the neighborhood of a pixel.
      in_place : bool, optional (default: False)
          If `True`, remove the connected components in the input array itself.
          Otherwise, make a copy.
  
      Returns
      -------
      out : ndarray, same shape and type as input `ar`
          The input array with small connected components removed.
  
      Examples
      --------
      >>> import numpy as np
      >>> from skimage import morphology
      >>> from scipy import ndimage as nd
      >>> a = np.array([[0, 0, 0, 1, 0],
      ...               [1, 1, 1, 0, 0],
      ...               [1, 1, 1, 0, 1]], bool)
      >>> b = morphology.remove_small_connected_components(a, 6)
      >>> b
      array([[False, False, False, False, False],
             [ True,  True,  True, False, False],
             [ True,  True,  True, False, False]], dtype=bool)
      >>> c = morphology.remove_small_connected_components(a, 7, connectivity=2)
      >>> c
      array([[False, False, False,  True, False],
             [ True,  True,  True, False, False],
             [ True,  True,  True, False, False]], dtype=bool)
      >>> d = morphology.remove_small_connected_components(a, 6, in_place=True)
      >>> d is a
      True
      """
      structuring_element = nd.generate_binary_structure(ar.ndim, connectivity)
      if in_place:
          out = ar
      else:
          out = ar.copy()
      if min_size == 0: # shortcut for efficiency
          return out
      if out.dtype == bool:
          ccs = nd.label(ar, structuring_element)[0]
      else:
          ccs = out
      component_sizes = np.bincount(ccs.ravel())
      too_small = component_sizes < min_size
      too_small_mask = too_small[ccs]
      out[too_small_mask] = 0
      return out
  
new_contents: import numpy as np
  import scipy.ndimage as nd
  
  def remove_small_connected_components(ar, min_size=64, 
                                        connectivity=1, in_place=False):
      """Remove connected components smaller than the specified size.
  
      Parameters
      ----------
      ar : ndarray (arbitrary shape, int or bool type)
          The array containing the connected components of interest. If the array
          type is int, it is assumed that it contains already-labeled objects.
          The ints must be non-negative.
      min_size : int, optional (default: 64)
          The smallest allowable connected component size.
      connectivity : int, {1, 2, ..., ar.ndim}, optional (default: 1)
          The connectivity defining the neighborhood of a pixel.
      in_place : bool, optional (default: False)
          If `True`, remove the connected components in the input array itself.
          Otherwise, make a copy.
  
      Raises
      ------
      ValueError
          If the input array is of int type but contains negative values.
      TypeError
          If the input array is of an invalid type, such as float or string.
  
      Returns
      -------
      out : ndarray, same shape and type as input `ar`
          The input array with small connected components removed.
  
      Examples
      --------
      >>> from skimage import morphology
      >>> from scipy import ndimage as nd
      >>> a = np.array([[0, 0, 0, 1, 0],
      ...               [1, 1, 1, 0, 0],
      ...               [1, 1, 1, 0, 1]], bool)
      >>> b = morphology.remove_small_connected_components(a, 6)
      >>> b
      array([[False, False, False, False, False],
             [ True,  True,  True, False, False],
             [ True,  True,  True, False, False]], dtype=bool)
      >>> c = morphology.remove_small_connected_components(a, 7, connectivity=2)
      >>> c
      array([[False, False, False,  True, False],
             [ True,  True,  True, False, False],
             [ True,  True,  True, False, False]], dtype=bool)
      >>> d = morphology.remove_small_connected_components(a, 6, in_place=True)
      >>> d is a
      True
      """
      structuring_element = nd.generate_binary_structure(ar.ndim, connectivity)
      if in_place:
          out = ar
      else:
          out = ar.copy()
      if min_size == 0: # shortcut for efficiency
          return out
      if out.dtype == bool:
          ccs = nd.label(ar, structuring_element)[0]
      else:
          ccs = out
      component_sizes = np.bincount(ccs.ravel())
      too_small = component_sizes < min_size
      too_small_mask = too_small[ccs]
      out[too_small_mask] = 0
      return out
  
subject: Improve docstring for remove_small_connected_components