summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Flamary <remi.flamary@gmail.com>2017-07-24 14:26:25 +0200
committerRémi Flamary <remi.flamary@gmail.com>2017-07-24 14:26:25 +0200
commitb2f91f24796a996a82db41e91f56ba6a51989159 (patch)
tree81f8ce82e2b7474378746fa591149352d89a7775
parent1cf304cee298e2752ce29c83e5201f593722c3af (diff)
full coveragre utils
-rw-r--r--Makefile4
-rw-r--r--test/test_gpu.py18
-rw-r--r--test/test_ot.py4
-rw-r--r--test/test_utils.py46
4 files changed, 65 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 577bbbe..98f5614 100644
--- a/Makefile
+++ b/Makefile
@@ -38,10 +38,10 @@ pep8 :
flake8 examples/ ot/ test/
test : FORCE pep8
- python -m py.test -v test/
+ python -m py.test -v test/ --cov=ot --cov-report html:cov_html
pytest : FORCE
- python -m py.test -v test/
+ python -m py.test -v test/ --cov=ot
uploadpypi :
#python setup.py register
diff --git a/test/test_gpu.py b/test/test_gpu.py
index 312a2d4..49b98d0 100644
--- a/test/test_gpu.py
+++ b/test/test_gpu.py
@@ -3,8 +3,14 @@ import numpy as np
import time
import pytest
+try: # test if cudamat installed
+ import ot.gpu
+ nogpu = False
+except ImportError:
+ nogpu = True
+
-@pytest.mark.skip(reason="No way to test GPU on travis yet")
+@pytest.mark.skipif(nogpu, reason="No GPU available")
def test_gpu_sinkhorn():
import ot.gpu
@@ -12,7 +18,7 @@ def test_gpu_sinkhorn():
print("min:{:.3E}, max::{:.3E}, mean::{:.3E}, std::{:.3E}".format(
np.min(r), np.max(r), np.mean(r), np.std(r)))
- for n in [5000]:
+ for n in [50, 100, 500, 1000]:
print(n)
a = np.random.rand(n // 4, 100)
b = np.random.rand(n, 100)
@@ -30,14 +36,16 @@ def test_gpu_sinkhorn():
print(" GPU sinkhorn, time: {:6.2f} sec ".format(time3 - time2))
describeRes(G2)
+ assert np.allclose(G1, G2, rtol=1e-5, atol=1e-5)
-@pytest.mark.skip(reason="No way to test GPU on travis yet")
+
+@pytest.mark.skipif(nogpu, reason="No GPU available")
def test_gpu_sinkhorn_lpl1():
def describeRes(r):
print("min:{:.3E}, max:{:.3E}, mean:{:.3E}, std:{:.3E}"
.format(np.min(r), np.max(r), np.mean(r), np.std(r)))
- for n in [5000]:
+ for n in [50, 100, 500, 1000]:
print(n)
a = np.random.rand(n // 4, 100)
labels_a = np.random.randint(10, size=(n // 4))
@@ -57,3 +65,5 @@ def test_gpu_sinkhorn_lpl1():
print(" GPU sinkhorn lpl1, time: {:6.2f} sec ".format(
time3 - time2))
describeRes(G2)
+
+ assert np.allclose(G1, G2, rtol=1e-5, atol=1e-5)
diff --git a/test/test_ot.py b/test/test_ot.py
index 3fa1bc4..16fd510 100644
--- a/test/test_ot.py
+++ b/test/test_ot.py
@@ -31,9 +31,11 @@ def test_emd_emd2():
# check G is identity
assert np.allclose(G, np.eye(n) / n)
+ # check constratints
+ assert np.allclose(u, G.sum(1)) # cf convergence sinkhorn
+ assert np.allclose(u, G.sum(0)) # cf convergence sinkhorn
w = ot.emd2(u, u, M)
-
# check loss=0
assert np.allclose(w, 0)
diff --git a/test/test_utils.py b/test/test_utils.py
index 3219fce..e85e5b7 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -71,6 +71,52 @@ def test_dist():
D[i, j] = np.sum(np.square(x[i, :] - x[j, :]))
D2 = ot.dist(x, x)
+ D3 = ot.dist(x)
# dist shoul return squared euclidean
assert np.allclose(D, D2)
+ assert np.allclose(D, D3)
+
+
+def test_dist0():
+
+ n = 100
+ M = ot.utils.dist0(n, method='lin_square')
+
+ # dist0 default to linear sampling with quadratic loss
+ assert np.allclose(M[0, -1], (n - 1) * (n - 1))
+
+
+def test_dots():
+
+ n1, n2, n3, n4 = 100, 50, 200, 100
+
+ A = np.random.randn(n1, n2)
+ B = np.random.randn(n2, n3)
+ C = np.random.randn(n3, n4)
+
+ X1 = ot.utils.dots(A, B, C)
+
+ X2 = A.dot(B.dot(C))
+
+ assert np.allclose(X1, X2)
+
+
+def test_clean_zeros():
+
+ n = 100
+ nz = 50
+ nz2 = 20
+ u1 = ot.unif(n)
+ u1[:nz] = 0
+ u1 = u1 / u1.sum()
+ u2 = ot.unif(n)
+ u2[:nz2] = 0
+ u2 = u2 / u2.sum()
+
+ M = ot.utils.dist0(n)
+
+ a, b, M2 = ot.utils.clean_zeros(u1, u2, M)
+
+ assert len(a) == n - nz
+ assert len(b) == n - nz2