'Rehydrate a LabelArray from the codes and metadata.
Parameters
codes : np.ndarray[integral]
The codes for the label array.
categories : np.ndarray[object]
The unique string categories.
reverse_categories : dict[str, int]
The mapping from category to its code-index.
missing_value : any
The value used to represent missing data.'

@classmethod
def from_codes_and_metadata(cls, codes, categories, reverse_categories, missing_value):

    ret = codes.view(type=cls, dtype=np.void)
    ret._categories = categories
    ret._reverse_categories = reverse_categories
    ret._missing_value = missing_value
    return ret
