Skip to content

Commit 63372d0

Browse files
Adding Py3k support + Travis tester
1 parent 2eda8a3 commit 63372d0

File tree

11 files changed

+46
-28
lines changed

11 files changed

+46
-28
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ language: python
22
sudo: false
33
python:
44
- "2.7"
5+
- "3.4"
56
install:
67
- if [[ "$TRAVIS_PYTHON_VERSION" == 2.* ]]; then
78
wget http://repo.continuum.io/miniconda/Miniconda-3.4.2-Linux-x86_64.sh -O miniconda.sh;

metric_learn/__init__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
from itml import ITML
2-
from lmnn import LMNN
3-
from lsml import LSML
4-
from sdml import SDML
5-
from nca import NCA
6-
from lfda import LFDA
7-
from rca import RCA
1+
from __future__ import absolute_import
2+
3+
from .itml import ITML
4+
from .lmnn import LMNN
5+
from .lsml import LSML
6+
from .sdml import SDML
7+
from .nca import NCA
8+
from .lfda import LFDA
9+
from .rca import RCA

metric_learn/itml.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
or semi-definite programming.
1212
"""
1313

14+
from __future__ import print_function, absolute_import
1415
import numpy as np
16+
from six.moves import xrange
1517
from sklearn.metrics import pairwise_distances
16-
from base_metric import BaseMetricLearner
18+
from .base_metric import BaseMetricLearner
1719

1820

1921
class ITML(BaseMetricLearner):
@@ -108,9 +110,9 @@ def fit(self, X, constraints, bounds=None, A0=None, verbose=False):
108110
break
109111
lambdaold = _lambda.copy()
110112
if verbose:
111-
print 'itml iter: %d, conv = %f' % (it, conv)
113+
print('itml iter: %d, conv = %f' % (it, conv))
112114
if verbose:
113-
print 'itml converged at iter: %d, conv = %f' % (it, conv)
115+
print('itml converged at iter: %d, conv = %f' % (it, conv))
114116
return self
115117

116118
def metric(self):

metric_learn/lfda.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
The core optimization problem of LFDA is solved as a generalized
1111
eigenvalue problem.
1212
"""
13-
from __future__ import division
13+
from __future__ import division, absolute_import
1414
import numpy as np
1515
import scipy
16+
from six.moves import xrange
1617
from sklearn.metrics import pairwise_distances
17-
from base_metric import BaseMetricLearner
18+
from .base_metric import BaseMetricLearner
1819

1920

2021
class LFDA(BaseMetricLearner):

metric_learn/lmnn.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
"""
1010
#TODO: periodic recalculation of impostors, PCA initialization
1111

12+
from __future__ import print_function, absolute_import
1213
import numpy as np
1314
from collections import Counter
15+
from six.moves import xrange
1416
from sklearn.metrics import pairwise_distances
15-
from base_metric import BaseMetricLearner
17+
from .base_metric import BaseMetricLearner
1618

1719

1820
# commonality between LMNN implementations
@@ -134,7 +136,7 @@ def fit(self, X, labels, verbose=False):
134136
delta_obj = objective - objective_old
135137

136138
if verbose:
137-
print it, objective, delta_obj, total_active, learn_rate
139+
print(it, objective, delta_obj, total_active, learn_rate)
138140

139141
# update step size
140142
if delta_obj > 0:
@@ -152,11 +154,11 @@ def fit(self, X, labels, verbose=False):
152154
# check for convergence
153155
if it > min_iter and abs(delta_obj) < convergence_tol:
154156
if verbose:
155-
print "LMNN converged with objective", objective
157+
print("LMNN converged with objective", objective)
156158
break
157159
else:
158160
if verbose:
159-
print "LMNN didn't converge in %(max_iter)d steps." % self.params
161+
print("LMNN didn't converge in %(max_iter)d steps." % self.params)
160162

161163
# store the last L
162164
self.L = L

metric_learn/lsml.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
Paper: http://www.cs.ucla.edu/~weiwang/paper/ICDM12.pdf
88
"""
99

10-
from random import choice
10+
from __future__ import print_function, absolute_import
1111
import numpy as np
1212
import scipy.linalg
13-
from base_metric import BaseMetricLearner
13+
from random import choice
14+
from six.moves import xrange
15+
from .base_metric import BaseMetricLearner
1416

1517

1618
class LSML(BaseMetricLearner):
@@ -63,14 +65,14 @@ def fit(self, X, constraints, weights=None, prior=None, verbose=False):
6365
s_best = self._total_loss(self.M, prior_inv)
6466
step_sizes = np.logspace(-10, 0, 10)
6567
if verbose:
66-
print 'initial loss', s_best
68+
print('initial loss', s_best)
6769
for it in xrange(1, self.max_iter+1):
6870
grad = self._gradient(self.M, prior_inv)
6971
grad_norm = scipy.linalg.norm(grad)
7072
if grad_norm < self.tol:
7173
break
7274
if verbose:
73-
print 'gradient norm', grad_norm
75+
print('gradient norm', grad_norm)
7476
M_best = None
7577
for step_size in step_sizes:
7678
step_size /= grad_norm
@@ -83,12 +85,12 @@ def fit(self, X, constraints, weights=None, prior=None, verbose=False):
8385
s_best = cur_s
8486
M_best = new_metric
8587
if verbose:
86-
print 'iter', it, 'cost', s_best, 'best step', l_best * grad_norm
88+
print('iter', it, 'cost', s_best, 'best step', l_best * grad_norm)
8789
if M_best is None:
8890
break
8991
self.M = M_best
9092
else:
91-
print "Didn't converge after %d iterations. Final loss: %f" % (it, s_best)
93+
print("Didn't converge after", it, "iterations. Final loss:", s_best)
9294
return self
9395

9496
def _comparison_loss(self, metric):

metric_learn/nca.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
Ported to Python from https://github.com/vomjom/nca
44
"""
55

6+
from __future__ import absolute_import
67
import numpy as np
7-
from base_metric import BaseMetricLearner
8+
from six.moves import xrange
9+
from .base_metric import BaseMetricLearner
810

911

1012
class NCA(BaseMetricLearner):

metric_learn/rca.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@
99
1010
'Learning distance functions using equivalence relations', ICML 2003
1111
"""
12+
13+
from __future__ import absolute_import
1214
import numpy as np
1315
import random
14-
from base_metric import BaseMetricLearner
16+
from six.moves import xrange
17+
from .base_metric import BaseMetricLearner
1518

1619

1720
class RCA(BaseMetricLearner):

metric_learn/sdml.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
Paper: http://lms.comp.nus.edu.sg/sites/default/files/publication-attachments/icml09-guojun.pdf
99
"""
1010

11-
from random import choice
11+
from __future__ import absolute_import
1212
import numpy as np
13+
from random import choice
14+
from scipy.sparse.csgraph import laplacian
1315
from sklearn.covariance import graph_lasso
1416
from sklearn.utils.extmath import pinvh
15-
from scipy.sparse.csgraph import laplacian
16-
from base_metric import BaseMetricLearner
17+
from .base_metric import BaseMetricLearner
1718

1819

1920
class SDML(BaseMetricLearner):

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
install_requires=[
2323
'numpy',
2424
'scipy',
25-
'scikit-learn'
25+
'scikit-learn',
26+
'six'
2627
],
2728
extras_require=dict(
2829
docs=['sphinx', 'numpydoc'],

0 commit comments

Comments
 (0)