{"push_id":667710896,"size":1,"distinct_size":1,"ref":"refs/heads/falsepositive-falsenegative-in-mul-eval-is-positive","head":"a97fbfb8bc5b351852fdf79b908cedd2fe8732eb","before":"668575e885615f870677d9fa1b3ba1c23b81d000","commits":[{"sha":"a97fbfb8bc5b351852fdf79b908cedd2fe8732eb","author":{"email":"2196a8560bd39bf654b5f3fa8004e0b2acceb7d6@gmail.com","name":"Mathew Chong"},"message":"Applied refactoring suggestion from @smichr for pull request 9379\n\nOriginal commit message:\nHandle arg.is_positive/negative = False in Mul._eval_is_positive\n\nThis can handle seeing one arg which is_positive/is_negative=False. If\nthere's more than one is_positive/is_negative=False arg, all bets are\noff. It becomes a multiplication between non-reals. The result of the\nMul could then be positive, negative, not real etc. This is why I count\nthe number of is_positive/is_negative=False args.\n\nThis is also one of the changes needed to fix the infinite recursion bug\nwhen the cache is turned off. The (-self).is_positive call actually has\nside effects that causes Mul._eval_is_negative to perform these\nis_positive/is_negative = False checks for some reason (without this\ncommit). This is why I explicitly add it to the _eval_is_positive case.\n\nExample:\nmx = -Symbol('x', negative=False)\nassert mx.is_positive is False # will pass now\n\npx = 2*Symbol('x', positive=False)\nassert px.is_positive is False # will pass now","distinct":true,"url":"https://api.github.com/repos/mcho421/sympy/commits/a97fbfb8bc5b351852fdf79b908cedd2fe8732eb"}]}