def clip_range(nodes1, nodes2):
    r"""Reduce the parameter range where two curves can intersect.

    Does so by using the "fat line" for ``nodes1`` and computing the
    distance polynomial against ``nodes2``.

    .. note::

       This assumes, but does not check that the curves being considered
       will only have one intersection in the parameter ranges
       :math:`s \in \left[0, 1\right]`, :math:`t \in \left[0, 1\right]`.
       This assumption is based on the fact that B |eacute| zier clipping
       is meant to be used to find tangent intersections for already
       subdivided (i.e. sufficiently zoomed in) curve segments.

    Args:
        nodes1 (numpy.ndarray): ``2 x N1`` array of nodes in a curve which
            will define the clipping region.
        nodes2 (numpy.ndarray): ``2 x N2`` array of nodes in a curve which
            will be clipped.

    Returns:
        Tuple[float, float]: The pair of

        * The start parameter of the clipped range.
        * The end parameter of the clipped range.
    """
    # NOTE: There is no corresponding "enable", but the disable only applies
    #       in this lexical scope.
    # pylint: disable=too-many-locals
    coeff_a, coeff_b, coeff_c, d_min, d_max = compute_fat_line(nodes1)
    # NOTE: This assumes, but does not check, that there are two rows.
    _, num_nodes2 = nodes2.shape
    polynomial = np.empty((2, num_nodes2), order="F")
    denominator = float(num_nodes2 - 1)
    for index in six.moves.xrange(num_nodes2):
        polynomial[0, index] = index / denominator
        polynomial[1, index] = (
            coeff_a * nodes2[0, index] + coeff_b * nodes2[1, index] + coeff_c
        )
    # Define segments for the top and the bottom of the region
    # bounded by the fat line.
    start_bottom = np.asfortranarray([0.0, d_min])
    end_bottom = np.asfortranarray([1.0, d_min])
    start_top = np.asfortranarray([0.0, d_max])
    end_top = np.asfortranarray([1.0, d_max])
    s_min = DEFAULT_S_MIN
    s_max = DEFAULT_S_MAX
    # NOTE: We avoid computing the convex hull and just compute where
    #       all segments connecting two control points intersect the
    #       fat lines.
    for start_index in six.moves.xrange(num_nodes2 - 1):
        for end_index in six.moves.xrange(start_index + 1, num_nodes2):
            s_min, s_max = _update_parameters(
                s_min,
                s_max,
                start_bottom,
                end_bottom,
                polynomial[:, start_index],
                polynomial[:, end_index],
            )
            s_min, s_max = _update_parameters(
                s_min,
                s_max,
                start_top,
                end_top,
                polynomial[:, start_index],
                polynomial[:, end_index],
            )
    return _check_parameter_range(s_min, s_max)
r"""Reduce the parameter range where two curves can intersect.

    Does so by using the "fat line" for ``nodes1`` and computing the
    distance polynomial against ``nodes2``.

    .. note::

       This assumes, but does not check that the curves being considered
       will only have one intersection in the parameter ranges
       :math:`s \in \left[0, 1\right]`, :math:`t \in \left[0, 1\right]`.
       This assumption is based on the fact that B |eacute| zier clipping
       is meant to be used to find tangent intersections for already
       subdivided (i.e. sufficiently zoomed in) curve segments.

    Args:
        nodes1 (numpy.ndarray): ``2 x N1`` array of nodes in a curve which
            will define the clipping region.
        nodes2 (numpy.ndarray): ``2 x N2`` array of nodes in a curve which
            will be clipped.

    Returns:
        Tuple[float, float]: The pair of

        * The start parameter of the clipped range.
        * The end parameter of the clipped range.