def extract_features(self, x: CArray) -> CArray: """ Extract EMBER features Parameters ---------- x : CArray program sample Returns ------- CArray EMBER features """ extractor = PEFeatureExtractor(2, print_feature_warning=False) x_bytes = bytes(x.astype(np.int).tolist()[0]) features = CArray( [np.array(extractor.feature_vector(x_bytes), dtype=np.float32)]) return features
def extract_features(self, x: CArray): extractor = PEFeatureExtractor(2) x_bytes = bytes(x.astype(np.int).tolist()[0]) features = CArray( [np.array(extractor.feature_vector(x_bytes), dtype=np.float32)]) return features
def test_input_shape(self): """Test CArray.input_shape behavior.""" array = CArray([[[2, 3], [22, 33]], [[4, 5], [44, 55]]]) array_s = \ CArray([[[2, 3], [22, 33]], [[4, 5], [44, 55]]], tosparse=True) ref_shape = (2, 2, 2) # not propagate on getitem (as it returns new objects) out = array[0:2, 0:2] self.assertEqual(out.input_shape, out.shape) out = array_s[0:2, 0:2] self.assertEqual(out.input_shape, out.shape) # not propagate on other generic methods (as they return new objects) out = array.astype(float) self.assertEqual(out.input_shape, out.shape) out = array.unique() self.assertEqual(out.input_shape, out.shape) out = array.all(axis=0) self.assertEqual(out.input_shape, out.shape) # not propagate on classmethods (es. concatenate/append) out = CArray.concatenate(array, array, axis=0) self.assertEqual(out.input_shape, out.shape) out = CArray.concatenate(array, array, axis=None) self.assertEqual(out.input_shape, out.shape) # should propagate on copy/deepcopy from copy import copy, deepcopy array_c = copy(array) self.assertEqual(array_c.input_shape, ref_shape) array_c = copy(array_s) self.assertEqual(array_c.input_shape, ref_shape) array_c = deepcopy(array) self.assertEqual(array_c.input_shape, ref_shape) array_c = deepcopy(array_s) self.assertEqual(array_c.input_shape, ref_shape) array_c = array.deepcopy() self.assertEqual(array_c.input_shape, ref_shape) array_c = array_s.deepcopy() self.assertEqual(array_c.input_shape, ref_shape) # should propagate on setitem array_c = array.deepcopy() array_c[0:2, 0:2] = 200 self.assertEqual(array_c.input_shape, ref_shape) array_c = array.deepcopy() array_c[0:2, 0:2] = CArray([[100, 200], [300, 400]]) self.assertEqual(array_c.input_shape, ref_shape) array_c = array_s.deepcopy() array_c[0:2, 0:2] = CArray([[100, 200], [300, 400]]) self.assertEqual(array_c.input_shape, ref_shape) # should propagate on todense/tosparse self.assertEqual(array.tosparse().input_shape, ref_shape) self.assertEqual(array.todense().input_shape, ref_shape) self.assertEqual(array_s.tosparse().input_shape, ref_shape) self.assertEqual(array_s.todense().input_shape, ref_shape)