def simple_crossing(a, b, c, d):
    """see :cpp:func:`S2EdgeUtil::SimpleCrossing`"""
    ab = a.cross_prod(b)
    acb = -ab.dot_prod(c)
    bda = ab.dot_prod(d)
    if acb * bda <= 0:
        return False
    cd = c.cross_prod(d)
    cbd = -cd.dot_prod(b)
    dac = cd.dot_prod(a)
    return acb * cbd > 0 and acb * dac > 0
