summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaetitia Chapel <laetitia.chapel@univ-ubs.fr>2020-04-16 15:52:00 +0200
committerLaetitia Chapel <laetitia.chapel@univ-ubs.fr>2020-04-16 15:52:00 +0200
commitef7c11a5df3cf6c82864472f0cfa65d6b2036f2f (patch)
tree1b9cc1d6c281a1eca885212aa3857d48ded4d695
parent18b64556aaa477b5499dc05110c96d32b04147ff (diff)
partial with python 3.8
-rw-r--r--.travis.yml2
-rwxr-xr-xot/partial.py12
-rwxr-xr-xtest/test_partial.py9
3 files changed, 11 insertions, 12 deletions
diff --git a/.travis.yml b/.travis.yml
index 072bc55..7ff1b3c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,7 +16,7 @@ matrix:
python: 3.7
- os: linux
sudo: required
- python: 2.7
+ python: 3.8
# - os: osx
# sudo: required
# language: generic
diff --git a/ot/partial.py b/ot/partial.py
index 8698d9d..726a590 100755
--- a/ot/partial.py
+++ b/ot/partial.py
@@ -232,7 +232,7 @@ def partial_wasserstein(a, b, M, m=None, nb_dummies=1, log=False, **kwargs):
b_extended = np.append(b, [(np.sum(a) - m) / nb_dummies] * nb_dummies)
a_extended = np.append(a, [(np.sum(b) - m) / nb_dummies] * nb_dummies)
- M_extended = np.ones((len(a_extended), len(b_extended))) * 0
+ M_extended = np.zeros((len(a_extended), len(b_extended)))
M_extended[-1, -1] = np.max(M) * 1e5
M_extended[:len(a), :len(b)] = M
@@ -510,9 +510,9 @@ def partial_gromov_wasserstein(C1, C2, p, q, m=None, nb_dummies=1, G0=None,
Gprev = G0
M = gwgrad_partial(C1, C2, G0)
- M[M < eps] = np.quantile(M[M > eps], thres)
+ M[M < eps] = np.quantile(M, thres)
- M_emd = np.ones(dim_G_extended) * np.max(M) * 1e2
+ M_emd = np.zeros(dim_G_extended)
M_emd[:len(p), :len(q)] = M
M_emd[-nb_dummies:, -nb_dummies:] = np.max(M) * 1e5
M_emd = np.asarray(M_emd, dtype=np.float64)
@@ -729,8 +729,8 @@ def entropic_partial_wasserstein(a, b, M, reg, m=None, numItermax=1000,
M = np.asarray(M, dtype=np.float64)
dim_a, dim_b = M.shape
- dx = np.ones(dim_a)
- dy = np.ones(dim_b)
+ dx = np.ones(dim_a, dtype=np.float64)
+ dy = np.ones(dim_b, dtype=np.float64)
if len(a) == 0:
a = np.ones(dim_a, dtype=np.float64) / dim_a
@@ -738,7 +738,7 @@ def entropic_partial_wasserstein(a, b, M, reg, m=None, numItermax=1000,
b = np.ones(dim_b, dtype=np.float64) / dim_b
if m is None:
- m = np.min((np.sum(a), np.sum(b)))
+ m = np.min((np.sum(a), np.sum(b))) * 1.0
if m < 0:
raise ValueError("Problem infeasible. Parameter m should be greater"
" than 0.")
diff --git a/test/test_partial.py b/test/test_partial.py
index fbcd3c2..1799fd4 100755
--- a/test/test_partial.py
+++ b/test/test_partial.py
@@ -93,10 +93,7 @@ def test_partial_gromov_wasserstein():
m = 2 / 3
res0, log0 = ot.partial.partial_gromov_wasserstein(C1, C3, p, q, m=m,
log=True)
- res, log = ot.partial.entropic_partial_gromov_wasserstein(C1, C3, p, q, 10,
- m=m, log=True)
np.testing.assert_allclose(res0, 0, atol=1e-1, rtol=1e-1)
- np.testing.assert_allclose(res, 0, atol=1e-1, rtol=1e-1)
C1 = sp.spatial.distance.cdist(xs, xs)
C2 = sp.spatial.distance.cdist(xt, xt)
@@ -123,8 +120,10 @@ def test_partial_gromov_wasserstein():
m = 2 / 3
res0, log0 = ot.partial.partial_gromov_wasserstein(C1, C2, p, q, m=m,
log=True)
- res, log = ot.partial.entropic_partial_gromov_wasserstein(C1, C2, p, q, 10,
- m=m, log=True)
+ res, log = ot.partial.entropic_partial_gromov_wasserstein(C1, C2, p, q,
+ 100, m=m,
+ log=True)
+
# check constratints
np.testing.assert_equal(
res0.sum(1) <= p, [True] * len(p)) # cf convergence wasserstein