Yes: handle the non-add case before you get to this code, dealing with the
progressively more complicated cases:

```
        m = self.func(*other)
        if addterms == 1:
            if m == 1:
                return C.re(coeff), C.im(coeff)
            rem, imm = C.re(m), C.im(m)
            if coeff.is_real:
                return coeff*rem, imm
            imco = C.im(coeff)
            return -imco*imm, imco*rem
        addre, addim = expand_mul(addterms, deep=False).as_real_imag()
        ...
```