mirror of
https://github.com/beetbox/beets.git
synced 2026-02-22 23:33:50 +01:00
Rename Distance.penalties to Distance._penalties. It should be private.
This commit is contained in:
parent
f6492e68ee
commit
51f40d26dc
3 changed files with 33 additions and 32 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue