def _is_negative_or_zero(term): if getattr(term, 'is_number', False): return term <= 0 elif isinstance(term, Pow): if term.args[1]%2==1: return _is_negative_or_zero(term.args[0]) t = Poly(term).as_dict() if (all(c < 0 for c in t.values()) and all(i % 2 == 0 for d in t.keys() for i in d)): return True return ask_is_negative(term)
def _is_negative(term): if getattr(term, 'is_number', False): return term < 0 elif isinstance(term, Pow): if term.args[1]%2==1: return _is_negative(term.args[0]) else: return False l = len(term.free_symbols) t = Poly(term).as_dict() if (all(c < 0 for c in t.values()) and all(i % 2 == 0 for d in t.keys() for i in d) and (0,)*l in t.keys()): return True return ask_is_negative(term)