Is that not the same as
    np.abs(z)**2 ?

It is, but since that involves taking sqrt, it is *much* slower. Even now,
```
In [32]: r = np.arange(10000)*(1+1j)

In [33]: %timeit np.abs(r)**2
1000 loops, best of 3: 213 µs per loop

In [34]: %timeit r.real**2 + r.imag**2
10000 loops, best of 3: 47.5 µs per loop
```

-- Marten