def __new__(cls,name):
        if isinstance(name,dtype):
            dtype0 = name
            name = None
            for n,i in typeinfo.items():
                if isinstance(i,tuple) and dtype0.type is i[-1]:
                    name = n
                    break
        obj = cls._type_cache.get(name.upper(),None)
        if obj is not None:
            return obj
        obj = object.__new__(cls)
        obj._init(name)
        cls._type_cache[name.upper()] = obj
        return obj