'Returns a tuple (coeff, args) where self is treated as an Add and coeff
is the Number term and args is a tuple of all other terms.
Examples
>>> from sympy.abc import x
>>> (7 + 3*x).as_coeff_add()
(7, (3*x,))
>>> (7*x).as_coeff_add()
(0, (7*x,))'

@cacheit
def as_coeff_add(self, *deps):

    if deps:
        l1 = []
        l2 = []
        for f in self.args:
            if f.has(*deps):
                l2.append(f)
            else:
                l1.append(f)
        return (self._new_rawargs(*l1), tuple(l2))
    (coeff, notrat) = self.args[0].as_coeff_add()
    if (coeff is not S.Zero):
        return (coeff, (notrat + self.args[1:]))
    return (S.Zero, self.args)
