def simple_ccw(a, b, c):
    """Simple Counterclockwise test.

    Return true if the points A, B, C are strictly counterclockwise.  Return
    false if the points are clockwise or collinear (i.e. if they are all
    contained on some great circle).

    Due to numerical errors, situations may arise that are mathematically
    impossible, e.g. ABC may be considered strictly CCW while BCA is not.
    However, the implementation guarantees the following:

      If simple_ccw(a,b,c), then !simple_ccw(c,b,a) for all a,b,c.

    see :cpp:func:`S2::SimpleCCW`
    """
    return c.cross_prod(a).dot_prod(b) > 0
