SickGear/lib/subliminal/score.py

90 lines
3.8 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
from sympy import Eq, symbols, solve
# Symbols
release_group, resolution, format, video_codec, audio_codec = symbols('release_group resolution format video_codec audio_codec')
imdb_id, hash, title, series, tvdb_id, season, episode = symbols('imdb_id hash title series tvdb_id season episode') # @ReservedAssignment
year = symbols('year')
def get_episode_equations():
"""Get the score equations for a :class:`~subliminal.video.Episode`
The equations are the following:
1. hash = resolution + format + video_codec + audio_codec + series + season + episode + year + release_group
2. series = resolution + video_codec + audio_codec + season + episode + release_group + 1
3. year = series
4. tvdb_id = series + year
5. season = resolution + video_codec + audio_codec + 1
6. imdb_id = series + season + episode + year
7. format = video_codec + audio_codec
8. resolution = video_codec
9. video_codec = 2 * audio_codec
10. title = season + episode
11. season = episode
12. release_group = season
13. audio_codec = 1
:return: the score equations for an episode
:rtype: list of :class:`sympy.Eq`
"""
equations = []
equations.append(Eq(hash, resolution + format + video_codec + audio_codec + series + season + episode + year + release_group))
equations.append(Eq(series, resolution + video_codec + audio_codec + season + episode + release_group + 1))
equations.append(Eq(series, year))
equations.append(Eq(tvdb_id, series + year))
equations.append(Eq(season, resolution + video_codec + audio_codec + 1))
equations.append(Eq(imdb_id, series + season + episode + year))
equations.append(Eq(format, video_codec + audio_codec))
equations.append(Eq(resolution, video_codec))
equations.append(Eq(video_codec, 2 * audio_codec))
equations.append(Eq(title, season + episode))
equations.append(Eq(season, episode))
equations.append(Eq(release_group, season))
equations.append(Eq(audio_codec, 1))
return equations
def get_movie_equations():
"""Get the score equations for a :class:`~subliminal.video.Movie`
The equations are the following:
1. hash = resolution + format + video_codec + audio_codec + title + year + release_group
2. imdb_id = hash
3. resolution = video_codec
4. video_codec = 2 * audio_codec
5. format = video_codec + audio_codec
6. title = resolution + video_codec + audio_codec + year + 1
7. release_group = resolution + video_codec + audio_codec + 1
8. year = release_group + 1
9. audio_codec = 1
:return: the score equations for a movie
:rtype: list of :class:`sympy.Eq`
"""
equations = []
equations.append(Eq(hash, resolution + format + video_codec + audio_codec + title + year + release_group))
equations.append(Eq(imdb_id, hash))
equations.append(Eq(resolution, video_codec))
equations.append(Eq(video_codec, 2 * audio_codec))
equations.append(Eq(format, video_codec + audio_codec))
equations.append(Eq(title, resolution + video_codec + audio_codec + year + 1))
equations.append(Eq(video_codec, 2 * audio_codec))
equations.append(Eq(release_group, resolution + video_codec + audio_codec + 1))
equations.append(Eq(year, release_group + 1))
equations.append(Eq(audio_codec, 1))
return equations
if __name__ == '__main__':
print(solve(get_episode_equations(), [release_group, resolution, format, video_codec, audio_codec, imdb_id,
hash, series, tvdb_id, season, episode, title, year]))
print(solve(get_movie_equations(), [release_group, resolution, format, video_codec, audio_codec, imdb_id,
hash, title, year]))