code: def cerode(f, g, Bc=None, out=None, output=None):
      """
      conditionally_eroded = cerode(f, g, Bc={3x3 cross}, out={np.empty_as(A)})
  
      Conditional morphological erosion.
  
      The type of operation depends on the ``dtype`` of ``A``! If boolean, then
      the erosion is binary, else it is greyscale erosion. In the case of
      greyscale erosion, the smallest value in the domain of ``Bc`` is
      interpreted as -Inf.
  
      Parameters
      ----------
      f : ndarray
          input image
      g : ndarray
          conditional image
      Bc : ndarray, optional
          Structuring element. By default, use a cross (see
          ``get_structuring_elem`` for details on the default).
  
      Returns
      -------
      conditionally_eroded : ndarray
          eroded version of ``f`` conditioned on ``g``
  
      See Also
      --------
      erode : function
          Unconditional version of this function
      dilate
      """
      f = np.maximum(f, g)
      _verify_is_integer_type(f, "cerode")
      Bc = get_structuring_elem(f, Bc)
      out = _get_output(f, out, "cerode", output=output)
      f = _morph.erode(f, Bc, out)
      return np.maximum(f, g, out=f)
  
imports: from __future__ import division
  import numpy
  from .internal import _get_output, _verify_is_integer_type, _check_2
  from .None import _morph
label_desc: Use image node_id 5 for calling a global function with example usage: cerode(f, g, Bc, out, output) and returns: np