This is an automated email from the ASF dual-hosted git repository.

okislal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/madlib.git


The following commit(s) were added to refs/heads/master by this push:
     new 1cbd9d4  DL: Add negative unit tests for unsupported compile and fit 
params
1cbd9d4 is described below

commit 1cbd9d40d635c6efe0150d724fb1c07b4f58acd1
Author: Orhan Kislal <okis...@pivotal.io>
AuthorDate: Wed May 1 10:40:03 2019 -0700

    DL: Add negative unit tests for unsupported compile and fit params
    
    JIRA: MADLIB-1309
---
 .../test/unit_tests/test_madlib_keras.py_in        | 83 ++++++++++++++++++++--
 1 file changed, 78 insertions(+), 5 deletions(-)

diff --git 
a/src/ports/postgres/modules/deep_learning/test/unit_tests/test_madlib_keras.py_in
 
b/src/ports/postgres/modules/deep_learning/test/unit_tests/test_madlib_keras.py_in
index 3d27e1b..912f266 100644
--- 
a/src/ports/postgres/modules/deep_learning/test/unit_tests/test_madlib_keras.py_in
+++ 
b/src/ports/postgres/modules/deep_learning/test/unit_tests/test_madlib_keras.py_in
@@ -285,7 +285,7 @@ class MadlibKerasFitTestCase(unittest.TestCase):
             None, self.independent_var , self.dependent_var, 0, 2, 
self.all_seg_ids, total_images_per_seg,
             self.model.to_json(), self.compile_params, self.fit_params, False,
             previous_state.tostring(), **k)
- 
+
 
     def test_fit_merge(self):
         image_count = self.total_images_per_seg[0]
@@ -301,7 +301,7 @@ class MadlibKerasFitTestCase(unittest.TestCase):
         agg_accuracy = state[1]
         image_count_total = state[2]
         weights = np.rint(state[3:]).astype(np.int)
-       
+
         self.assertEqual( 2*image_count+30 , image_count_total )
         self.assertAlmostEqual( 5.0*self.loss, agg_loss, 2)
         self.assertAlmostEqual( 5.0*self.accuracy, agg_accuracy, 2)
@@ -318,7 +318,7 @@ class MadlibKerasFitTestCase(unittest.TestCase):
         agg_accuracy = state[1]
         image_count_total = state[2]
         weights = np.rint(state[3:]).astype(np.int)
-       
+
         self.assertEqual(image_count, image_count_total)
         self.assertAlmostEqual(self.loss, agg_loss, 2)
         self.assertAlmostEqual(self.accuracy, agg_accuracy, 2)
@@ -335,7 +335,7 @@ class MadlibKerasFitTestCase(unittest.TestCase):
         agg_accuracy = state[1]
         image_count_total = state[2]
         weights = np.rint(state[3:]).astype(np.int)
-       
+
         self.assertEqual(image_count, image_count_total)
         self.assertAlmostEqual(self.loss, agg_loss, 2)
         self.assertAlmostEqual(self.accuracy, agg_accuracy, 2)
@@ -350,7 +350,7 @@ class MadlibKerasFitTestCase(unittest.TestCase):
         input_state = [image_count*self.loss, image_count*self.accuracy, 
image_count]
         input_state.extend(mult(image_count,self.model_weights))
         input_state = np.array(input_state, dtype=np.float32)
-        
+
         output_state = self.subject.fit_final(input_state.tostring())
         output_state = np.fromstring(output_state, dtype=np.float32)
         agg_loss = output_state[0]
@@ -443,6 +443,79 @@ class MadlibKerasFitTestCase(unittest.TestCase):
                             accepted_fit_params)
         self.assertDictEqual(result_params, target_dict)
 
+## Negative Tests
+    def test_parse_and_validate_compile_params_dict_metrics_fail(self):
+        test_str = "optimizer=SGD(lr=0.01, decay=1e-6, nesterov=True), 
loss='categorical_crossentropy', metrics={'0':'accuracy'}"
+
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_compile_params(test_str)
+
+    def test_parse_and_validate_compile_params_tensor_loss_weights_fail(self):
+
+        test_str = "optimizer=SGD(lr=0.01, decay=1e-6, nesterov=True), 
loss='categorical_crossentropy', metrics=['accuracy'], loss_weights = 
keras.layers.Input(shape=(32,))"
+
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_compile_params(test_str)
+
+
+    def 
test_parse_and_validate_compile_params_list_dict_sample_weight_mode_fail(self):
+        test_str = "optimizer=SGD(lr=0.01, decay=1e-6, nesterov=True), 
loss='categorical_crossentropy', metrics=['accuracy'], sample_weight_mode = 
[0,1]"
+
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_compile_params(test_str)
+
+        test_str = "optimizer=SGD(lr=0.01, decay=1e-6, nesterov=True), 
loss='categorical_crossentropy', metrics=['accuracy'], sample_weight_mode = 
{'0':'1'}"
+
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_compile_params(test_str)
+
+
+    def test_parse_and_validate_compile_params_target_tensors_fail(self):
+        test_str = "optimizer=SGD(lr=0.01, decay=1e-6, nesterov=True), 
loss='categorical_crossentropy', metrics=['accuracy'], target_tensors = 
keras.layers.Input(shape=(32,))"
+
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_compile_params(test_str)
+
+    def test_parse_and_validate_fit_params_callbacks_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, 
callbacks=keras.callbacks.Callback()"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+    def test_parse_and_validate_fit_params_validation_split_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, validation_split=0.1"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+    def test_parse_and_validate_fit_params_validation_data_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, validation_data=(1,2,3)"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+    def test_parse_and_validate_fit_params_sample_weight_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, 
sample_weight=np.array([1,2,3])"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+    def test_parse_and_validate_fit_params_validation_steps_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, validation_steps=1"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+    def test_parse_and_validate_fit_params_validation_freq_fail(self):
+
+        test_str = "batch_size=2, epochs=1, verbose=0, validation_freq=1"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
+        test_str = "batch_size=2, epochs=1, verbose=0, validation_freq=[1]"
+        with self.assertRaises(plpy.PLPYException):
+            self.subject.parse_and_validate_fit_params(test_str)
+
 class MadlibKerasValidatorTestCase(unittest.TestCase):
     def setUp(self):
         self.plpy_mock = Mock(spec='error')

Reply via email to