That's what I had before, but that required special casing in the halo exchange code. Is it possible that only some sets have halos? If so I agree this would be wrong.

Another option would be:
```
halos = tuple(s.halo for s in self._sets)
halos if any(h is not None for h in halos) else None
```