'This function returns a string description of the type family
that the object in question belongs to.  Possible return values
are: "exact", "complex", "approximate", "sequence", and "unknown"'

def _detect_family(self, numeric_object):

    if isinstance(numeric_object, np.ndarray):
        return 'ndarray'
    if isinstance(numeric_object, enum.Enum):
        return 'enum'
    for tp in self._sequence_typesets:
        if isinstance(numeric_object, tp):
            return 'sequence'
    for tp in self._exact_typesets:
        if isinstance(numeric_object, tp):
            return 'exact'
    for tp in self._complex_types:
        if isinstance(numeric_object, tp):
            return 'complex'
    for tp in self._approx_typesets:
        if isinstance(numeric_object, tp):
            return 'approximate'
    return 'unknown'
