From e743cf75f5cea0702fdd9834b78a921276ce75e5 Mon Sep 17 00:00:00 2001
From: Jake VanderPlas <jakevdp@uw.edu>
Date: Wed, 3 Feb 2016 10:39:50 -0800
Subject: [PATCH] MAINT: re-organize setup.py & make sure all tests are
 discoverable by nose

---
 sklearn/cluster/setup.py                      |  2 +
 sklearn/cross_decomposition/tests/__init__.py |  0
 sklearn/datasets/setup.py                     |  2 +-
 sklearn/feature_extraction/setup.py           |  1 +
 sklearn/manifold/setup.py                     |  2 +
 sklearn/manifold/tests/__init__.py            |  0
 sklearn/metrics/setup.py                      |  2 +
 sklearn/model_selection/tests/__init__.py     |  0
 sklearn/neighbors/setup.py                    |  2 +
 sklearn/neural_network/tests/__init__.py      |  0
 sklearn/setup.py                              | 49 +++++++++----------
 sklearn/utils/setup.py                        |  2 +
 12 files changed, 36 insertions(+), 26 deletions(-)
 create mode 100644 sklearn/cross_decomposition/tests/__init__.py
 create mode 100644 sklearn/manifold/tests/__init__.py
 create mode 100644 sklearn/model_selection/tests/__init__.py
 create mode 100644 sklearn/neural_network/tests/__init__.py

diff --git a/sklearn/cluster/setup.py b/sklearn/cluster/setup.py
index 281d0dfbc4..672983c7aa 100644
--- a/sklearn/cluster/setup.py
+++ b/sklearn/cluster/setup.py
@@ -45,6 +45,8 @@ def configuration(parent_package='', top_path=None):
         **blas_info
     )
 
+    config.add_subpackage('tests')
+
     return config
 
 if __name__ == '__main__':
diff --git a/sklearn/cross_decomposition/tests/__init__.py b/sklearn/cross_decomposition/tests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/sklearn/datasets/setup.py b/sklearn/datasets/setup.py
index 5fea622758..78327e8b3f 100644
--- a/sklearn/datasets/setup.py
+++ b/sklearn/datasets/setup.py
@@ -13,7 +13,7 @@ def configuration(parent_package='', top_path=None):
     config.add_extension('_svmlight_format',
                          sources=['_svmlight_format.c'],
                          include_dirs=[numpy.get_include()])
-
+    config.add_subpackage('tests')
     return config
 
 
diff --git a/sklearn/feature_extraction/setup.py b/sklearn/feature_extraction/setup.py
index de7ec380cd..075cac470b 100644
--- a/sklearn/feature_extraction/setup.py
+++ b/sklearn/feature_extraction/setup.py
@@ -14,5 +14,6 @@ def configuration(parent_package='', top_path=None):
                          sources=['_hashing.c'],
                          include_dirs=[numpy.get_include()],
                          libraries=libraries)
+    config.add_subpackage("tests")
 
     return config
diff --git a/sklearn/manifold/setup.py b/sklearn/manifold/setup.py
index 18dee2d537..d1b6ebf9e0 100644
--- a/sklearn/manifold/setup.py
+++ b/sklearn/manifold/setup.py
@@ -27,6 +27,8 @@ def configuration(parent_package="", top_path=None):
                                        blas_info.pop('include_dirs', [])],
                          extra_compile_args=eca, **blas_info)
 
+    config.add_subpackage('tests')
+
     return config
 
 if __name__ == "__main__":
diff --git a/sklearn/manifold/tests/__init__.py b/sklearn/manifold/tests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/sklearn/metrics/setup.py b/sklearn/metrics/setup.py
index f5a6ce27f2..949c3efcb0 100644
--- a/sklearn/metrics/setup.py
+++ b/sklearn/metrics/setup.py
@@ -23,6 +23,8 @@ def configuration(parent_package="", top_path=None):
                          extra_compile_args=blas_info.pop('extra_compile_args',
                                                           []),
                          **blas_info)
+    config.add_subpackage('tests')
+    config.add_subpackage('cluster')
 
     return config
 
diff --git a/sklearn/model_selection/tests/__init__.py b/sklearn/model_selection/tests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/sklearn/neighbors/setup.py b/sklearn/neighbors/setup.py
index 2ddfb8cf34..575b4fce66 100644
--- a/sklearn/neighbors/setup.py
+++ b/sklearn/neighbors/setup.py
@@ -32,4 +32,6 @@ def configuration(parent_package='', top_path=None):
                          include_dirs=[numpy.get_include()],
                          libraries=libraries)
 
+    config.add_subpackage('tests')
+
     return config
diff --git a/sklearn/neural_network/tests/__init__.py b/sklearn/neural_network/tests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/sklearn/setup.py b/sklearn/setup.py
index 63c0b7546a..3a87444e91 100644
--- a/sklearn/setup.py
+++ b/sklearn/setup.py
@@ -14,45 +14,44 @@ def configuration(parent_package='', top_path=None):
 
     config = Configuration('sklearn', parent_package, top_path)
 
+    # submodules with build utilities
     config.add_subpackage('__check_build')
     config.add_subpackage('_build_utils')
-    config.add_subpackage('svm')
-    config.add_subpackage('datasets')
-    config.add_subpackage('datasets/tests')
-    config.add_subpackage('feature_extraction')
-    config.add_subpackage('feature_extraction/tests')
-    config.add_subpackage('cluster')
-    config.add_subpackage('cluster/tests')
+
+    # submodules which do not have their own setup.py
+    # we must manually add sub-submodules & tests
     config.add_subpackage('covariance')
     config.add_subpackage('covariance/tests')
     config.add_subpackage('cross_decomposition')
-    config.add_subpackage('decomposition')
-    config.add_subpackage('decomposition/tests')
-    config.add_subpackage("ensemble")
-    config.add_subpackage("ensemble/tests")
+    config.add_subpackage('cross_decomposition/tests')
     config.add_subpackage('feature_selection')
     config.add_subpackage('feature_selection/tests')
-    config.add_subpackage('utils')
-    config.add_subpackage('utils/tests')
-    config.add_subpackage('externals')
-    config.add_subpackage('mixture')
-    config.add_subpackage('mixture/tests')
     config.add_subpackage('gaussian_process')
     config.add_subpackage('gaussian_process/tests')
-    config.add_subpackage('neighbors')
+    config.add_subpackage('mixture')
+    config.add_subpackage('mixture/tests')
+    config.add_subpackage('model_selection')
+    config.add_subpackage('model_selection/tests')
     config.add_subpackage('neural_network')
+    config.add_subpackage('neural_network/tests')
     config.add_subpackage('preprocessing')
     config.add_subpackage('preprocessing/tests')
+    config.add_subpackage('semi_supervised')
+    config.add_subpackage('semi_supervised/tests')
+
+    # submodules which have their own setup.py
+    # leave out "linear_model" and "utils" for now; add them after cblas below
+    config.add_subpackage('cluster')
+    config.add_subpackage('datasets')
+    config.add_subpackage('decomposition')
+    config.add_subpackage('ensemble')
+    config.add_subpackage('externals')
+    config.add_subpackage('feature_extraction')
     config.add_subpackage('manifold')
     config.add_subpackage('metrics')
-    config.add_subpackage('semi_supervised')
-    config.add_subpackage("tree")
-    config.add_subpackage("tree/tests")
-    config.add_subpackage('metrics/tests')
-    config.add_subpackage('metrics/cluster')
-    config.add_subpackage('metrics/cluster/tests')
-    config.add_subpackage('model_selection')
-    config.add_subpackage('model_selection/tests')
+    config.add_subpackage('neighbors')
+    config.add_subpackage('tree')
+    config.add_subpackage('svm')
 
     # add cython extension module for isotonic regression
     config.add_extension(
diff --git a/sklearn/utils/setup.py b/sklearn/utils/setup.py
index ac321e7d7a..ad1e3bef81 100644
--- a/sklearn/utils/setup.py
+++ b/sklearn/utils/setup.py
@@ -74,6 +74,8 @@ def configuration(parent_package='', top_path=None):
                          include_dirs=[numpy.get_include()],
                          libraries=libraries)
 
+    config.add_subpackage('tests')
+
     return config
 
 
-- 
GitLab