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
Esempio n. 2
0
 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
Esempio n. 3
0
    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)