SymPy не пытается упростить все на месте, слишком много проблем (начиная с производительности), если он это сделал. См. Статью Автоматическое упрощение в вики SymPy.
Если вы хотите выделить выражение, вы должны сказать SymPy сделать это.
factor(sqrt(x**2+2*x+1)) # returns x+1
Формула sqrt(x**2)
становится x
, потому что (x**a)**b
можно смело комбинировать с x**(a*b)
, когда база положительна, а показатели действительны. (Даже в этом случае «может» не всегда означает «должно быть». В SymPy присутствует некоторая степень автоматического упрощения, возможно, слишком много.)
Ключевое различие между ними заключается в том, что x**2
является явной степенью, тогда как x**2 + 2*x + 1
является суммой.