def METHOD_NAME(
    background_cond: np.ndarray,
    cell_cond: np.ndarray,
    k: int = 3,
    square: bool = False,
    p: float = 0.6,
    q: float = 0.4,
    precision: float = 1e-6,
    max_iter: int = 100,
) -> np.ndarray:
    """Compute the marginal probability of each pixel being a cell, using
    belief propagation.
    Args:
        background_cond: Probability of observing UMIs conditioned on background.
        cell_cond: Probability of observing UMIs conditioned on cell.
        k: Neighborhood size
        square: Whether the neighborhood of each node is a square around it.
            If false, the neighborhood is a circle.
        p: The potential indicating how likely two adjacent cells will be the
            same state. Does not necessarily have to be a probability.
        p: The potential indicating how likely two adjacent cells will be
            different states. Does not necessarily have to be a probability.
        precision: Stop iterations when desired precision is reached, as computed
            by the L2-norm of the messages from two consecutive iterations.
        max_iter: Maximum number of iterations.
    Returns:
        Numpy array of marginal probabilities.
    """
    neighborhood = np.ones((k, k)) if square else utils.circle(k)
    marginals = cell_marginals(
        background_cond,
        cell_cond,
        neighborhood=neighborhood,
        p=p,
        q=q,
        precision=precision,
        max_iter=max_iter,
    )
    return marginals