Rename Distance.penalties to Distance._penalties. It should be private.

This commit is contained in:
Tai Lee 2013-06-03 00:04:45 +10:00
parent f6492e68ee
commit 51f40d26dc
3 changed files with 33 additions and 32 deletions

View file

@ -201,14 +201,14 @@ class Distance(object):
def __getitem__(self, key):
"""Returns the weighted distance for a named penalty.
"""
dist = sum(self.penalties[key]) * weights[key].as_number()
dist = sum(self._penalties[key]) * weights[key].as_number()
dist_max = self.max_distance
if dist_max:
return dist / dist_max
return 0.0
def __init__(self):
self.penalties = {}
self._penalties = {}
def __sub__(self, other):
return self.distance - other
@ -233,7 +233,7 @@ class Distance(object):
if not 0.0 <= dist <= 1.0:
raise ValueError(
'`dist` must be between 0.0 and 1.0. It is: %r' % dist)
self.penalties.setdefault(key, []).append(dist)
self._penalties.setdefault(key, []).append(dist)
def add_equality(self, key, value, options):
"""Adds a distance penalty of 1.0 if `value` doesn't match any of the
@ -311,7 +311,7 @@ class Distance(object):
"""Returns an overall weighted distance across all penalties.
"""
dist = 0.0
for key, penalty in self.penalties.iteritems():
for key, penalty in self._penalties.iteritems():
dist += sum(penalty) * weights[key].as_number()
dist_max = self.max_distance
if dist_max:
@ -323,7 +323,7 @@ class Distance(object):
"""Returns the maximum distance penalty.
"""
dist_max = 0.0
for key, penalty in self.penalties.iteritems():
for key, penalty in self._penalties.iteritems():
dist_max += len(penalty) * weights[key].as_number()
return dist_max
@ -332,7 +332,7 @@ class Distance(object):
"""Returns a list of (dist, key) pairs, with `dist` being the weighted
distance, sorted from highest to lowest.
"""
list_ = [(self[key], key) for key in self.penalties]
list_ = [(self[key], key) for key in self._penalties]
return sorted(list_, key=lambda (dist, key): (0-dist, key))
def update(self, dist):
@ -341,8 +341,8 @@ class Distance(object):
if not isinstance(dist, Distance):
raise ValueError(
'`dist` must be a Distance object. It is: %r' % dist)
for key, penalties in dist.penalties.iteritems():
self.penalties.setdefault(key, []).extend(penalties)
for key, penalties in dist._penalties.iteritems():
self._penalties.setdefault(key, []).extend(penalties)
def track_distance(item, track_info, incl_artist=False):
"""Determines the significance of a track metadata change. Returns a

View file

@ -112,72 +112,73 @@ class DistanceTest(unittest.TestCase):
def test_add(self):
self.dist.add('add', 1.0)
self.assertEqual(self.dist.penalties, {'add': [1.0]})
self.assertEqual(self.dist._penalties, {'add': [1.0]})
def test_add_equality(self):
self.dist.add_equality('equality', 'ghi', ['abc', 'def', 'ghi'])
self.assertEqual(self.dist.penalties['equality'], [0.0])
self.assertEqual(self.dist._penalties['equality'], [0.0])
self.dist.add_equality('equality', 'xyz', ['abc', 'def', 'ghi'])
self.assertEqual(self.dist.penalties['equality'], [0.0, 1.0])
self.assertEqual(self.dist._penalties['equality'], [0.0, 1.0])
self.dist.add_equality('equality', 'abc', re.compile(r'ABC', re.I))
self.assertEqual(self.dist.penalties['equality'], [0.0, 1.0, 0.0])
self.assertEqual(self.dist._penalties['equality'], [0.0, 1.0, 0.0])
def test_add_expr(self):
self.dist.add_expr('expr', True)
self.assertEqual(self.dist.penalties['expr'], [1.0])
self.assertEqual(self.dist._penalties['expr'], [1.0])
self.dist.add_expr('expr', False)
self.assertEqual(self.dist.penalties['expr'], [1.0, 0.0])
self.assertEqual(self.dist._penalties['expr'], [1.0, 0.0])
def test_add_number(self):
# Add a full penalty for each number of difference between two numbers.
self.dist.add_number('number', 1, 1)
self.assertEqual(self.dist.penalties['number'], [0.0])
self.assertEqual(self.dist._penalties['number'], [0.0])
self.dist.add_number('number', 1, 2)
self.assertEqual(self.dist.penalties['number'], [0.0, 1.0])
self.assertEqual(self.dist._penalties['number'], [0.0, 1.0])
self.dist.add_number('number', 2, 1)
self.assertEqual(self.dist.penalties['number'], [0.0, 1.0, 1.0])
self.assertEqual(self.dist._penalties['number'], [0.0, 1.0, 1.0])
self.dist.add_number('number', -1, 2)
self.assertEqual(self.dist.penalties['number'], [0.0, 1.0, 1.0, 1.0,
1.0, 1.0])
self.assertEqual(self.dist._penalties['number'], [0.0, 1.0, 1.0, 1.0,
1.0, 1.0])
def test_add_priority(self):
self.dist.add_priority('priority', 'abc', 'abc')
self.assertEqual(self.dist.penalties['priority'], [0.0])
self.assertEqual(self.dist._penalties['priority'], [0.0])
self.dist.add_priority('priority', 'def', ['abc', 'def', 'ghi'])
self.assertEqual(self.dist.penalties['priority'], [0.0, 0.25])
self.assertEqual(self.dist._penalties['priority'], [0.0, 0.25])
self.dist.add_priority('priority', 'ghi', ['abc', 'def',
re.compile('GHI', re.I)])
self.assertEqual(self.dist.penalties['priority'], [0.0, 0.25, 0.5])
re.compile('GHI', re.I)])
self.assertEqual(self.dist._penalties['priority'], [0.0, 0.25, 0.5])
self.dist.add_priority('priority', 'xyz', ['abc', 'def'])
self.assertEqual(self.dist.penalties['priority'], [0.0, 0.25, 0.5, 1.0])
self.assertEqual(self.dist._penalties['priority'], [0.0, 0.25, 0.5,
1.0])
def test_add_ratio(self):
self.dist.add_ratio('ratio', 25, 100)
self.assertEqual(self.dist.penalties['ratio'], [0.25])
self.assertEqual(self.dist._penalties['ratio'], [0.25])
self.dist.add_ratio('ratio', 10, 5)
self.assertEqual(self.dist.penalties['ratio'], [0.25, 1.0])
self.assertEqual(self.dist._penalties['ratio'], [0.25, 1.0])
self.dist.add_ratio('ratio', -5, 5)
self.assertEqual(self.dist.penalties['ratio'], [0.25, 1.0, 0.0])
self.assertEqual(self.dist._penalties['ratio'], [0.25, 1.0, 0.0])
self.dist.add_ratio('ratio', 5, 0)
self.assertEqual(self.dist.penalties['ratio'], [0.25, 1.0, 0.0, 0.0])
self.assertEqual(self.dist._penalties['ratio'], [0.25, 1.0, 0.0, 0.0])
def test_add_string(self):
dist = match.string_dist(u'abc', u'bcd')
self.dist.add_string('string', u'abc', u'bcd')
self.assertEqual(self.dist.penalties['string'], [dist])
self.assertEqual(self.dist._penalties['string'], [dist])
def test_distance(self):
config['match']['distance_weights']['album'] = 2.0
@ -224,8 +225,8 @@ class DistanceTest(unittest.TestCase):
self.dist.update(dist)
self.assertEqual(self.dist.penalties, {'album': [0.5, 0.75, 0.25],
'media': [1.0, 0.05]})
self.assertEqual(self.dist._penalties, {'album': [0.5, 0.75, 0.25],
'media': [1.0, 0.05]})
class TrackDistanceTest(unittest.TestCase):
def test_identical_tracks(self):

View file

@ -607,7 +607,7 @@ class ShowChangeTest(_common.TestCase):
mapping = dict(zip(items, info.tracks))
config['color'] = False
album_dist = distance(items, info, mapping)
album_dist.penalties = {'album': [dist]}
album_dist._penalties = {'album': [dist]}
commands.show_change(
cur_artist,
cur_album,