If it is, as you said, the same as `if dif.is_nonnegative is not dif.is_negative and dif.is_nonnegative is not None:` then i would suggest putting the easy test first and saying it verbosely:  `if dif.is_nonnegative is not None and dif.is_nonnegative is not dif.is_negative:`. 

Since the value is cached after computation it's probably not necessary to store the `dif.is_nonnegative` value as I think I have done elsewhere (writing `nonneg = dif.is_nonnegative\nif nonneg is not None and nonneg is not dif.is_negative`). But if you can short circuit the additional test I think that's best.