This could be annoying if `data[i, j]` is built independently of `data[j, i]` (it will fail due to floating point inaccuracies) because it'll force the caller to play with `np.triu`/`np.tril` to massage the data.