'Returns a list of square-free factors of ``f``.
Examples
>>> from sympy import Poly, expand
>>> from sympy.abc import x
>>> f = expand(2*(x + 1)**3*x**4)
>>> f
2*x**7 + 6*x**6 + 6*x**5 + 2*x**4
>>> Poly(f).sqf_list_include()
[(Poly(2, x, domain=\'ZZ\'), 1),
(Poly(x + 1, x, domain=\'ZZ\'), 3),
(Poly(x, x, domain=\'ZZ\'), 4)]
>>> Poly(f).sqf_list_include(all=True)
[(Poly(2, x, domain=\'ZZ\'), 1),
(Poly(1, x, domain=\'ZZ\'), 2),
(Poly(x + 1, x, domain=\'ZZ\'), 3),
(Poly(x, x, domain=\'ZZ\'), 4)]'

def sqf_list_include(f, all=False):

    if hasattr(f.rep, 'sqf_list_include'):
        factors = f.rep.sqf_list_include(all)
    else:
        raise OperationNotSupported(f, 'sqf_list_include')
    return [(f.per(g), k) for (g, k) in factors]
