Canonical schema ================ All readers convert their native fields into a single in-memory schema before the writer emits HDF5. Sticking to this contract is what makes new readers cheap to add. Units ----- .. list-table:: :header-rows: 1 :widths: 30 70 * - Quantity - Units * - length - Mpc/h (comoving) * - mass - M_sun/h * - velocity - km/s (peculiar; no Hubble flow) * - spin - dimensionless (Bullock) * - expansion ``a`` - dimensionless scale factor ``Halo`` dtype -------------- .. code-block:: python HALO_DTYPE = np.dtype([ ("nodeIndex", "