Before t_area <= 0 returned some unevaluated answer. And then this was
translated to False by bool(). Now: t_area.is_nonpositive returns None.
And, in turn, this is translated to False.

I believe you noted above that if the expression was previously
unevaluated, an error was raised when you try to convert to bool (or at
least that's what happens in the current master). I *think* this is a good
thing. If you don't know how the points are oriented, I don't think you can
make decisions about what the angles, for instance, must be. So I think we
need to raise an error for the case of None.

def conservative_bool(arg):
    if arg not in (True, False):
        raise ValueError('argument is not True or False')
    return bool(arg)