Hmmm, it seems that Exponent
does not check for polynomiality, unlike CoefficientList
. We need a test for that:
squareCompletion[pol_, var_] /;
PolynomialQ[pol, var] && Exponent[pol, var] == 2 :=
Module[{var0, x}, var0 = SolveValues[D[pol, var] == 0, var][[1]];
Collect[pol /. var -> var0 + x, x] /. x -> var - var0];
findAndSquareComplete[expr_, var_] := expr /.
(poly_ /; PolynomialQ[poly, var] && Exponent[poly, var] == 2) :>
squareCompletion[poly, var];
findAndSquareComplete[(4 (12 - 8 m + 5 m^2))/(16 - 8 m + 5 m^2), m]