From 54851549d5eb584d2ce7e09990807c2edc34c67f Mon Sep 17 00:00:00 2001 From: 283375 Date: Sun, 27 Aug 2023 23:59:27 +0800 Subject: [PATCH] feat(utils): bring utils back --- src/arcaea_offline/utils/__init__.py | 0 src/arcaea_offline/utils/rating.py | 23 ++++++++++++++++++++++ src/arcaea_offline/utils/score.py | 29 ++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 src/arcaea_offline/utils/__init__.py create mode 100644 src/arcaea_offline/utils/rating.py create mode 100644 src/arcaea_offline/utils/score.py diff --git a/src/arcaea_offline/utils/__init__.py b/src/arcaea_offline/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/arcaea_offline/utils/rating.py b/src/arcaea_offline/utils/rating.py new file mode 100644 index 0000000..091fbdb --- /dev/null +++ b/src/arcaea_offline/utils/rating.py @@ -0,0 +1,23 @@ +from typing import Optional + +RATING_CLASS_TEXT_MAP = { + 0: "Past", + 1: "Present", + 2: "Future", + 3: "Beyond", +} + +RATING_CLASS_SHORT_TEXT_MAP = { + 0: "PST", + 1: "PRS", + 2: "FTR", + 3: "BYD", +} + + +def rating_class_to_text(rating_class: int) -> Optional[str]: + return RATING_CLASS_TEXT_MAP.get(rating_class) + + +def rating_class_to_short_text(rating_class: int) -> Optional[str]: + return RATING_CLASS_SHORT_TEXT_MAP.get(rating_class) diff --git a/src/arcaea_offline/utils/score.py b/src/arcaea_offline/utils/score.py new file mode 100644 index 0000000..b7c66f3 --- /dev/null +++ b/src/arcaea_offline/utils/score.py @@ -0,0 +1,29 @@ +from typing import Any, Sequence + +SCORE_GRADE_FLOOR = [9900000, 9800000, 9500000, 9200000, 8900000, 8600000, 0] +SCORE_GRADE_TEXTS = ["EX+", "EX", "AA", "A", "B", "C", "D"] + + +def zip_score_grade(score: int, __seq: Sequence, default: Any = "__PRESERVE__"): + """ + zip_score_grade is a simple wrapper that equals to: + ```py + for score_floor, val in zip(SCORE_GRADE_FLOOR, __seq): + if score >= score_floor: + return val + return seq[-1] if default == "__PRESERVE__" else default + ``` + Could be useful in specific cases. + """ + return next( + ( + val + for score_floor, val in zip(SCORE_GRADE_FLOOR, __seq) + if score >= score_floor + ), + __seq[-1] if default == "__PRESERVE__" else default, + ) + + +def score_to_grade_text(score: int) -> str: + return zip_score_grade(score, SCORE_GRADE_TEXTS)