def __contains__(self, value, memo=None):
if self.dtype is None:
raise TypeError("cannot determine if {0} is in {1}: no dtype specified".format(repr(value), self))
if self.dims is None:
raise TypeError("cannot determine if {0} is in {1}: no dims specified".format(repr(value), self))
if value is None:
return self.nullable
def recurse(value, dims):
if dims == ():
if issubclass(self.dtype.type, (numpy.bool_, numpy.bool)):
return value is True or value is False
elif issubclass(self.dtype.type, numpy.integer):
iinfo = numpy.iinfo(self.dtype.type)
return isinstance(value, numbers.Integral) and iinfo.min <= value <= iinfo.max
elif issubclass(self.dtype.type, numpy.floating):
return isinstance(value, numbers.Real)
elif issubclass(self.dtype.type, numpy.complex):
return isinstance(value, numbers.Complex)
else:
raise TypeError("unexpected dtype: {0}".format(self.dtype))
else:
try:
iter(value)
len(value)
except TypeError:
return False
else:
return len(value) == dims[0] and all(recurse(x, dims[1:]) for x in value)
return recurse(value, self.dims)
评论列表
文章目录