diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4444966..21d9761 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: - id: trailing-whitespace name: Check for trailing whitespaces (auto-fixes) - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.5 + rev: v0.7.0 hooks: - id: ruff args: [ --fix ] diff --git a/pyproject.toml b/pyproject.toml index b26621b..daf3022 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,7 +50,7 @@ docs = [ "PyYAML>=6", "quartodoc>=0.5.0; python_version>'3.8'", ] -lint = ["ruff<0.4"] +lint = ["ruff<1.0"] dev = ["matching[docs,lint,test]", "pre-commit"] [project.urls] diff --git a/src/matching/games/stable_marriage.py b/src/matching/games/stable_marriage.py index 4f779b4..00d9323 100644 --- a/src/matching/games/stable_marriage.py +++ b/src/matching/games/stable_marriage.py @@ -251,7 +251,7 @@ def solve(self, optimal="suitor"): This method uses an extended version of the Gale-Shapley algorithm that makes use of the inherent structures of SM instances. The algorithm finds a unique, stable and optimal - matching is found for any valid set of suitors and reviewers. + matching for any valid set of suitors and reviewers. The optimality of the matching is with respect to one party and is subsequently the worst stable matching for the other party. diff --git a/tests/stable_marriage/test_game.py b/tests/stable_marriage/test_game.py index 52f8c34..7881353 100644 --- a/tests/stable_marriage/test_game.py +++ b/tests/stable_marriage/test_game.py @@ -43,9 +43,12 @@ def test_from_utilities(utilities): suitor_utility, reviewer_utility = utilities - with mock.patch( - "matching.games.StableMarriage.check_input_validity" - ) as validator, mock.patch("matching.convert.utility_to_rank") as ranker: + with ( + mock.patch( + "matching.games.StableMarriage.check_input_validity" + ) as validator, + mock.patch("matching.convert.utility_to_rank") as ranker, + ): effects = (suitor_utility.argsort(), reviewer_utility.argsort()) ranker.side_effect = list(effects) game = StableMarriage.from_utilities(suitor_utility, reviewer_utility) @@ -73,11 +76,12 @@ def test_from_preferences(preferences): suitor_prefs, reviewer_prefs = preferences - with mock.patch( - "matching.games.StableMarriage.check_input_validity" - ) as validator, mock.patch( - "matching.convert.preference_to_rank" - ) as ranker: + with ( + mock.patch( + "matching.games.StableMarriage.check_input_validity" + ) as validator, + mock.patch("matching.convert.preference_to_rank") as ranker, + ): effects = ( np.array(list(suitor_prefs.values())), np.array(list(reviewer_prefs.values())), @@ -177,11 +181,14 @@ def test_check_input_validity(ranks): suitor_ranks, reviewer_ranks = ranks game = mocked_game(*ranks) - with mock.patch( - "matching.games.StableMarriage._check_number_of_players" - ) as check_num_players, mock.patch( - "matching.games.StableMarriage._check_player_ranks" - ) as check_player_ranks: + with ( + mock.patch( + "matching.games.StableMarriage._check_number_of_players" + ) as check_num_players, + mock.patch( + "matching.games.StableMarriage._check_player_ranks" + ) as check_player_ranks, + ): game.check_input_validity() check_num_players.assert_called_once_with() @@ -227,13 +234,17 @@ def test_solve_valid_optimal(ranks, optimal, solution): game = mocked_game(*ranks) - with mock.patch( - "matching.games.StableMarriage._invert_player_sets" - ) as player_set_inverter, mock.patch( - "matching.games.StableMarriage._stable_marriage" - ) as stable_marriage, mock.patch( - "matching.matchings.SingleMatching.invert" - ) as matching_inverter: + with ( + mock.patch( + "matching.games.StableMarriage._invert_player_sets" + ) as player_set_inverter, + mock.patch( + "matching.games.StableMarriage._stable_marriage" + ) as stable_marriage, + mock.patch( + "matching.matchings.SingleMatching.invert" + ) as matching_inverter, + ): stable_marriage.return_value = solution matching_inverter.return_value = "inverted_matching" matching = game.solve(optimal) @@ -260,13 +271,18 @@ def test_solve_invalid_optimal_raises(ranks, optimal): game = mocked_game(*ranks) match = "^Invalid choice for `optimal`." - with mock.patch( - "matching.games.StableMarriage._invert_player_sets" - ) as player_set_inverter, mock.patch( - "matching.games.StableMarriage._stable_marriage" - ) as stable_marriage, mock.patch( - "matching.matchings.SingleMatching.invert" - ) as matching_inverter, pytest.raises(ValueError, match=match): + with ( + mock.patch( + "matching.games.StableMarriage._invert_player_sets" + ) as player_set_inverter, + mock.patch( + "matching.games.StableMarriage._stable_marriage" + ) as stable_marriage, + mock.patch( + "matching.matchings.SingleMatching.invert" + ) as matching_inverter, + pytest.raises(ValueError, match=match), + ): game.solve(optimal) player_set_inverter.assert_not_called()