sign will return a number based on meaningful evaluation if it can; if it can't then an unevaluated sign will be returned and .n() should not be used to second guess. (You can see the most recent commits that I made in this regard). So whenever someone is using .n() to decide on the sign, this is a mistake; all the smart of doing so (or not) is already in sign.

So perhaps the line can be `if sign(a).is_Number and sign(a) != sign(a1)`...but I'm not sure what should be done if the expression is undecidable; perhaps the transformation should be skipped in that case; maybe this will never happen with pure square roots.