diff --git a/.travis.yml b/.travis.yml index 158640c6..08ab3851 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,12 @@ python: sudo: false +env: + - TEST_DIR=tests/utils + - TEST_DIR=tests/mesh + - TEST_DIR=tests/base + - TEST_DIR=tests/examples + # Setup anaconda before_install: - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then wget http://repo.continuum.io/miniconda/Miniconda-3.8.3-Linux-x86_64.sh -O miniconda.sh; else wget http://repo.continuum.io/miniconda/Miniconda3-3.8.3-Linux-x86_64.sh -O miniconda.sh; fi @@ -11,20 +17,17 @@ before_install: - ./miniconda.sh -b - export PATH=/home/travis/anaconda/bin:/home/travis/miniconda/bin:$PATH - conda update --yes conda - # The next couple lines fix a crash with multiprocessing on Travis and are not specific to using Miniconda - # - sudo rm -rf /dev/shm - # - sudo ln -s /run/shm /dev/shm # Install packages install: - - conda install --yes pip python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib cython + - conda install --yes pip python=$TRAVIS_PYTHON_VERSION numpy scipy matplotlib cython ipython - pip install nose-cov python-coveralls # - pip install -r requirements.txt - python setup.py install # Run test script: - - nosetests --with-cov --cov SimPEG --cov-config .coveragerc -v -s + - nosetests $TEST_DIR --with-cov --cov SimPEG --cov-config .coveragerc -v -s # Calculate coverage after_success: diff --git a/SimPEG/Tests/TestUtils.py b/SimPEG/Tests.py similarity index 100% rename from SimPEG/Tests/TestUtils.py rename to SimPEG/Tests.py diff --git a/SimPEG/Tests/__init__.py b/tests/__init__.py similarity index 83% rename from SimPEG/Tests/__init__.py rename to tests/__init__.py index 32112042..38d84328 100644 --- a/SimPEG/Tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,3 @@ -from TestUtils import checkDerivative, Rosenbrock, OrderTest, getQuadratic - - if __name__ == '__main__': import os import glob diff --git a/tests/base/__init__.py b/tests/base/__init__.py new file mode 100644 index 00000000..38d84328 --- /dev/null +++ b/tests/base/__init__.py @@ -0,0 +1,11 @@ +if __name__ == '__main__': + import os + import glob + import unittest + test_file_strings = glob.glob('test_*.py') + module_strings = [str[0:len(str)-3] for str in test_file_strings] + suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str + in module_strings] + testSuite = unittest.TestSuite(suites) + + unittest.TextTestRunner(verbosity=2).run(testSuite) diff --git a/SimPEG/Tests/test_Fields.py b/tests/base/test_Fields.py similarity index 100% rename from SimPEG/Tests/test_Fields.py rename to tests/base/test_Fields.py diff --git a/SimPEG/Tests/test_PropMaps.py b/tests/base/test_PropMaps.py similarity index 100% rename from SimPEG/Tests/test_PropMaps.py rename to tests/base/test_PropMaps.py diff --git a/SimPEG/Tests/test_Solver.py b/tests/base/test_Solver.py similarity index 100% rename from SimPEG/Tests/test_Solver.py rename to tests/base/test_Solver.py diff --git a/SimPEG/Tests/test_SurveyAndData.py b/tests/base/test_SurveyAndData.py similarity index 100% rename from SimPEG/Tests/test_SurveyAndData.py rename to tests/base/test_SurveyAndData.py diff --git a/SimPEG/Tests/test_maps.py b/tests/base/test_maps.py similarity index 99% rename from SimPEG/Tests/test_maps.py rename to tests/base/test_maps.py index a4ebd80c..623f8715 100644 --- a/SimPEG/Tests/test_maps.py +++ b/tests/base/test_maps.py @@ -1,7 +1,6 @@ import numpy as np import unittest from SimPEG import * -from TestUtils import checkDerivative from scipy.sparse.linalg import dsolve TOL = 1e-14 diff --git a/SimPEG/Tests/test_optimizers.py b/tests/base/test_optimizers.py similarity index 100% rename from SimPEG/Tests/test_optimizers.py rename to tests/base/test_optimizers.py diff --git a/SimPEG/Tests/test_problem.py b/tests/base/test_problem.py similarity index 100% rename from SimPEG/Tests/test_problem.py rename to tests/base/test_problem.py diff --git a/SimPEG/Tests/test_regularization.py b/tests/base/test_regularization.py similarity index 74% rename from SimPEG/Tests/test_regularization.py rename to tests/base/test_regularization.py index 48846d2f..af7da692 100644 --- a/SimPEG/Tests/test_regularization.py +++ b/tests/base/test_regularization.py @@ -1,7 +1,6 @@ import numpy as np import unittest from SimPEG import * -from TestUtils import checkDerivative from scipy.sparse.linalg import dsolve import inspect @@ -18,12 +17,16 @@ class RegularizationTests(unittest.TestCase): if not issubclass(r, Regularization.BaseRegularization): continue # if 'Regularization' not in R: continue - print 'Check:', R mapping = r.mapPair(self.mesh2) reg = r(self.mesh2, mapping=mapping) m = np.random.rand(mapping.nP) reg.mref = m[:]*np.mean(m) - passed = checkDerivative(lambda m : [reg.eval(m), reg.evalDeriv(m)], m, plotIt=False) + + print 'Check:', R + passed = Tests.checkDerivative(lambda m : [reg.eval(m), reg.evalDeriv(m)], m, plotIt=False) + self.assertTrue(passed) + print 'Check 2 Deriv:', R + passed = Tests.checkDerivative(lambda m : [reg.evalDeriv(m), reg.eval2Deriv(m)], m, plotIt=False) self.assertTrue(passed) diff --git a/tests/examples/__init__.py b/tests/examples/__init__.py new file mode 100644 index 00000000..38d84328 --- /dev/null +++ b/tests/examples/__init__.py @@ -0,0 +1,11 @@ +if __name__ == '__main__': + import os + import glob + import unittest + test_file_strings = glob.glob('test_*.py') + module_strings = [str[0:len(str)-3] for str in test_file_strings] + suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str + in module_strings] + testSuite = unittest.TestSuite(suites) + + unittest.TextTestRunner(verbosity=2).run(testSuite) diff --git a/SimPEG/Tests/test_example_linear.py b/tests/examples/test_example_linear.py similarity index 100% rename from SimPEG/Tests/test_example_linear.py rename to tests/examples/test_example_linear.py diff --git a/tests/mesh/__init__.py b/tests/mesh/__init__.py new file mode 100644 index 00000000..38d84328 --- /dev/null +++ b/tests/mesh/__init__.py @@ -0,0 +1,11 @@ +if __name__ == '__main__': + import os + import glob + import unittest + test_file_strings = glob.glob('test_*.py') + module_strings = [str[0:len(str)-3] for str in test_file_strings] + suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str + in module_strings] + testSuite = unittest.TestSuite(suites) + + unittest.TextTestRunner(verbosity=2).run(testSuite) diff --git a/SimPEG/Tests/test_CurvilinearMesh.py b/tests/mesh/test_CurvilinearMesh.py similarity index 100% rename from SimPEG/Tests/test_CurvilinearMesh.py rename to tests/mesh/test_CurvilinearMesh.py diff --git a/SimPEG/Tests/test_TreeMesh.py b/tests/mesh/test_TreeMesh.py similarity index 100% rename from SimPEG/Tests/test_TreeMesh.py rename to tests/mesh/test_TreeMesh.py diff --git a/SimPEG/Tests/test_basemesh.py b/tests/mesh/test_basemesh.py similarity index 100% rename from SimPEG/Tests/test_basemesh.py rename to tests/mesh/test_basemesh.py diff --git a/SimPEG/Tests/test_boundaryPoisson.py b/tests/mesh/test_boundaryPoisson.py similarity index 98% rename from SimPEG/Tests/test_boundaryPoisson.py rename to tests/mesh/test_boundaryPoisson.py index 6e10b827..1accb578 100644 --- a/SimPEG/Tests/test_boundaryPoisson.py +++ b/tests/mesh/test_boundaryPoisson.py @@ -1,13 +1,12 @@ import numpy as np import scipy.sparse as sp import unittest -from TestUtils import OrderTest import matplotlib.pyplot as plt from SimPEG import * MESHTYPES = ['uniformTensorMesh'] -class Test1D_InhomogeneousDirichlet(OrderTest): +class Test1D_InhomogeneousDirichlet(Tests.OrderTest): name = "1D - Dirichlet" meshTypes = MESHTYPES meshDimension = 1 @@ -88,7 +87,7 @@ class Test1D_InhomogeneousDirichlet(OrderTest): self.orderTest() -class Test2D_InhomogeneousDirichlet(OrderTest): +class Test2D_InhomogeneousDirichlet(Tests.OrderTest): name = "2D - Dirichlet" meshTypes = MESHTYPES meshDimension = 2 @@ -169,7 +168,7 @@ class Test2D_InhomogeneousDirichlet(OrderTest): self.myTest = 'xcJ' self.orderTest() -class Test1D_InhomogeneousNeumann(OrderTest): +class Test1D_InhomogeneousNeumann(Tests.OrderTest): name = "1D - Neumann" meshTypes = MESHTYPES meshDimension = 1 @@ -246,7 +245,7 @@ class Test1D_InhomogeneousNeumann(OrderTest): self.myTest = 'xcJ' self.orderTest() -class Test2D_InhomogeneousNeumann(OrderTest): +class Test2D_InhomogeneousNeumann(Tests.OrderTest): name = "2D - Neumann" meshTypes = MESHTYPES meshDimension = 2 @@ -333,7 +332,7 @@ class Test2D_InhomogeneousNeumann(OrderTest): self.myTest = 'xcJ' self.orderTest() -class Test1D_InhomogeneousMixed(OrderTest): +class Test1D_InhomogeneousMixed(Tests.OrderTest): name = "1D - Mixed" meshTypes = MESHTYPES meshDimension = 1 @@ -410,7 +409,7 @@ class Test1D_InhomogeneousMixed(OrderTest): self.myTest = 'xcJ' self.orderTest() -class Test2D_InhomogeneousMixed(OrderTest): +class Test2D_InhomogeneousMixed(Tests.OrderTest): name = "2D - Mixed" meshTypes = MESHTYPES meshDimension = 2 diff --git a/SimPEG/Tests/test_cylMesh.py b/tests/mesh/test_cylMesh.py similarity index 99% rename from SimPEG/Tests/test_cylMesh.py rename to tests/mesh/test_cylMesh.py index 6bb6cbd3..5a963398 100644 --- a/SimPEG/Tests/test_cylMesh.py +++ b/tests/mesh/test_cylMesh.py @@ -1,7 +1,6 @@ import unittest import sys from SimPEG import * -from TestUtils import OrderTest class TestCyl2DMesh(unittest.TestCase): @@ -217,7 +216,7 @@ cyl_row3 = lambda g, xfun, yfun, zfun: np.c_[call3(xfun, g), call3(yfun, g), cal cylF2 = lambda M, fx, fy: np.vstack((cyl_row2(M.gridFx, fx, fy), cyl_row2(M.gridFz, fx, fy))) -class TestFaceDiv2D(OrderTest): +class TestFaceDiv2D(Tests.OrderTest): name = "FaceDiv" meshTypes = MESHTYPES meshDimension = 2 @@ -242,7 +241,7 @@ class TestFaceDiv2D(OrderTest): def test_order(self): self.orderTest() -class TestEdgeCurl2D(OrderTest): +class TestEdgeCurl2D(Tests.OrderTest): name = "EdgeCurl" meshTypes = MESHTYPES meshDimension = 2 @@ -281,7 +280,7 @@ class TestEdgeCurl2D(OrderTest): self.orderTest() -# class TestInnerProducts2D(OrderTest): +# class TestInnerProducts2D(Tests.OrderTest): # """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" # meshTypes = MESHTYPES diff --git a/SimPEG/Tests/test_innerProduct.py b/tests/mesh/test_innerProduct.py similarity index 98% rename from SimPEG/Tests/test_innerProduct.py rename to tests/mesh/test_innerProduct.py index 0a5ff809..cebecf2b 100644 --- a/SimPEG/Tests/test_innerProduct.py +++ b/tests/mesh/test_innerProduct.py @@ -1,10 +1,9 @@ import numpy as np import unittest -from TestUtils import OrderTest -from SimPEG import Utils +from SimPEG import Utils, Tests -class TestInnerProducts(OrderTest): +class TestInnerProducts(Tests.OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" meshTypes = ['uniformTensorMesh', 'uniformCurv', 'rotateCurv'] @@ -151,7 +150,7 @@ class TestInnerProducts(OrderTest): self.orderTest() -class TestInnerProducts2D(OrderTest): +class TestInnerProducts2D(Tests.OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" meshTypes = ['uniformTensorMesh', 'uniformCurv', 'rotateCurv'] @@ -293,7 +292,7 @@ class TestInnerProducts2D(OrderTest): -class TestInnerProducts1D(OrderTest): +class TestInnerProducts1D(Tests.OrderTest): """Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.""" meshTypes = ['uniformTensorMesh'] diff --git a/SimPEG/Tests/test_innerProductDerivs.py b/tests/mesh/test_innerProductDerivs.py similarity index 98% rename from SimPEG/Tests/test_innerProductDerivs.py rename to tests/mesh/test_innerProductDerivs.py index 6eb561c1..f624ba1c 100644 --- a/SimPEG/Tests/test_innerProductDerivs.py +++ b/tests/mesh/test_innerProductDerivs.py @@ -1,7 +1,6 @@ import numpy as np import unittest from SimPEG import * -from TestUtils import checkDerivative class TestInnerProductsDerivs(unittest.TestCase): @@ -21,7 +20,7 @@ class TestInnerProductsDerivs(unittest.TestCase): Md = mesh.getFaceInnerProductDeriv(sig, invProp=invProp, invMat=invMat, doFast=fast) return M*v, Md(v) print meshType, 'Face', h, rep, fast, ('harmonic' if invProp and invMat else 'standard') - return checkDerivative(fun, sig, num=5, plotIt=False) + return Tests.checkDerivative(fun, sig, num=5, plotIt=False) def doTestEdge(self, h, rep, fast, meshType, invProp=False, invMat=False): if meshType == 'Curv': @@ -38,7 +37,7 @@ class TestInnerProductsDerivs(unittest.TestCase): Md = mesh.getEdgeInnerProductDeriv(sig, invProp=invProp, invMat=invMat, doFast=fast) return M*v, Md(v) print meshType, 'Edge', h, rep, fast, ('harmonic' if invProp and invMat else 'standard') - return checkDerivative(fun, sig, num=5, plotIt=False) + return Tests.checkDerivative(fun, sig, num=5, plotIt=False) def test_FaceIP_1D_float(self): self.assertTrue(self.doTestFace([10],0, False, 'Tensor')) diff --git a/SimPEG/Tests/test_interpolation.py b/tests/mesh/test_interpolation.py similarity index 97% rename from SimPEG/Tests/test_interpolation.py rename to tests/mesh/test_interpolation.py index e3c0176d..a6804950 100644 --- a/SimPEG/Tests/test_interpolation.py +++ b/tests/mesh/test_interpolation.py @@ -1,8 +1,7 @@ import numpy as np import unittest -from TestUtils import OrderTest from SimPEG.Utils import mkvc -from SimPEG import Mesh +from SimPEG import Mesh, Tests import unittest @@ -23,7 +22,7 @@ cartE3 = lambda M, ex, ey, ez: np.vstack((cart_row3(M.gridEx, ex, ey, ez), cart_ TOL = 1e-7 -class TestInterpolation1D(OrderTest): +class TestInterpolation1D(Tests.OrderTest): LOCS = np.random.rand(50)*0.6+0.2 name = "Interpolation 1D" meshTypes = MESHTYPES @@ -69,7 +68,7 @@ class TestOutliersInterp1D(unittest.TestCase): Q = M.getInterpolationMat(np.array([[-1],[0.126],[0.127]]),'CC',zerosOutside=True) self.assertTrue(np.linalg.norm(Q*x - np.r_[0,1.004,1.008]) < TOL) -class TestInterpolation2d(OrderTest): +class TestInterpolation2d(Tests.OrderTest): name = "Interpolation 2D" LOCS = np.random.rand(50,2)*0.6+0.2 meshTypes = MESHTYPES @@ -152,7 +151,7 @@ class TestInterpolation2dCyl_Simple(unittest.TestCase): self.assertRaises(Exception,lambda:M.getInterpolationMat(locs, 'Ez')) -class TestInterpolation2dCyl(OrderTest): +class TestInterpolation2dCyl(Tests.OrderTest): name = "Interpolation 2D" LOCS = np.c_[np.random.rand(4)*0.6+0.2, np.zeros(4), np.random.rand(4)*0.6+0.2] meshTypes = ['uniformCylMesh'] # MESHTYPES + @@ -220,7 +219,7 @@ class TestInterpolation2dCyl(OrderTest): self.name = 'Interpolation 2D CYLMESH: Ey' self.orderTest() -class TestInterpolation3D(OrderTest): +class TestInterpolation3D(Tests.OrderTest): name = "Interpolation" LOCS = np.random.rand(50,3)*0.6+0.2 meshTypes = MESHTYPES diff --git a/SimPEG/Tests/test_operators.py b/tests/mesh/test_operators.py similarity index 99% rename from SimPEG/Tests/test_operators.py rename to tests/mesh/test_operators.py index 416689bc..3b99345c 100644 --- a/SimPEG/Tests/test_operators.py +++ b/tests/mesh/test_operators.py @@ -1,6 +1,6 @@ import numpy as np import unittest -from TestUtils import OrderTest +from SimPEG.Tests import OrderTest import matplotlib.pyplot as plt #TODO: 'randomTensorMesh' diff --git a/SimPEG/Tests/test_tensorMesh.py b/tests/mesh/test_tensorMesh.py similarity index 97% rename from SimPEG/Tests/test_tensorMesh.py rename to tests/mesh/test_tensorMesh.py index b9335164..dd5f461c 100644 --- a/SimPEG/Tests/test_tensorMesh.py +++ b/tests/mesh/test_tensorMesh.py @@ -1,8 +1,7 @@ import numpy as np import unittest from SimPEG.Mesh import TensorMesh -from TestUtils import OrderTest -from SimPEG import Solver +from SimPEG import Solver, Tests TOL = 1e-10 @@ -91,7 +90,7 @@ class BasicTensorMeshTests(unittest.TestCase): M = TensorMesh([[(10.,2)]]) self.assertLess(np.abs(M.hx - np.r_[10.,10.]).sum(), TOL) -class TestPoissonEqn(OrderTest): +class TestPoissonEqn(Tests.OrderTest): name = "Poisson Equation" meshSizes = [10, 16, 20] diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py new file mode 100644 index 00000000..38d84328 --- /dev/null +++ b/tests/utils/__init__.py @@ -0,0 +1,11 @@ +if __name__ == '__main__': + import os + import glob + import unittest + test_file_strings = glob.glob('test_*.py') + module_strings = [str[0:len(str)-3] for str in test_file_strings] + suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str + in module_strings] + testSuite = unittest.TestSuite(suites) + + unittest.TextTestRunner(verbosity=2).run(testSuite) diff --git a/SimPEG/Tests/test_Zero.py b/tests/utils/test_Zero.py similarity index 100% rename from SimPEG/Tests/test_Zero.py rename to tests/utils/test_Zero.py diff --git a/SimPEG/Tests/test_utils.py b/tests/utils/test_utils.py similarity index 100% rename from SimPEG/Tests/test_utils.py rename to tests/utils/test_utils.py