def test_translate_np_dtype(self): ''' Tests dtypes.translate_np_dtype method :return: None :raise: AssertionError if 1.. test cases fail ''' d_tuple = dtypes.translate_np_dtype(np.dtype(np.bool_)) self.assertEqual(1, d_tuple[1]) self.assertEqual('bool', d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(bool)) self.assertEqual(1, d_tuple[1]) self.assertEqual('bool', d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(np.int64)) self.assertEqual(8, d_tuple[1]) self.assertEqual('int', d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(np.float64)) self.assertEqual(8, d_tuple[1]) self.assertEqual('float', d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(np.uint8)) self.assertEqual(1, d_tuple[1]) self.assertEqual('uint',d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(np.str_)) self.assertEqual(0, d_tuple[1]) self.assertEqual('str', d_tuple[0]) d_tuple = dtypes.translate_np_dtype(np.dtype(str)) self.assertEqual(0, d_tuple[1]) self.assertEqual('str', d_tuple[0]) with self.assertRaises(TypeError): dtypes.check_np_dtype(np.dtype(np.int16)) with self.assertRaises(TypeError): dtypes.translate_np_dtype('np.str')
def __getitem__(self, key): if np.isscalar(key) and resolve_scalar_dtype(key) == 'int64': orig_key = key if key < 0: # Interpret negative key as offset from end of array key += self.size if (key >= 0 and key < self.size): cmd = "segmentedIndex" args = " {} {} {} {} {}".format('intIndex', self.objtype, self.offsets.name, self.bytes.name, key) repMsg = generic_msg(cmd=cmd, args=args) _, value = repMsg.split(maxsplit=1) return parse_single_value(value) else: raise IndexError("[int] {} is out of bounds with size {}".\ format(orig_key,self.size)) elif isinstance(key, slice): (start, stop, stride) = key.indices(self.size) self.logger.debug('start: {}; stop: {}; stride: {}'.format( start, stop, stride)) cmd = "segmentedIndex" args = " {} {} {} {} {} {} {}".format('sliceIndex', self.objtype, self.offsets.name, self.bytes.name, start, stop, stride) repMsg = generic_msg(cmd=cmd, args=args) offsets, values = repMsg.split('+') return Strings(offsets, values) elif isinstance(key, pdarray): kind, _ = translate_np_dtype(key.dtype) if kind not in ("bool", "int"): raise TypeError("unsupported pdarray index type {}".format( key.dtype)) if kind == "bool" and self.size != key.size: raise ValueError("size mismatch {} {}".format( self.size, key.size)) cmd = "segmentedIndex" args = "{} {} {} {} {}".format('pdarrayIndex', self.objtype, self.offsets.name, self.bytes.name, key.name) repMsg = generic_msg(cmd, args) offsets, values = repMsg.split('+') return Strings(offsets, values) else: raise TypeError("unsupported pdarray index type {}".format( key.__class__.__name__))