szha closed pull request #11923: [MXAPPS-581] Fixes for broken Straight Dope 
tests.
URL: https://github.com/apache/incubator-mxnet/pull/11923
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/tests/nightly/straight_dope/straight_dope_test_utils.py 
b/tests/nightly/straight_dope/straight_dope_test_utils.py
index bb64f37fe5f..ee499a56fbd 100644
--- a/tests/nightly/straight_dope/straight_dope_test_utils.py
+++ b/tests/nightly/straight_dope/straight_dope_test_utils.py
@@ -24,6 +24,7 @@
     the notebook. e.g: `export MXNET_TEST_KERNEL=python2`
 """
 import io
+import logging
 import os
 import re
 import shutil
@@ -40,6 +41,7 @@
 GIT_REPO = 'https://github.com/zackchase/mxnet-the-straight-dope'
 KERNEL = os.getenv('MXNET_TEST_KERNEL', None)
 NOTEBOOKS_DIR = os.path.join(os.path.dirname(__file__), 'tmp_notebook')
+RELATIVE_DATA_PATH_REGEX = r'\.\.\/data\/'  # Regular expression to match the 
relative data path.
 
 def _test_notebook(notebook, override_epochs=True):
     """Run Jupyter notebook to catch any execution error.
@@ -47,13 +49,18 @@ def _test_notebook(notebook, override_epochs=True):
     Args:
         notebook : string
             notebook name in folder/notebook format
-        epochs : boolean
+        override_epochs : boolean
             whether or not to override the number of epochs to 1
+
     Returns:
         True if the notebook runs without warning or error.
     """
+    # Some notebooks will fail to run without error if we do not override the 
data path.
+    _override_data_path(notebook)
+
     if override_epochs:
         _override_epochs(notebook)
+
     return run_notebook(notebook, NOTEBOOKS_DIR, kernel=KERNEL, 
temp_dir=NOTEBOOKS_DIR)
 
 
@@ -63,15 +70,14 @@ def _override_epochs(notebook):
     Args:
         notebook : string
             notebook name in folder/notebook format
-
     """
     notebook_path = os.path.join(*([NOTEBOOKS_DIR] + notebook.split('/'))) + 
".ipynb"
 
-    # Read the notebook and set epochs to num_epochs
+    # Read the notebook and set epochs to num_epochs.
     with io.open(notebook_path, 'r', encoding='utf-8') as f:
         notebook = f.read()
 
-    # Set number of epochs to 1
+    # Set number of epochs to 1.
     modified_notebook = re.sub(EPOCHS_REGEX, 'epochs = 1', notebook)
 
     # Replace the original notebook with the modified one.
@@ -79,13 +85,34 @@ def _override_epochs(notebook):
         f.write(modified_notebook)
 
 
+def _override_data_path(notebook):
+    """Overrides the relative path for the data directory to point to the 
right place. This is
+    required as we run the notebooks in a different directory hierarchy more 
suitable for testing.
+
+    Args:
+        notebook : string
+            notebook name in folder/notebook format
+    """
+    notebook_path = os.path.join(*([NOTEBOOKS_DIR] + notebook.split('/'))) + 
".ipynb"
+
+    # Read the notebook and set epochs to num_epochs.
+    with io.open(notebook_path, 'r', encoding='utf-8') as f:
+        notebook = f.read()
+
+    # Update the location for the data directory.
+    modified_notebook = re.sub(RELATIVE_DATA_PATH_REGEX, NOTEBOOKS_DIR + 
'/data/', notebook)
+
+    # Replace the original notebook with the modified one.
+    with io.open(notebook_path, 'w', encoding='utf-8') as f:
+        f.write(modified_notebook)
+
 def _download_straight_dope_notebooks():
     """Downloads the Straight Dope Notebooks.
 
     Returns:
         True if it succeeds in downloading the notebooks without error.
     """
-    print('Cleaning and setting up notebooks directory 
"{}"'.format(NOTEBOOKS_DIR))
+    logging.info('Cleaning and setting up notebooks directory 
"{}"'.format(NOTEBOOKS_DIR))
     shutil.rmtree(NOTEBOOKS_DIR, ignore_errors=True)
 
     cmd = [GIT_PATH,
@@ -98,7 +125,7 @@ def _download_straight_dope_notebooks():
     if proc.returncode != 0:
         err_msg = 'Error downloading Straight Dope notebooks.\n'
         err_msg += msg
-        print(err_msg)
+        logging.error(err_msg)
         return False
     return True
 
diff --git a/tests/nightly/straight_dope/test_notebooks_single_gpu.py 
b/tests/nightly/straight_dope/test_notebooks_single_gpu.py
index b87d16cb0a0..ee7c94c80af 100644
--- a/tests/nightly/straight_dope/test_notebooks_single_gpu.py
+++ b/tests/nightly/straight_dope/test_notebooks_single_gpu.py
@@ -32,9 +32,19 @@
     'chapter01_crashcourse/introduction',
     'chapter01_crashcourse/chapter-one-problem-set',
     'chapter02_supervised-learning/environment',
+    'chapter03_deep-neural-networks/kaggle-gluon-kfold',
     'chapter07_distributed-learning/multiple-gpus-scratch',
     'chapter07_distributed-learning/multiple-gpus-gluon',
-    'chapter07_distributed-learning/training-with-multiple-machines'
+    'chapter07_distributed-learning/training-with-multiple-machines',
+    'chapter12_time-series/intro-forecasting-gluon',
+    'chapter12_time-series/intro-forecasting-2-gluon',
+    'chapter13_unsupervised-learning/vae-gluon',
+    'chapter18_variational-methods-and-uncertainty/bayes-by-backprop-rnn',
+    'chapter17_deep-reinforcement-learning/DQN',
+    'chapter17_deep-reinforcement-learning/DDQN',
+    'chapter19_graph-neural-networks/Graph-Neural-Networks',
+    'chapter16_tensor_methods/tensor_basics',
+    'cheatsheets/kaggle-gluon-kfold'
 ]
 
 
@@ -91,10 +101,8 @@ def test_linear_regression_scratch(self):
     def test_linear_regression_gluon(self):
         assert 
_test_notebook('chapter02_supervised-learning/linear-regression-gluon')
 
-    # TODO(vishaalk): There is a relative file path needs to be fixed so that 
the
-    # python code can be run from another directory.
-    #def test_logistic_regression_gluon(self):
-    #    assert 
_test_notebook('chapter02_supervised-learning/logistic-regression-gluon')
+    def test_logistic_regression_gluon(self):
+        assert 
_test_notebook('chapter02_supervised-learning/logistic-regression-gluon')
 
     def test_softmax_regression_scratch(self):
         assert 
_test_notebook('chapter02_supervised-learning/softmax-regression-scratch')
@@ -132,9 +140,6 @@ def test_plumbing(self):
     def test_custom_layer(self):
         assert _test_notebook('chapter03_deep-neural-networks/custom-layer')
 
-    #def test_kaggle_gluon_kfold(self):
-    #    assert 
_test_notebook('chapter03_deep-neural-networks/kaggle-gluon-kfold')
-
     # TODO(vishaalk): Load params and Save params are deprecated warning.
     #def test_serialization(self):
     #    assert _test_notebook('chapter03_deep-neural-networks/serialization')
@@ -162,20 +167,14 @@ def test_cnn_batch_norm_gluon(self):
 
     # Chapter 5
 
-    # TODO(vishaalk): There is a relative file path needs to be fixed so that 
the
-    # python code can be run from another directory.
-    #def test_simple_rnn(self):
-    #    assert 
_test_notebook('chapter05_recurrent-neural-networks/simple-rnn')
+    def test_simple_rnn(self):
+        assert _test_notebook('chapter05_recurrent-neural-networks/simple-rnn')
 
-    # TODO(vishaalk): There is a relative file path needs to be fixed so that 
the
-    # python code can be run from another directory.
-    #def test_lstm_scratch(self):
-    #    assert 
_test_notebook('chapter05_recurrent-neural-networks/lstm-scratch')
+    def test_lstm_scratch(self):
+        assert 
_test_notebook('chapter05_recurrent-neural-networks/lstm-scratch')
 
-    # TODO(vishaalk): There is a relative file path needs to be fixed so that 
the
-    # python code can be run from another directory.
-    #def test_gru_scratch(self):
-    #    assert 
_test_notebook('chapter05_recurrent-neural-networks/gru-scratch')
+    def test_gru_scratch(self):
+        assert 
_test_notebook('chapter05_recurrent-neural-networks/gru-scratch')
 
     #def test_rnns_gluon(self):
     #    assert 
_test_notebook('chapter05_recurrent-neural-networks/rnns-gluon')
@@ -263,19 +262,6 @@ def test_lds_scratch(self):
     #def test_issm_scratch(self):
     #    assert _test_notebook('chapter12_time-series/issm-scratch')
 
-    # TODO(vishaalk): Error: sequential1_batchnorm0_running_mean' has not been 
initialized
-    # def test_intro_forecasting_gluon(self):
-    #    assert _test_notebook('chapter12_time-series/intro-forecasting-gluon')
-
-    #def test_intro_forecasting_2_gluon(self):
-    #    assert 
_test_notebook('chapter12_time-series/intro-forecasting-2-gluon')
-
-    # Chapter 13
-
-    # TODO(vishaalk): Load params and Save params are deprecated warning.
-    #def test_vae_gluon(self):
-    #    assert _test_notebook('chapter13_unsupervised-learning/vae-gluon')
-
     # Chapter 14
 
     def test_igan_intro(self):
@@ -287,46 +273,14 @@ def test_dcgan(self):
     def test_generative_adversarial_networks(self):
         assert 
_test_notebook('chapter14_generative-adversarial-networks/conditional')
 
-    # Chapter 16
-
-    # TODO(vishaalk): Checked failed oshape.Size() != dshape.Size()
-    #def test_tensor_basics(self):
-    #    assert _test_notebook('chapter16_tensor_methods/tensor_basics')
-
     # TODO(vishaalk): Notebook does not appear to be valid JSON.
     #def test_pixel2pixel(self):
     #    assert 
_test_notebook('chapter14_generative-adversarial-networks/pixel2pixel')
 
-    # Chapter 17
-
-    # TODO(vishaalk): Requires OpenAI Gym. Also uses deprecated load_params.
-    #def test_dqn(self):
-#    assert _test_notebook('chapter17_deep-reinforcement-learning/DQN')
-
-#def test_ddqn(self):
-#    assert _test_notebook('chapter17_deep-reinforcement-learning/DDQN')
-
-# Chapter 18
-
-#def test_bayes_by_backprop(self):
-#    assert 
_test_notebook('chapter18_variational-methods-and-uncertainty/bayes-by-backprop')
-
-#def test_bayes_by_backprop_gluon(self):
-#    assert 
_test_notebook('chapter18_variational-methods-and-uncertainty/bayes-by-backprop-gluon')
-
-# TODO(vishaalk): AttributeError: 'list' object has no attribute 'keys'
-#def test_bayes_by_backprop_rnn(self):
-#    assert 
_test_notebook('chapter18_variational-methods-and-uncertainty/bayes-by-backprop-rnn')
-
-# Chapter 19
-
-# TODO(vishaalk): Requires deepchem
-#def test_graph_neural_networks(self):
-#    assert 
_test_notebook('chapter19_graph-neural-networks/Graph-Neural-Networks')
+    # Chapter 18
 
-# Cheatsheets
+    #def test_bayes_by_backprop(self):
+    #    assert 
_test_notebook('chapter18_variational-methods-and-uncertainty/bayes-by-backprop')
 
-# TODO(vishaalk): There is a relative file path needs to be fixed so that the
-# python code can be run from another directory.
-#def test_kaggle_gluon_kfold(self):
-#    assert _test_notebook('cheatsheets/kaggle-gluon-kfold')
+    #def test_bayes_by_backprop_gluon(self):
+    #    assert 
_test_notebook('chapter18_variational-methods-and-uncertainty/bayes-by-backprop-gluon')
diff --git a/tests/utils/notebook_test/__init__.py 
b/tests/utils/notebook_test/__init__.py
index cb5282fb404..2cdb6134a60 100644
--- a/tests/utils/notebook_test/__init__.py
+++ b/tests/utils/notebook_test/__init__.py
@@ -21,6 +21,7 @@
     warning or exception.
 """
 import io
+import logging
 import os
 import shutil
 import time
@@ -57,12 +58,12 @@ def run_notebook(notebook, notebook_dir, kernel=None, 
no_cache=False, temp_dir='
     -------
        Returns true if the workbook runs with no warning or exception.
     """
-
+    logging.info("Running notebook '{}'".format(notebook))
     notebook_path = os.path.join(*([notebook_dir] + notebook.split('/')))
     working_dir = os.path.join(*([temp_dir] + notebook.split('/')))
 
     if no_cache == '1':
-        print("Cleaning and setting up temp directory 
'{}'".format(working_dir))
+        logging.info("Cleaning and setting up temp directory 
'{}'".format(working_dir))
         shutil.rmtree(temp_dir, ignore_errors=True)
 
     errors = []
@@ -92,6 +93,6 @@ def run_notebook(notebook, notebook_dir, kernel=None, 
no_cache=False, temp_dir='
                 if "Warning:" in line:
                     errors.append("Warning:\n" + line)
         if len(errors) > 0:
-            print('\n'.join(errors))
+            logging.error('\n'.join(errors))
             return False
         return True


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to